реклама на сайте
подробности

 
 
> Как в "незанятой" области FLASH-памяти контроллера сделать определенные значение
RiseOfDeath
сообщение Oct 19 2015, 13:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 2-10-13
Пользователь №: 78 579



Добрый день.

Имеется:
Некий контроллер STM32F4XX (применительно к задаче не важно какой именно)
IDE Keil uVision
Программатор J-Link (мне кажется он тут ни к чему, но всеже)
Некоторая программа.
Некоторый набор двоичных данных.

Сосбтвенно что я хочу:
Я использую встроенную нанду для хранения настроек и хочу чтобы при программировании контроллера в него сразу, вместе с программой, зашивались настройки по-умолчанию. (читать и писать программа умеет, но надо чтобы вместо стандартных 0xff в нужной области памяти "изначально" были какие-то определенные значения)
Я предполагаю что мне надо как-то получить на выходе из программы такой hex, чтобы после программирования им контроллера, помимо собственно программы, в жестко заданной области памяти, был тот самый "набор двоичных данных".

Есть мысли как это сделать?

Сообщение отредактировал RiseOfDeath - Oct 19 2015, 13:02
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Oct 27 2015, 18:21
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Да и перезагрузка не спасет. gcc очень хорошо умеет подставлять значения констант из константных переменных (и даже из полей структур) прямо в код. И сколько потом ни перегружай программу, некторые части ее могут продолжать рабоать с теми значениями, которые были в момент компиляции. Мы ведь хотели быструю и маленькую программу? Компилятор пошел нам навстречу.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Oct 28 2015, 10:12
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Сергей Борщ @ Oct 27 2015, 19:21) *
Да и перезагрузка не спасет. gcc очень хорошо умеет подставлять значения констант из константных переменных (и даже из полей структур) прямо в код.

Подтверждаю. И не только gcc, но и armcc KEIL. Ушло, когда такие изменяемые конфигурационные константы собрались в одну кучу в секции. Видимо, поэтому я не стал заморачиваться с volatile, поскольку свод в секцию (в одну область памяти только с данными, которую можно переписывать) изменяемых констант - крутая фразочка вышла cool.gif - с помощью присвоения атрибутов просто неизбежен и необходим при решении поставленно задачи и пресёк одновременно inline-стремление компилятора. Убедил меня scifi, что для строгости, ясности и безопасности стОит объявлять volatile.

ПЫ.СЫ.:
1. Для теста добавил для одной такой "переменной константы" в проекте volatile. Собрал. Загрузил. Вылетел в hard fault из инициализации еще перед main.
2. Есть атрибут __attribute__((noinline)), который предотвращает использование значения константной переменной непосредственно как операнд инструкции ("прямо в коде" в терминах Сергей Борщ). Мой макрос, который размещает константные настройки, выглядит так:
Код
#define ATS(s) __attribute__((section(s), noinline, used))

Так что "забъю" я пока на volatile.

Сообщение отредактировал KnightIgor - Oct 28 2015, 15:55
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- RiseOfDeath   Как в "незанятой" области FLASH-памяти контроллера сделать определенные значение   Oct 19 2015, 13:00
- - ЯadiatoR   Если взглянуть на стартап.s то можно увидеть запис...   Oct 19 2015, 13:08
|- - zltigo   QUOTE (ЯadiatoR @ Oct 19 2015, 16:08) Поп...   Oct 19 2015, 13:13
- - scifi   Цитата(RiseOfDeath @ Oct 19 2015, 16:00) ...   Oct 19 2015, 13:24
|- - RiseOfDeath   Цитата(scifi @ Oct 19 2015, 16:24) Очень ...   Oct 19 2015, 13:37
- - ЯadiatoR   загуглил, проверил: int var __at(0x80001000) = 20;...   Oct 19 2015, 13:24
|- - zltigo   QUOTE (ЯadiatoR @ Oct 19 2015, 16:24) заг...   Oct 19 2015, 13:32
|- - ЯadiatoR   Цитата(zltigo @ Oct 19 2015, 16:32) квали...   Oct 19 2015, 13:47
|- - zltigo   QUOTE (ЯadiatoR @ Oct 19 2015, 16:47) а г...   Oct 19 2015, 13:55
|- - ЯadiatoR   Цитата(zltigo @ Oct 19 2015, 16:55) Дивны...   Oct 19 2015, 13:56
- - RiseOfDeath   Цитата(ЯadiatoR @ Oct 19 2015, 16:08) Есл...   Oct 19 2015, 13:25
- - smalcom   в скрипт линковщика добавляете свою секцию Цитата...   Oct 19 2015, 13:38
- - RiseOfDeath   Благодарю всех за помощь. Я решил, что лучше буду...   Oct 21 2015, 08:42
- - Golikov A.   Хорошим тоном является проверять 1. пустоту секто...   Oct 21 2015, 09:12
- - stas00n   Цитата(RiseOfDeath @ Oct 19 2015, 15:00) ...   Oct 21 2015, 10:23
- - RiseOfDeath   Цитата(Golikov A. @ Oct 21 2015, 12:12) Х...   Oct 23 2015, 11:35
- - Sanya_kv   В Keil пользуюсь данным способом: const char имя_п...   Oct 27 2015, 05:34
- - KnightIgor   Цитата(RiseOfDeath @ Oct 19 2015, 14:00) ...   Oct 27 2015, 14:20
|- - scifi   Цитата(KnightIgor @ Oct 27 2015, 17:20) 1...   Oct 27 2015, 14:33
|- - KnightIgor   Цитата(scifi @ Oct 27 2015, 15:33) Тогда ...   Oct 27 2015, 15:15
|- - zltigo   QUOTE (KnightIgor @ Oct 27 2015, 18:15) М...   Oct 27 2015, 17:48


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 19:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016