Raven 9 24 июня Опубликовано 24 июня · Жалоба 3 hours ago, Alexandr27 said: Да, я проверял во время сета через асемблер их так же - все корректно. Сейчас возникли подозрения что WCH-LinKUtility стирает память полностью или не зашивает по корректному адресу прошивку приложения. А что у вас в качестве средства разработки? MoonRiver? Т.е. Eclipse + OpenOCD? Тогда почему не воспользоваться возможностями OOCD (или в отдельности от ГУИ, или в составе)? Сделайте в OOCD: reset halt reg pc Увидите, куда вас выбрасывает по ресету. А потом можно еще и немного окружающую память посмотреть () mdw <адрес PC> Ну, и дальше развлекаться можно в исследовании обстоятельств. В частности, можно посмотреть, как пойдет исполнение кода (с помощью single step): step; reg pc step; reg pc .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 160 24 июня Опубликовано 24 июня · Жалоба В 21.06.2024 в 12:08, Alexandr27 сказал: Может кто-нибудь может подсказать как это сделать корректно? __disable_irq(); NVIC_SetVectorTable(NVIC_VectTab_FLASH, FLASH_APPLICATION_ADDRESS); __set_MSP(*(volatile uint32_t *)FLASH_APPLICATION_ADDRESS); ((void (*)(void))(*(volatile uint32_t *)FLASH_APPLICATION_ADDRESS + 4))(); P.S. А, я думал это Cortex-M. Тогда не знаю. Бегло посмотрел - на стековерфлоу пользуют код для Cortex-M, не знаю насколько их API совместим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 9 24 июня Опубликовано 24 июня · Жалоба 12 hours ago, Alexandr27 said: Добрый день! Спасибо за ответ! В результате падаю в HardFault_Handler. Пробывал и такой адресс и адресс + 4 и пробовал даже прыгнуть снова в загрузчик - все так же HardFault_Handler Можете выложить ваш стартапный код в виде исходников и полученного листинг-файла? Тогда появится шанс понять, что у вас не так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Буян 0 27 июня Опубликовано 27 июня (изменено) · Жалоба On 6/21/2024 at 12:08 PM, Alexandr27 said: не получается сделать корректно jump в прошивку которая лежит по адресу 0x80001800 Насколько я понимаю, вы пытаетесь вызвать функцию по отфанарному (0x80001800), не существующему адресу. По этому адресу нет НИЧЕГО. Отсюда и вызов исключения. Ваша прошивка, скорее всего, расположена в энергонезависимой памяти программ. Или, хотя бы, в ОЗУ. Посмотрите внимательно на Figure 1-2 Storage image в CH32V003RM.pdf И то, что вы называете "jump" - таковым НЕ является. Вы выполняете вызов подпрограммы (Call), а не переход/прыжок (Jump). Изменено 27 июня пользователем Буян Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться