CodeWarrior Compile problem
I Compile the FreeRtos with codewarrior, there a problem after simulate, it is always fail on debug when execute the user task coding:
undefined instruction
Why?
CodeWarrior Compile problem
Unfortunately I am not familiar with CodeWarrior. Is it a GUI for the GCC compiler – as per CrossWorks? If so then how is the linker file and startup code produced?
CodeWarrior Compile problem
Firstly compiler the command line is below
-info totals -entry 0x00000000 -ro-base 0X00000000 -rw-base 0X40000000 -first VECTORS.O(Startup)
Secondly I try to debug and puzzle
when the taskYIELD is called (SWI)
but the function
void vPortYieldProcessor( void ) __irq;
has no responsed,
in other words, the function
portRESTORE_CONTEXT was calling but the function portSAVE_CONTEXT has never run.
So I guess the portSAVE_CONTEXT should be call before portRESTORE_CONTEXT, is ture or false?
Thank you again
CodeWarrior Compile problem
Although you don’t say – from the command line and the __irq extension I am guessing that CodeWarrior is not a GCC wrapper GUI.
>Secondly I try to debug and puzzle
>when the taskYIELD is called (SWI)
>but the function
>void vPortYieldProcessor( void ) __irq;
>has no responsed,
Has the SWI interrupt handler been installed. Does the SWI vector point to the vPortYieldProcessor() function. This should be set up in your startup code.
>So I guess the portSAVE_CONTEXT should be
>call before portRESTORE_CONTEXT, is ture or
>false?
When the scheduler is initially started the stack is already set up, so *only* portRESTORE_CONTEXT should be called.
During a context switch when the scheduler is running both should be called.
Thank you again
CodeWarrior Compile problem
Sorry to say the CodeWarrior, it is not the Gui for Gcc,
Would you like give me you email, I send the code which modified by mine, and maybe you can point how to solve the problem.
Thank you.
CodeWarrior Compile problem
If you send the code to the email address available on the Contacts page of the FreeRTOS.org WEB site I can have a look – but I don’t have CodeWarrior and cannot therefore support it directly.
Regards.
CodeWarrior Compile problem
Thank you, I have send the code to you, please check it.
when goto my task code
the pxCurrentTCB is
HeapSTRUCT_SIZE 0x8
ulCriticalnesting 0x0
pxCurrentTCB 0x40000180
.pxTopOfStack 0x40000388 value=0
.pxStack 0x400001D0 value=00xA5A5A5A5
.uStackDepth 0x80
.pcTaskName "LED"
.ucPriority .
.XGenericListItem
.xItemValue 0
.pxNext 0x4000008c
.pxPrevious 0x4000008c
.pvOwner 0x40000180
.pxContainer 0x40000080
.xEventListItem
.xItemValue 3
.pxNext 0
.pxPrevious 0
.pvOwner 0x40000180
.pvContainer 0
.ucTCBNumber 0
Current Register values
r0=0
r1=0x01010101
r2=0x02020202
r3=0x03030303
r4=0x04040404
r5=0x05050505
r6=0x06060606
r7=0x07070707
r8=0x08080808
r9=0x09090909
r10=0x10101010
r11=0x11111111
r12=0x12121212
r13=0x4000003cc
r14=0xAAAAAAAA
pc=0x00001E0
cpsr=nzcvqifT_SYS
spsr=Unavailable
LedTask
000001e0 [0xe92d4070] * stmfd r13!,{r4-r6,r14}
000001e4 [0xe59f0124] ldr r0,0x00000310 ; = #0xe002c000
000001e8 [0xe5901000] ldr r1,[r0,#0]
000001ec [0xe5801000] str r1,[r0,#0]
000001f0 [0xe5901004] ldr r1,[r0,#4]
000001f4 [0xe5801004] str r1,[r0,#4]
000001f8 [0xe2406c40] sub r6,r0,#0x4000
000001fc [0xe5960008] ldr r0,[r6,#8]
00000200 [0xe3800f54] orr r0,r0,#0x150
00000204 [0xe5860008] str r0,[r6,#8]
-————————————–
step next –>error occur
-—————————————–
00000004 [0xe59ff018] ldr pc,UndefinedAddr ; = #UndefinedAddr
CodeWarrior Compile problem
Hi,
Without the tools all I can do is look at the source code to see if I can see anything wrong. From what I can see you have based your CodeWarrior project on the Keil demo, making the changes listed in your last post.
Current Register values
r0=0
r1=0x01010101
r2=0x02020202
r3=0x03030303
r4=0x04040404
r5=0x05050505
r6=0x06060606
r7=0x07070707
r8=0x08080808
r9=0x09090909
r10=0x10101010
r11=0x11111111
r12=0x12121212
r13=0x4000003cc
r14=0xAAAAAAAA
These all appear to be what is expected. The registers have their default initial values which shows that the first RESTORE_CONTEXT has worked as expected.
pc=0x00001E0
Again this looks correct, the first instruction in your LED task.
portmacro.h —>
extern __inline void portSAVE_CONTEXT(void);
extern __inline void portRESTORE_CONTEXT(void);
__inline void portENABLE_INTERRUPTS(void)
__inline void portDISABLE_INTERRUPTS(void)
These are now defined in the ISR_Support.s file. The context save/restore macros *MUST* be inline and it might be that the compiler will ignore the __inline keywork in this case. Can you check the assembly output to make sure that the portENABLE/DISABLE_CONTEXT macros are really being inlined and there is no function call being generated by the compiler.
You appear to have setup the stack for the supervisor and IRQ modes. Does your task start in System mode? I presume this is what nzcvqifT_SYS means.
Also are you running in ARM mode only, or ARM/THUMB interwork mode? It appears that the code is compiler for ARM mode (32bit) but I cannot tell from the nzcvqifT_SYS value whether you are in ARM or THUMB mode. Does the T in nzcvqifT_SYS mean THUMB mode?
CodeWarrior Compile problem
Thank you for your help.
-———————————————-
These are now defined in the ISR_Support.s file. The context save/restore macros *MUST* be inline and it might be that the compiler will ignore the __inline keywork in this case. Can you check the assembly output to make sure that the portENABLE/DISABLE_CONTEXT macros are really being inlined and there is no function call being generated by the compiler.
-———————————————-
I disassemble the function
vPortISRStartFirstTask
B portRESTORE_CONTEXT
vPortYieldProcessor
0x00000004: e92d500f .P-. STMFD r13!,{r0-r3,r12,r14}
0x00000008: ebfffffe …. BL portSAVE_CONTEXT
0x0000000c: ebfffffe …. BL vTaskSwitchContext
0x00000010: ebfffffe …. BL portRESTORE_CONTEXT
0x00000014: e8bd500f .P.. LDMFD r13!,{r0-r3,r12,r14}
0x00000018: e25ef004 ..^. SUBS pc,r14,#4
so it is not the truely inline
-—————————————-
…I presume this is what nzcvqifT_SYS means
-——————————————–
the last init stack coding as belwo
…..
; /* We want to start in supervisor mode. Operation will switch to system
; mode when the first task starts. */
msr CPSR_c, #MODE_SVC|I_BIT|F_BIT
mov sp, r0
-———————————–
Also are you running in ARM mode only, or ARM/THUMB interwork mode
-———————————–
Yes, the code run in ARM only