Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке

в 15:32, , рубрики: Intel Quark D1000, Intel System Studio, Блог компании Intel, микроконтроллеры, программирование микроконтроллеров, разработка

Мы уже рассказывали о том, как начать работу в Intel System Studio for Microcontrollers 2015 (ISSM) и создавать программы для Intel Quark D1000. Сегодня поговорим о том, как модифицировать в IDE Eclipse простую прошивку из примеров к ISSM. Так же рассмотрим работу с эталонной платой для проведения технических испытаний D1000 (Customer Reference Board, CRB). А именно, пользуясь JTAG-подключением, задействуем OpenOCD для того, чтобы прошить созданный нами образ в микроконтроллер и отладить код.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 1

Среда разработки для Intel Quark D1000

Intel System Studio for Microcontrollers включает в себя C/C++ компилятор, основанный на LLVM (в его состав входят ассемблер, компоновщик и библиотеки времени выполнения C/C++), GDB-отладчик и внутрисхемный отладчик OpenOCD. ISSM можно использовать как самостоятельный набор инструментальных средств, но в нём есть и плагины для интеграции с IDE Eclipse.

Открываем проект прошивки в ISSM

Прежде чем создавать проект для Intel Quark D1000, нужно установить необходимое программное обеспечение. А именно: IDE Eclipse для C/C++ разработчиков, ISSM, Putty и Zadig. Инсталлируя программы, старайтесь внимательно следовать руководствам, которые можно найти в директории установки ISSM, в папке «docs». Здесь мы так же предполагаем, что вы разобрались с примерами «Hello World» и «FW» для IDE Eclipse. Если это не так, пожалуйста обратитесь к разделу руководства пользователя «Using the Eclipse IDE». Его тоже можно найти в вышеупомянутой папке «docs».
После того, как всё будет готово к работе, запустите Eclipse, воспользовавшись командным файлом «runEclipse.bat», указав в качестве аргумента ту папку, в которую установлена Eclipse. Затем откройте проект прошивки, в нашем случае это «FW-D1000», и выполните его сборку. Ошибок быть не должно.

После того, как прошивку удалось успешно собрать, найдите файл «FW-D1000.elf», который находится в папке проекта «Binaries». Его содержимое будет таким же, как на рисунке ниже. Если вам не удаётся увидеть разделы образа с информацией о символах, нужно проверить, установлена ли на компьютере утилита «objdump». Если она действительно не установлена, обратитесь к разделу «Viewing GNU Elf and Map Files» руководства пользователя для того, чтобы установить «objdump» и настроить путь к ней на компьютере.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 2

Дамп объекта в файле FW-D1000.elf

Передача данных из обработчика аппаратного прерывания

После того, как стало ясно, что пример «FW-D1000» нормально компилируется, его можно изменить под собственные нужды. Здесь мы собираемся поменять строку, которую выводит в окно терминала программа «PushButton» из примера «FW-D1000».

Перейдите в папку «Applicaition» проекта «FW-D1000». В ней имеется 10 приложений-примеров для Intel Quark D1000. Просмотрите файл «AppConfig.h» для того, чтобы выяснить, какое именно приложение будет интегрировано в проект, и, при необходимости, измените файл так, чтобы этим приложением было «PUSH_BUTTON_TEST». Вот как выглядит файл, в котором включена интеграция в готовый проект того, что нам нужно.

//#define MAN_DECODING
//#define POWER_MANAGEMENT_TEST
#define PUSH_BUTTON_TEST
//#define ADC2SPI_TEST
//#define ADC2GPIO_TEST
//#define DDS_TEST
//#define OSCILLATOR_RE_TRIM
//#define PWM_TESTING
//#define MOTOR_CTRL
//#define UART_WAKE

Теперь перейдите в начальный файл приложения, «PushButton.c», который находится в папке «Applications», и слегка отредактируйте код. В результате, когда программа запустится устройстве, вы точно поймёте, что исполняется именно её изменённый вариант. Здесь мы подправили строку «rts_interrupt_msg». Эта строка будет выводиться каждую секунду по прерыванию часов реального времени (Real Time Clocl, RTC).

