
Пролог
Каких только микроконтроллеров мне не приходилось программировать: AVR, STM8, MSP430x, STM32, NXP (LPC2148), Xilinx MicroBlaze, MDR32, ESP32, MIK32, SPC58NNx, сс26x2, NRF53, Artery AT32, YTM32. Теперь вот МК компании FlagChip FC7300x. В сумме 15 семейств микроконтроллеров.
FC7300F8MDT - это семейство микроконтроллеров компании FlagChip as FlagShip. Внутри FC7300F8MDT три ARM Cortex-M7 процессора с архитектурой armv7-m. Это не просто ещё один микроконтроллер. Это System-on-a-Chip (SoC)
Постановка задачи
Настроить GCC ToolChain, научиться собирать, прошивать и отлаживать прошивки для микроконтроллера FC7300F8MDT.
Создать минималистический тестировочный проект в котором будет мигающий LED, работающий системный таймер, прерывания, UART-CLI и модульные тесты.
Определения
cross compliler - это когда на одной процессорной архитектуре собирают программу для абсолютно другой процессорной архитектуры. Например на x86_64 собирают прошивку для ARM Cortex-M7. Дело в том, что персональный компьютер - это по сути универсальный вычислитель и ему абсолютно всё равно какие программы и для чего собирать.
архитектура (architecture) - представление структуры элементов или нечто, что позволяет опознать строительные блоки их границы и интерфейсы и включает назначения требований для этих строительных блоков. архитектура - структура какого-либо сложного объекта и взаимосвязь элементов внутри между собой.
SDK ( software development kit — комплект для разработки программного обеспечения) — набор инструментов для разработки программного обеспечения, объединённый в одном пакете, обычно содержит комплект необходимых исходников, статических библиотек, компилятор, отладчик, иногда — интегрированную среду разработки.
Обычно зависят от комбинации аппаратного обеспечения и операционной системы.
Target устройство- то что мы программируем. В нашем случае Target устройство это MCU FC7300F8MDT.
GDB server — это компьютерная программа, которая позволяет удаленно по USB+JTAG отлаживать программатором прошивки. Работая на host PC GDB сервер позволяет GNU отладчику подключаться сокетом. Исполняемый файл, который должен отлаживаться, находиться на целевой системе (target), в то время как исходный код и копия двоичного файла, который должен отлаживаться, находятся на локальном компьютере разработчика (host).
Что надо из оборудования?
|
№ |
Оборудование |
Назначение |
|
1 |
Учебно-тренировочная электронная плата с MCU FC7300F8MDT2P176T1A |
Целевая платформа |
|
2 |
Программатор Segger J-link V11-G |
Чтобы запрограммировать микроконтроллер |
|
3 |
Шлейф 20 пин для JTAG разъёмов |
чтобы соединить электронную плату и программатор |
|
4 |
Кабель USB-A -- USB-B длинной 1 2 метра |
чтобы соединить LapTop и программатор |
|
5 |
LapTop |
для сборки прошивки |
|
6 |
Лабораторный блок постоянного напряжения UTP1306 |
чтобы подать электропитание на плату |
|
7 |
Кабель 220 AC для лабораторного блока питания |
чтобы подать питание на блок питания |
|
8 |
Набор перемычек в шлейфе гнездо-гнездо |
для работы с отладочной платой |
Программатор выглядит как черная пластмассовая коробочка.

Технические характеристики можно почитать тут
Технические характеристики
--Поддержка CPU с ядрами ARM7/9/11, Cortex-A5/A7/A8/A9, Cortex-M0/M1/M3/M4/M7, Cortex-R4, Microchip PIC32 and Renesas RX100/ RX200/ RX610/ RX621/ RX62N/ RX62T/ RX630/ RX631/ RX63N;
--Поддержка SWV/ SWO (Serial Wire Viewer/ Serial Wire Output);
Пояснение по индикации отладчика J-link
|
Индикация |
Частота, Hz |
Значение |
|
зеленый, мигает |
10 |
инициализация отладчика |
|
Зеленый, мигает |
|
Когда отладчик работает, индикатор временно гаснет при выполнении команды. Таким образом, скорость мигания определяется скоростью интерфейса целевой платы. В низкоскоростных интерфейсах индикатор выключается на более длительный период, чем в высокоскоростных интерфейсах. |
|
Устойчивый зеленый |
0 |
Отладчик инициализирован и находится в состоянии ожидания. |
|
Зеленый, 10 мс |
1 |
Эта функция будет активирована, когда эмулятор будет находиться в режиме ожидания более 7 секунд. |
|
Оранжевый |
0 |
целевая плата находится в состоянии сброса |
|
Красный, мигает |
1 |
В симуляторе обнаружена серьезная ошибка, которая не должна возникать при нормальных условиях. |
На столе разработчика надо соединить оборудование как показано на схеме
Что надо из документов?
Исходниками любой разработки являются официальные документы.
|
№ |
Название дока |
количество страниц |
Revision |
Пояснение |
|
1 |
FC7300Fxx Product Brief (флаер) |
10 |
? |
Флаер на микроконтроллер FC7300F8MDT |
|
2 |
Схемотехника электронной платы |
NDA |
NDA |
Чтобы понимать с какой стороны следует подходить к электронной плате |
|
3 |
ARMv7-M Architecture Reference Manual. |
858 |
? |
Спецификация ядра ARMv7-M: карта адресов ,регистры ядра, ISA |
|
4 |
ARM Cortex-M7 Processor Technical Reference Manual |
145 |
? |
Спека на процессорные ядра |
|
5 |
FC7300 Data Sheet |
71 |
A1 |
Сокращенный даташит на |
|
6 |
FC7300 Cloking Diagram |
1 |
V1.3 |
Дерево распределения тактирования |
|
7 |
FC7300 Security User Guide |
38 |
-- |
|
|
8 |
FC7300 Reference Manual |
2179 |
Rev 1.1 |
Полная спека на семейство FC7300 |
|
9 |
FC7300 Errata Sheet |
34 |
4.2 |
Реестр известных ошибок в кристалле FC7300 |
|
10 |
FC7300 Demo Board User Manual |
16 |
1.1 |
Текстовое описание учебно - тренировочной электронной платы от производителя |
|
11 |
FC7300F8MDT Pinout_V1.1.xlsx |
4 |
1.1 |
Таблица PIN_MUX |
|
12 |
J-Link / J-Trace User Guide Document: UM08001 Software Version: 6.18 |
367 |
6.18 |
Спека на программатор и набор утилит из набора J-link |
|
13 |
FC_IDE User Guide |
31 |
Rev.2.0 |
Инструкция настройки пошаговой отладки в Eclipse IDE |
Что касается datasheet-ов, то их просто так не скачать. Только флаер. При попытке скачать спеку сайт просит связаться с организацией. К слову, таблица FC7300F8MDT Pinout_V1.1.xlsx вложена в reference manual. Получается FC7300 Reference Manual.pdf является, как бы ещё и архивом. Такое бывает в документации для Automotive микроконтроллеров и у других производителей (STm).

Что надо из софтвера?
|
# |
Программа или исходники |
Версия |
Пояснение |
|
0 |
JDK |
17.0.1 2021-10-19 LTS |
Виртуальная машина Java |
|
1 |
Eclipse IDE |
2022-03 (4.23.0) |
Текстовый редактор |
|
2 |
Arm GNU Toolchain |
10.3.1 20210824 |
Cross-компилятор |
|
3 |
Build Tools (GNU Make) |
4.4.1 |
Система сборки. Утилита для управления вызовами других утилит в правильной последовательности согласно скрипту в makefile. |
|
4 |
SEGGER JLink_7.52b |
7.52b |
PC утилиты-прошивальщики |
|
5 |
SEGGER Ozone |
V3.26 |
Пошаговый отладчик. Отладочный сервер. |
|
6 |
Flagchip SDK |
V2_3_2 |
базовые исходники от производителя MCU |
|
11 |
CMSIS |
|
Системный код от компании ARM для управления ядром ARM Cortex-M7 |
|
7 |
The Eclipse Embedded CDT (не обязательно) |
|
Плагин для автоматического генерирования GNU Make скриптов системы сборки Cи кода |
|
8 |
FlagChip MCAL |
|
Код для высокоуровневого программного доступа ко всем подсистемам микроконтроллера |
|
9 |
Windows драйвер для переходника USB-UART на основе ASIC CH340 (CH340SER.exe) |
|
Для появление COM-порта в OS Windows |
|
11 |
SEGGER J-Link Configuration |
V7.52b |
Для проверки версии программатора |
|
12 |
JFlashLite.exe |
V7.52b |
GUI утилита для загрузки прошивки в Target устройство |
|
14 |
JFlash.exe |
|
CLI утилита для загрузки прошивки в Target устройство |
|
13 |
JLinkGDBServerCL.exe |
V7.52b |
Отладочный GDB сервер связи с MCU |
|
15 |
arm-none-eabi-gdb.exe |
10.3-2021.10 |
Отладочный клиент |
|
10 |
Tera Term (или PyTTY) |
4.105 |
Терминал последовательного порта. |

Что касается SDK, MCAL, то это тоже просто так не скачать. При попытке скачать сорцы сайт просит связаться с организацией.
Внутри микроконтроллера FC7300F8MDT2P176T1A вот такая архитектура
Фаза 1: Установить драйверы для переходника с USB на UART.
После установки операционная система должна увидеть что появился виртуальный COM порт.

Фаза 2: Установить драйвер для программатора J-link
При подключении программатора в диспетчере устройств должно появиться новое USB устройство: J-link driver. General

Driver

Вкладка Details показывает, что это USB устройство: VID: 1366, PID: 0101, REV: 0100, Provider: Segger, Service: jlink,

Events

Фаза 3: Установить виртуальную машину Java
Это нужно для двух целей. Первое - чтобы завелся текстовый редактор Eclipse, 2- чтобы завелся локальный сервер сборки Jenkins.
Фаза 4: Установить программу текстового редактора Eclipse IDE (печатная машинка)
Так как любая программа это прежде всего текст, то надо установить какой-нибудь текстовый редактор.

Предлагаю Eclipse IDE for C/C++ Developers так как у него весьма удобные HotKeys. Для ускорения написания кода.

Плюс в Eclipse очень приятное синее выделение.

Еще Eclipse мгновенно запускается. Как по мне качество текстового редактора определяется тем как часто вам приходится пользоваться мышкой. В хорошем текстовом редакторе мышка вообще не нужна. Eclipse один из таких текстовых редакторов. Установить Eclipse IDE for C/C++ Developers можно отсюда
https://www.eclipse.org/downloads/packages/
Установка заключается в распаковке скаченного архива в удобное место. В ОС Windows можно устанавливать Eclipse в корень диска С. Программа запускается с помощью исполняемого файла eclipse.exe, который находится в распакованной папке.

При первом запуске Eclipse надо выбрать рабочую папку (workspace). В этой папке Eclipse будет по умолчанию создавать проекты.
После установки Eclipse надо сразу установить некоторые полезные плагины. Заходим в Help -> Install New Software , выбираем All Available sites и отмечаем все плагины которые имеют в своем имени такие слова как J-Link, OpenOCD, Debugging, ARM, Embedded, GCC. Это пригодится позже для пошаговой отладки кода в Eclipse .
На всякий случай можно установить плагин для автоматического генерирования make скриптов. Называется этот плагин The Eclipse Embedded CDT. Надо зайти в Help -> Eclipse Marketplace -> Installed прописать https://marketplace.eclipse.org/content/eclipse-embedded-cc
|
№ |
Название Eclipse плагина |
приоритет |
|
1 |
Embeddede C/C++ J-link Debugging |
желательно |
|
2 |
Embeddede C/C++ OpenOCD Debugging |
может пригодится |
|
3 |
Embeddede C/C++ Arm Cross Compiler |
может пригодится |
|
4 |
Eclipse Embedded CDT |
может пригодится |
Во время установки выглядит это примерно так

