ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
778419
ROBINZONE (06.09.2017 10:50, просмотров: 13071)
Прошу помощи телепатов: проект на иаре, STM32F429IIT6, размер кода чуть больше мегабайта, в начале (256кб) - бут-загрузчик. LCD 7", сеггеровская GUI 5.32, ETHERNET, 32 мБ SDRAM.  "Плавающий" глюк, связанный со структурой массива. Один из массивов около 60кБ (в памяти), как только еще добавляю несколько элементов - программа перестаёт адекватно работать. На 7.7 ИРА-е это проявлялось в полном отсутствии старта основной программы, на последней версии ИАР-а: постоянное срабатывание блока пересброса PHY ETHERNET (есть процедура, проверяющая состояние регистров LAN7820 и "дергающая" ресет при неадеквате). Однако под дебуггером код рабочий! Переход из бутлоадера стандартный (код ниже), сама странность именно в том, что добавляешь одну строку в массиве (массив вырастает на 32 байта), и перестаёт работать адекватно. Вполне возможно, что, когда массив чуть меньше, данные начинают "портиться" в другой ячейке памяти, которая, скажем, не так важна и нет возможности это отследить ( под отладчиком всё идеально!). Если бы это был глюк моей программы (где-то пишу лишнее в память) - логично, что влияние ИАР-овскгого отладчика никоим образом не повлияло бы. Нашел примерно аналогичную проблему у человека, но непонятно, как они её решили: https://translate. …78/1361767&prev=search Если это какой-то глюк именно ИАР-а, может, стоит скомпилировать на чём-то другом? Может, кто сталкивался или хотя-бы есть направления на поиск глюка... #define APPLICATION_ADDRESS_GO 0x08040000 void JMP_TO_APP_08040000 (void) { // __disable_irq (); __set_MSP( *(uint32_t*)(APPLICATION_ADDRESS_GO) ); SCB->VTOR = (APPLICATION_ADDRESS_GO & (uint32_t)0x1FFFFF80); (*(void(*)(void))( *(uint32_t*)(APPLICATION_ADDRESS_GO+4) ))(); };