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

Инициализация констант по умолчанию

4 часа назад, ViKo сказал:

Да-да, подтверждаю личным опытом, 0xFFFF'FFFF смотрится намного приятнее 0xffffffff. 

Приятнее смотрится ~0. Потому что не надо считать сколько там штук 'F'.

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


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

Только что, jcxz сказал:

Приятнее смотрится ~0. Потому что не надо считать сколько там штук 'F'.

Это частный случай.

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


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

10 minutes ago, haker_fox said:

"Стёрта" и "не инициализировалась" - это вещи ортогональные.

Я исхожу из того, что перед записью во флэш контроллера эта область должна быть стерта. Может для каких-то контроллеров это не так, я не сталкивался с МК (это тоже ARM? Он есть в IAR EWARM 8.3?). Не могу угадать контроллер по двум буквам, если можно, напишите подробнее тип и производителя.

 

Похоже не правильно обрисовал суть вопроса. В моем случае константы в ROM должны быть стерты, чтобы из программы потом в них однажды что-то записать, а потом прочитать именно то что записал, что в итоге мне требуется. При этом из стертых областей читаются значения 0xFF.

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


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

21 минуту назад, _lexa_ сказал:

Похоже не правильно обрисовал суть вопроса. В моем случае константы в ROM должны быть стерты, чтобы из программы потом в них однажды что-то записать, а потом прочитать именно то что записал, что в итоге мне требуется. При этом из стертых областей читаются значения 0xFF.

Если константу объявить:

__no_init char const tzzz[256] @ ".tzzz";

а в .icf-файле линкёра прописать для неё целевое размещение подобно:

define region FLASHU_regionA = mem:[from 0x0C000000 to 0x0C0FFFFF];
...
do not initialize  {section .tzzz};
...
place in FLASHU_regionA {section .tzzz};

то компиляция проходит нормально, место под tzzz резервируется, но ничем не заполняется.

И, при желании, можно в "Options\Linker\Checksum" назначить заполнение произвольной области флешь произвольным значением.

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


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

Сдаётся мне, тут EEPROM изобретают? Линкером создать секцию в памяти и через указатель с ней работать. Ну или просто отрезать кусок памяти из-под власти линкера и так же через указатель. Вот это будет по стандарту. 

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


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

5 hours ago, _lexa_ said:

я не сталкивался с МК

МК - это общепринятое, по крайней мере тут, сокращение от микроконтроллер.

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


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

23 minutes ago, haker_fox said:

МК - это общепринятое, по крайней мере тут, сокращение от микроконтроллер.

Ясн. Я уж решил, что это какой-то тип микроконтроллера, у которого при стирании память заполняется нулями (мало ли кто, чего изобрел). Хоть бы намекнули, что это фантазия.

1 hour ago, VladislavS said:

Линкером создать секцию в памяти и через указатель с ней работать. Ну или просто отрезать кусок памяти из-под власти линкера и так же через указатель. Вот это будет по стандарту

Тоже, конечно, вариант, но не охота на каждую константу задавать статический адрес. Если констант будет много, а еще массивы. Лишняя заморочка. Вариант jcxz мне подходит больше.

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


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

4 minutes ago, _lexa_ said:

Хоть бы намекнули, что это фантазия.

Ну если бы вы знали, что это означает МК, вы бы всё поняли. Но это и не важно, впрочем. Я вам указал одну из основных проблем - привязку к технологии памяти. Я бы так делать не стал. Но это ваше дело.

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


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

13 минут назад, _lexa_ сказал:

Ясн. Я уж решил, что это какой-то тип микроконтроллера, у которого при стирании память заполняется нулями (мало ли кто, чего изобрел). Хоть бы намекнули, что это фантазия.

Такие тоже есть. Не у всех стёртое состояние = лог."1". Какая разница сколько там инверторов на пути от ячейки флеша.

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


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

Just now, jcxz said:

Такие тоже есть. Не у всех стёртое состояние = лог."1".

О как! А это уже для меня новость. Хотя и вполне очевидная, мало-ли какие технологии используются)

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


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

14 минут назад, _lexa_ сказал:

Если констант будет много, а еще массивы.

...то поместить их внутрь структуры, которую и разместить в нужном диапазоне адресов.

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


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

16 минут назад, _lexa_ сказал:

каждую константу задавать статический адрес.

Структура.  А её адрес у линкера взять.

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


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

4 minutes ago, haker_fox said:

Ну если бы вы знали, что это означает МК, вы бы всё поняли.

Смотря в каком контексте эти общепринятые сокращения употребляются. Да и привязка к технологи здесь наполовину. Вряд ли станут изобретать EEPROM, которая при стирании обнуляется, потом чтобы в нее правильно записать нужно установить ее в единицы и после этого писать. А если после обнуления в нее сразу можно писать, меня этот вариант тоже устроит. Да и не против я привязки технологии, если это упростит жизнь в итоге.

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


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

6 минут назад, haker_fox сказал:

О как! А это уже для меня новость.

Из тех, что сейчас у всех на слуху - STM32Lxxx. Были еще какие-то, сейчас уже не вспомню.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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