Я понимаю, что эта тема довольно расплывчата.... поэтому я попытаюсь объяснить это.
Я работаю над проектом в IAR Workbench. Я дошел до того, что если я добавлю новую функцию, такую как простой оператор if, вся структура кода сломается. Код нормально компилируется и загружается на устройство 8051, но в середине последовательности запуска кода я теряю связь. Как будто происходит переполнение стека. Если я приостанавливаю отладчик, я вижу, что мои значения XdataStack и IdataStack низкие (менее 50%) и нет переполнений стека, о которых нужно сообщить.
На самом деле код, вызывающий проблему, даже не вызывается приложением.
Это станет еще более очевидным, если я включу константу отладки #define, которая есть в моем коде. Включение этого параметра приводит к тому, что в код для отладки uart встраивается больше строковых констант.
Еще один тест, который я выполнил, заключался в создании массива из 100 символов в уже существующей функции.
char hello[100];
memset(hello, 0x00, 100);
И это также, кажется, нарушает код.
Мне было интересно, есть ли области памяти, на которые я должен посмотреть, возможно, я заполнил это устройство (CC2540 с размером флэш-памяти 128 КБ)
IAR позволяет мне изучить:
- IDATA
- ХДАННЫЕ
- СФР
- Логический код
- Код
- Данные
- пданные
Что касается конфигурации моего проекта:
Размеры стека:
- ИДАННЫЕ: 0xC0
- КПД: 0x00
- ХДАННЫЕ: 0x280
Размеры кучи:
- ХДАННЫЕ: 0xFF
- Далеко: 0xFFF
- Far22: 0xFFF Огромный: 0xFFF