We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello,
I'm building an embedded application on a Dallas DS89C450 microcontroller. RTX-51 Full Version is used as the RTOS.
Everything seems to work fine although I'm facing with two abnormal intermittent system failures which will be tried to be described as follows:
1. The system hangs for a while and the watchdog timer resets the system. However, there is no infinite loop in a critical section inside the code which may cause the task with the highest priority in the system to be ceased to work. This task is responsible for kicking the watchdog circuitry.
2. The flow of the code somehow jumps to somewhere which is not supposed to work at that moment. And this section of the code is responsible for clearing the EEPROM content on a user request. EEPROM is accessed by the processor thru its data/address bus.
A same simple test procedure is applied on the system repeatedly and thus, the state of the system doesn't seem to change. However, 2 or 3 times / 30 trials ends up with such a catastrophic result.
Here are my questions:
1. Can it be caused by a stack overflow? 2. Would you recommend me to increase task stack sizes? If yes, how much?
Any ideas?
Thanks in advance. Hakan
'using' has nothing to do with priority level WHAT does the .map file show as THE STACK address
Erik
What I could find in my *.map file goes as follows:
* * * * * * * * * * * D A T A M E M O R Y * * * * * * * * * * * * * 000000H 000007H 000008H --- AT.. DATA "REG BANK 0" 000008H 00000DH 000006H BYTE UNIT DATA ?RTX?INT_MASK?RTXCONF 00000EH 00000FH 000002H BYTE UNIT DATA ?C?LIB_DATA 000010H 000017H 000008H --- AT.. DATA "REG BANK 2" 000018H 00001FH 000008H --- AT.. DATA "REG BANK 3" 000020H 000021H 000002H BYTE BITADDR DATA ?RTX?RTX_BIT_RELBYTE_SEG 000022H.0 000023H.5 000001H.6 BIT UNIT BIT ?RTX?RTX_BIT_SEG 000023H.6 000023H.7 000000H.2 BIT UNIT BIT ?RTX?FLT_BITSEG 000024H.0 000024H.0 000000H.1 BIT UNIT BIT _BIT_GROUP_ 000024H.1 000024H 000000H.7 --- --- **GAP** 000025H 000047H 000023H BYTE UNIT DATA ?RTX?RTX_RELBYTE_SEG 000048H 00005FH 000018H BYTE UNIT IDATA ?RTX?FTASKDATA?2 000060H 000077H 000018H BYTE UNIT IDATA ?RTX?FTASKDATA?3 000078H 00007DH 000006H BYTE UNIT IDATA _IDATA_GROUP_ 00007EH 000091H 000014H BYTE UNIT IDATA ?STACK
Are you asking about the last line that I made bold?
What does "any ISRs using 0 (default)?" mean, btw.?
Erik means NEVER use using 0. This gives the tools permission to trash any used registers after returning from an interrupt. Since Register Bank 0 is your default or "home" register bank, you never want to trash these registers by default. Bradford