После установки плагинов Eclipse предложит перезагрузиться.

Настройка проекта в Eclipse
Настройки текстового редактора содержатся в файлах .project, .cproject. Важно снять галочку с пункта Makefile generation. В поле Build location прописать относительный путь к папке, которая содержит Makefile.

Настроить параллельную сборку, чтобы ускорить цикл ToolChain(а). Это делается во вкладке Behavior

После этого инициировать сборки можно горячей клавишей Ctrl+B.
Если же Вы захотите генерировать Make файлы автоматически, то Вам придется явно указать Eclipse-у путь к ToolChain и к путь к Build tools.
Указать путь до ранее установленного Arm GNU Toolchain Window -> Preferences -> MCU -> Global Arm Toolchains Paths -> Toolchain Folder: <локальный путь>gcc-arm-none-eabi-10.3-2021.10bin

Указать путь до ранее установленного GNU Make Window -> Preferences -> MCU -> Global Build Tools Paths -> Build Tools Folder: <локальный путь>gnumake-win64-v.4.4.1bin

Указать путь до ранее установленного SEGGER J-Link Window -> Preferences -> MCU -> Global SEGGER J-Link Paths -> Executable: JLinkGDBServerCL.exe
-> Folder: C:Program FilesSEGGERJLink_V7_52b

Фаза 5: Установить Cross-компилятор ARM GNU Toolchain
Нужен ToolChain: препроцессор (cpp), компилятор ASM(as), компилятор С (gcc),компилятор С++(g++), компоновщик(ld), отладчик(gdb). Нужны binutils(ы) для диагностики полученных артефактов(nm, size, readelf), архиватор статических библиотек(ar), и прочее. Это основные утилиты, которые и делают всю работу по превращению исходников (*.с, .h) в артефакты (.hex .bin .map .elf .out файлики).
ToolChain следует брать с официального сайта
https://developer.arm.com/downloads/-/gnu-rm#:~:text=The%20GNU%20Arm%20Embedded%20Toolchain,Arm%20Cortex%2DR%20processor%20families.

Toolchain устанавливается как обычная win программа прямо из gcc-arm-none-eabi-10.3-2021.10-win32.exe файла

Проверка, что установилось. Вот полный комплект GCC ARM. Всего 32 утилиты.

Как же make файл узнает, что нужен именно этот toolchain? Ведь их может быть установлено несколько в разные папки. Ответ прост. Надо прописать адрес toolchain в переменной Path. А старый путь просто дропнуть.

и тут

Каждый свой шаг надо проверять. Как проверить, что терминал cmd находит ToolChain? Откройте cmd из любой папки и наберите arm-none-eabi-gcc.exe –v

