Пишу простейшую програмку. Хочу запихать небольшой массив во флэш, и читать оттуда данные без записи всего массива в ОЗУ.
Мои действия? 1. Присоединяю библиотеку avr/pgmspace.h 2. Обьявляю массив: uint16_t left[] PROGMEM = {60,0x93,45,70}; 3. В программе читаю из массива: REQUIRED_LEFT=pgm_read_word(&left[1]); Переменная, куда читаю, точно такого же типа, что и в массиве. Смотрю в файл main.lst
254:main.c **** REQUIRED_LEFT=pgm_read_word(&left[1]); 905 .LM96: 906 03b0 80E0 /* #NOAPP */ 907 03b2 90E0 mov r18,r26 908 03b4 FC01 subi r18,lo8(-(1)) 909 sts point.1941,r18 911 03b8 5491 .LM97: 912 cpi r18,lo8(4) 913 brlo .L50 915 03ba 5093 0000 .LM98: 916 03be 4093 0000 sts point.1941,__zero_reg__
В файле нет инструкции LPM.
4. Убираем закорючку: REQUIRED_LEFT=pgm_read_word(left[1]);
Тогда это превращается в
254:main.c **** REQUIRED_LEFT=pgm_read_word(left[1]); 905 .LM96: 906 03b0 E3E9 /* #NOAPP */ 907 03b2 F0E0 mov r18,r26 908 subi r18,lo8(-(1)) 909 03b4 8591 sts point.1941,r18 911 .LM97: 912 cpi r18,lo8(4) 913 brlo .L50 915 03bc 8093 0000 .LM98:
Инструкция LPM в коде так и не появилась.
|