Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/27: Рейтинг темы: голосов - 27, средняя оценка - 4.81
xtirro
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 491
#1

Использование PROGMEM, возникает ошибка (

19.10.2013, 20:37. Просмотров 4827. Ответов 6
Метки нет (Все метки)

Приветствую, решил поиграться с ШИМ и получить с помощью него на выходе синус, объявил таблицу:

Код
#include <avr/pgmsposi.h>

uint8_t sin_table[] PROGMEM = {
0x7F, 0x7C, 0x79, 0x76, 0x73, 0x6F, 0x6C, 0x69, 0x66, 0x63, 0x60, 0x5D, 0x5A, 0x57, 0x54, 0x51,
0x4E, 0x4C, 0x49, 0x46, 0x43, 0x40, 0x3E, 0x3B, 0x38, 0x36, 0x33, 0x31, 0x2E, 0x2C, 0x2A, 0x27,
0x25, 0x23, 0x21, 0x1F, 0x1D, 0x1B, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0x0F, 0x0E, 0x0C, 0x0B,
0x0A, 0x09, 0x07, 0x06, 0x05, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07, 0x09,
0x0A, 0x0B, 0x0C, 0x0E, 0x0F, 0x10, 0x12, 0x14, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23,
0x25, 0x27, 0x2A, 0x2C, 0x2E, 0x31, 0x33, 0x36, 0x38, 0x3B, 0x3E, 0x40, 0x43, 0x46, 0x49, 0x4C,
0x4E, 0x51, 0x54, 0x57, 0x5A, 0x5D, 0x60, 0x63, 0x66, 0x69, 0x6C, 0x6F, 0x73, 0x76, 0x79, 0x7C,
0x7F, 0x82, 0x85, 0x88, 0x8B, 0x8F, 0x92, 0x95, 0x98, 0x9B, 0x9E, 0xA1, 0xA4, 0xA7, 0xAA, 0xAD,
0xB0, 0xB2, 0xB5, 0xB8, 0xBB, 0xBE, 0xC0, 0xC3, 0xC6, 0xC8, 0xCB, 0xCD, 0xD0, 0xD2, 0xD4, 0xD7,
0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEA, 0xEC, 0xEE, 0xEF, 0xF0, 0xF2, 0xF3,
0xF4, 0xF5, 0xF7, 0xF8, 0xF9, 0xF9, 0xFA, 0xFB, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFD, 0xFD, 0xFD, 0xFC, 0xFC, 0xFB, 0xFA, 0xF9, 0xF9, 0xF8, 0xF7, 0xF5,
0xF4, 0xF3, 0xF2, 0xF0, 0xEF, 0xEE, 0xEC, 0xEA, 0xE9, 0xE7, 0xE5, 0xE3, 0xE1, 0xDF, 0xDD, 0xDB,
0xD9, 0xD7, 0xD4, 0xD2, 0xD0, 0xCD, 0xCB, 0xC8, 0xC6, 0xC3, 0xC0, 0xBE, 0xBB, 0xB8, 0xB5, 0xB2,
0xB0, 0xAD, 0xAA, 0xA7, 0xA4, 0xA1, 0x9E, 0x9B, 0x98, 0x95, 0x92, 0x8F, 0x8B, 0x88, 0x85, 0x82,
};
/* остальной код */
...
Проблема в том, что это вызывает ошибкупри компиляции:
Код
||=== PWM, Release ===|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|937|error: expected ) before src|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|938|error: expected ) before src|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|939|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|940|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|941|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|942|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|943|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|944|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|945|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|946|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|947|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|948|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|949|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|950|error: expected declaration specifiers or ... before uint_farptr_t|
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/avr/pgmsposi.h|951|error: expected declaration specifiers or ... before uint_farptr_t|
||=== Build fymished: 15 errors, 0 warnings (0 minutes, 0 seconds) ===|
Ругается конкретно на пару строчек в хидере pgmsposi.h
Код
extern size_t strlen_PF (uint_farptr_t src) __ATTR_CONST__; /* program memory cant change */
extern size_t strnlen_PF (uint_farptr_t src, size_t len) __ATTR_CONST__; /* program memory cant change */
Причём, если PROGMEM убрать, и #include <avr/pgmsposi.h> закоментировать, то ошибки не происходит. Ставил PROGMEM перед именем массива, результат аналогичный.
Что это может быть, куда копать? У меня мысль обновить avr toolchain
http://www.cyberforum.ru/savedimages/2013/10/19/ctcb9sbzvssgqneqezjmpfjp.gif

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 20:37
Ответы с готовыми решениями:

Ссылка на PROGMEM
Чет у меня тут усложнилась ситуация, я почему то не могу прочесть PROGMEM как...

тонкости PROGMEM в avr
чем отличается const unsykned int needtidestinations1 PROGMEM = {5,0,0,0,1};...

