Статьи

Полу-хостинг с GNU ARM Embedded (LaunchPad) и плагинами отладки GNU ARM Eclipse

В « Semihosting с Kinetis Design Studio » я использовал printf () для обмена текстом и данными между целевой платой и хостом, используя отладочное соединение. Студия дизайна Kinetis (KDS) внедрила этот полухостинг в свои библиотеки. Что делать, если использовать инструменты и библиотеки GNU ARM Embedded (launchpad) (см. « Переключение цепочки инструментов и библиотек ARM GNU в Kinetis Design Studio »)? На самом деле это требует еще двух шагов, но тоже очень просто.

Полухостинг Выход

Полухостинг Выход

Существуют три вещи, которые необходимо использовать для использования полухостинга с библиотеками GNU ARM Embedded (Launchpad):

  1. Опция в настройках компоновщика GNU
  2. Включение полухостинга в настройках отладчика
  3. Инициализация библиотек GNU

Опция линкера

Чтобы включить полухостинг для библиотек GNU ARM Embedded ( Launchpad ), мне нужно добавить

--specs=rdimon.specs 

к параметрам компоновщика:

Опция компоновщика для включения полуохостинга

Опция компоновщика для включения полуохостинга

В случае, если я использую newlib-nano и хочу использовать printf () и / или scanf () с поддержкой плавающей запятой, мне нужно явно добавить некоторые символы с помощью параметров компоновщика ‘u’:

-u _scanf_float
-u _printf_float 

Настройки отладчика

В плагинах GNU ARM Eclipse мне нужно включить полухостинг.

Segger J-Link

Для Segger J-Link я включаю консоль в конфигурации запуска:

Выделенная консоль Semihosting для Segger

Выделенная консоль Semihosting для Segger

Дополнительно я включаю опции полухостинга в опциях запуска отладчика:

Включен Semihosting в опциях запуска для Segger

Включен Semihosting в опциях запуска для Segger

P & E Multilink

Для P & E используются следующие настройки:

Настройки полухостинга для PnE

Настройки полухостинга для PnE

Настройки для OpenOCD

Следующие настройки используются для OpenOCD:

Настройки OpenOCD Semihosting

Настройки OpenOCD Semihosting

Инициализация библиотек GNU

Если вы сейчас попытаетесь использовать полухостинг с запуском отладчика, вы, вероятно, получите сообщения об ошибках, подобные этому (например, от Segger J-Link):

WARNING: Semihosting command SYS_FLEN failed. Handle is 0.
WARNING: Semihosting command SYS_WRITE failed. Handle is 0.
WARNING: Semihosting command SYS_WRITE failed. Handle is 0.
WARNING: Semihosting command SYS_WRITE failed. Handle is 0. 

Причина в том, что приложение должно активировать полухостинг. Мне нужно позвонить, initialise_monitor_handles()прежде чем я использую printf():


1

2

3

4

5

6

7

8
extern
void
initialise_monitor_handles(
void
);
/* prototype */
int
main(
void
) {
initialise_monitor_handles();
/* initialize handles */
for
(;;) {
printf
(
"hello world!\r\n"
);
}
}

При этом я могу использовать printf () и scanf () через соединение с отладчиком.

Полухостинг Printf Output

Полухостинг Printf Output

Резюме

Хотя я не люблю printf () по многим причинам, иногда полезно обмениваться данными с хостом. При использовании полухостинга физическое соединение не требуется, так как связь происходит через отладчик. Это несколько навязчиво и добавляет накладные расходы на код и данные, но библиотеки GNU ARM Embedded (launchpad) (как newlib, так и newlib-nano) имеют встроенный полухостинг. Необходимо включить его в настройках компоновщика и отладчика и инициализировать дескрипторы в приложении.

Happy Semihosting ?