Перейти к содержанию
    

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

....

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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 совместим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, Alexandr27 said:

Добрый день! Спасибо за ответ! В результате падаю в HardFault_Handler. Пробывал и такой адресс и адресс + 4 и пробовал даже прыгнуть снова в загрузчик - все так же HardFault_Handler

Можете выложить ваш стартапный код в виде исходников и полученного листинг-файла? Тогда появится шанс понять, что у вас не так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/21/2024 at 12:08 PM, Alexandr27 said:

не получается сделать корректно jump в прошивку которая лежит по адресу 0x80001800

Насколько я понимаю, вы пытаетесь вызвать функцию по отфанарному (0x80001800), не существующему адресу.
По этому адресу нет НИЧЕГО. Отсюда и вызов исключения.
Ваша прошивка, скорее всего, расположена в энергонезависимой памяти программ. Или, хотя бы, в ОЗУ. 
Посмотрите внимательно на Figure 1-2 Storage image в CH32V003RM.pdf 

И то, что вы называете "jump" - таковым НЕ является. Вы выполняете вызов подпрограммы (Call), а не переход/прыжок (Jump).

Изменено пользователем Буян

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...