Проверил на коротком примере - if-else-if дает более предсказуемый результат, конечно. И progmem чуток поменее занимает. На досуге попробую замастрячить в реальной функции - даст ли это существенный выигрыш...
Попробовал. Переход с 32-х шт. case на if-else-if в progmem высвободил 46 байт. Не так много, но порой, бывает, что именно пары десятков байт и не хватает . Красота switch-а, правда, утеряна...
нет. побочный эффект операции сравнения.
а можно какнибуть описать указатель на PROGMEM? чтото типа
const PROGMEM char *
и чтоб канпилятор знал, что чтить надо из флэша?
Можно-то можно, только компилятор не вставит сам код для их вытаскивания из прогмема.
Кстати, почитайте статью, может найдёте что интересное - http://www.github.com/abcminiuser/avr-tutorials/blob/master/Progmem/Output/Progmem.pdf?raw=true
Познавательная статья, спасибо большое. Про printf точно не знал.
Проверил на коротком примере - if-else-if дает более предсказуемый результат, конечно. И progmem чуток поменее занимает. На досуге попробую замастрячить в реальной функции - даст ли это существенный выигрыш...
Попробовал. Переход с 32-х шт. case на if-else-if в progmem высвободил 46 байт. Не так много, но порой, бывает, что именно пары десятков байт и не хватает . Красота switch-а, правда, утеряна...
Можно-то можно, только компилятор не вставит сам код для их вытаскивания из прогмема.
А если перегрузку операторов доступа по указателю сделать? Не уверен что удастся отличать указатель PROGMEM от не PROGMEM.