FreeRTOS на Sam3u

Материал из b4wiki
Перейти к: навигация, поиск

Содержание

Введение

При разработке новой платформы для приборов встал вопрос: а не заменить ли AVR на что нибудь другое? Микроконтроллеры фирмы Atmel AVR ATMegа, которые мы традиционно использовали, не устраивали нас по следующим параметрам:

  • низкая производительность ( разрядность 8бит и максимальная тактовая частота 16 Мгц)
  • ограничение по размеру исполняемого кода (нет возможности выполнять программу из внешней памяти)
  • отсутствие контроллера USB ( приходилось ставить конвертер USB-UART )

После обзора рынка микроконтроллеров с низким потреблением для встраиваемых систем выбор остановился на SAM3U.

Основные характеристики Sam3u4e

Sam3u.jpg

Ядро

  • 32х разрядное ARM Cortex-M3 (тактовая частота до 96МГц)
  • Блок защиты памяти (MPU)
  • Набор инструкций Thumb-2

Память

  • Встроенная Flash объемом до 256 кбайт
  • Встроенное SRAM объемом до 48 кбайт
  • 16 кбайт ПЗУ со встроенным бутлоадером
  • Контроллер статической памяти (SRAM, NOR, NAND)
  • Контроллер NAND Flash памяти

Периферия

  • USB 2.0 Device: 480 Мбит/сек, FIFO 4 кбайт
  • До 4 модулей USART и один UART
  • До 2 модулей TWI (I2C), 1 SPI, 1 SSC (I2S), 1 HSMCI (SDIO/SD/MMC)
  • 3-канальный 16-битный таймер-счетчик
  • 4-канальный 16-битный ШИМ-контроллер (PWMC)
  • 32-битный таймер реального времени
  • 8-канальный 12-битный АЦП, 8-канальный 10-битный АЦП
  • Три 32-битных параллельных порта ввода-вывода
  • До 96 линий ввода-вывода с возможностями генерации прерываний

Основные характеристики отладочной платы Sam3u-ek

Для разработчиков фирма Atmel выпустила отладочную плату SAM3U-EK. Sam3Uek.jpg На этой плате , кроме микроконтроллера ATSam3u4e установлены:

  • сенсорный TFT индикатор с разрешением 320x240,
  • разъем для карт SD/MMC,
  • два разъема rs232
  • два аналоговых входа с BNC разъемами
  • аудио стерео вход/выход а так же микрофонный вход с разъемами 3.5мм,
  • разъем для подключения JTAG
  • 3х мерный датчик ускорения
  • датчик температуры
  • 8M-bit PSRAM и 2G-bit NAND Flash
  • кварцевые резонаторы 12MHz и 32KHz
  • батарея для резервного питания
  • разъемы трех 32-битных параллельных портов ввода-вывода

Выбор операционной системы

Для встраиваемых систем существует множество операционных систем. Использование многопоточной операционной системы позволяет разбить создание программы на разработку отдельных потоков, каждый из которых занимался бы своей задачей. Что упрощает разработку и сокращает время необходимое для завершения проекта. Для систем построенных на процессорах AVR мы использовали операционную систему NutOs. Но в текущей версии NutOs(4.8.0) нет поддержки микроконтроллеров с ядром Corex-M3. Поэтому была выбрана FreeRTOS .

Freertos.jpg

FreeRTOS это операционная система реального времени:

  • бесплатно распространяемая, OpenSource
  • поддержка многозадачности ( совместная, вытесняющая, комбинированная)
  • два вида задач tasks и co-routines
  • API для взаимодействия и синхронизации задач ( семафоры, мутексы)
  • API для работы с очередями (Queues)
  • API для динамической работы с памятью
  • поддержка работы в защищенном режиме (на Sam3U)

Использование компилятора GCC

После того как были скомпилированы и запущены на отладочной плате примеры от Atmel пришла очередь FreeRTOS. К нашему сожалению пример демонстрирующий работу FreeRTOS на Sam3u собирался только при помощи IAR.

Для сборки тестового примера FreeRTOS с помощью GCC были сделаны следующие шаги:

  1. по инструкции собран тулчейн под Cortex-M3
  2. из примеров от Atmel ( AT91 Software Package ) были скопированы:
      • скрипт компоновщика (линковщика, линкера) flash.lds
      • файл начальной инициализации board_cstartup_gnu.c
  1. написан Makefile
  2. отредактирован файл начальной инициализации board_cstartup_gnu.c

Далее последние два пункта будут описаны более подробно.

Makefile

В Makefile надо задать опции линкера и компилятора:

  • опции компилятора (CFLAGS) -mthumb -mcpu=cortex-m3 -O2 -Wall -mlong-calls
  • опции компоновщика (LDFLAGS) -mthumb -mcpu=cortex-m3 -O2 -nostartfiles

При сборке проекта используются следующие файлы:

  • файлы для работы с аппаратной частью: draw_hx8347.с font.c hx8347.c lcd.c lcdd_hx8347.c nvic.c pio.c pmc.c usart.c
  • файлы тестов: BlockQ.c blocktim.c comtest.c flash.c GenQTest.c integer.c PollQ.c QPeek.c recmutex.c semtest.c
  • файлы FreeRTOS: heap_2.c list.c queue.c serial.c tasks.c
  • файлы для инициализации системы: board_lowlevel.c board_memories.c exceptions.c syscalls.c board_cstartup_gnu.c
  • основные файлы проекта: main.c ParTest.с

board_cstartup_gnu.c

В этом файле изменена только таблица, которая задает обработчики прерываний/исключений, в нее добавлены следующие обработчики из FreeRTOS:

  • vPortSVCHandler — обработчик программного прерывания, генерируемого командой svc, используется для запуска первого потока.
  • xPortPendSVHandler — обработчик системного запроса, используется для переключение между потоками
  • xPortSysTickHandler — обработчик прерываний таймера, используется для вычисления системного времени
  • vSerialISR — обработчик прерываний последовательного порта

Грабли

При попытке собрать проект линкер выдал несколько ошибок:
undefined reference to _sbrk
undefined reference to _write
undefined reference to _close
undefined reference to _fstat
undefined reference to _isatty
undefined reference to _lseek
undefined reference to _read

Это связанно с тем, что newlib была сконфигурирована с ключом --disable-newlib-supplied-syscalls

Для решения этой проблемы в проект был включен файл syscalls.c с необходимыми функциями-"заглушками".

Заключение

При сопоставимой стоимости, $10 за atmega2560 и 15$ за atsam3u4, последний имеет более высокую производительность и развитую периферию. Поддержка sam3u свободно распространяемым компилятором (GCC) и операционной системой реального времени (FreeRTOS) позволяет минимизировать затраты при переходе на данный микроконтроллер. Правда, если быть честными, то от использования FreeRtos мы отказались, так как в наших задачах удобнее использовать что-то более POSIX-подобное и мы решили портировать ethernut (он же NutOs) под Sam3u, но это уже совсем другая история...

Ссылки

  1. FreeRTOS v 5.4.2
  2. AT91 Software Package v 1.6
  3. Инструкция по сборке GNU Toolchain для Cortex-M3

Исходный код

Исходный код для Sam3u, полученный в результате портирования демонстрационного приложения FreeRTOS под gcc, можно найти тут.


-- Артём Двинин, НТЦ «Метротек», 10:15, 25 февраля 2010 (UTC)

Личные инструменты
Пространства имён

Варианты
Действия
разработки
технологии
разное
Инструменты