Здравствуйте.
У меня evaluation kit с процессором STM32F103 с FreeRtos. Среда - IAR541.
FreeRtos устойчиво работает, если ее загрузить с адреса 0x8003000 и запустить. Если с адреса 0x8000000 загрузить лоудер, который ничего не делает кроме перехода на FreeRtos - FreeRtos доходит до vTaskStartScheduler(); и попадает в HardFaultException. Если вместо FreeRtos записать простую программу мигания светодиодом - все прекрасно работает.
Вот код функции перехода:
CODE
static bool jump_to( unsigned char* dest )
{
void (*prog_start)(void);
if (( *(unsigned long*)dest & 0x3FFF8000 ) == 0x20000000 ) // looks like a stack pointer?
{
__disable_interrupt();
SysTick->CTRL &= 0;
prog_start = (void(*)(void))*(unsigned long*)(dest + 4); // load program start address
__MSR_MSP( *(unsigned long*)dest ); // load user stack
prog_start(); // now jump
}
return ( false );
}
Значение dest - 0x8003000.
Функцию я е написал на основе примера из библиотеки STM32.
Что я упустил?
Сообщение отредактировал Aleksandr Baranov - Nov 10 2010, 15:23