warnings при использовании progmem
собствено есть код... /* * t_flash.c * * Created on: 02.07.2016 * ...

Как обьявить массив в PROGMEM?
Есть такой вот код примерно #define symb_0 seg_a_MASK | seg_b_MASK |...

PROGMEM и массив указателей. Как считывать?
есть некая структура хранящая в себе константы различного рода. по сути...

6
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
19.10.2013, 21:47 #2
Вставил, скомпилировал, ошибок нет. Что-то где-то у вас не так.
Код
uint8_t sin_table[] PROGMEM =
{
0x7F, 0x7C, 0x79, 0x76, 0x73, 0x6F, 0x6C, 0x69, 0x66, 0x63, 0x60, 0x5D, 0x5A, 0x57, 0x54, 0x51,
0x4E, 0x4C, 0x49, 0x46, 0x43, 0x40, 0x3E, 0x3B, 0x38, 0x36, 0x33, 0x31, 0x2E, 0x2C, 0x2A, 0x27,
0x25, 0x23, 0x21, 0x1F, 0x1D, 0x1B, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0x0F, 0x0E, 0x0C, 0x0B,
0x0A, 0x09, 0x07, 0x06, 0x05, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07, 0x09,
0x0A, 0x0B, 0x0C, 0x0E, 0x0F, 0x10, 0x12, 0x14, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23,
0x25, 0x27, 0x2A, 0x2C, 0x2E, 0x31, 0x33, 0x36, 0x38, 0x3B, 0x3E, 0x40, 0x43, 0x46, 0x49, 0x4C,
0x4E, 0x51, 0x54, 0x57, 0x5A, 0x5D, 0x60, 0x63, 0x66, 0x69, 0x6C, 0x6F, 0x73, 0x76, 0x79, 0x7C,
0x7F, 0x82, 0x85, 0x88, 0x8B, 0x8F, 0x92, 0x95, 0x98, 0x9B, 0x9E, 0xA1, 0xA4, 0xA7, 0xAA, 0xAD,
0xB0, 0xB2, 0xB5, 0xB8, 0xBB, 0xBE, 0xC0, 0xC3, 0xC6, 0xC8, 0xCB, 0xCD, 0xD0, 0xD2, 0xD4, 0xD7,
0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEA, 0xEC, 0xEE, 0xEF, 0xF0, 0xF2, 0xF3,
0xF4, 0xF5, 0xF7, 0xF8, 0xF9, 0xF9, 0xFA, 0xFB, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFD, 0xFD, 0xFD, 0xFC, 0xFC, 0xFB, 0xFA, 0xF9, 0xF9, 0xF8, 0xF7, 0xF5,
0xF4, 0xF3, 0xF2, 0xF0, 0xEF, 0xEE, 0xEC, 0xEA, 0xE9, 0xE7, 0xE5, 0xE3, 0xE1, 0xDF, 0xDD, 0xDB,
0xD9, 0xD7, 0xD4, 0xD2, 0xD0, 0xCD, 0xCB, 0xC8, 0xC6, 0xC3, 0xC0, 0xBE, 0xBB, 0xB8, 0xB5, 0xB2,
0xB0, 0xAD, 0xAA, 0xA7, 0xA4, 0xA1, 0x9E, 0x9B, 0x98, 0x95, 0x92, 0x8F, 0x8B, 0x88, 0x85, 0x82,
};
0
xtirro
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 491
19.10.2013, 22:19 #3
Значит это у меня косяк в toolchain-е, спасибо, попробую другую версию, ибо тут похоже что компилятор не находит тип данных uint_farptr_t :)
0
drvtos
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
19.10.2013, 22:26 #4
Цитата Сообщение от xtirro
Значит это у меня косяк в toolchain-е,
Новые тулчейны любят другие объявления - не PROGMEM. Я писал о своих шишках при переходе на 6-ю студию, ЩА закушу и поищу.
0
xtirro
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 491
19.10.2013, 22:33 #5
Цитата Сообщение от drvtos
Цитата Сообщение от xtirro
Значит это у меня косяк в toolchain-е,
Новые тулчейны любят другие объявления - не PROGMEM. Я писал о своих шишках при переходе на 6-ю студию, ЩА закушу и поищу.
Спасибо, только я студию не использую, у меня Code::Blocks и дудка из консоли (надо будет в саму C::B её прикрутить, чтобы после сборки сразу заливать). Линуксы, они такие :))
0
drvtos
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
19.10.2013, 22:44 #6
Цитата Сообщение от xtirro
Спасибо, только я студию не использую
Да без разницы. Я и закусил, а не нашел, где же я на форуме рассказал свои переходы на более свежие компилятоы. КАРОЧИ, нашел у себя в ридми :)
Надо заменить PROGMEM на __attribute__((progmem)), а в начале строки впиндюрить const. Всьо...
0
xtirro
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 491
19.10.2013, 22:51 #7
Вообщем косяк в моём файле avr/pgmsposi.h, компилятор не находит определение типа uint_farptr_t, на что и ругается. Причём тут какая фишка получается, PROGMEM нужно использовать со "своими" функциями, а как их использовать, когда в файлике ошибка и компилятор на него ругается? Кстати, эти функции можно также использовать и с __attribute__((progmem)) ?
0
19.10.2013, 22:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 22:51

Работа с переменными, строками, структурами через PROGMEM
Здравствуйте уважаемые. Решил разобраться, как данные записывать и считывать в...

При выгрузке библиотеки(ДЛЛ) возникает возникает ошибка
Здравствуйте!! Ребята, подскажите, по такому вопросу написал код создания...

Ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске программы возникает ошибка
Я знаю точно, что ошибка в конструкторе с параметром. Компилятор не ругается,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru