IAR Embedded Workbench® для STM8
Прошло уже много времени с первого знакомства с микроконтроллерами 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:
и новый проект:
я выбрал обычный Си.
Получилась вот такая заготовка:
Осталось только настроить проект под наши нужды.
Для этого открываем настройки проекта (Alt+F7) и производим следующие:
- выбираем необходимый микроконтроллер, в моем случае это STM8S105C6
- изменяем уровень оптимизации на максимальный
- и выбраем ST-Link
Для примера я взял инициализацию OLED дисплея, скопировал все файлы в директорию проекта и подключил исходник для OLED дисплея:
Собралось все без проблем, что удивило :)
Разница в размере получилась не большая:
- IAR – 762 байт
- Cosmic - 701 байт
Но это для меня не главное, как я уже говорил мне интересно выполнение кода из ОЗУ.
Дело в том что если в коде используются какие либо библиотечные функции, то они по прежнему остаются во флеш. В космике я не смог пока решить эту проблему.
Для проверки объявил функцию задержки с атрибутом __ramfunc , но чуда и тут не произошло
как видим идет вызов встроенной подпрограммы load32_10_dbsp расположенной по прежнему во флеш :( (адрес 0x822C)
Так что пока вопрос остался открытым, буду искать решение дальше.
Если кто знает как решить или есть какие-то мысли по этому поводу напишите пожалуйста.
comments powered by Disqus