реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Инициализация EEPROM в IAR EWAVR
garlands
сообщение Jun 1 2008, 22:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 15-04-08
Из: UA
Пользователь №: 36 798



собственно, в названии вопрос и отражен: как в EWAVR на этапе проекта инициализировать содержимое eeprom. Например, для mega16.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 2 2008, 00:12
Сообщение #2


Гуру
******

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



Точно так же, как и любую другую переменную.
Код
typedef struct
{
   uint8_t data_a;
   uint32_t data_b;
} MyConfig_t;
__eeprom MyConfig_t Config =
{
   0x12,
   0x34567890
};


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jun 3 2008, 05:50
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Сергей Борщ @ Jun 2 2008, 04:12) *
Точно так же, как и любую другую переменную.
Код
typedef struct
{
   uint8_t data_a;
   uint32_t data_b;
} MyConfig_t;
__eeprom MyConfig_t Config =
{
   0x12,
   0x34567890
};


И еще чуть чуть:
В настройках проекта Linker->Extra Options птицу в окошко Use command line options
а в окно примерно такиу две строчки

-y(CODE)
-Ointel-extended,(XDATA)=$EXE_DIR$\$PROJ_FNAME$_data.hex

И тогда получите прошивку HEX для ЕЕПРОМ.
Go to the top of the page
 
+Quote Post
garlands
сообщение Jun 3 2008, 21:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 15-04-08
Из: UA
Пользователь №: 36 798



Благодарю.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 5 2008, 12:22
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Можно и так
Код
-y(CODE)
-Ointel-extended,(XDATA)=.eep
Go to the top of the page
 
+Quote Post
_Rookie_
сообщение Feb 21 2011, 20:38
Сообщение #6





Группа: Новичок
Сообщений: 4
Регистрация: 14-04-06
Пользователь №: 16 102



Добавил в Linker->Extra options
-y(CODE)
-Ointel-extended,(XDATA)=$EXE_DIR$\$PROJ_FNAME$.eep

Сам код инициализации
__eeprom unsigned char erm[15]="Demo STRing";
или так
__eeprom char erm1=0x55;

Компилится нормально, но файл *.ерр фактически пустой, и не меняется, даже если я выкину строку инициализации из кода.
содержимое файла epp ниже. В чем может быть проблема?
:040000031000F000F9
:00000001FF

Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Feb 22 2011, 10:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(_Rookie_ @ Feb 21 2011, 23:38) *
Добавил в Linker->Extra options
-y(CODE)
-Ointel-extended,(XDATA)=$EXE_DIR$\$PROJ_FNAME$.eep

Сам код инициализации
__eeprom unsigned char erm[15]="Demo STRing";
или так
__eeprom char erm1=0x55;

Компилится нормально, но файл *.ерр фактически пустой, и не меняется, даже если я выкину строку инициализации из кода.
содержимое файла epp ниже. В чем может быть проблема?
:040000031000F000F9
:00000001FF


при объявлении переменных ЕЕПРОМ добавьте ключевое слово
__root __eeprom unsigned char erm[15]="Demo STRing";
в вашем случае скорей всего их выкинул компилятор, м.б. вы их не используете?
Go to the top of the page
 
+Quote Post
Roger
сообщение Mar 3 2011, 10:10
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 27-06-06
Пользователь №: 18 383



чтобы не создавать схожу тему, спрошу тут.
Задача построить список(дерево), поэтому требуется указатель на такой же объект.
есть класс(структура)
Код
Class MyClass
{
pulbic:
int a,b;
MyClass *prt;
}


как правильно написать чтобы
указатель
Код
MyClass *prt;
располагался во Flash
Такая конструкция не работает.
Код
__flash MyClass *prt;


Сообщение отредактировал Roger - Mar 3 2011, 10:10
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 3 2011, 10:24
Сообщение #9


Гуру
******

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



Ответ на ваш вопрос - "никак". Объект не может находиться частично в ОЗУ а частично во флеш.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Roger
сообщение Mar 3 2011, 10:35
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 27-06-06
Пользователь №: 18 383



