Во первых строках сего письма хочется сказать, что идея написать эту статью пришла из-за того, что волею судьбы мне пришлось работать с микроконтроллерами компании Миландр. Помимо того, что информации по сети не так много, она еще и достаточно разрознена. И все бы ничего - кто ищет, тот найдет. Но пришлось (за неимением ничего другого под рукой) отлаживать программы при помощи эмулятора от Olimex. Тут стало тяжелее и было решено хоть как-то систематизировать знания для таких же зеленых бедолаг, как я, которые, возможно, столкнутся с подобными проблемами. Подготовка среды разработки Хочется сказать, что у компании производителя есть свой форум и некая база знаний в которых можно найти достаточно много полезной информации. Покапавшись в этих "архивах" было принято решение проводить разработку в keil, так как, судя по "отзывам" в нее достаточно просто интегрировать Миландровские детища. Для изи-интеграции необходим software pack для Keil, найти его и инструкции по установке можно туц. Подтягивание драйверов Существует, написанный добрым человеком загрузчик UART – «1986BE1UARTWSD». Легко находится на просторах интернета в комплекте с дровами. Использовать его достаточно удобно и отказываться большого смысла нет. Для его корректной работы нужен драйвер.   Будем использовать OpenOCD и, естественно, gcc-none-eabi-gdb. Для работы болгарина под OpenOCD нужно обновить драйвера. Поможет программа. Вкратце: Открыв программу «Zadig» в выпадающем списке нужно выбрать JTAG эмулятор и жмякнуть «Install Driver». Тоже самое необходимо провернуть для «Interface1». Создание первого проекта Система готова, можно приступать к работе. Создание hello worldпод 1986BE описывать не буду, хорошо описано туц. Так, собственно, и делаем.   Настройка проекта в Keil (до пункта «Debug», так как использовать будем не очень-то нативный эмулятор) описана туц.   После выполнения всех шагов, указанных в статьях выше, имеем готовый для прошивки hex файл. Прошивка флеши Прошьем флешку готовой программой через UART загрузчик на примере отладочной платы от LDM-SYSTEM LDM-HELPER-K1986BE1QI. Подключаем USB к порту ПК и разъему X1 на отладке (usb разъем один – ошибиться будет трудно). Открываем программу «1986WE1WSD». В левом нижнем углу указываем корректный COM-порт, В поле “baud rate” ставим классические 115200, чекбоксы «Erase», «Program», «Verify» выставляем в true. С помощью кнопки “Browse…” находим новоиспеченный hex-файл прошивки. Подготовили ПК. Теперь необходимо подготовить контроллер. В даташите написано о «загрузочном» положении переключателя. Для отладки LDM-HELPER-K1986BE1QI это устанавливается с помощью физической кнопки «LOAD» на плате. На плате зажимаем кнопку «LAOD» и, не отпуская ее, нажимаем кнопку «PWROFF». После чего отжимаем “LOAD”. Плата готова к загрузке через UART. В программе «1986WE1WSD» жмем «Start» и видим следующие сообщения: «Синхронизация…ОК!»  «baud rate 115200 OK!»  «boot load…OK!»  «Chip erase done!»  «Program XXXX byte done!»  «Verify done!» Программа прошита в отладку. Запустится по ресету или можно нажать «RUN» в программе «1986WE1WSD». Подтягивание отладчика Начинается самое вкусное. Отладка. Если инфу по предыдущим пунктам найти не так сложно, разве что она немного разнесена по интернетам, то по подключению отладчика от OLIMEX я мало чего нашел.   Для начала подключим ARM-USB-OCD-H к 1986BE. Тут выводы на каждой плате свои, но, опять же, на отладке LDM-HELPER-K1986BE1QI – это разъем X5. С другой стороны подключаем ARM-USB-OCD-H к ПК.    Запитываем плату. Запускаем OpenOCD: заходим в командную строку вводим путь до установленной программы openOCD (обычно в распакованном архиве/bin/openocd.exe) и с помощью флагов –f указываем путь до конфигурационных файлов. Нам понадобится «архив/scripts\interface\olimex-arm-usb-ocd-h.cfg» и «архив/scripts\target\1986ве1т.cfg». Для того, чтобы хоть немного облегчить себе жизнь можно создать bat-ник для старта OpenOcd по типу ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  :: Старт OpenOcd. Подключение отладочного интерфейса ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  :: Кодировка для норм понимания имени файла "1986ве1т.cfg"  chcp 65001  :: Путь до программы openOcd  set OPEN_OCD_PATH="C:\Users\ASePetrov\Desktop\OpenOCD-OLIMEX-WINDOWS\openocd-0.9.0-rc1\bin\openocd.exe"  :: Путь до используемого эмулятора (конф. openOcd)  set INTERFACE_PATH="C:\Users\ASePetrov\Desktop\OpenOCD-OLIMEX-WINDOWS\openocd-0.9.0-rc1\scripts\interface\olimex-arm-usb-ocd-h.cfg"  :: Путь до целевого камня (конф. openOcd)  set TARGET_PATH="C:\Users\ASePetrov\Desktop\OpenOCD-OLIMEX-WINDOWS\openocd-0.9.0-rc1\scripts\target\1986ве1т.cfg"  :: Стартуем!  %OPEN_OCD_PATH% -f %INTERFACE_PATH% -f %TARGET_PATH%   Видим примерно такое:     Значит, что все хорошо и мы запустили OCD. Теперь подтягиваем отладчик.  Снова открываем консоль и вводим:  <PATH_GDB> <PATH_AXF>  ,где <PATH_GDB> - путь до arm-none-eabi-gdb.exe,  <PATH_AXF> - путь до исполняемого файла с выхода IDE Keil uVision (Обычно, в директории проекта/Objects/projName.axf)  Результат примерно такой:  Отлично, теперь можно выдавать команды для gdb.   Сначала расскажем ему, куда смотреть: (gdb) target extended-remote localhost:3333 “localhost:3333” – так как OpenOCD открывает telnet соединения, как ни удивительно, на локальной машине, на порту 3333. В консоли с gdb видим, что он подключился и, возможно, выдал некоторые отладочные, так сказать, сообщения:    В консоли с openOCD также можно заметить новое подключение:  Отлично, резетим проц: (gdb) monitor reset halt В итоге видим сообщения о том, что проц сброшен. Результат консоли gdb и openOCD, соответственно: Теперь можно загружать исполняемый файл: (gdb) load Вуаля! Загружены и готовы к работе! Ставим точку останова при входе в main() (gdb) b main И запускаем программу (gdb) c