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

 
 
 
Reply to this topicStart new topic
> структура в еепром?
Faradey
сообщение Nov 20 2006, 13:40
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



если можно, то как определить структуру в еепром?


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
ARIM
сообщение Nov 20 2006, 13:52
Сообщение #2


Частый гость
**

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



Цитата(Faradey @ Nov 20 2006, 13:40) *
если можно, то как определить структуру в еепром?

struct MyStruct
{
int alpha;
int __flash * beta; /* Pointer to variables in flash memory */
};
__eeprom struct MyStruct gamma;
Go to the top of the page
 
+Quote Post
otrog
сообщение Nov 20 2006, 13:54
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Для IAR-а:
Код
struct TConstConstructive
{
  double d;
  double D_;
  double y;

  unsigned int CRC16;
};

__eeprom struct TConstConstructive ConstConstructiveEEP = {12.0, 25.0, 2.26e-5, 0x545C};


Для CV никак.


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Nov 20 2006, 14:11
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



а так почему не работает?

Код
struct REG
{
   u08   Lo_byte;
   u08  Hi_bite;
};
struct HOLD_REG
{
struct REG SS_ADR;
struct REG SS_BAUD;
struct REG SS_PARITY;
struct REG SS_RESERV;
};

__eeprom struct HOLD_REG hold_reg;
hold_reg.SS_ADR.Lo_byte = 1;


ругается:
Цитата
Error[Pe077]: this declaration has no storage class or type specifier
Error[Pe147]: declaration is incompatible with "HOLD_REG __eeprom hold_reg"
Error[Pe065]: expected a ";"


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
otrog
сообщение Nov 20 2006, 15:05
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(Faradey @ Nov 20 2006, 14:11) *
__eeprom struct HOLD_REG hold_reg;

Помоему компилятору без разницы в каком регистре записаны идентификаторы. Поэтому получилось одинаковое название у типа структуры и у структуры.

Пишите
Код
struct THOLD_REG
{
struct REG SS_ADR;
struct REG SS_BAUD;
struct REG SS_PARITY;
struct REG SS_RESERV;
};

__eeprom struct THOLD_REG hold_reg;


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Nov 20 2006, 15:49
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



Цитата(otrog @ Nov 20 2006, 14:05) *
Цитата(Faradey @ Nov 20 2006, 14:11) *

__eeprom struct HOLD_REG hold_reg;

Помоему компилятору без разницы в каком регистре записаны идентификаторы. Поэтому получилось одинаковое название у типа структуры и у структуры.

Пишите
Код
struct THOLD_REG
{
struct REG SS_ADR;
struct REG SS_BAUD;
struct REG SS_PARITY;
struct REG SS_RESERV;
};

__eeprom struct THOLD_REG hold_reg;




это не так...
причина в другом...


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
otrog
сообщение Nov 20 2006, 15:57
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(Faradey @ Nov 20 2006, 15:49) *
это не так...
причина в другом...

А вы попробовали мой пример? Компилятор также ругается?


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Nov 20 2006, 15:58
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



Цитата(otrog @ Nov 20 2006, 14:57) *
Цитата(Faradey @ Nov 20 2006, 15:49) *

это не так...
причина в другом...

А вы попробовали мой пример? Компилятор также ругается?


клеветать и лгать не в моих традициях


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
ARIM
сообщение Nov 20 2006, 16:12
Сообщение #9


Частый гость
**

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



Цитата(Faradey @ Nov 20 2006, 14:11) *
а так почему не работает?

Код
struct REG
{
   u08   Lo_byte;
   u08  Hi_bite;
};
struct HOLD_REG
{
struct REG SS_ADR;
struct REG SS_BAUD;
struct REG SS_PARITY;
struct REG SS_RESERV;
};

__eeprom struct HOLD_REG hold_reg;
hold_reg.SS_ADR.Lo_byte = 1;


ругается:
Цитата

Error[Pe077]: this declaration has no storage class or type specifier
Error[Pe147]: declaration is incompatible with "HOLD_REG __eeprom hold_reg"
Error[Pe065]: expected a ";"


потому что надо чтобы все объекты в структуре были размещены в одном и том же типе памяти . в еепром, флэш, рам.

Сообщение отредактировал ARIM - Nov 20 2006, 16:26
Go to the top of the page
 
+Quote Post
otrog
сообщение Nov 20 2006, 16:15
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(Faradey @ Nov 20 2006, 15:58) *
клеветать и лгать не в моих традициях

Тогда строчку
Код
hold_reg.SS_ADR.Lo_byte = 1;

перенесите в main, или еще в какую процедуру.


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 20 2006, 17:17
Сообщение #11


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(otrog @ Nov 20 2006, 15:15) *
... строчку
Код
hold_reg.SS_ADR.Lo_byte = 1;

перенесите в main, или еще в какую процедуру.

т. к. инициализация переменной должна быть в строке, в которой эта переменная обьявляется.
В примере Faradey происходит присвоение переменной значения. А это должно осуществляться только внутри функции.
И дело здесь вовсе не в eeprom, а в нарушении правил программирования на С.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Nov 20 2006, 18:37
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



Цитата(IgorKossak @ Nov 20 2006, 16:17) *
Цитата(otrog @ Nov 20 2006, 15:15) *

... строчку
Код
hold_reg.SS_ADR.Lo_byte = 1;

перенесите в main, или еще в какую процедуру.

т. к. инициализация переменной должна быть в строке, в которой эта переменная обьявляется.
В примере Faradey происходит присвоение переменной значения. А это должно осуществляться только внутри функции.
И дело здесь вовсе не в eeprom, а в нарушении правил программирования на С.


спасибо IgorKossak .


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post

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

 


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


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