Программирование AVR Порты операционных систем uC/OS (RTOS) для платформы AVR XMEGA Thu, April 25 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Порты операционных систем uC/OS (RTOS) для платформы AVR XMEGA Печать
Добавил(а) microsin   

Приведен перевод статьи 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.

xmega-a1-xplain-rev4
AVR XMEGA-A1 Xplain Rev.4
xmega-a1-xplained-rev7
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 мс).

xplain ucosii_output

[Запуск и тестирование 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 мс).

xplain ucosiii_output

Исходный код можно скачать в виде проектов 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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page