[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [Bug 657006] Re: arm v7M - svc insn doesn't trigger PendSV
[Qemu-devel] [Bug 657006] Re: arm v7M - svc insn doesn't trigger PendSV handler
Mon, 07 Mar 2011 19:25:26 -0000
In freeRtos, for the first "context switch" (launch the first task), the
register pc is written with an adress with le bit0 equal to 1 (thumb).
If I change this and set bit0 to 0 (new_pc = task_to_start_pointer &
0xfffffffe), it is working well. I do not know yet (i will try next
week) If it is working with the bit0 equal to 1 on the real target but
according to freeRtos, it should work.
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
arm v7M - svc insn doesn't trigger PendSV handler
Status in QEMU:
The svc instruction doesn't work as expected.
-> qemu 0.13.0 rc1 (git)
Test : demo with freeRTOS (for example
FreeRTOS-6.0.5/Demo/CORTEX_LM3S811_GCC) with the card lm3s811evb.
If we start the scheduler, it will call that function (__attribute__
(( naked ))) :
void vPortStartFirstTask( void )
" ldr r0, =0xE000ED08 \n" /*
Use the NVIC offset register to locate the stack. */
" ldr r0, [r0]
" ldr r0, [r0]
" msr msp, r0
\n" /* Set the msp back to the start of the stack. */
" svc 0
\n" /* System call to start first task. */
The 4 first lines in asm work fine. The scv 0 call will rise the right
interrupt in qemu (line 151, in arm_gic.c, best_irq = 15). However, it will
never call the PendSV Handler (xPortPendSVHandler here). This function is
recorded in the nvic vector.
Next, (after the svc), the processor will execute the line after in code
(this is a naked function) so the next function written after
vPortStartFirstTask in the code.
command line :
console 1 : qemu-system-arm -M lm3s6965evb -kernel gcc/RTOSDemo.axf -s -S
console 2 : arm-none-eabi-gdb -ex "target remote localhost:1234"
Same error with another project with arm-elf
processor : arm cortex m3
host : gentoo (2.6.35-r9) (without kqemu)