Есть ли причина не увеличивать размер раздела .bss или .data на MCU?
Я немного удивлен, что не смог найти ответа на этот вопрос, поэтому просто задам его. У меня довольно большая таблица поиска, которая не инициализирована и, следовательно, будет помещена в раздел .bss моего микроконтроллера TI TMS320F280049. Неудивительно, что секция bss слишком мала для этого.
Поэтому я подумал о нескольких способах решения этой проблемы:
- Увеличьте размер раздела .bss
- Инициализируйте LUT (что в моем случае не обязательно) и увеличивайте размер .data до тех пор, пока он не поместится там.
- Создайте выделенный раздел RAM для этого LUT (должен быть RAM, флэш-памяти недостаточно из-за более медленного времени доступа)
Из-за отсутствия опыта я не могу сказать, какой вариант будет лучше. Есть ли причина, по которой вы не должны испортить размер раздела .bss и .data?
Заранее благодарим за то, что нашли время ответить!
1 ответ
Ответ от службы поддержки TI:
1) Increase the .bss section size
Нет особой причины, по которой мы использовали только 1 блок ОЗУ для выделения секции bss. Это всего лишь шаблон, и этого было достаточно для примеров C2000ware. Нет ограничений на количество ОЗУ, которое используется для отображения раздела.
2) Initialize the LUT (which is not really necessary in my case) and increase the .data size until it fits in there.
Единственный недостаток, который я вижу в этом случае, заключается в том, что компилятор создает отдельный раздел для хранения начальных значений. Это просто увеличивает общий размер памяти (начальные значения обычно загружаются во Flash).
Кроме того, инициализация глобальных объектов потребует циклов. Но в случае, если вы используете формат EABI, даже неинициализированные переменные будут инициализированы значением 0 по умолчанию, поэтому вы не увидите значительной разницы в циклах. Но в случае формата COFF этот подход потребует больше циклов.
3) Create a dedicated RAM section for this LUT
Этот метод тоже отлично работает. Вы можете использовать #pragma DATA_SECTION, чтобы глобальные данные переходили в указанный пользователем раздел, а не в раздел .bss по умолчанию. Этот новый раздел необходимо указать в файле cmd с отображением RAM. Я не вижу преимуществ или недостатков этого метода перед первым.