Цитата(Сергей Борщ @ Mar 3 2011, 13:24) *
Ответ на ваш вопрос - "никак". Объект не может находиться частично в ОЗУ а
частично во флеш.

А как его полность разместить во флешь?
Код
__flash Сlass MyClass
{
pulbic:
int a,b;
MyClass *prt;
}

так описать класс?


тогда как правильно реализовать такую конструкцию:
Код
Class MyClass
{
pulbic:
int a,b;
MyClass *prt;
}
...

__flash MyClass m={0,1};
__flash MyClass t={2,3,&m};


Компилятор тоже ругается.

Сообщение отредактировал Roger - Mar 3 2011, 10:46
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 3 2011, 11:23
Сообщение #11


Гуру
******

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



Полагаю, что так:
CODE
Class MyClass
{
pulbic:
int a,b;
__flash MyClass *prt;
}
...

__flash MyClass m={0,1};
__flash MyClass t={2,3,&m};



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Roger
сообщение Mar 3 2011, 12:03
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 27-06-06
Пользователь №: 18 383



Цитата(Сергей Борщ @ Mar 3 2011, 14:23) *
Полагаю, что так:
Код
Class MyClass
{
pulbic:
int a,b;
__flash MyClass *prt;
}
...

__flash MyClass m={0,1};
__flash MyClass t={2,3,&m};

Подобную конструкцию побывал, но компилятор ругался...

Код
__flash MyClass *prt;

Error[Pa004]: illegal declaration


Сообщение отредактировал Roger - Mar 3 2011, 12:22
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 3 2011, 12:29
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Roger @ Mar 3 2011, 20:03) *
Подобную конструкцию побывал, но компилятор ругался...

Для __flash
Код
typedef class __MyClass
{    
    public:
      int a, b, c;
    __MyClass __flash *prt;
    
} MyClass, *p_MyClass;

__flash MyClass foo_a = { 1, 2, 3, 0 };
__flash MyClass foo_b = { 1, 2, 3, &foo_a};

int main()
{    
      int i, x = 0;
    
    for(i = 0; i < 10; i++)
    {
          x += foo_a.a;
        x -= foo_b.b;
        x ^= foo_a.c;
    }
      
      return x;
}

Для __eeprom парктически тоже
Код
typedef class __MyClass
{    
    public:
      int a, b, c;
    __MyClass __eeprom *prt;
    
} MyClass, *p_MyClass;

__eeprom MyClass foo_a = { 1, 2, 3, 0 };
__flash MyClass foo_b = { 1, 2, 3, &foo_a};


--------------------
Go to the top of the page
 
+Quote Post
Roger
сообщение Mar 11 2011, 12:45
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 27-06-06
Пользователь №: 18 383



Если в класс добавить метод и к нему обращаться то возникают проблемы
Код
typedef class __MyClass
{    
    public:
      int a, b, c;
    __MyClass __flash *prt;
    void Add()
    {
        //a=b+c;
    }
    
} MyClass, *p_MyClass;

__flash MyClass foo_a = { 1, 2, 3, 0 };
MyClass __flash* prt=&foo_a; //создали указатель в OЗУ на объект во flash

void main()
{

prt->Add(); а тут траблы
Error[Pe315]: the object has cv-qualifiers that are not compatible with the member function    
            object type is: MyClass __flash
при обращении к полям класса проблем нету, а к методам есть

и тоже самое если вызвать метод у объекта
foo_a.Add();
}

Кто может подсказать в чем проблемы?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 11 2011, 13:08
Сообщение #15


Гуру
******

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



Думаю, __flash подразумевает const. Вы пытаетесь вызвать функцию, которая изменяет объект. А объект константный. Если хотите уверить компилятор, что функция не изменяет объект, обявите ее с квалификатором const:
CODE
    void Add() const
    {
        //a=b+c;
    }
но тогда в ней нельзя будет делать a=


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 23:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01611 секунд с 7
ELECTRONIX ©2004-2016