Easyelectronics.ru

Электроника для всех
Текущее время: 23 янв 2021, 00:42

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 03:26 
Заглядывает иногда

Зарегистрирован: 06 июн 2014, 21:15
Сообщения: 51
Приветствую.
Нужно перезаписать таблицу векторов по ее начальному адерсу 0x08000000
как не извращался все время HardFaultHandler :)
подскажите кто сталкивался.

пробовал переписать таблицу по адресу 0x0800C000
и отключив прерывания поменять значение SCB->VTOR
но это не помогает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 03:30 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1396
В рантайме переписывать таблицу во флеше? Зачем?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 11:29 
Заглядывает иногда

Зарегистрирован: 06 июн 2014, 21:15
Сообщения: 51
Reflector писал(а):
В рантайме переписывать таблицу во флеше? Зачем?

есть устройство , которое изначально не разрабатывалось для удаленного обновления кода.
У него с 0x08000000 по 0x0800C000 - таблица и код , вообщем прошивка , а с 0x0800C000 - пользовательские данные , их много.
Данные не разбиты на одну структуру , а разбиты на много мелких структур адреса размещения которых дефайнами прописаны в коде , поэтому не хотелось бы менять ручками эти дефайны т.к. работа устройства проверена годами эксплуатации. (возможно когда будет удаленное обновление тогда можно будет и эксперементировать)
так вот идея такая , т.к. я могу пользовательские данные менять через GPRS модем , то место пользовательских данных грузится код апдейтера , который по GPRS каналу будет получать данные основной прошивки и нужно их записывать по адресу 0x08000000 , но проблема в том что даже когда код и таблица апдейтера скомпилированы под адрес 0x0800C000 то писать по адресу 0x08000000 все равно не получается! оттуда могу только считать!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 11:56 
Старожил

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 238
Откуда: Украина
Попробуйте обозначить область начиная с 0x08000000 как массив данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 12:10 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 551
Откуда: Киев
Нужно писать свой бутлоадер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 12:13 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7239
Алгоритм:
1. загрузите весь образ в Flash, с маленькой программой переписывания. С границы, кратной размеру блока Flash.
2. проверьте корректность этих данных (п1)
3. запустите процедуру обновления. (Первым делом она должна заблокировать прерывания)
4. после записи и проверки перезапустите процессор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 17:57 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1657
ZeroCold писал(а):
писать по адресу 0x08000000 все равно не получается! оттуда могу только считать!
По этому адресу вообще-то flash находится. Как вы туда пишете то? Так что-ли?
Код:
*(volatile uint32_t *)0x08000000 = 0;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 20 ноя 2020, 18:46 
Заглядывает иногда

Зарегистрирован: 06 июн 2014, 21:15
Сообщения: 51
VladislavS писал(а):
ZeroCold писал(а):
писать по адресу 0x08000000 все равно не получается! оттуда могу только считать!
По этому адресу вообще-то flash находится. Как вы туда пишете то? Так что-ли?
Код:
*(volatile uint32_t *)0x08000000 = 0;


HAL_FLASH_Unlock()
HAL_FLASHEx_Erase
HAL_FLASH_Program
HAL_FLASH_Lock()


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 21 ноя 2020, 01:54 
Заглядывает иногда

Зарегистрирован: 06 июн 2014, 21:15
Сообщения: 51
u37 писал(а):
Алгоритм:
1. загрузите весь образ в Flash, с маленькой программой переписывания. С границы, кратной размеру блока Flash.
2. проверьте корректность этих данных (п1)
3. запустите процедуру обновления. (Первым делом она должна заблокировать прерывания)
4. после записи и проверки перезапустите процессор.


я совсем не понял Ваш ответ.
что нужно делать я знаю , но вот как записать эту саму прошивку начиная с адреса 0x08000000 вот в чем вопрос :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 21 ноя 2020, 02:07 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7239
Вы не сможете ничего записать в страницу Flash, на которой выполняете код.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 21 ноя 2020, 08:22 
Заглядывает иногда

Зарегистрирован: 08 фев 2012, 15:28
Сообщения: 115
Можно попробовать перенести всю таблицу целиком в RAM, переключив соответствующий бит VTOR.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как писать в Vector Table на STM32F103C8T
СообщениеДобавлено: 21 ноя 2020, 16:46 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1657
Зачем, если код выполняется из той flash, которую хочется перешить.

Вообще, устройства с обновлением так не делают. Начинать надо с карты памяти: загрузчик, прошивка, конфиги, буфер для приёма новой прошивки. И только потом реализовывать по частям.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB