У меня схожая проблема. При переключении из bootloadera в рабочую программу в рабочей программе не стартует Freertos. То есть все, что до запуска планировщика работает, а как только доходит до запуска планировщика все рушится. FreeRtos присутствует и в bootloadere и в рабочей программе. Отладить вообще не представляю как, ибо рабочая программа загружается по с tftp-сервера, только по логам в уарте сужу, что происходит.
CODE
ъ
/**
* @brief Переключиться в программу
*
* @param address адрес где расположенна программа
*
*/
__asm void boot_jump( uint32_t address )
{
LDR SP, [R0] ;Load new stack pointer address
LDR PC, [R0, #4] ;Load new program counter address
}
/**
* @brief переключить программу
*
* @param address адрес, куда переключаться
*/
void switchProgram (uint32_t address)
{
NVIC->ICER[0] = 0xFFFFFFFF;
NVIC->ICER[1] = 0x00000001;
/* Clear all pending interrupts */
NVIC->ICPR[0] = 0xFFFFFFFF;
NVIC->ICPR[1] = 0x00000001;
/* Clear all interrupt priority */
uint8_t tmp = 0;
for (tmp = 0; tmp < 32u; tmp++)
{
NVIC->IP[tmp] = 0x00;
}
SCB->VTOR = address;
boot_jump(address);
}
Вот вырезка из места, где все это вызывается:
Код
...
else if(memcmp("switch\r", str, strlen("switch\r")) ==0 )
{
taskEXIT_CRITICAL();
vTaskEndScheduler();
switchProgram(0x10000);
}
...
Буду признателен за помощь.
Сообщение отредактировал IgorKossak - Nov 6 2013, 18:44
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!