структуру во FLash

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

структуру во FLash

Сообщение Akula »

Помогите "загнать" структуру во Flash память МК (Mega 16). Пробую в студии 6.1. Компилятор никак не хочет инициализировать структуру во Flash. На CodeVision подобной проблемы не было.

#include <avr/io.h>
#include <avr/pgmspace.h>

PROGMEM struct Sobitia {
unsigned char on;
unsigned char off;

};

int main(void)
{
unsigned char chTemp = 1;

struct Sobitia chTimer_1 = {2, 2};

while(1)
{
asm("nop"); //TODO:: Please write your application code

chTemp = chTimer_1.on;
}
}
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: структуру во FLash

Сообщение Аlex »

Интересно, а как Вы собираетесь менять в ней данные, во время программы, если она находится во flsh'е ?
Реклама
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: структуру во FLash

Сообщение pcb »

в теме про авр был от меня подобный вопрос. ищи поиском.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

Re: структуру во FLash

Сообщение Akula »

Аlex писал(а):Интересно, а как Вы собираетесь менять в ней данные, во время программы, если она находится во flsh'е ?
Считывать с помощью макросов. В коде я конечно ошибку допустил надо было:

//макрос для чтения флэш памяти
#define prb(data) pgm_read_byte(&(data))

chTemp = prb(chTimer_1.on);

Но не столь важно. Компилятор размещает структуру в ОЗУ.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

Re: структуру во FLash

Сообщение Akula »

pcb писал(а):в теме про авр был от меня подобный вопрос. ищи поиском.
Не нашёл поиском.
Реклама
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Re: структуру во FLash

Сообщение blackx »

Попробуйте так

Код: Выделить всё

typedef struct PROGMEM { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!

int main(void)
{
unsigned char chTemp = 1;	

Sobitia chTimer_1 = {2, 2}; // !!!

// ...	
}
GCC случайно не выдает warning на объявление структуры?
Изображение only pure true norwegian blackx Изображение
Реклама
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

Re: структуру во FLash

Сообщение Akula »

blackx писал(а):Попробуйте так

Код: Выделить всё

typedef struct PROGMEM { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!

int main(void)
{
unsigned char chTemp = 1;	

Sobitia chTimer_1 = {2, 2}; // !!!

// ...	
}
GCC случайно не выдает warning на объявление структуры?
К сожалению не получилось.
Компилятор на структуру не ругается.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: структуру во FLash

Сообщение urry »

через typedef вы создаете тип переменной, а не указываете ее размещение.
typedef struct { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!

int main(void)
{
unsigned char chTemp = 1;

PROGMEM Sobitia chTimer_1 = {2, 2};
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

Re: структуру во FLash

Сообщение Akula »

urry писал(а):через typedef вы создаете тип переменной, а не указываете ее размещение.
typedef struct { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!

int main(void)
{
unsigned char chTemp = 1;

PROGMEM Sobitia chTimer_1 = {2, 2};
Ну ни в какую не хочет работать. Я уже колдовал с этим PROGMEM. И так делал

Sobitia chTimer_1 PROGMEM = {2, 2};

Вообще ошибку выдаёт.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: структуру во FLash

Сообщение urry »

убери эту хрень из мейна вверх

typedef struct { // !!!
unsigned char on;
unsigned char off;
}Sobitia; // !!!

const PROGMEM Sobitia chTimer = {2, 2};
Компилятор визжит из-за этого
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

Re: структуру во FLash

Сообщение Akula »

urry писал(а):убери эту хрень из мейна вверх

typedef struct { // !!!
unsigned char on;
unsigned char off;
}Sobitia; // !!!

const PROGMEM Sobitia chTimer = {2, 2};
Компилятор визжит из-за этого
Всё, заработало. Большое спасибо за помощь!
Аватара пользователя
xterro
Опытный кот
Сообщения: 873
Зарегистрирован: Чт апр 12, 2012 07:19:59
Откуда: Тюмень

Re: структуру во FLash

Сообщение xterro »

О, расскажите подробнее про структуры во flash, их действительно нельзя использовать в программе? (Просто ни разу с ними в AVR не работал) какие есть ограничения, как их использовать?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: структуру во FLash

Сообщение urry »

Никто не запрещает размещать структуры в памяти программ - просто их область применения крайне ограничена. Ну, первое, конечно - это менюшки - смысл забивать оперативку строками и рисунками - а второе - это копирование дефолтных значений при старте в структуру в оперативке. Больше и не придумаю...
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: структуру во FLash

Сообщение ploop »

их действительно нельзя использовать в программе?
Почему нельзя? Используйте, но только для чтения :)
Аватара пользователя
xterro
Опытный кот
Сообщения: 873
Зарегистрирован: Чт апр 12, 2012 07:19:59
Откуда: Тюмень

Re: структуру во FLash

Сообщение xterro »

но только для чтения
Вот это "для чтения" меня и смущает. Т.е объявляем структуру, загоняем её скажем в массив и его заранее инициализируем, а потом в main просто бегаем по этому массиву и берём из него структуру и используем, так что-ли? :dont_know:
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

Re: структуру во FLash

Сообщение Akula »

xterro писал(а):
но только для чтения
Вот это "для чтения" меня и смущает. Т.е объявляем структуру, загоняем её скажем в массив и его заранее инициализируем, а потом в main просто бегаем по этому массиву и берём из него структуру и используем, так что-ли? :dont_know:
Именно так, но только считывая данные. Т.е. как бы неизменяемый массив.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: структуру во FLash

Сообщение urry »

бегать по массиву нужно в спортивных трусах.
Здесь есть пример, как это делать правильно
http://www.avrfreaks.net/modules/Freaks ... roMenu.zip
Аватара пользователя
xterro
Опытный кот
Сообщения: 873
Зарегистрирован: Чт апр 12, 2012 07:19:59
Откуда: Тюмень

Re: структуру во FLash

Сообщение xterro »

Благодарствую :)
Ответить

Вернуться в «AVR»