Я начал новый проект с использованием STM32H7, в настоящее время использую IAR EWARM V8, использовал STM32CUBEMX для генерации кода конфигурации и начала начального проекта.
Я работал над несколькими проектами CUBEMX eval, чтобы проверить и проверить работоспособность некоторого аппаратного обеспечения, и теперь я могу нормально выполнять код.
Но происходит нечто странное, в частности, с переменными, если вы назначаете их как локальные переменные внутри функции, как-то IAR помещает их в диапазон памяти 'System Reserved' ...
т.е. в пределах 0x1FF20000
- 0x1FFFFFFF
Например ... пример проекта 'FMC_NOR', который предоставляет STM, - это тестовый код для тестирования нашей флэш-памяти NOR и т. Д.
они создали эти два небольших массива как глобальные переменные в верхней части файла main.c
.
(buffer_size
равно 0x1000)
uint16_t aTxBuffer[BUFFER_SIZE] = {0};
uint16_t aRxBuffer[BUFFER_SIZE] = {0};
Находясь в глобальном пространстве, они размещаются в области DTCM (0x2000: 0000)
При перемещении в качестве локальных переменных они затем выделяются в «зарезервированное пространство» ...
Что происходит, когда IAR обнаруживает какие-либо массивы, подобные этому, процессор выходит из строя с аппаратной ошибкой «неточного доступа к данным».
Эта же ошибка возникает с кодом для инициализации модуля JPEG, поскольку он пытается загрузить массивы таблиц Хаффмана и т. Д. *
При использовании TrueStudio эта проблема не возникает ... CubeMX автоматически создает файлы компоновщика для любого используемого компилятора.
Я ничего не видел в файлах компоновщика, указывающих на зарезервированный адрес памяти.
Так не уверен, что может происходить? Я новичок в использовании этого процессора, поэтому я только начинаю понимать, что это отображение памяти.
Спасибо за любую помощь или предложения, я хотел бы выяснить IAR, так как до сих пор он мне немного больше нравится TrueStudio.