////////////////////////////////////////////////////////////////////////////////
// это функция обратного вызова для прерывания часов реального времени
////////////////////////////////////////////////////////////////////////////////
char rtc_interrupt_msg[] = "rnSean RTC interrupt!";
void rtc_callback_function_PB(void)
{
 PUSH_UART(rtc_interrupt_msg,sizeof(rtc_interrupt_msg),0,0);
 rtc_callback(rtc_callback_function_PB); // повторно регистрируем функцию обратного вызова
}

Изменив файл, сохраните его. Теперь всё готов к компиляции и прошивке образа на устройство.

Компиляция и прошивка образа на D1000

Для того, чтобы прошить скомпилированный образ на D1000, нужно установить JTAG-соединение с платой. В подробностях это описано в разделе руководства пользователя «Starting Debugging Session». Прежде чем открыть перспективу OpenOCD в Eclipse, проверьте, удалось ли OpenOCD успешно прочитать код «IdCode» целевого CPU, совпадает ли он с ожидаемым («Expected») кодом процессора.

В этом примере мы подключились по JTAG к D1000 и установили OpenOCD-соединение до запуска Eclipse. Иногда Eclipse не может прочитать «IdCode» и показывает вместо кода нули. Если это произошло, нажмите кнопку перезагрузки и посмотрите, удалось ли OpenOCD верно определить «IdCode». После того, как всё определилось, и вы дождались появления сообщений, вроде тех, что приведены на рисунке ниже, можно прошивать изменённый образ на D1000.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 3

Консоль OpenOCD при подключении к эталонной плате D1000

После того, как удалось установить JTAG-соединение с платой D1000, соберите проект «FW-D1000» в IDE Eclipse. Если в ходе сборки ошибок не обнаружится, в папке «Binaries» появится файл образа «FW-D1000.elf». Его можно будет прошить на устройство, воспользовавшись отладочной перспективой «Debug» в Eclipse, которая настроена на использование GDB через OpenOCD.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 4

Настройка отладчика для работы с эталонной платой D1000 с использованием OpenOCD

После прошивки образа появится сообщение об успешном завершении операции в консоли OpenOCD (взгляните на рисунок с консолью выше). В данном примере нужно, чтобы отладчик остановил процесс в функции «main» для пошагового исполнения.

На следующем рисунке показано, как задать точку останова на входе в «main». Отладчик, после завершения прошивки и загрузки образа, остановит процессор в начале функции и будет готов к пошаговому исполнению программы.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 5

Задаём точку останова в функции «main»

Теперь откроем консоль последовательного порта с помощью Putty. Нужно это для того, чтобы видеть UART-сообщения, которые будут выводиться, когда программа отправляет заданное сообщение по аппаратному событию прерывания часов реального времени (RTC) или при нажатии на кнопку (ButtonPress).

При подключении к плате D1000 в нашем распоряжении будут два USB-устройства. А именно, одно – это Dual RS232 HS, которое используется для JTAG-соединения OpenOCD, а второе – это USB-интерфейс к последовательному порту. Перед запуском приложения «PushButton» нужно открыть подключение к последовательному порту, используя клиент Putty со следующими настройками: Baudrate-19200, Flow Control-XON/XOFF.

Отладка: пошаговое исполнение кода

Когда завершится прошивка образа, начнётся отладка кода, с самого начала функции «main», как показано на рисунке ниже. В этом примере программа «PushButton» запускается, а затем отладчик ожидает вызова функции «PushButton», главной функции приложения. Тут же можно просматривать код, написанный на языке высокого уровня, а так же – машинные команды в окне «Disassembly», в котором подсвечивается инструкция текущего указателя команд.

Теперь можно приступать к отладке, выполнять шаги с обходом процедур (step over), шаги с заходом в процедуры (step into), возобновлять (resume) исполнение программы.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 6

