Вс апр 23, 2017 17:08:08
Вс апр 23, 2017 17:39:44
Вс апр 23, 2017 18:04:03
Вс апр 23, 2017 20:35:37
нет, в WinAVR const не является необходимым (лично я PROGMEM всегда пишу на первом месте PROGMEM char mass[] = "str";). а вот в свежих версиях, как я выше советовал, для __flash необходимо и const указывать.Z_h_e писал(а):Кроме того, данные во флеш не могут быть переменными, только константа.
const unsigned char mass [2] PROGMEM =
{0,0};
Пн апр 24, 2017 07:30:03
Пн апр 24, 2017 07:38:04
я не совсем понял, о какой ситуации вы говорите? я пока что в своей практике ни разу ничего не дёргал при работе с FLASH... все время полагаюсь на компилятор и библиотеку... опыт у меня, разумеется, не слишком обширный... и с микроконтроллерами, у которых FLASH больше 64К работал совсем немножко... и тем более не писал бутлоадеров, которые что-то там в страницах FLASH переписывают...COKPOWEHEU писал(а):Можете привести пример обойтись __flash'ом без ручного дерганья регистров? Мне казалось, что использование специальных функций это не только лень разработчиков, но и сигнал пользователю что эта операция не так проста. В частности я не знаю что произойдет при перезаписи страницы, с которой программа исполняется в данный момент
Пн апр 24, 2017 16:34:42
PROGMEM const char var;
__flash const char var;
ТС-у надо не только читать из flash, но и писать туда. Отсюда и вопрос что будет с программой, меняющей собственную прошивку.я не совсем понял, о какой ситуации вы говорите?
Не сталкивался с таким, поэтому и интереснону а по поводу примера - вам ли он требуется?!
Пн апр 24, 2017 16:37:27
Пн апр 24, 2017 20:17:22
вы меня подозреваете в дезинформировании уважаемого сообщества?!COKPOWEHEU писал(а):Если упростили чтение из EEPROM, сумев обойтись без pgm_read_* - отлично. Впрочем, как и ожидалось, это не так.
const __flash char bytes[] = {1,2,3,4,5};
for(uint8_t i=0; i<5; i++)
PORTB = bytes[i];
Вт апр 25, 2017 00:03:27
Вт апр 25, 2017 05:35:51
Per default, any data including read-only data is located in RAM (the
generic address space) so that non-generic address spaces are needed to
locate read-only data in flash memory _and_ to generate the right
instructions to access this data without using (inline) assembler code.
'__flash'
The '__flash' qualifier locates data in the '.progmem.data'
section. Data is read using the 'LPM' instruction. Pointers to
this address space are 16 bits wide.
'__flash1'
'__flash2'
'__flash3'
'__flash4'
'__flash5'
These are 16-bit address spaces locating data in section
'.progmemN.data' where N refers to address space '__flashN'. The
compiler sets the 'RAMPZ' segment register appropriately before
reading data by means of the 'ELPM' instruction.
Вт апр 25, 2017 06:41:39
я тоже не вижу смысла собирать руками, тем более что у меня они не заточены под такую тонкую работуCOKPOWEHEU писал(а):Беглый поиск не дал результатов по gcc-avr выше 4.9, в репах (даже unstable) тоже самое. Собирать руками смысла не вижу.