Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PROGMEM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
smk
Вот так объявлен массив:
Код
unsigned char brightness[256] PROGMEM =
{0,0,1,1,1,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,10,10,10,11,11,12,12,
12,12,13,13,13,13,13,14,14,14,14,15,15,15,16,16,16,16,17,17,17,18,18,
18,19,19,19,19,20,20,20,21,21,21,22,22,22,22,23,23,23,24,24,24,25,25,
25,25,26,26,26,27,27,27,28,28,28,28,29,29,30,30,31,31,32,32,33,34,34,
35,35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47,48,48,49,50,51,52,
52,53,54,55,56,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,
75,76,77,78,79,80,82,83,84,86,87,88,89,91,92,94,95,97,99,101,102,104,
106,107,109,111,113,114,116,118,120,122,123,125,127,129,131,134,136,
138,140,142,145,147,149,151,153,156,158,160,162,164,167,169,171,173,
175,177,179,182,184,186,188,190,192,193,195,197,198,200,202,203,205,
206,208,210,211,213,215,217,218,220,222,223,225,226,228,229,231,232,
233,235,236,237,239,240,241,242,243,244,245,246,247,249,250,251,252,
253,254,255};


Вот так я пытаюсь читать из массива и сравнивать чтоб сформировать ШИМ:
Код
if(pwm>brightness[pwm1]){pb &= ~(1<<5);}
else {pb |= (1<<5);}


Ничего не получается поскольку значение brightness[pwm1] всегда 0. При этом сама переменная изменяет значения. Если использовать вместо pwm1 численное значение, то brightness[pwm1] приобретает верное значение. Как сделать так, чтоб значения из массива читались верно с использованием pwm1 ? Спасибо.
Mareng
Покажи весь листинг. Что такое pwm и pwm1?
demiurg_spb
Доступ к PROGMEM константам осуществляется через функции.
Пример чтения байта:
Код
uint8_t br = pgm_read_byte(&brightness[x]);

А вообще читайте доку на avrlibc:
http://www.nongnu.org/avr-libc

Начните с этого:
http://www.nongnu.org/avr-libc/user-manual/FAQ.html

Закрепите этим:
http://www.nongnu.org/avr-libc/user-manual...9c285ed4c630229
smk
Код
uint8_t br = pgm_read_byte(&brightness[x]);

Спасибо, получилось. Доку читал, но уже мозг плавится от жары. Раньше как-то проще было с этим.
demiurg_spb
Цитата(smk @ Jun 13 2010, 17:00) *
уже мозг плавится от жары.
Тепло - это хорошо! У нас ветрюган, дожди и +16...
С ребёнком в коляске никак не выйти на прогулу...

Цитата(smk @ Jun 13 2010, 17:00) *
Раньше как-то проще было с этим.
В avr-gcc всегда так было и никак иначе.
zhevak
Цитата(smk @ Jun 13 2010, 17:12) *
Вот так объявлен массив:
...
Вот так я пытаюсь читать из массива
...
Ничего не получается
...

Вот так чудесно решается Ваша задача http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
Если с английским не очень, то посмотрите примеры. Почти Ваш случай!
smk
Цитата
Почти Ваш случай!
Да, спасибо. Кстати, а сколько тактов нужно чтобы присвоить переменной значение элемента массива из FLESH?
demiurg_spb
Цитата(smk @ Jun 14 2010, 20:59) *
Да, спасибо. Кстати, а сколько тактов нужно чтобы присвоить переменной значение элемента массива из FLESH?


www.atmel.com/atmel/acrobat/doc0856.pdf

3 такта.
Соизмеримо с RAM (1-2 такта).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.