Отладчик остановил процессор в начале функции «main»

Здесь мы выполняем шаг с заходом в процедуру, затем видим исходный код входной функции «PushButton», отладчик открывает «PushButton.c» для того, чтобы указать на следующую исполняемую функцию.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 7

Шаг с заходом в процедуру, выполненный из «main»

Запуск примера на D1000

В итоге, мы можем возобновить исполнение программы, она будет работать в обычном режиме. Если теперь взглянуть на окно терминала Putty, можно увидеть журнал сообщений от D1000. Сообщения, содержащие именно ту строку, которую мы выше модифицировали в коде примера, выводятся по прерываниям часов реального времени.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 8

Тестовый вывод программы, выполняемой на D1000

Об аппаратном обеспечении

Эталонная плата для проведения технических испытаний (CRB V2) содержит следующие компоненты:

  • Микроконтроллер Intel Quark D1000.
  • Акселерометр.
  • Флэш-память SPI.
  • Адаптер Bluetooth LE.
  • Модуль последовательного порта для WiFi.
  • Конвертер последовательного порта для USB и JTAG.
  • Модуль электропитания.
  • Цепь зарядки батареи.

Микроконтроллер Intel Quark D1000

У контроллера имеется 24 вывода GPIO, многие из которых многофункциональны (подробности о них смотрите в таблице). CRB V2 обеспечивает подключение этих выводов к контактным площадкам монтажной платы, которая очень напоминает Arduino, но не полностью совместима с этим стандартом. Стоит отметить, что несколько выводов, кроме того, подключены к периферийным устройствам, размещённым на плате. В некоторых случаях их нельзя использовать в роли многофункциональных выводов. Они отмечены в таблице и в описании аппаратных компонентов платы, которое приведено ниже. А именно, при описании выводов приведены их названия для микроконтроллера D1000, для Arduino и для платы CRB V2. Обратите внимание на то, что интерфейс SPI применяется для связи со всеми встроенными в плату периферийными устройствами с использованием следующих контактов:

  • MST_M2SC (выход сигнала синхронизации передачи данных SPI, Arduino — D13, CRB v2 – XPB5).
  • MST_M2SD (выход последовательной передачи данных (MOSI) SPI, Arduino – D11, CRB v2 – XPB3).
  • MST_S2MD (вход последовательного приёма данных (MISO) SPI, Arduino – D12, CRB v2 – XPB4).

Подключение выводов Intel Quark D1000 к CRB v2

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 9

Плата CRB V2, кроме того, включает в себя некоторые другие компоненты, поведением которых нельзя управлять с помощью микроконтроллера D1000.

  • FTDI FT2232H – микросхема конвертера последовательного порта для USB и JTAG. Она используется для обеспечения консольного (UART) подключения к D1000, для программирования и отладки с использованием интерфейса JTAG. Светодиоды D6 (жёлтый) и D7 (зелёный) подключены к FTDI FT2232H, они мигают, когда устройство принимает или отправляет данные.
  • Контроллеры Linear Technologies LTC4414, Texas Instruments BQ24080, Maxim Integrated MAX8869 применяются для организации электропитания и зарядки батареи. Светодиоды D10 и D11 подключены к BQ24080 и служат для индикации состояния заряда батареи.

Intel System Studio for Microcontrollers 2015: подробности о разработке и отладке - 10

Схема платы Intel Quark D1000 CRB v2

Выводы

Теперь вы знаете, как работать с прошивками для Intel Quark D1000 в IDE Eclipse. Вы умеете их редактировать, записывать на устройство, тестировать и отлаживать код. Так же мы рассказали об эталонной плате для проведения технических испытаний (CRB V2), которая, помимо Quark D1000, включает в себя набор дополнительных компонентов. Здесь и здесь вы можете найти подробности об Intel Quark D1000, а вот тут – об ISSM.

Автор: Intel

Источник

Поделиться новостью

* - обязательные к заполнению поля