artemkad 88 31 января, 2019 Опубликовано 31 января, 2019 · Жалоба 13 hours ago, haker_fox said: Скоростью записи? Износом флеша? В основном временем записи. 13 hours ago, adnega said: Вовсе не единственное: Единственное вменяемое. Если массив хоть чем нибудь инициализирую в программе там появляются нули еще до попадания линкеру. Если без инициализации, там и так 0xFF. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 31 января, 2019 Опубликовано 31 января, 2019 · Жалоба 37 минут назад, artemkad сказал: Если массив хоть чем нибудь инициализирую в программе там появляются нули еще до попадания линкеру. Если без инициализации, там и так 0xFF. Если массив во flash, и вы его не инициализируете, то там будет 0xFF?! Или вы указываете специальный атрибут, мол, не инициализировать? Под инициализацией понимается использование оператора присваивания (=) или что-то еще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 31 января, 2019 Опубликовано 31 января, 2019 · Жалоба https://godbolt.org/z/5ssdmd #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)}; произвольного размера циклы тоже устроить можно через макросы, но я, пожалуй, не буду, и так жутьнах красиво. а в вывод препроцессора вообще лучше не заглядывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladivolt 0 1 февраля, 2019 Опубликовано 1 февраля, 2019 · Жалоба Смотрите, что в стандарте 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, получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться