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

Как заставить инициализировать по-умолчанию не нулем?

13 hours ago, haker_fox said:

Скоростью записи? Износом флеша?

В основном временем записи. 

13 hours ago, adnega said:

Вовсе не единственное:

Единственное вменяемое. Если массив хоть чем нибудь инициализирую в программе там появляются нули еще до попадания линкеру. Если без инициализации, там и так 0xFF.

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


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

37 минут назад, artemkad сказал:

Если массив хоть чем нибудь инициализирую в программе там появляются нули еще до попадания линкеру. Если без инициализации, там и так 0xFF.

Если массив во flash, и вы его не инициализируете, то там будет 0xFF?!

Или вы указываете специальный атрибут, мол, не инициализировать?

Под инициализацией понимается использование оператора присваивания (=) или что-то еще?

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


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

#define getChr(str,idx) (idx < (sizeof(str)/sizeof(*str))?str[idx]:0xFF)

#define X1(str,n) getChr(str,n)
#define X2(str,n) X1(str,n), X1(str,n+1)
#define X4(str,n) X2(str,n), X2(str,n+2)
#define X8(str,n) X4(str,n), X4(str,n+4)
#define X16(str,n) X8(str,n), X8(str,n+8)
#define X32(str,n) X16(str,n), X16(str,n+16)
#define X64(str,n) X32(str,n), X32(str,n+32)
#define X128(str,n) X64(str,n), X64(str,n+64)
#define X256(str,n) X128(str,n), X128(str,n+128)
#define X512(str,n) X256(str,n), X256(str,n+256)
#define X1024(str,n) X512(str,n), X512(str,n+512)
                                                                         
__flash uint8_t hello_world_buf[1024] = {X1024("hello world",0)};

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

а в вывод препроцессора вообще лучше не заглядывать.

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


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

Смотрите, что в стандарте C пишут:

Цитата

The initialization shall occur in initializer list order, each initializer provided for a
particular subobject overriding any previously listed initializer for the same subobject

то есть сначала укажем для всего диапазона массива заполнитель, затем для нужных полей желаемые значения.

Проверил для avr-gcc, получилось.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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