Версия должна отобразиться в соответствии с версией скаченного дистрибутива. ToolChain может находится примерно по такому адресу:
C:Program Files (x86)GNU ARM Embedded Toolchain10 2021.10bin
Фаза 6: Установить систему сборки кода GNU Make
Самый классический способ сборки программ на С(ях) это, конечно же, Make файлы. Не перестаю удивляться насколько элегантна сборка программ из make. В 197x программировали по настоящему достойные люди. Поэтому и появились такие утилиты-шедевры как make, grep, find, sort и прочее. Благодаря Make файлам можно управлять модульностью сборок программных компонентов по-полной. Мгновенно, одной строчкой включать и исключать сотни файлов одновременно для сотен сборок. Это даже не снилось таким GUI как IAR с Keil, где приходится протирать дыры в коврике для мышки, чтобы сделать то, что в make делается одной строчкой в *.mk файлике.
Сборка прошивок из make - считается высшим пилотаже программирования на С(ях).
Вот минимальный набор утилит для процессинга Make файлов.
|
Утилита |
Назначение |
|
make |
build automation tool |
|
sh |
Unix shell interpreter |
|
realpath |
вычислитель арифметики надо путями |
|
tee |
перенаправление логов |
|
busybox |
a software suite that provides several Unix utilities |
|
echo |
Echo the STRING(s) to standard output. |
|
cp |
Copy SOURCEs to DEST |
|
mkdir |
Create DIRECTORY |
|
rm |
Remove (unlink) FILEs |
Фаза 7: Подготовка и разбор исходного кода из SDK.
Что из сорцов предоставляет вендор в своем SDK? Особое внимание надо уделить вот этим файликам:
|
Файл |
Пояснение |
|
FC7300F8M.svd |
*.svd Текстовый xml файл разметки регистров. Этот файл поедает отладочный клиент, чтобы понимать, как именно следует интерпретировать битовые поля в регистрах периферии. |
|
FC7300F8MDT_flash.ld |
Настройки компоновщика |
|
startup_FC7300F8MDx.S |
Функция которая вызывается до main(). Там же список названий обработчиков прерываний. |
|
system_init.c |
Настройка системы до запуска main. Тут реализовано импровизированный memcpy, memset, отключение сторожевого таймера, включение FPU. |
Конфигурирование компилятора
MICROPROCUSSOR += -mcpu=cortex-m7
MICROPROCUSSOR += -mtrumb
PREFIX = arm-none-eabi-
Тут надо стразу упомянуть, что main() вовсе не самая первая функция, которую начинает исполнять микроконтроллер при подаче электропитания. Самая первая функция это Reset_Handler в файле startup_FC7300F8MDx.S.
|
Последовательность |
действие |
|
1 |
Отключить прерывания |
|
2 |
обнулить регистры общего назначения |
|
3 |
прописать первое значение в указатель на верх стековой RAM памяти. (регистр sp) |
|
4 |
обнулить стековую RAM память |
|
5 |
вызвать функцию system_init из файла system_init.c |
|
6 |
обнулить не проинициализированные переменные (bss) |
|
7 |
прописать первые значение в глобальные переменные |
|
8 |
разрешить прерывания |
|
9 |
вызвать функцию main |
|
10 |
зависнуть в бесконечном цикле JumpToSelf |
Видимо чтобы сделать нам жизнь проще разработчики не стали весь startup код писать на ассемблере. То, что можно они написали на Си и вынесли в функцию system_init.
|
№ |
действие |
|
1 |
чинит ошибки из errata |
|
2 |
отключает сторожевой таймер |
|
3 |
включает FPU |
Фаза 8: Сборка проекта
Скорее всего у Вас будет очень много примерно одинаковых прошивок: первичный загрузчик, вторичный загрузчик, generic release (прошивка для отгрузки), generic debug, assembly_test (прошивка для схемотехников) и прочие прошивки. Чтобы уследить за всеми этими сборками надо запустить на локальном PC сервер сборки Jinkins. Про пуск сервера сборки у меня есть отдельный текст. Для сборки же проекта следует просто написать вот такой скрипт build_from_make.bat
echo off
cls
call clean_temp.bat
make clean 2>&1 | tee clean_log.txt
make all -j8 | tee build_log.txt
Про то как писать скрипты сборки на GNU Make у меня есть отдельный текст Основы по GNU Make. Jenkins выглядит просто, как сайт, на котором можно скачать собранные артефакты, для любого проекта и любой электронной платы.

Я бы рекомендовал Вам организовать на своем локальном жестком диске компьютера аж 2 репозитория: workspace и release. Workspace для редактирования кода, а release для генерации release(ных) артефактов. Release репозиторий он только read only. Release репозиторий пополнять только git pull(ами). Это важно, чтобы гарантировать, что все зависимости проиндексированы и в самом деле находятся в репозитории c кодом.

