IAR Embedded Workbench® для STM8

11 Сентября 2011 К комментариям

Прошло уже много времени с первого знакомства с микроконтроллерами STM8, на текущий момент у меня сложилось уже некоторое “понимание” компилятора Cosmic и появилось желание сравнить его с популярным продуктом IAR Embedded Workbench ®. Точнее меня интересует как реализовано выполнения кода из ОЗУ.

IAR Embedded Workbench® это интегрированная среда для разработки и отладки программ для различных платформ, в данном случае для микроконтроллеров серии STM8A, STM8S и STM8L.

На текущий момент предлагается версия 1.30 и два варианта использования:

  • 30-day evaluation edition - 30 дневная пробная версия, без ограничения по размеру кода
  • 8kB KickStart edition – почти без ограничения по времени (на текущий момент выдают лицензию до 2036 года), но с ограничением по размеру кода (8 кБ)

И ещё два варианта: купить полноценную версию или крякнуть ;)

Переустанавливать программы я не люблю, взламывать не наши методы, поэтому я выбрал 8kB KickStart edition для пробы более чем достаточно.

Для скачивая необходимо пройти регистрацию, почтовый адрес желательно указать реальный на него потом придет ссылка для скачивания и лицензионный ключ.

Процесс регистрации, загрузки и установки описывать не буду там все тривиально, отмечу только что размер дистрибутива составляет 106 Мб.

Первый запуск

Как и в эклипсе первым делом необходимо создать рабочее пространство Workspace:

image

и новый проект:

image

image

я выбрал обычный Си.

Получилась вот такая заготовка:

image

Осталось только настроить проект под наши нужды.

Для этого открываем настройки проекта (Alt+F7) и производим следующие:

  • выбираем необходимый микроконтроллер, в моем случае это STM8S105C6 image
  • изменяем уровень оптимизации на максимальныйimage
  • и выбраем ST-Linkimage

Для примера я взял инициализацию OLED дисплея, скопировал все файлы в директорию проекта и подключил исходник для OLED дисплея:

image

Собралось все без проблем, что удивило :)

Разница в размере получилась не большая:

  • IAR – 762 байт
  • Cosmic - 701 байт

Но это для меня не главное, как я уже говорил мне интересно выполнение кода из ОЗУ.

Дело в том что если в коде используются какие либо библиотечные функции, то они по прежнему остаются во флеш. В космике я не смог пока решить эту проблему.

Для проверки объявил функцию задержки с атрибутом __ramfunc , но чуда и тут не произошло

image

как видим идет вызов встроенной подпрограммы load32_10_dbsp расположенной по прежнему во флеш :( (адрес 0x822C)

Так что пока вопрос остался открытым, буду искать решение дальше.

Если кто знает как решить или есть какие-то мысли по этому поводу напишите пожалуйста.



comments powered by Disqus