MPLAB XIDE XC32 и разделы
Возникли некоторые проблемы при попытке построить проект для ATSAMV17Q21. В частности, я пытаюсь найти постоянные данные во внешнем eeprom. Я делал это раньше в GCC без проблем, но XC32 вызывает боль.
В GCC это было легко:
const int атрибут somevariablename ((section(".nvdata")) = значение
Затем, найдя эти разделы в «поддельной» области памяти, я использую objcopy, чтобы выдать s-запись eeprom, перемещенную на нулевой адрес. Наш код знает, встречает ли он адрес в этой «фальшивой» области памяти для чтения из spi eeprom, используя только младшие биты адреса, и он работает нормально.
Однако в XC32, чтобы правильно находить вещи без перекрытия разделов, мне пришлось использовать: attribute ((space(data), section(".nvdata"))
Я вижу на карте компоновщика, что он находит все переменные в этом разделе, и с помощью objcopy я могу создать s-запись.
Но... Я заметил, что раздел флэш-памяти кода был довольно большим. Когда я просмотрел содержимое в шестнадцатеричном просмотрщике, я увидел, что все текстовые строки (с похожими атрибутами) были объединены в раздел инициализированных данных, потому что я могу прочитать их в шестнадцатеричном просмотрщике. Основная причина, по которой мы помещаем постоянные данные во внешний eeprom, заключается в том, что мы экономим флэш-память кода для кода. Как указать атрибуты, чтобы заставить XC32 сотрудничать?