Фаза 9: Проверить, что программатор обнаружен утилитой Segger
Среди набора утилит присутствует программа JLinkConfig.exe (SEGGER J-Link Configuration V7.52b). Эта утилита предназначена для проверки факта подключения программатора и для обновления прошивки самого программатора. У меня утилита обнаружила изделие
Product = J-Link Vll compiled Jun 21 2023 V11.00, Nickname = SN = 601012412
USB = SN 601012412 HostFW = EmuFW = 2023 Jun 21 09:20

Фаза 10: Запись прошивки в Flash память микроконтроллера
Способ №1 JFlashLite
Прошить микроконтроллер FC7300F8MDT можно утилитой JFlashLite.exe. Это GUI утилита специально для ручной прошивки MCU. Выбираете Flagchip микроконтроллер FC7300F8MDTхXxxxT1B, интерфейс JTAG, битовую скорость 1000kHz.

Далее в поле Data File указываем путь к *.hex файлу

Надо прописать именно hex файл, чтобы Prog. addr. выставился автоматически. Такого не будет с bin файлом.

Выбрав *.hex файл, нажимаем кнопку Program Device. Далее появится зелёный progress bar и прошивка запишется в SoC.

Способ №2 Утилита JFlash.exe
Прошивку можно загрузить и скриптом. Для этого есть производственная утилита с названием JFlash.exe. Достаточно ей дать *.hex файл прошивки, файл конфигурации проекта для программатора *.jflash и запустить строчку в cmd. Перед вами скрипт перепрошивки flash_Jlink.bat
cls
set project_name=board_name_config_name_m
set flash_tool=JFlash.exe
set mcu_config=board_name.jflash
set artefact_hex=build%project_name%.hex
set option=
set option=%option% -openprj%mcu_config%
set option=%option% -open%artefact_hex%
set option=%option% -programverify
set option=%option% -startapp
set option=%option% -exit
%flash_tool% %option%
При этом файл *.jflash надо синтезировать вручную, запустив утилиту JFlash в диалоговом режиме. Этот *.jflash - текстовый файл в котором прописан интерфейс (USB/TCP), битовая скорость, тип ядра процессора, путь к hex файлу, базовый адрес начала FLASH памяти и прочие метаданные.
>JFlash.exe -openprjBoardName.jflash -openBoard_Config.hex -programverify -startapp -exit
Способ №3 Прошить пошаговым отладчиком Ozone
Фаза 11: Настроить пошаговую отладку в Ozone
Пошаговую отладку можно делать в Segger Ozone. Выбираем микроконтроллер FC7300F8M и ядро.

Выбираем набор регистров.

Ставим JTAG, частоту и серийный номер отладчика

Указываем путь к elf файлу.

Настраиваем проект отладки

F5 Download and Erаse.

Ozone загрузил программу в SoC

Теперь можно отлаживать прошивку. Для этого в Ozone заложены вот такие горячие кнопки:
|
Hot key |
Функция |
Пояснение |
|
F5 |
Continue |
запустить прошивку на исполнение |
|
F4 |
Reset |
|
|
F10 |
Step Over |
пройти строчку |
|
F11 |
Step Into |
зайти в функцию |
|
Shift+F11 |
Step Out |
выйти из функии |
|
Ctrl + Alt + L |
Load snapshot |
|
|
Ctrl + Alt + S |
Save Snapshot |
|
|
Ctrl+F5 |
Halt |
остановить программу |
|
Ctrl+M |
Find function |
Поиск функции по имени |
Во время пошаговой отладки LED на программаторе J-link мерцает. Итак, прошивка зависла. Я нажал Halt и обнаружил строчку в коде, в которой возникла загвоздка. Оказывается вызвали отправку в UART до вызова функции FCUART_Init. Вот так и работает пошаговая отладка.

