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. Примечание: в пакете архива находятся также конфигурационные файлы проектов 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. Добавьте в проект модули в следующие подкаталоги проекта:
Шаг 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 inline big_func() { /* Довольно большой код */ } void caller() { /* Некий код */ big_func(); } [Как исправить] Чтобы устранить предупреждение cc1646, либо не указывайте компилятору явно встраивать функцию (inline), либо настройте оптимизацию в сторону оптимизации по скорости (опцией компилятора –Ov). [Ссылки] 1. ScmRTOS site:scmrtos.sourceforge.net. |