ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
4 мая
1514994
vesago (28.04.2025 14:38, просмотров: 1770)
Обращаюсь к отряду телепатов быстрого реагирования :) Может идею подкинете. Есть устройство с GD32F303. Я из примеров китайских взял загрузчик HID USB, слегка подправил и использую. Тут понадобилось грузить фирмварю из микрухи w25q. Добавил в китайский пример эту тему. Вроде работает. Но при переходе из бута в основную прошивку падает в хардфаулт. Ума не приложу с чего бы. Решил костыльно - было без оптимизации, добавил слегка - перестало падать. Но тревожно - хочется 

разобраться. Вот как прыгает из бута:

#define APP_LOADED_ADDR 0x08008000U


#define SRAM_BASE_ADDR SRAM_BASE

#define SRAM_END_ADDR 0x2000BFFFul//(SRAM_BASE + GET_BITS(REG32(0x1FFFF7E0U), 16U, 31U) * 1024U)


if((sram_sect >= SRAM_BASE_ADDR) && (sram_sect < SRAM_END_ADDR)){

app_address = *(__IO uint32_t*) (APP_LOADED_ADDR + 4U);

application = (app_func) app_address;

//* initialize user application's stack pointer

__set_MSP(*(__IO uint32_t*) APP_LOADED_ADDR);

//* jump to user application

application();

}




Все вроде стандартно и тупо как валенки. Если убрать кусок, связанный с загрузкой из флешки - снова начинает работать без оптимизации. Т.е. влияет чисто размер. Но при добавлении этого куска размер бутлодера все равно не достигает области основной прошивки. Основная лежит со смещением 8000. А бут максимом до 5000 доходит. В общем хз, что делать?