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

 
 
> Как в IAR инициализировать структуру во флеш?, Структура состоит из переменного кол-ва подструктур
mempfis_
сообщение Sep 29 2009, 13:29
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Добрый день.
Стоит задача создать во флэш набор дефолтных значений для восстановления рабочих парметров устройства.
Параметры собраны в структуру элементами которой могут быть другие структуры.
Приблизительно так:

Код
struct stAnalog {
unsigned char param1;
unsigned char param2;
}

struct stDigital {
unsigned char param1;
unsigned char param2;
}

#define analognum 2
#define digitalnum  2

struct stParameters {
stAnalog AnalogParam[analognum];
stDigital DijitalParam[digitalnum];
}


Создаю во флеш дефольную структуру.
Инициализировать её приходится вручную прописывая каждый элемент:
Код
__flash stParameters DefParameters =
{
   //AnalogParam[0]
   0,
   5,

   //AnalogParam[1]
   0,
   5,

   //DigitalParam[0]
   7,
   3,

   //DigitalParam[1]
   7,
   3,
};


Для небольших величин analognum и digitalnum ещё можно прописать параметры вручную.
Но таких структур и их кол-во предполагается большое и пока что неизвестное.

Вопрос - каким образом средствами компилятора можно автоматизировать инициализацию всех подструктур (каждая подструктура инициализирутся одинаковыми значениями)?
Заранее спасибо за ответы smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Sep 29 2009, 15:32
Сообщение #2


Гуру
******

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



Макросами?
Код
#define ANALOG_PARAM (a, b)   { (a), (b) }
#define DIGITAL_PARAM (a, b)   { (a), (b) }
#define DEFAULT_ANALOG_PARAM ANALOG_PARAM(0,5)
#define DEFAULT_DIGITAL_PARAM DIGITAL_PARAM(7,3)

Код
__flash stParameters DefParameters =
{
    { // AnalogParam
        DEFAULT_ANALOG_PARAM, // [0]
        DEFAULT_ANALOG_PARAM, // [1]
     }
     { // DigitalParam
        DEFAULT_DIGITAL_PARAM, //[0]
        DEFAULT_DIGITAL_PARAM, // [1]
     }
};


--------------------
На любой вопрос даю любой ответ
"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
Dog Pawlowa
сообщение Sep 29 2009, 16:14
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Сергей Борщ @ Sep 29 2009, 18:32) *
Макросами?

Погадаем ? wink.gif
Моя версия - циклом:
for(i=0; i<analognum; i++)
{ AnalogParam[i].param1=0;
AnalogParam[i].param2=5;
}
Можно наши предложения объединить.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Sep 29 2009, 16:37
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Спасибо за ответы smile.gif
На работе проверю все варианты - и с макросами, и в цикле smile.gif
Правда не уверен что такое присвоение AnalogParam[i].param1=0 сработает со структурами расположенными во флеш.
Go to the top of the page
 
+Quote Post



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

 


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


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