Фаза 12: Пуск отладочного GDB сервера на PC
Среди набора утилит от SEGGER присутствует консольный GDB Server с названием JLinkGDBServerCL. Это программа, которая запускает процесс в операционной системе для непосредственного и непрерывного взаимодействия с программатором и микроконтроллером на другом конце JTAG шлейфа. Отладочному серверу надо указать интерфейсы между PC и программатором, интерфейс между программатором и целевым МК, битовые скорости и можно принудительно переопределить настройки по умолчанию. Вот такой скрипт инициирует пуск отладочного сервера.
:: see 3.3.5 Command line options
echo off
cls
set GDB_SERVER_OPT=
::Specifies the host interface to be used to connect to J-Link.
::Currently, USB and TCP/IP are available.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -select USB
:: Tells GDBServer to which device J-Link is connected before the
:: connect sequence is actually performed.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -device FC7300F8MDTxXxxxT1B
::Sets the endianness of the target where endianness can either
:: be “little” or “big”.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -endian little
::Selects the target interface J-Link shall use to connect to the target.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -if JTAG
::Starts J-Link Commander with a given initial speed.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -speed 2000
::Initializes the CPU register with default values on startup.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -ir
:: Select the port to listen for GDB clients
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -port 2331
::Select the port to listen for clients for SWO RAW output.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -swoport 2332
::Select the port to listen for clients for printf output.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -telnetport 2333
:: Starts the GDB Server with the option to listen on localhost only
:: This means that only TCP/IP connections from localhost are accepted)
:: or on any IP address.
:: To allow remote debugging (connecting to GDBServer from another PC),
:: deactivate this option.
:: If no parameter is given, it will be set to 1 (active).
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -LocalhostOnly
set GDB_SERVER_OPT= %GDB_SERVER_OPT% -logtofile
set GDB_SERVER_OPT= %GDB_SERVER_OPT% -log "GdbServerLog.txt"
set GDB_SERVER_PATH=JLinkGDBServerCL.exe
call %GDB_SERVER_PATH% %GDB_SERVER_OPT%
Только во время работающего отладочного сервера можно смело подключатся к нему уже отладочным клиентом. Получается тандем консольных утилит, которые общаются между собой через TCP сокет на порту с номером 2331.

Я рекомендую запускать GDB сервер именно из отдельного *.bat скрипта, чтобы у Вас всегда перед глазами был ценнейший лог сервера. В случае осечек, вы хоть сможете прочитать и понять причину осечки.
Фаза 13: Настроить GDB клиент на PC
GDB клиент - эта такая утилита, которая получает *.elf файл, связывается по сокету с GDB сервером и позволяет делать пошаговую отладку. Только и всего. Программа Ozone объединяет в себе и клиент и сервер. Однако можно запускать их и по отдельности. Это альтернативный вариант программе Ozone.
Подарок судьбы в том, что в Eclipse IDE есть плагин для работы с Segger J-link. Мы как раз его установили при настройке Eclipse . Это позволяет ассоциировать текстовый редактор и отладочный GDB клиент. Хотя ничего не мешает и отлаживаться вообще в консоли. Про это у меня есть отдельный текcт: Пошаговая GDB отладка ARM процессора из консоли в Win10

во вкладке Debugger отключаем запуск сервера.

В окне GDB Client Setup прописываем абсолютный путь к GDB клиенту
C:Program Files (x86)GNU Arm Embedded Toolchain10 2021.10binarm-none-eabi-gdb.exe
Сообщаем, что GDB сервер работает на этом же компьютере, указываем порт 2331 для общения с GDB сервером.

просим загружать прошивку

ставим точку останова на main

оставляем без изменений

ставим галочки

можно указать путь к файлу описания регистров

Всё готово для пошаговой отладки.

в Eclipse горячие клавиши уже другие:
|
# |
Action |
Hot key |
пояснение |
|
1 |
Resume |
F8 |
отпустить программу |
|
2 |
Terminate |
Ctrl+F2 |
остановить пошаговую отладку |
|
3 |
Step Into |
F5 |
зайти в функцию |
|
4 |
Step Over |
F6 |
пройти строчку |
Фаза 14: Пуск UART-CLI
Пошаговая отладка медленная и нужна только в том случае, если прошивка полностью зависнет. Остальной же базовый функционал можно вполне успешно отлаживать через интерфейс командной строки (UART-CLI). Поэтому я добавил в прошивку код для запуска CLI.

