Распечатать отладочный текст из C кода в Lauterbach TRACE32 - PullRequest
2 голосов
/ 06 мая 2020

Можно ли распечатать отладочный текст из кода C (работающего во встроенной системе) в Lauterbach TRACE32 (подключенный через оборудование Lauterbach)? Раньше мы выводили его через UART (последовательное соединение), но теперь он недоступен.

1 Ответ

5 голосов
/ 07 мая 2020

Можно печатать текст из целевого приложения в TRACE32. Некоторые поставщики называют механизм, который вы ищете, JTAG Terminal , Semihosting (ARM) или Hostlink (Synopsys).

Это обрабатывается в TRACE32 с помощью группы команд TERM.

Обычный подход следующий:

  • Добавьте t32term. c, t32term_memory. c и t32term. h к вашему проекту. Вы можете найти эти файлы в своей установке TRACE32 по адресу /demo/etc/terminal/t32term.

  • Скомпилируйте t32term. c и t32term_memory. c с помощью определенного макроса T32_TERM_BLOCKED = 1, T32_TERM_METHOD_OCKMEMORY = 1 и T32_STERM_MEMORY = 1 и T32_TERM_MEMORY = 1 и T32_TERM_MEMORY = 1 Например:

     TERMOPT:=-DT32_TERM_BLOCKED=1 -DT32_TERM_METHOD_MEMORY=1 -DT32_TERM_MEMORY_BLOCKED_SIZE=256
     gcc  $(TERMOPT) -c  -o t32term.o  t32term.c
     gcc  $(TERMOPT) -c  -o t32term_memory.o  t32term_memory.c
    

    Конечно, вместо просто «g cc» вы должны использовать здесь кросс-компилятор для вашей цели со всеми параметрами c, указанными для ЦП.

  • В вашем приложении используйте функцию T32_Term_Puts(const char *str) для отправки текстового буфера в TRACE32

  • Чтобы использовать что-то вроде printf (), напишите функцию-оболочку вокруг T32_Term_Puts() vsprintf(). Библиотека C некоторых компиляторов уже предоставляет некоторую printf (), которая в конце вызывает некоторую слабо объявленную функцию put (), которую вы можете перезаписать с помощью T32_Term_Puts().

  • Во время компоновки убедитесь, что что буферы T32_Term_Tar2HostBufferSize и T32_Term_Memory_Host2TarBuffer помещаются в некэшированную память.

  • В TRACE32 используйте следующие команды:

     SYStem.MemAccess Enable   // Enable memory access to running CPU
     TERM.METHOD BufferE E:T32_Term_Tar2HostBufferSize E:T32_Term_Memory_Host2TarBuffer
     TERM.GATE
    

Окно TERM.GATE принимает данные, которые вы отправили с T32_Term_Puts(). Вы должны держать его открытым.

TERM.METHOD указывает способ получения TRACE32 печатных данных из вашего целевого приложения. Метод BufferE довольно распространен и работает со всеми ЦП, которые поддерживают чтение памяти отладчиком во время работы ЦП. Существуют и другие доступные методы, которые вам, возможно, придется использовать, если BufferE невозможно.

Для метода BufferE вы должны разрешить отладчику доступ к целевой памяти, пока ЦП работает. Делается это командой SYStem.MemAccess Enable. В зависимости от отлаживаемого семейства ЦП и версии TRACE32 вы должны использовать ключевое слово CPU, DAP или NEXUS вместо Enable.

Механизм позволяет не только отправлять текст в TRACE32. Он также позволяет вам открывать файлы из P C, на котором запущена TRACE32, записывать данные в файл, получать системное время или запускать приложения.

Если ваш целевой чип содержит модуль трассировки оборудования ITM или STM и вы иметь оборудование для трассировки от Lauterbach (например, CombiProbe или PowerTrace), вы также можете использовать этот механизм для отправки текста из целевого приложения в TRACE32.

...