STM8. Урок 7. Выбор и настройка модели памяти

При расширении задач контроллера растет потребность в использовании ОЗУ контроллера, и когда объем необходимого ОЗУ становиться больше, чем 255 байт при стандартных настройка компилятор cosmic выдает ошибку:

#error clnk Debuginfo.lkf:1 segment .ubsct size overflow (99)

где в скобках указывается на сколько использование ОЗУ необходимо уменьшить. И компилятору все равно, что в контроллере 2 кБ ОЗУ.

Решение данной проблемы можно прочитать на странице 39 документа STM8 Cross Compiler User’s Guide.pdf 

Для решения данной проблемы, а также если ваша программа на контроллере стала занимать объем более 64 кБ, необходимо изменить модель памяти.

В зависимости от объема flash памяти (меньше 64 кБ или больше) и используемой памяти ОЗУ есть 4 модели. По-умолчанию используется первая модель, поэтому поддерживается только 255 байт ОЗУ и максимальный объем кода в 64 кБ в пользовательском проекте.

  1. Если используется объем flash памяти меньше 64 кБ и используется меньше 255 байт ОЗУ: Stack Short (mods0)
  2. Если используется объем flash памяти меньше 64 кБ и используется все доступное ОЗУ: Stack Long (modsl0)
  3. Если используется объем flash памяти больше 64 кБ и используется меньше 255 байт ОЗУ: Stack Short (mods)
  4. Если используется объем flash памяти больше 64 кБ и используется все доступное ОЗУ: Stack Long (modsl)

Настройка проекта в IDE STVD. Для контроллера STM8S105K6 объемом 32 кБ и 2 кБ ОЗУ выбираем модель памяти Stack Long (modsl0)

 

После этого проект компилируется без ошибок.

Выбор различных моделей памяти позволяет оптимизировать код по-размеру и скорости выполнения за счет использования при компиляции более коротких и быстрых команд