Приведен перевод статьи Nick D'Ademo с описанием запуска операционных систем реального времени (RTOS) uC/OS на платах AVR XMEGA-A1 Xplain и AVR XMEGA-A1 Xplained (микроконтроллер ATxmega128A1).
[AVR XMEGA-A1 Xplain и AVR XMEGA-A1 Xplained: чем они отличаются?]
"Atmel XMEGA-A1 Xplained kit, revision 7, является первой выпущенной ревизией XMEGA-A1 Xplained kit. Этот кит заменяет устаревший Atmel Xplain evaluation kit. Информацию об оригинальном Xplain evaluation kit можно найти в апноуте AVR1907." (цитата из апноута Atmel AVR1924).
Это означает, что компания Atmel модифицировала оригинальную Xplain board и переименовала её в Xplained, чтобы подчеркнуть её совместимость с другими Xplained-брендами дополнительных плат наподобие Sensors Xplained, Temperature Sensors Xplained и CryptoAuthentication Xplained. Чтобы получить больше информации по этим платам, см. описания продуктов серии Xplained на сайте Atmel.
|
AVR XMEGA-A1 Xplain Rev.4 |
|
AVR XMEGA-A1 Xplained Rev.7 |
[Операционная система реального времени (RTOS) uC/OS-II]
Не так давно компания Micrium выпустила порт своей популярной операционной системы реального времени (real-time operating system, RTOS) uC/OS-II для микроконтроллера AVR XMEGA [1]. Однако этот порт был разработан специально для STK600 – системы разработки от Atmel. К сожалению, плата STK600 довольно дорогая в сравнении с другими платами, которые можно использовать для разработки на AVR XMEGA (платы XMEGA-A1 Xplain и новая XMEGA-A1 Xplained существенно дешевле). Nick D'Ademo модифицировал оригинальный порт Micrium для STK600, так что его теперь можно использовать на обоих платах - Xplain и Xplained, что позволяет довольно легко адаптировать порт uC/OS-II под свои собственные разработки на основе платформы микроконтроллеров AVR XMEGA.
[Запуск и тестирование uC/OS-II]
Для того, чтобы попробовать, как работает uC/OS-II, Вам понадобятся следующие программы и оборудование:
- Отладочная плата AVR XMEGA-A1 Xplain или Xplained.
- Терминальная программа, можно использовать к примеру putty или Br@y Terminal [2].
- Стандартный кабель USB A -- Mini B (для питания платы и обмена данными).
- Кабель USB < -- > TTL serial (наподобие FTDI3BLACK от AvitResearch), хотя он необязателен, так как может понадобиться, если Вы не используете мост USARTC0 < -- > COM port самой платы.
- Программатор AVR, поддерживающий программирование через интерфейс PDI (такой как AVRISP mkII [3] или AVR JTAGICE mkII [4].
Процесс запуска uC/OS-II по шагам:
1. Подключите плату через кабель USB A -- Mini B для подачи на плату питания. Через этот кабель Вы также автоматически получите доступ к USARTC0 микроконтроллера ATxmega128A1 через виртуальный COM-порт PC, который появится в операционной системе. 2. Скачайте архив проекта для Вашей платы [5] и прошейте HEX-файл в память XMEGA с помощью программатора AVR. 3. Откройте программой - терминальным клиентом COM-порт, соответствующий мосту платы (с параметрами 9600 бод, 8 бит данных, без четности, 1 стоп-бит). Если все прошло успешно, то Вы увидите в окне терминала появляющийся каждую секунду вывод uC/OS CPU Usage (подсказка по использованию теста uC/OS). 4. Проверьте, что любые введенные данные в терминале возвращаются Вам обратно. Также понаблюдайте и проверьте следующее (вывод будет происходить через порт USARTC0 микроконтроллера ATxmega128A1, и попадать в окно терминала):
Работа кнопок:
SW0: Выводит переменную CPU USAGE. SW1: Выводит тактовую частоту (F_CPU). SW2: Выводит версию uC/OS-II (OS_VERSION) и метод запрета/разрешения прерываний (OS_CRITICAL_METHOD). SW3: Выводит скорость срабатывания тиков (OS_TICKS_PER_SEC) и размер кольцевого буфера приема USARTC0, RX ring buffer (в байтах) (RX_BUFFER_SIZE_USARTC0). SW4: Выводит количество задач (APP_CFG_N_TASKS). SW5: Выводит размер стека запуска задачи в байтах, Start Task stack size (APP_CFG_TASK_START_STK_SIZE). SW6: Выводит размер стека задачи в байтах (APP_CFG_TASK_START_STK_SIZE). SW7: Переключает состояние ON/OFF постоянного ежесекундного вывода CPU USAGE.
Светодиоды:
LED0: Переключается, когда запускается задача ожидания Idle Task - см. app_hooks.c для получения подробностей. LED1: Переключается, когда запускается задача статистики Statistics Task - см. app_hooks.c для получения подробностей. LED2: Переключается, когда происходит смена контекста (task switch), подробнее см. app_hooks.c. LED3: Переключается при каждом тике таймера - см. app_hooks.c и os_cfg.h. LED4: Переключается, когда работает Task 2 (каждые 250 мс). LED5: Переключается, когда работает Task 3 (каждые 500 мс). LED6: Переключается, когда работает Task 4 (каждые 1000 мс). LED7: Переключается, когда вызывается pushbutton_timer_isr_handler() (каждые 20 мс).
[Запуск и тестирование uC/OS-III]
Процесс запуска ничем не отличается от ранее описанного запуска uC/OS-II (необходимо точно так же залить в память чипа ATxmega128A1 нужную прошивку). Незначительно только отличается работа светодиодов и кнопок.
Работа кнопок:
SW0: Выводит переменную OSStatTaskCPUUsage. SW1: Выводит тактовую частоту (F_CPU). SW2: Выводит версию uC/OS-II (OS_VERSION) и метод запрета/разрешения прерываний (CPU_CFG_CRITICAL_METHOD). SW3: Выводит скорость срабатывания тиков (OS_CFG_TICK_RATE_HZ) и размер кольцевого буфера приема USARTC0, RX ring buffer (в байтах) (USARTC0_RX_BUFFER_SIZE_BYTES). SW4: Выводит сообщение "Push-Button 4 press detected.". SW5: Выводит сообщение "Push-Button 5 press detected.". SW6: Выводит сообщение "Push-Button 6 press detected.". SW7: Переключает состояние ON/OFF постоянного ежесекундного вывода CPU USAGE.
Светодиоды:
LED0: Переключается, когда запускается задача ожидания Idle Task - см. os_app_hooks.c для получения подробностей. LED1: Переключается, когда запускается задача статистики Statistics Task - см. os_app_hooks.c для получения подробностей. LED2: Переключается, когда происходит смена контекста (task switch), подробнее см. os_app_hooks.c. LED3: Переключается при каждом тике таймера - см. os_app_hooks.c и os_cfg_app.h. LED4: Переключается, когда работает Task 2 (каждые 250 мс). LED5: Переключается, когда работает Task 3 (каждые 500 мс). LED6: Переключается, когда работает Task 4 (каждые 1000 мс). LED7: Переключается, когда вызывается pushbutton_timer_isr_handler() (каждые 20 мс).
Исходный код можно скачать в виде проектов AVR Studio 4 и Atmel Studio 6 [5]. В архивах также имеется уже готовые скомпилированные прошивки (HEX-файлы), которые Вы можете использовать в том случае, если Вы просто хотите посмотреть, как работает uC/OS на микроконтроллере XMEGA, и Вам не нужно модифицировать и компилировать код.
Внимание: имейте в виду, что uC/OS-II и uC/OS-III не являются open-source. Пожалуйста ознакомьтесь на сайте производителя с правилами лицензирования.
[Ссылки]
1. µC/OS-II xmega site:micrium.com. 2. Terminal COM port development tool site:sites.google.com. 3. AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях. 4. Atmel AVR JTAGICE mkII. 5. XMEGA_uCOSII_v29201_XPLAIN_20120812.zip, XMEGA_uCOSII_v29201_XPLAINED_20120812.zip, XMEGA_uCOSIII_v30300_XPLAIN_20120812.zip, XMEGA_uCOSIII_v30300_XPLAINED_20120812.zip. |