|
|
  |
Как программно загнать STM32 в бутлоадер? |
|
|
|
Mar 8 2015, 18:25
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(ViKo @ Mar 8 2015, 21:08)  Добавить к переменной атрибут __attribute((at(0x08020000))) . Спасибо, а я хотел бы еще так для себя поинтересоваться, а если в процессе компиляции компилятор присвоит какой-либо переменной некий адрес, а потом я в конце захочу указанным атрибутом этот же адрес присвоить другой переменной? Что будет? Или компилятор в первую очередь распределяет явно указанные адреса? Погодите... но если я в бутлодере напишу __attribute((at(0x08020000))) то эта переменная очистится... Как решить задачу?
|
|
|
|
|
Mar 8 2015, 20:29
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Salamander @ Mar 8 2015, 17:43)  Как мне в основной программе записать флажок, чтобы этот флажок был виден в бутлодыре? Флажка тут мало: он может и случайно оказаться равен 1. Используйте 32 битное слово с каким-нибудь нетривиальным значением. Передать есть несколько способов (в порядке нарастания сложности): 1. Записать в какой-нибудь периферийный scratchpad-регистр (скажем, регистры ключа AES у вашего процессора). 2. "Спрятать" кусочек RAM от линкера, и писать-читать по указателю. 3. Определить честную секцию с фиксированным адресом для хранения флага. Со стороны загрузчика она должна иметь какой-нибудь атрибут типа "no init", иначе при старте будет затерта нулями.
|
|
|
|
|
Mar 9 2015, 09:55
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Golikov A. @ Mar 9 2015, 12:13)  ... 3. отлаживаете программу как обычно через жетаг с 0 адреса, а потом просто компилите и собираете для работы с адреса Н для бутлоадера. Для этого в кейле можно сделать несколько режимов компиляции и сборки Они и есть Target-ы. Недавно спрашивали, зачем они. А вот зачем. Лично мне из основной программы в загрузчик выходить не надо. У меня есть выключатель питания, так и попаду в сброс. Ах... флажок... Да, это можно использовать. Установил флажок, сбросился, дождался прошивки, прошился, сбросил флажок. А если не дождался, по таймауту время отсчитал, сбросил флажок, ушел в основную программу. Размещу флажок в Backup RAM, она у меня от батарейки питается. Тогда и сброс можно делать, как хочешь.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|