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

 
 
> Указатель на елемент структуры_подскажите
SergSit
сообщение Jun 19 2006, 07:43
Сообщение #1


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

Группа: Свой
Сообщений: 173
Регистрация: 9-12-05
Пользователь №: 12 031



Програмировать в СИ только начинаю, так что если что не правильно сильно не бейте.
В процессе написание проги возникла не обходимость обращаться к элементам структуры через указатели. Предположим есть структура :
eeprom struct flagi_signal
{unsigned char kabina:1;
unsigned char kuzov:1;
unsigned char revun:1;
unsigned char zumer:1;
}fl_sign={1,1,1,1};

Теперь хочу создать массив структур в котором один из элементов должен ссылать на елементы сртукткры fl_sign, причем новая структура должна (если это возможно) храниться во Flash. Моя версия не работает

flash struct set_sign
{flash unsigned char *mas;
eeprom unsigned char *pun;---> елемент который должен ссылать на елемент структуры fl_sign
unsigned int punkt_up;
unsigned int punkt_down;
}signal_set[]={{mes22,fl_sign.kabina,punkt_zumer,punkt_kuzov},
{mes22,fl_sign.kabina,punkt_zumer,punkt_kuzov}};
Прогу пишу в CodeVision. Перепробывал много вариантов, не хватает опыта и глубокого знания СИ.
Может кто сталкивался с такой проблемой?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WHALE
сообщение Jun 19 2006, 13:11
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



В CV так не прокатит,ему при обьявлении структуры нужно указывать тип памяти,при таком обьявлении
он сочтет,что это структтура в RAM и на TSygnalFlags flash signal_set[] = {.....} будет ругаться.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 19 2006, 13:45
Сообщение #3


Гуру
******

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



Хочу еще раз подчеркнуть то что я говорил выше: в описателе структуры не надо объявлять тип памяти, ведь вы можете создать структуру как во флэш, так и в еепроме, или в статической памяти. Тип памяти указывается при объявлении переменной. Естественно, что и все члены структуры будут расположенны в том типе памяти, в котором созданна переменная с данным типом структуры. Но никто вам не запрещает через переопределение типов обратится через одного из членов структуры (если это указатель) к другому типу памяти. Немного запутанно, но я пытаюсь сказать то что пытаюсь))))



Ну вот вам еще пример, правда, работающий на IARe:



Код
typedef struct MBS_Data_Block_Type
{

UCHAR Ext_Type;
UCHAR Int_Type;

UINT Ext_Addr;
UINT Int_Addr;
UINT Size;

}

MBS_Data_Block;



__flash MBS_Data_Block Coil_Array[];

__flash MBS_Data_Block Input_Array[];

__flash MBS_Data_Block Hold_Array[];

__flash MBS_Data_Block Reg_Array[];



__flash MBS_Data_Block __flash *DB_Array[4] =
{

Coil_Array,
Input_Array,
Hold_Array,
Reg_Array,
};




Обратите внимание на объявление массива DB_Array - первый __flash указывает, что массив расположен в о флэше, второй __flash говорит что указатели содержат адерса структур, расположенных во флэше.



Возмем структуру MBS_Data_Block. В ней адреса представленны вообще как integer. Но с помощью преобразований я в коде могу указать компилятору как работать с данным адерсом, и на какой тип памяти он указывает...Допустим:

Код
void main(void)

{

MBS_Data_Block db;



(UCHAR *)db.Ext_Addr = 5;// пишем в SRAM

(__eeprom UCHAR *) db.Ext_Addr = 5; // пишем в EEPROM

}




Такое проще конечно вытворять в Си++, где для структуры можно написать методы работы с членами структуры для разных типов памяти.

Вот о чем я хотел сказать)))


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SergSit   Указатель на елемент структуры_подскажите   Jun 19 2006, 07:43
- - prottoss   Зачем в описании структуры указывать тип памяти? ...   Jun 19 2006, 08:01
- - IgorKossak   Согласно стандарту нельзя соэдать указатель на эле...   Jun 19 2006, 08:06
- - SergSit   Такой вариант не катит. Сразу выдает ошибку: струк...   Jun 19 2006, 08:33
|- - maegg   можно выкрутится через union union xxxx { ...   Jun 19 2006, 09:04
- - beer_warrior   Написано очень путанно, поэтому предложу простой с...   Jun 19 2006, 09:02
- - _Bill   Цитата(SergSit @ Jun 19 2006, 10:43) Прог...   Jun 19 2006, 09:28
|- - _Bill   Цитата(WHALE @ Jun 19 2006, 16:11) В CV т...   Jun 19 2006, 13:42
- - Old1   Цитата(SergSit @ Jun 19 2006, 10:43) Прог...   Jun 19 2006, 18:22
- - WHALE   2 prottoss В стандарте С про типы памяти нет ни сл...   Jun 19 2006, 19:19
- - SergSit   Большон спасибо всем за помощ. Вариант OLD1 оказал...   Jun 19 2006, 19:20
- - prottoss   Цитата(SergSit @ Jun 20 2006, 03:20) Боль...   Jun 19 2006, 22:34


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

 


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


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