scmRTOS for STM8, IAR port

Влітку зовсім не було часу на продовження розробки scmRTOS, лише зараз до цього повернувся.

Порт STM8/IAR додано в репозиторій, в гілку scmRTOS pre-v4.00. Звідти можна витягти архів прикладів scmRTOS для порта STM8/IAR. Каталоги scmRTOS/Common, scmRTOS/Extensions та scmRTOS/STM8 в архіві прикладів порожні, необхідно завантажити архіви ядра scmRTOS pre-v4.00, розширень ядра та порта STM8/IAR і розпакувати їх у відповідні каталоги.

Простіше це зробити, скориставшись клієнтом системи керування версіями subversion.
Отримати файли прикладів можна наступною командою:

svn co http://scmrtos.svn.sourceforge.net/svnroot/scmrtos/branches/pre-v400/Samples/STM8/IAR ./scmRTOS-samples

В процесі виконання команди в поточному каталозі буде створено каталог scmRTOS-samples з проектами прикладів. Після цього слід перейти у створений каталог та запустити командний файл switch.bat для перемикання локальних каталогів scmRTOS/Common, scmRTOS/Extensions та scmRTOS/STM8 на відповідні каталоги репозиторія:

cd scmRTOS-samples
switch

На відміну від першого варіанту, цей метод дозволить отримувати всі оновлення командою svn up замість «ручного» викачування свіжих архівів.

Приклади збиралися компілятором IAR EWSTM8-KS-1301, перевірялися на платі STM8S-DISCOVERY (STM8S105C6). В проектах для Embedded Workbench заведено відповідну конфігурацію STM8S105C6, в процесі роботи над портом буде додано конфігурацію для STM8L15x.

Від чорнової версії порта scmRTOS завантажене в репозиторій відрізняється наступним:

  • Порт та приклади переписано під використання стандартної периферійної бібліотеки від STMicroelectronics;
  • Реалізовано всі чотири стандартні приклади scmRTOS;
  • Додано файл pin.h з класом-шаблоном доступу до GPIO. Клас зроблено на базі відповідного класу порта для Cortex-M3 (з прикладів для STM32).

Перехід до заголовочних файлів від STM зумовлено двома причинами.
По перше, мені вони трохи більше подобаються (ближчі до моїх звичок).
По друге, це може полегшити перехід до scmRTOS для тих, хто вже встиг попрацювати з мікроконтролерами STM8, використовуючи цю бібліотеку.
До прикладів додано лише заголовочні файли з бібліотеки STM8S_StdPeriph_Driver, бо в поточному стані вони не використовують функції з .c-файлів.

Уважно, файл stm8s.h відредаговано!

  • Додано обгортку extern "C" {;
  • Визначення typedef enum { FALSE=0, TRUE=!FALSE } bool; загорнуто в #ifndef __cplusplus;
  • Замість локального визначення типів фіксованої ширини на зразок uint16_t вставлено включення стандартного файлу заголовка stdint.h.

До речі, у файлі stm32f10x.h з аналогічної бібліотеки для STM32 подібні речі зроблено авторами. Чи вони не розраховували, що хтось працюватиме з STM8 на C++, чи просто інша група розробників про це не подумала, але файл для STM8S довелося підправляти.

Обмеження порта на даний момент залишилися ті ж самі:

  • Не підтримується модель даних LARGE;
  • Не реалізовано перемикання контексту програмно ініційованим прериванням;
  • Не реалізовано перемикання преривань на окремий стек.

Більш за все, що модель даних LARGE підтримуватися і не буде. Надто неефективно всі операції з даними виконувати через вушко голки з команд LDF/STF. Краще лише потрібні масиви константних даних вручну розмістити у «верхніх» адресах флеш-пам’яті.

Leave a Reply

[flagcounter image]