scmRTOS для Blackfin Печать
Добавил(а) microsin   

Аббревиатура 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

scmRTOS VDSP project tree example

Шаг 5. В свойствах проекта добавьте каталоги для подключаемых файлов (Project Options... -> Project -> Compile -> Preprocessor -> Additional include directories: scmRTOS\Common;scmRTOS\Blackfin).

scmRTOS VDSP project include directories

Это предупреждение появляется, если в коде указано, что функция должна быть принудительно встроенной (inlined, либо директивой #pragma always_inline, либо опцией компилятора –always-inline), и компилятор определил, что размер inline-функции слишком велик, чтобы соответствовать настройкам скорости/размера оптимизации. В случае выдачи такого предупреждения компиляция продолжится, и код будет сгенерирован.

[Пример]

Ниже показано, что встраивание (inlining) функции big_func в вызывающий код caller не может быть выполнено нормальным образом там, где размер функции big_func слишком велик, чтобы удовлетворять установленным настройкам оптимизации. Директива направляет компилятор делать встраивание независимо от каких-то условий, и в этом случае будет выброшено предупреждение cc1646.

#pragma always_inline
inline big_func() {
   /* Довольно большой код */
}
 
void caller() {
   /* Некий код */
   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.