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

 
 
> Как инициализировать структуру в ЕЕПРОМ
Student2
сообщение Aug 5 2009, 18:57
Сообщение #1


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

Группа: Участник
Сообщений: 83
Регистрация: 4-08-09
Из: Болгария / София
Пользователь №: 51 737



Как можно инициализировать структуру в ЕЕПРОМ използуя полей (имена полей) внутри структуры?

Сегодня из форума я узнал как сделать инициализацию ЕЕПРОМа с фиксированного адреса:

__root __eeprom uint8_t zast1[11] @ 0x2A = {0xFF, 0x44, 0x33, 0x11, 0x88, 0xAA, 0x77, 0x22, 0x44, 0xEE};


Но не могу понять как инициализировать структуру в ЕЕПРОМ ползуя имена полей. Например:

typedef struct
{
uint8_t status; /* STATUS */
uint8_t ID; /* ID */
uint16_t VER; /* VER */
} header_t;

Как можно инициализировать например поле status, ID, VER индивидуально? Я не хочу тратит програмный памяти для установки данны, хочу поставить данны директно в ЕЕПРОМ (EEP file).

__root __eeprom header_t myEEPROM = {
status = 2,
ID = 14,
VER = 8
}; /* НЕ РАБОТАЕТ */

Конечно я могу установить ЕЕПРОМ не применяя полей структуры, но код будет хуже для поддержки.

Сообщение отредактировал Student2 - Aug 5 2009, 19:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MALLOY2
сообщение Aug 6 2009, 06:06
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



можно так

Код
typedef struct
{
  char status; /* STATUS */
  char ID; /* ID */
  int VER; /* VER */
} header_t;


__root __eeprom header_t myEEPROM = {.status = 2, .ID = 14, .VER = 8};



P.S. пока инет тормозил уже ответили. smile.gif
Go to the top of the page
 
+Quote Post
Student2
сообщение Aug 6 2009, 09:37
Сообщение #3


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

Группа: Участник
Сообщений: 83
Регистрация: 4-08-09
Из: Болгария / София
Пользователь №: 51 737



Большое Спасибо - ответ был на 100% что искал!

Можно считать тему для закрытой - нечего можно добавить
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 6 2009, 20:34
Сообщение #4


Гуру
******

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



Цитата(Student2 @ Aug 6 2009, 12:37) *
Можно считать тему для закрытой - нечего можно добавить
Но такая инициализация не будет компилироваться в C++. Вот теперь можно закрывать.


--------------------
На любой вопрос даю любой ответ
"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
xelax
сообщение Aug 7 2009, 05:50
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Сергей Борщ @ Aug 7 2009, 00:34) *
Но такая инициализация не будет компилироваться в C++. Вот теперь можно закрывать.


В С++, есть конструкторы для таких вещей.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 7 2009, 06:56
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(xelax @ Aug 7 2009, 08:50) *
В С++, есть конструкторы для таких вещей.
Только С-99 инициализация с именами полей (и с индексами массивов int array[20] = { [10] = 5 }; ) - это операция времени компиляции, которая заносит значения в секцию инициализированных данных и "бесплатна" с точки зрения размера кода, а С++ - конструкторы - это операция времени выполнения и дополнительный код.
"А в остальном, прекрасная маркиза, всё хорошо, всё хо-ро-шо".


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 20:44
Рейтинг@Mail.ru


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