Jump to content

    
_lexa_

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

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites
Только что, jcxz сказал:

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

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

Share this post


Link to post
Share on other sites
10 minutes ago, haker_fox said:

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

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

 

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

Share this post


Link to post
Share on other sites
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" назначить заполнение произвольной области флешь произвольным значением.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
23 minutes ago, haker_fox said:

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

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

1 hour ago, VladislavS said:

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

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

Share this post


Link to post
Share on other sites
4 minutes ago, _lexa_ said:

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

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

Share this post


Link to post
Share on other sites
13 минут назад, _lexa_ сказал:

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

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

Share this post


Link to post
Share on other sites
Just now, jcxz said:

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

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

Share this post


Link to post
Share on other sites
14 минут назад, _lexa_ сказал:

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

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

Share this post


Link to post
Share on other sites
4 minutes ago, haker_fox said:

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

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

Share this post


Link to post
Share on other sites
6 минут назад, haker_fox сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.