Использую в своём проекте freeRTOS на stm32 компилятор Keil.
Вот недавно столкнулся с особенностью что после запуска планировщика из main портиться итек main, то есть при попытке обратиться к локальным переменным main типа класс с виртуальными функциями внутри по заданному адресу из задачи ввалимся в HardFault_Handler. При анализе обнаружил мусор по адресу данной переменной хотя адрес верный и до запуска планировщика было всё нормально. Кто нибудь сталкивался почему портиться стек main?
Сейчас выяснил что стек портиться после вызова функции:
Код
__asm void vPortStartFirstTask( void )
{
PRESERVE8
/* Use the NVIC offset register to locate the stack. */
ldr r0, =0xE000ED08
ldr r0, [r0]
ldr r0, [r0]
/* Set the msp back to the start of the stack. */
msr msp, r0
/* Globally enable interrupts. */
cpsie i
/* Call SVC to start the first task. */
svc 0
nop
}
{
PRESERVE8
/* Use the NVIC offset register to locate the stack. */
ldr r0, =0xE000ED08
ldr r0, [r0]
ldr r0, [r0]
/* Set the msp back to the start of the stack. */
msr msp, r0
/* Globally enable interrupts. */
cpsie i
/* Call SVC to start the first task. */
svc 0
nop
}
Я просто в асме не очень кто нибудь подскажите что тут твориться?