Здравствуйте! Данные вопросы относятся к микроконтроллеру FM33A048EV на Cortex-M0 процессоре. Я никогда ранее не пользовался средой Кейл, но вот нужно подключить экран к этому контроллеру и более подходящего варианта я не нашел. По итогам того, к чему я пришел, при попытке отладки, отладчик запускается, но если сделать шаг выдает ошибку JLink - Cortex-M Error. Что может быть причиной данной ошибки? Программа судя по логу в в чип загружается
Код:
Load "C:\\Projects\\keil\\FM33ADisp\\test.axf" * JLink Info: Device "CORTEX-M0" selected. Set JLink Project File to "C:\Projects\keil\FM33ADisp\JLinkSettings.ini" * JLink Info: Device "CORTEX-M0" selected.
Full Chip Erase Done. Programming Done. Verify OK. * JLink Info: Reset: Halt core after reset via DEMCR.VC_CORERESET. * JLink Info: Reset: Reset device via AIRCR.SYSRESETREQ. Application running ... Flash Load finished at 16:20:03
Так же настроил пин PG6 на высокий уровень, но на этом пине никаких движений не происходит.
С этими МК и с Кейл дел не имел, но первое что бросается в глаза: почему "max.clock" стоит = 5kHz? Это очень мало. Я обычно ставлю не менее 4 МГц (хотя работаю с более старшими ядрами чем CM0). Также лучше сразу в начале отладочной сессии (ещё до всяких шаганий) ещё и своими глазами убедиться, что прошивка реально прошилась в чип (открыв окно "Memory", перейдя в нём на начало флешь и глазами сравнив данные там с содержимым своего файла прошивки).
По итогам того, к чему я пришел, при попытке отладки, отладчик запускается, но если сделать шаг выдает ошибку JLink - Cortex-M Error. Что может быть причиной данной ошибки?
Что происходит после старта отладочной сессии? Показывает окошко с кодом и с точкой в которой сейчас находится PC? (остановленный) Причиной сбоев после загрузки может быть внезапно прилетевший на контроллер RESET. От WDT или по питанию или ещё от чего-то. Или какие-то другие проблемы с соединением эмулятора с отлаживаемым МК. Или с питанием.
Это лучше проверить своими глазами. По окошку "Memory". Тем более что и галки "Download to Flash" и "Verify Code Download" на последнем скрине у вас почему-то сняты.
Спасибо за ответ! 5кГц это я менял разные скорости. Сейчас поставил 5МГц, ничего не изменилось
Добавлено after 25 minutes 50 seconds: jcxz,
Добавлено after 6 minutes 5 seconds:
Добавлено after 3 minutes 52 seconds:
Добавлено after 32 minutes 1 second: Пересоздал проект. Память вроде программируется корректно. С адреса 0x0
Вот структура проекта и код
Окно отладчика когда я только в него вошёл. Почему то сразу запущен. Если остановить (на красный кружок с белым крестиком) он остановится но шаги не работают. Ничего не происходит.
Zikon, да, вот я позже пприсылал скриншоты там уже стоят как вы написали
Добавлено after 5 minutes 26 seconds: Zikon, сейчас при входе в отладчик сразу код идёт, или что, доступна кнопка STOP. Если нажать ее выделяются некоторые регистры синим, и всё. Шаги не делает, а если нажать Run to cursor line опять запускается и всё.
что за белый кружок с красным крестиком, и зачем его в отладчике нажимать
запускаем отладку и должен сразу на main() перейти и в си коде и в асм коде и дальше шагаем
Добавлено after 2 minutes 36 seconds: шаги делаем и при изменении - жёлтая стрелочка перемещается синие регистры - те которые изменились при шаге или шагах
может ещё зависит шаг в каком окне находишься
и как-то си программу там шаги странно работают я больше асм отлаживаю немного
в настройках можно в закладке Debug убрать галочку Run to main() тогда стартовать будет с ResetHandler и в асм окне будет если интересно асм по шагам смотреть
и сейчас проще в телеге найти канал по MCU и там спрашивать на форумах мало движухи и отклик долгий
Zikon, сейчас при входе в отладчик сразу код идёт, или что, доступна кнопка STOP.
После старта отладочной сессии, процессор должен по идее быть остановленным или в начале main() или по адресу вектора сброса. Не должен он быть в "run". Что-то не так тут. Может адрес точки входа (стартовый адрес прошивки) не задан или неправильно задан? Или выполнение по каким-то причинам не доходит от 0x165 до main()?
У вас, судя по скриншоту с образом прошивки, вектор сброса указывает на адрес 0x165. Можно перед подключением отладчика, поставить на этот адрес бряк (в окне дизасма). И дальше прошагать до начала main(). Или же 2-й бряк поставить на начало main() и от адреса 0x165 до бряка в main() запустить CPU свободно бежать (run). Исполнение должно дойти до бряка в main(). Если не дошло - искать что не так со входом в main(). Вобщем - я бы плясал от адреса в векторе сброса (0x165).
PS: В вашем МК флешь находится с адреса 0x00000000? Точно? Нужно убедиться в этом. У меня нет мануала на ваш МК - не знаю.
jcxz, когда я вхожу в дебаггер желтая стрелка уже сразу почему то стоит на while(1)
"Жёлтая стрелка" это видимо где должно идти выполнение кода. Но в окне слева у вас в регистре PC=0, хотя если CPU действительно выполняет команду по адресу 0x236, то должно быть PC=0x236. И в остальных регистрах почему-то 0. Не должно быть такого. Тем более что SP однозначно должен указывать на стек (RAM), а не на flash как у вас. К тому же вы скрыли код до 0x236. Там есть код начала main()? Или что там?
Вобщем - ваш отладчик показывает полную чушь (на последнем скриншоте). Советую также проверить реальность программирования флешь отдельно от Кейла. Запустите jflash.exe и проверьте содержимое флеши там.
убери старт отладки с main() ( в настройках проекта вкладка Debug и убери галочку на "Run to main()" ) должен при входе в отладку начинать с адреса ResetHandler 0x00000164
и зачаем Stop нажимать ? Run что-ли нажал - зачем ? Есть же step - разные
и правильно - если Run нажал - он у тебя в бесконечном цикле крутится - while(1) который Stop нажал - он там и выпал !
Где он должен быть то ещё ?
Странно main с адреса 0x00000218 и до while какая-то инициализация идёт а листинг откуда ?
Zikon, убирал run to main. Ничего не менялось. При входе в дебаггер он сразу стоит по тому Адресу что на картинке. И сразу почему то как будто запущен (как на скрине). Я run не нажимал.. так сразу, при входе в отладчик. Листинг с дизасеиблера отладчика
Zikon, убирал run to main. Ничего не менялось. При входе в дебаггер он сразу стоит по тому Адресу что на картинке.
Он у вас как раз не стоит. (как сами же пишете) А CPU выполняет программу. А должен именно стоять после старта отладочной сессии. На начале main() или на адресе reset-вектора. Как будто что-то заставляет отладчик нажать "run" самостоятельно. Или как будто отладчик не видит точки входа программы.
Интересно - а какой адрес фигурирует в .hex-файле в качестве стартового адреса программы? Это строка .hex-файла с типом =5. См.описание .hex: https://ru.wikipedia.org/wiki/Intel_HEX там ищем "32-битный адрес запуска программы в «линейном» адресном пространстве".
Странно main с адреса 0x00000218 и до while какая-то инициализация идёт
Там как раз ничего странного: По reset-вектору сразу делается вызов SystemInit() (почему-то пустой, который только зачем-то записывает одно слово в начало ОЗУ и больше ничего не делает). А после выхода из SystemInit() выполняется си-стартап код. Который должен быть выполнен до входа в main(). Тут всё стандартно. Странно, что CPU проскакивает все эти адреса без остановки. Не останавливаясь ни на ResetHandler ни в начале main().
PS: Подозреваю что какая-то фигня в .elf-файле. Со старт-адресом программы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения