|
|
 |
Ответов
|
Mar 24 2008, 12:50
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 3-02-08
Пользователь №: 34 700

|
Цитата(gte @ Mar 24 2008, 14:44)  Решение оказалось весьма простым. Нельзя вставлять определение такого массива в тело main. Как только я вынес определение из main в начало файла, все стало на свои места. скорее всего его надо было пометить как static так как любые массивы обьявленные без статик внутри ф-и располаются *исключительно* в стеке а ты хотел во флеш.
Сообщение отредактировал cvv - Mar 24 2008, 12:51
|
|
|
|
|
Mar 25 2008, 18:43
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(Сергей Борщ @ Mar 24 2008, 19:35)  Тяжело телепатировать после выходных у тещи. Выложите минимальный исходник, в котором возникает предупреждение. Код #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h>
const uint16_t table_v[] PROGMEM = {0xAAAA,0xAAAA,0x0000,0xAAAA,0x0000,0xAAAA,0x0000,0xAAAA,0x0000,0xAAAA,0x0000,0x AAAA,0x0000,0xAAAA,0x0000,0x0000};
int main (void) { //const uint16_t table_v[] PROGMEM = {0xAAAA,0xAAAA,0x0000,0xAAAA,0x0000,0xAAAA,0x0000,0xAAAA,0x0000,0xAAAA,0x0000,0x AAAA,0x0000,0xAAAA,0x0000,0x0000}; const unsigned int *data = table_v; const unsigned int *dat_car;
while (0) { dat_car = data; } } В main пробовал разные варианты, не проходило, вынес работает. Цитата(gte @ Mar 24 2008, 15:44)  Может кто дать комментарии к оставшимся мообщениям?
Converting to AVR COFF: um1.cof avr-objcopy --debugging --change-section-address .data--и т.д. Warning: no "data" section found in output file Warning: file C:/WINDOWS/TEMP/cciw0ld7.s not found in symbol table, ignoring ------------ пропадают если выйти и снова запустить VMLAB.
|
|
|
|
|
Mar 25 2008, 22:38
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Переменные, объявленные вами внутри функции (автоматические переменные), размещаются на стеке. Вы же пытаетесь заставить компилятор разместить переменную во флеш. Но это нонсенс - она не может быть одновременно и на стеке и во флеше. Если вы хотите, чтобы переменная была во флеше и ее область видимости была ограничена функцией, то объявлять эту переменную внутри функции надо с атрибутом static: Код int main (void) { static const uint16_t table_v[] PROGMEM = Цитата(gte @ Mar 25 2008, 20:43)  Код const unsigned int *data = table_v; const unsigned int *dat_car;
while (0) { dat_car = data; } } Здесь вы объявили указатель на int в ОЗУ. К большому сожалению, avr-gcc не отслеживает смешивание обычных указателей и указателей на флеш, хотя фактически это разные указатели  Т.е. то, что вы написали, avr-gcc проглотит, но не забудьте потом данные по этому указателю доставать при помщи pgm_read_xxx, а не *data. Лучше такие указатели сразу объявлять как const unsigned int PROGMEM *dat_car; - вам самому потом будет легче читать программу. А когда avr-gcc научится отличать указатели на флеш от указателей на ОЗУ - не придется править старые исходники.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
cvv Портирование кода для AVR с IAR под GCC Feb 3 2008, 11:17 Сергей Борщ Цитата(cvv @ Feb 3 2008, 13:17) Такое впе... Feb 3 2008, 11:27 cvv Цитата(Сергей Борщ @ Feb 3 2008, 13:27) В... Feb 3 2008, 11:43  Сергей Борщ Цитата(cvv @ Feb 3 2008, 13:43) ключевые ... Feb 3 2008, 13:32  mdmitry Цитата(cvv @ Feb 3 2008, 14:43) кстати по... Feb 3 2008, 21:38 733259 ЦитатаПо поиску cdk4avr ссылки на середину 2007 г,... Feb 4 2008, 06:29 cvv Цитата(733259 @ Feb 4 2008, 08:29) В посл... Feb 4 2008, 08:31 733259 Цитатаа вообшето я поначалу собирался сам скомпили... Feb 4 2008, 10:29 cvv Цитата(733259 @ Feb 4 2008, 12:29) Может ... Feb 4 2008, 10:45 cvv * Главная проблема была в кривизне прошивки - она... Feb 4 2008, 14:45 gte Надо разместить таблицу с двухбайтными значениями ... Mar 24 2008, 08:21 ReAl Цитата(gte @ Mar 24 2008, 10:21) Значения... Mar 24 2008, 08:28 MrYuran У меня была проблема при переходе с ИАР на MSPGCC ... Mar 24 2008, 08:38 gte На конструкцию
const uint16_t table_v[] PROGMEM = ... Mar 24 2008, 09:09 xelax подключи
#include <avr/pgmspace.h>
Должно ... Mar 24 2008, 10:03 gte Все стоит в начале файла
#include <avr/io.h... Mar 24 2008, 10:40   mdmitry Цитата(gte @ Mar 24 2008, 18:46) Попробов... Mar 24 2008, 17:28 gte Увы, я пробовал разные варианты объявления, в том ... Mar 26 2008, 05:55 Сергей Борщ Цитата(gte @ Mar 26 2008, 07:55) Увы, я п... Mar 26 2008, 10:40 gte Я работал из VMLAB.
При компиляции моего примера и... Mar 26 2008, 16:39 cvv Цитата(gte @ Mar 26 2008, 18:39) Repeated... Mar 27 2008, 05:45 gte Repeated variable name table_v within block. Renam... Mar 27 2008, 06:34 AHTOXA Цитата(gte @ Mar 27 2008, 11:34) Repeated... Mar 27 2008, 20:15 gte Да нет, я сразу же вынес, откомпилил и зашил в кон... Mar 27 2008, 20:41 gte В следующей программе переношу код работы с АЦП.
В... Mar 29 2008, 09:29 Сергей Борщ Цитата(gte @ Mar 29 2008, 11:29) В следую... Mar 29 2008, 10:14 gte Так я обнаружил в AVRStudio4. В общем, когда отлаж... Mar 29 2008, 10:42 Сергей Борщ Для "дружбы" с AVRStudio естественным яв... Mar 29 2008, 16:39 gte Спасибо, подключил библиотеку результат положитель... Mar 29 2008, 22:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|