Jump to content

    

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

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
47 minutes ago, jcxz said:

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

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

Спасибо, jcxz.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
5 hours ago, _lexa_ said:

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

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

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
16 минут назад, _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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now