Gistereziz
Apr 27 2010, 20:08
По сути дело вот в чём: нужно загрузить в STM32F101 программу, посредством JLink.exe. При работе с IAR IDE данная программа замечательно грузится и исполняется (как я понимаю, IAR как раз использует JLink для загрузки). Теперь возникла необходимость не используя IAR IDE загрузить программу напрямую через JLink. Вместе с IAR'ом поставлялись такие вещи, как компилятор iccarm.exe, ilinkarm.exe, objcopy.exe. С их помощью мне удалось слепить некий бинарник, который, как я полагаю, должен бы без проблем грузиться в контроллер. Но вот с чем я сталкиваюсь:
При запуске Jlink.exe подключение вроде как распознается. Далее никакие отладочные команды не выполняются адекватно, пока я не выполню следующие две:
r - резет
regs - показать содержимое регистров (пришел к этому открытию эмпирическим путем)
после этого начинают выполняться такие команды, как h - halt; g - go; s - step. Начинает читаться память из любого места, притом читается правильно - поскольку содежимое загруженной программы мне известно до бита. При всем при этом запись в память не работает - ни для отдельных байт через команды w1, w2, w4, ни через loadbin. Запись не проходит, в консоли показываются ошибки. Вопрос - в чем тут может быть дело? Может быть надо какие-то другие магические команды в JLink ввести? Есть также подозрение, что память может быть почему-то защищена от записи, хотя было бы странно.
Также приветствуются любые пояснения по поводу того, как эта программа (JLink) вообще должна работать и что уметь.
В общем, я очень плохо во всем этом разбираюсь (как мне кажется) и прошу любой помощи!
zltigo
Apr 27 2010, 20:18
То, что нужно, называется JMem.
Gistereziz
Apr 27 2010, 21:00
Стал искать JMem, нашел JFlash. Сейчас ничего проверить не могу, но создается впечатление, что JMem предназначен только для просмотра содержимого памяти, а вот JFlash - это уже загрузчик.
Выходит, что я немного неправильно думал о JLink - получается, что он вообще не предназначен для загрузки программы в контроллер?
И еще - JFlash программа совсем не консольная. А консольных версий таких загрузчиков не существует ли?
zltigo
Apr 27 2010, 21:09
Цитата(Gistereziz @ Apr 27 2010, 23:00)

Стал искать JMem,
Тьфу, ошибся - JFlash.
Цитата
И еще - JFlash программа совсем не консольная. А консольных версий таких загрузчиков не существует ли?
Командная строка с достаточными наворотами есть.
А хочется другой - напишите по своему вкусу.
Цитата(Gistereziz @ Apr 27 2010, 23:00)

Выходит, что я немного неправильно думал о JLink - получается, что он вообще не предназначен для загрузки программы в контроллер?
Минималистичный халявный отладчик для демонстрации принципиальной работоспособности JLink.
Gistereziz
Apr 28 2010, 12:50
Уже несколько дней безуспешно пытаюсь разобраться с использованием разных тулов, которые поставляются вместе с IAR.
У меня есть вполне рабочий проект, из IAR IDE он успешно загружается в микроконтроллер STM32F101 после нажания кнопки "Download and Debug". Теперь пытаюсь загрузить программу не используя IAR IDE, а только отдельные консольные приложения, которые вместе с IDE идут. Полагаю, что это возможно, поскольку IDE скорее всего их и должно использовать при загрузке и дебаге.
Итак, имеется проект со всеми исходными файлами. Из этого проекта мне удалось сделать некий бинарник подходящего размера - с помощью применения компилятора iccarm.exe, линкера ilinkarm.exe и преобразователя типов objcopy.exe. Первая подозрительная вещь - бинарник result.bin отличается от .sim файла, который генерится в результате загрузки из IDE. Отличие только в начале и в конце файла, основная часть идентична. Есть подозрение, что что-то упущено. Вопрос: в чем различие bin и sim файлов? Оба похожи на готовый к загрузке программный код, но какой именно тип IAR использует для загрузки?
Далее я обнаружил некие exe-шники с названиями iarbuild.exe и CSpyBat. Второй - это похоже симуляторный отладчик, соответственно о нем и думать не хочется. Первый похож на нечто, объединяющее функции iccarm.exe, ilinkarm.exe и objcopy.exe - притом на выход он похоже должен выдавать .sim файл, что наталкивает на мысль, что именно его IAE IDE использует при билде. Но тогда непонятно, зачем вообще в программный пакет включены такие вещи, как iccarm и ilinkarm? При этом, iarbuild.exe не работает - наотрез отказывается видеть файл конфигурации .icf. Я в тупике, почему это может происходить. Если у кого-то были подобные проблемы - поделитесь пожалуйста опытом.
Следующий этап. Положим, мне удалось справиться с iarbuild, сделать .sim файл. Надо его загрузить в контроллер. ВОПРОС: Что использует IAR для загрузки программы? Говорят, что загружают программы через JFlash - но его нету в комплекте IAR, поэтому этот вариант отпадает. Вижу JLink, но про него говорят, что это просто отладчик. Может ли JLink.exe загружать программу в микроконтроллер? Я в списке его команд вижу loadbin, но меня сомнения разбирают, что загрузка программы это так просто, при том что в JLink не нужно подключать никакие файлы с конфигурацией целевого процессора, с конфигурациями и т.п.
И самый главный вопрос: Неужели все в самом деле так сложно и запутано, и при этом непонятно, куда смотреть, чтобы хоть что-то понять, изначально ничего не понимая?
Очень прошу во всех местах, где я написал явный бред, поправить меня. Если можно, поменьше отсылок к документации - у меня от нее уже голова скоро треснет - и все равно реальные проблемы не решаются.
Короче говоря, вопрос можно так поставить:
Имеется рабочий проект, контроллер STM32F101CB, рабочий программатор ARM-JTAG-EW. Какие действия нужно произвести, чтобы, не используя IAR IDE, а только всякие консольки, загрузить программу в микроконтроллер?