|
|
  |
возможна ли инициализация во флэш... |
|
|
|
Aug 12 2007, 20:42
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
сейчас делаю так: Код typedef struct nod{ char count; struct nod __farflash* prev_nod; struct nod __farflash** pod_nods; }NOD; #define NOD_F NOD __farflash #define pNOD_F NOD_F* #define ppNOD_F struct pNOD_F*
pNOD_F any_nods[2]; NOD_F root_nod = {2, any_nods , 0};
NOD_F nod1 = {0,0, &root_nod}; NOD_F nod2 = {0,0, &root_nod}; и вызываю ф-цию инициализации: Код void init_nod( void ) { any_nods[0] = &nod1; any_nods[1] = &nod2; } вопрос в след.: существует ли возможность разместить any_nods тоже во flash, и обойтись без вызова ф-ции инициализации.
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Aug 13 2007, 08:29
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
Цитата(Непомнящий Евгений @ Aug 13 2007, 07:43)  __farflash NOD * any_nods[] = {&nod1, &nod2} в том то и дело, что NOD_F nod1 = {0,0, &root_nod}; NOD_F nod2 = {0,0, &root_nod}; объявляются ниже чем any_nods... Цитата Если объявить как константу.... по существу здесь все константы и менять их мне ненадо, просто для того чтобы инициализировать any_nods как предлагает 'Непомнящий Евгений' необходимо чтобы выше были инициализированы nod1 и nod2, но для того чтобы их инициализировать нужно чтобы перед ними был иниц. Код NOD_F root_nod = {2, any_nods , 0}; ... короче замкнутый круг.
Сообщение отредактировал Faradey - Aug 13 2007, 08:35
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Aug 13 2007, 09:31
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Можно применить предворительное указание типа переменной без её инициализации так: Код extern NOD_F nod1 Даже если переменная в других модулях не используется. Я так иногда делаю в хидерах. А уже потом в любом месте файла ниже присвоить ей константное значение.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 13 2007, 13:22
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
Цитата(GetSmart @ Aug 13 2007, 12:31)  Можно применить предворительное указание типа переменной без её инициализации так: Код extern NOD_F nod1 Даже если переменная в других модулях не используется. Я так иногда делаю в хидерах. А уже потом в любом месте файла ниже присвоить ей константное значение. вот, млин. оказалось очевидно: Код typedef struct nod{ char count; struct nod __farflash* prev_nod; struct nod __farflash*__farflash* pod_nods; }NOD; #define NOD_F NOD __farflash #define pNOD_F NOD_F*
NOD_F nod1; NOD_F nod2;
__farflash pNOD_F any_nods[] = {&nod1,&nod2}; NOD_F root_nod = {2, any_nods , 0};
NOD_F nod1 = {0,0, &root_nod}; NOD_F nod2 = {0,0, &root_nod}; спасибо.
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Aug 15 2007, 05:54
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
По идее, в вашем коде три ошибки (по крайней мере на IAR 4.20). А вот так компилируется: Код typedef struct nod{ char count; struct nod __farflash* prev_nod; struct nod __farflash*__farflash* pod_nods; }NOD; #define NOD_F NOD __farflash #define pNOD_F NOD_F*
extern NOD_F nod1; extern NOD_F nod2;
__farflash pNOD_F any_nods[] = {&nod1,&nod2}; NOD_F root_nod = {2, 0, any_nods };
NOD_F nod1 = {0, &root_nod, 0}; NOD_F nod2 = {0, &root_nod, 0};
|
|
|
|
|
Aug 16 2007, 21:38
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
Цитата(Непомнящий Евгений @ Aug 15 2007, 08:54)  По идее, в вашем коде три ошибки (по крайней мере на IAR 4.20). А вот так компилируется: Код typedef struct nod{ char count; struct nod __farflash* prev_nod; struct nod __farflash*__farflash* pod_nods; }NOD; #define NOD_F NOD __farflash #define pNOD_F NOD_F*
extern NOD_F nod1; extern NOD_F nod2;
__farflash pNOD_F any_nods[] = {&nod1,&nod2}; NOD_F root_nod = {2, 0, any_nods };
NOD_F nod1 = {0, &root_nod, 0}; NOD_F nod2 = {0, &root_nod, 0}; весьма признателен, тут невнимательно написал, НО "extern" всетаки считаю лишним...
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Aug 17 2007, 04:55
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Faradey @ Aug 17 2007, 01:38)  весьма признателен, тут невнимательно написал, НО "extern" всетаки считаю лишним... Да как же лишним?! Если без extern, то мы имеем два определения одной и той же переменной в ОДНОЙ единице трансляции. что-то типа: int a, b; <какой-то код> int a=10, b=20; А это неправильно! И IAR и Visual studio в этом случае выдают ошибку redefenition
Сообщение отредактировал Непомнящий Евгений - Aug 17 2007, 04:56
|
|
|
|
|
Aug 19 2007, 19:03
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
Цитата(Непомнящий Евгений @ Aug 17 2007, 07:55)  Да как же лишним?! Если без extern, то мы имеем два определения одной и той же переменной в ОДНОЙ единице трансляции. что-то типа: int a, b; <какой-то код> int a=10, b=20; А это неправильно! И IAR и Visual studio в этом случае выдают ошибку redefenition Не надо так смело ссылаться на IAR. уж он так точно никакой ошибки не выдаст, если не написать спецификатор "extern" в моем примере. предлагаю не спорить, а самому проверить...
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Aug 20 2007, 06:07
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Faradey @ Aug 19 2007, 23:03)  Не надо так смело ссылаться на IAR. уж он так точно никакой ошибки не выдаст, если не написать спецификатор "extern" в моем примере.
предлагаю не спорить, а самому проверить... Сорри, первоначально компилил как C++ - при этом выдает ошибку [Pe247] variable 'nod1' has already been defined Если скомпилить как C - ошибки нет. Хотя, ИМХО, без extern-а все равно как-то криво...
|
|
|
|
|
Feb 25 2008, 08:16
|

Участник

Группа: Участник
Сообщений: 35
Регистрация: 12-09-06
Из: Москва СВАО
Пользователь №: 20 316

|
Цитата(arttab @ Aug 13 2007, 05:12)  Если объявить как константу. Если Вы захотите ее изменить, то нужно это сделать через самопрограммирование. А что можно почитать про самопрограммирование
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|