Подключение происходит по UART1, на битовой скорости 460800 bit/s, 8 bit в кадре, без проверки чётности, 2 стоповых бита. На всякий случай надо поставить паузу 10 ms между отправкой символов.

CLI показывает, что микроконтроллер за одну секунду проворачивает суперцикл 50k+ раз!

Эпилог
Весь маршрут исходного кода можно показать на одном листке. Инструментарий вполне привычный, доступный и бесплатный.

То же самое можно показать вот на такой слегка упрощенной схеме.
Итоги
Теперь ясно с какой стороны подходить к китайским микроконтроллерам FC7300x компании FlagСhip.
Удалось вручную написать make скрипт для проекта, безошибочно компилировать сборки, настроить сервер сборки, удалось прошивать микроконтроллер по JTAG, выполнять пошаговую отладку несколькими способами (Ozone и JlinkGDBServer) и даже запустить отладочный интерфейс командной строки UART-TUI.
Всё это открывает прямую дорогу для полноценной разработки на микроконтроллерах FC7300F8MDT от компании FlagChip.
Ссылки
|
№ |
Название |
URL |
|
1 |
Официальный сайт FlagChip |
|
|
2 |
Обзор безопасных микроконтроллеров Flagchip для автомобильной электроники |
|
|
3 |
Флаер на семейство FC7x |
https://www.flagchip.com.cn/UserFiles/upload/file/20240925/20240925134838341.pdf |
|
4 |
Eclipse Embedded C/C++ |
|
|
5 |
Products-Rex series (FC7x) |
|
|
22 |
Пошаговая GDB отладка ARM процессора из консоли в Win10 |
|
|
8 |
Дистрибутив текстового редактора |
|
|
9 |
Дистрибутив Cross-компилятора |
|
|
18 |
Основы по GNU Make |
|
|
10 |
Дистрибутив утилиты для пошаговой отладки прошивки |
https://www.segger.com/downloads/jlink/Ozone_Windows_V326d_x64.exe |
|
11 |
FC7300Fxx Family - Multiple ARM ® Cortex ®- M7 core with lockstep, ASIL-D |
|
|
12 |
Дистрибутив утилиты прошивальщика
|
https://www.segger.com/downloads/jlink/JLink_Windows_x86_64.exe |
|
13 |
Аналитика пинов для FC7300F8MDT, PinMux, GPIO. |
|
|
14 |
Tera Term Home Page |
|
|
15 |
Набор перемычек в шлейфе гнездо-гнездо |
|
|
16 |
J-Link ARM V11 программатор универсальный |
https://autos-sky.ru/index.php?route=product/product&product_id=524&ysclid=maz39m0hnx387222677 |
|
17 |
Почему Нам Нужен UART-Shell? (или Добавьте в Прошивку Гласность) |
|
|
19 |
Как программировать многоядерные микроконтроллеры |
|
|
21 |
Запуск сервера сборки Jenkins |
|
|
20 |
Справка про утилиты J-Link GDB Server |
https://kb.segger.com/J-Link_GDB_Server#Command_line_options |
Словарь
|
Акроним |
Расшифровка |
|
IDE |
Integrated development environment, |
|
ARM |
Advanced RISC Machine |
|
SoC |
System-on-a-Chip |
|
RISC |
Reduced instruction set computer |
|
FPU |
floating-point unit |
|
CSC |
CPU System Control |
|
MCAL |
Microcontroller Abstraction Layer |
|
SCG |
System Clock Generator |
|
GNU |
GNU's Not Unix |
|
GDB |
GNU Project Debugger |
|
USB |
Universal Serial Bus |
|
SDK |
software development kit |
|
MCU |
MicroСontroller unit |
|
OCD |
Open On-Chip Debugger |
Вопросы
--Чем ARM Cortex-M4 отличается от ARM Cortex-M7?
Автор: aabzel
