Цитата(jcxz @ May 3 2012, 14:44)

как делаете рестарт?
А по всякому пробовал. Благо вариантов в ветке представлено.

И так:
Код
static const uint16_t code[] =
{
0xF850, 0xDB04, // LDR.W SP, [R0], #4
0x6800, // LDR.W R0, [R0]
0x4700, // BX R0
};
((void (*)(uint32_t))(1 + (int)code))(PAYLOAD_START_ADDR);
И так:
Код
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;
void (*user_code_entry)(void);
user_code_entry = ((void (*)(void))(PAYLOAD_START_ADDR+4));
user_code_entry();
И так, что в общем идентично предыдущему, но без смещения:
Код
void execute_user_code(void)
{
void (*user_code_entry)(void);
user_code_entry = (void (*)(void))USER_START_SECTOR_ADDRESS;
user_code_entry();
}
Результат один. Перезапуск удается, код запускается, инитится вся периферия, но как только дело доходит до запуска непосредственно оси функцией
os_sys_init(TaskInit); - все вылетает в HARD Fault Handler. Причем изначально все запускается и работает без нареканий. Программа скомпилирована, заружена и запущена без лоадера, с адреса 0. В качестве эксперимента просто пытаюсь рестартовать проц из самой проги. Потом уже все остальное. На 23хх процах была подобная фигня при перезагрузке лоадером - вылечилось дефайнами
RAM_INTVEC RAM_MODE REMAP. Сейчас не проходит. Где-то что-то упускаю.