Аббревиатура scmRTOS означает Single-Chip Microcontroller Real-Time Operating System (одноядерная операционная система реального времени для микроконтроллера). Система scmRTOS бесплатна, занимает мало ресурсов, реализует многозадачную среду выполнения с поддержкой приоритетов (preemptive), поставляется с открытым исходным кодом. Может работать на маленьких микроконтроллерах, занимая от 512 байт RAM. RTOS написана на C++ с применением шаблонов.
В настоящее время поддерживаются следующие платформы: MSP430 (Texas Instruments), AVR (Atmel), Blackfin (Analog Devices), ARM7: AT91SAM7, LPC2xxx, ADuC70xx, Cortex-M3: STM32F1XX, STM32F2XX, LPC17XX, Cortex-M4: STM32F4XX, STM8 (STMicroelectronics).
В этой статье рассматривается компиляция и запуск примеров кода для процессоров Blackfin ADSP-BF532, ADSP-BF533 под управлением операционной системы Windows, с использованием компилятора VisualDSP++ 5.0 Update 10.1.
Примечание: инструкции по компиляции примеров для Blackfin и описание релиза (на английском языке) Вы можете найти по ссылке [2].
[Компиляция с помощью sconf]
Процесс по шагам:
Шаг 1, загрузка. Перейдите на домашнюю страничку ScmRTOS [1], в меню слева найдите ссылку Downloads и пройдите по ней. Войдите в раздел scmrtos, выберите нужный релиз (на момент написания статьи это был релиз scmRTOS 4.00 2012-04-05), затем выберите пакет архива с нужной платформой (scmRTOS.4.00.blackfin.vdsp.rar). Скачайте архив, распакуйте его содержимое в любую папку.
Шаг 2, установка необходимого программного обеспечения. Примеры кода ScmRTOS находятся в каталоге BF533, и называются 1-EventFlag, 2-Message, 3-Channel, 4-Debug. Для того, чтобы их скомпилировать, понадобятся следующие инструменты и утилиты:
1. VisualDSP 5.0. 2. Интерпретатор Python 2.5 или более свежий (я использовал 2.7.9). 3. Надстройка-инструментарий компиляции SCons [6].
Примечание: в пакете архива находятся также конфигурационные файлы проектов SlickEdit [5] (это многофункциональный редактор кода с подсветкой).
Шаг 3, компиляция. Компилировать можно с помощью готового скрипта SConstruct, он есть в каждом из примеров. Зайдите в каталог одного из примеров, например BF533\1-EventFlag, и введите команду scons.
При выполнении команды scons может произойти ошибка:
C:\asm\scmRTOS\BF533\1-EventFlag>scons
scons: Reading SConscript files ...
KeyError: 'AD':
File "C:\asm\scmRTOS\BF533\1-EventFlag\SConstruct", line 99:
AD = os.environ['AD']
File "C:\Python27\Scripts\..\lib\os.py", line 425:
return self.data[key.upper()]
Причина ошибки в том, что скрипт не может найти в переменных окружения переменную AD, в которой настроен путь до каталога с инструментарием VisualDSP (ассемблер easmBLKFN.exe, компилятор C++ и линкер ccblkfn.exe). Ошибку можно исправить двумя способами:
1. Добавьте переменную окружения AD, в которой будет прописан путь до каталога утилит VisualDSP. Например, утилиты VisualDSP установлены в каталог c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\. Добавьте переменную окружения командой SET, или через настройку переменных окружения в свойствах системы Windows.
set C:\asm\scmRTOS\BF533\1-EventFlag>set AD="c:/Program Files/Analog Devices/VisualDSP 5.0"
2. Отредактируйте в файле SConstruct значение переменной TOOLKIT_PATH (или переменной AD), чтобы TOOLKIT_PATH указывала на каталог с утилитами VisualDSP:
#AD = os.environ['AD']
AD ='c:/Program Files/Analog Devices/VisualDSP 5.0'
TOOLKIT_PATH = AD +'/VisualDSP5.0'
[Компиляция в среде VisualDSP++]
В этом случае Вам понадобится только среда разработки VisualDSP++ (VDSP).
Процесс по шагам (компиляция примера 1-EventFlag):
Шаг 1. Создайте в VisualDSP новый C++ проект. Как вариант, можно взять готовый рабочий проект, и удалить из него все модули исходного кода.
Шаг 2. Сделайте в каталоге проекта копию папки scmRTOS вместе со всеми подкаталогами Blackfin, Common, Extensions, и находящимися в них файлами. В подкаталоге Blackfin переименуйте файл OS_Target_asm.sbf в файл OS_Target_asm.s.
Шаг 3. Создайте в дереве проекта VisualDSP каталог scmRTOS, и в нем подкаталоги Blackfin, Common - по такому же принципу, как находятся папки в файловой системе.
Шаг 4. Добавьте в проект модули в следующие подкаталоги проекта:
Подкаталог
Модули
Source files
main.cpp
scmRTOS\Blackfin
OS_Target_asm.s, OS_Target_cpp.cpp
scmRTOS\Common
OS_Kernel.cpp, OS_Services.cpp, usrlib.cpp
Шаг 5. В свойствах проекта добавьте каталоги для подключаемых файлов (Project Options... -> Project -> Compile -> Preprocessor -> Additional include directories: scmRTOS\Common;scmRTOS\Blackfin).
Это предупреждение появляется, если в коде указано, что функция должна быть принудительно встроенной (inlined, либо директивой #pragma always_inline, либо опцией компилятора –always-inline), и компилятор определил, что размер inline-функции слишком велик, чтобы соответствовать настройкам скорости/размера оптимизации. В случае выдачи такого предупреждения компиляция продолжится, и код будет сгенерирован.
[Пример]
Ниже показано, что встраивание (inlining) функции big_func в вызывающий код caller не может быть выполнено нормальным образом там, где размер функции big_func слишком велик, чтобы удовлетворять установленным настройкам оптимизации. Директива направляет компилятор делать встраивание независимо от каких-то условий, и в этом случае будет выброшено предупреждение cc1646.
#pragma always_inline
inlinebig_func() {
/* Довольно большой код */
}
voidcaller() {
/* Некий код */
big_func();
}
[Как исправить]
Чтобы устранить предупреждение cc1646, либо не указывайте компилятору явно встраивать функцию (inline), либо настройте оптимизацию в сторону оптимизации по скорости (опцией компилятора –Ov).
[Ссылки]
1. ScmRTOS site:scmrtos.sourceforge.net. 2. Blackfin CrossCore VisualDSP++ Release site:scmrtos.sourceforge.net. 3. scmRTOS_v4.ru.pdf site:scmrtos.sourceforge.net - документация scmRTOS версии 4 на русском языке. 4. Blackfin site:wikipedia.org. 5. SlickEdit site:slickedit.com. 6. SCons site:scons.org.