структуру во FLash
структуру во FLash
Помогите "загнать" структуру во 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;
}
}
#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
Интересно, а как Вы собираетесь менять в ней данные, во время программы, если она находится во flsh'е ?
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: структуру во FLash
в теме про авр был от меня подобный вопрос. ищи поиском.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Re: структуру во FLash
Считывать с помощью макросов. В коде я конечно ошибку допустил надо было:Аlex писал(а):Интересно, а как Вы собираетесь менять в ней данные, во время программы, если она находится во flsh'е ?
//макрос для чтения флэш памяти
#define prb(data) pgm_read_byte(&(data))
chTemp = prb(chTimer_1.on);
Но не столь важно. Компилятор размещает структуру в ОЗУ.
Re: структуру во FLash
Не нашёл поиском.pcb писал(а):в теме про авр был от меня подобный вопрос. ищи поиском.
- Реклама
- blackx
- Говорящий с текстолитом
- Сообщения: 1518
- Зарегистрирован: Пт дек 28, 2012 21:56:46
- Откуда: St. Petersburg
Re: структуру во FLash
Попробуйте так
GCC случайно не выдает warning на объявление структуры?
Код: Выделить всё
typedef struct PROGMEM { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!
int main(void)
{
unsigned char chTemp = 1;
Sobitia chTimer_1 = {2, 2}; // !!!
// ...
}
only pure true norwegian blackx 
Re: структуру во FLash
К сожалению не получилось.blackx писал(а):Попробуйте такGCC случайно не выдает warning на объявление структуры?Код: Выделить всё
typedef struct PROGMEM { // !!! unsigned char on; unsigned char off; } Sobitia ; // !!! int main(void) { unsigned char chTemp = 1; Sobitia chTimer_1 = {2, 2}; // !!! // ... }
Компилятор на структуру не ругается.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: структуру во FLash
через typedef вы создаете тип переменной, а не указываете ее размещение.
typedef struct { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!
int main(void)
{
unsigned char chTemp = 1;
PROGMEM Sobitia chTimer_1 = {2, 2};
typedef struct { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!
int main(void)
{
unsigned char chTemp = 1;
PROGMEM Sobitia chTimer_1 = {2, 2};
Re: структуру во FLash
Ну ни в какую не хочет работать. Я уже колдовал с этим PROGMEM. И так делалurry писал(а):через typedef вы создаете тип переменной, а не указываете ее размещение.
typedef struct { // !!!
unsigned char on;
unsigned char off;
} Sobitia ; // !!!
int main(void)
{
unsigned char chTemp = 1;
PROGMEM Sobitia chTimer_1 = {2, 2};
Sobitia chTimer_1 PROGMEM = {2, 2};
Вообще ошибку выдаёт.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: структуру во FLash
убери эту хрень из мейна вверх
typedef struct { // !!!
unsigned char on;
unsigned char off;
}Sobitia; // !!!
const PROGMEM Sobitia chTimer = {2, 2};
Компилятор визжит из-за этого
typedef struct { // !!!
unsigned char on;
unsigned char off;
}Sobitia; // !!!
const PROGMEM Sobitia chTimer = {2, 2};
Компилятор визжит из-за этого
Re: структуру во FLash
Всё, заработало. Большое спасибо за помощь!urry писал(а):убери эту хрень из мейна вверх
typedef struct { // !!!
unsigned char on;
unsigned char off;
}Sobitia; // !!!
const PROGMEM Sobitia chTimer = {2, 2};
Компилятор визжит из-за этого
Re: структуру во FLash
О, расскажите подробнее про структуры во flash, их действительно нельзя использовать в программе? (Просто ни разу с ними в AVR не работал) какие есть ограничения, как их использовать?
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: структуру во FLash
Никто не запрещает размещать структуры в памяти программ - просто их область применения крайне ограничена. Ну, первое, конечно - это менюшки - смысл забивать оперативку строками и рисунками - а второе - это копирование дефолтных значений при старте в структуру в оперативке. Больше и не придумаю...
Re: структуру во FLash
Почему нельзя? Используйте, но только для чтенияих действительно нельзя использовать в программе?
Re: структуру во FLash
Вот это "для чтения" меня и смущает. Т.е объявляем структуру, загоняем её скажем в массив и его заранее инициализируем, а потом в main просто бегаем по этому массиву и берём из него структуру и используем, так что-ли?но только для чтения
Re: структуру во FLash
Именно так, но только считывая данные. Т.е. как бы неизменяемый массив.xterro писал(а):Вот это "для чтения" меня и смущает. Т.е объявляем структуру, загоняем её скажем в массив и его заранее инициализируем, а потом в main просто бегаем по этому массиву и берём из него структуру и используем, так что-ли?но только для чтения
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: структуру во FLash
бегать по массиву нужно в спортивных трусах.
Здесь есть пример, как это делать правильно
http://www.avrfreaks.net/modules/Freaks ... roMenu.zip
Здесь есть пример, как это делать правильно
http://www.avrfreaks.net/modules/Freaks ... roMenu.zip
Re: структуру во FLash
Благодарствую 


