ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
92901 Топик полностью
abivan (29.06.2007 19:49, просмотров: 1) ответил FDA на Я просто принимаю структуру через UART в виде байтов, запихиваю в этот union, а потом считываю информацию уже с полей!
Да не нужен он получается, Gamma SPb все уж написал, я лишь чутка добавлю А уж нужен union в этом случае или нет решать тебе. Вот пример использования union тут union самое то. <c> typedef union{ BYTE Byte; short Int; WORD Word; DWORD Dword; LONG Long; FLOAT Float; }t_UnVar; typedef struct{ BYTE bMnuId; t_ParOption ParOption; t_MnuOption MnuOption; BYTE bDataType; // Тип данных параметра t_UnVar Var; // Значение параметра t_UnLimit Limit; // Интервал значений int iHeapI; // for list menu }t_MenuItem; int main(){ t_MenuItem MenuItem; MenuItem.MnuOption.AutoRepeatEn=1; MenuItem.MnuOption.OverflowEn=0; MenuItem.MnuOption.ChangeItemEn=0; MenuItem.bDataType=T_FLOAT; MenuItem.Limit.Float.Min=-1999.; MenuItem.Limit.Float.Max=MenuItem.Var.Float; while(1){ /* SCANCode - скан-код клавиши получаем из прерывания */ ChangeItem(&MenuItem, SCANCode); } } void ChangeItem(.... switch(MenuItem.bDataType){ case T_BYTE:{ int bDeltaPar; bDeltaPar=1; for(i=ChParStep; i; i--) bDeltaPar*=10; switch(SCANCode){ case SCAN_LEFT_MINUS | KBD_PRESS_FLAG:{ MenuItem.Var.Byte-=bDeltaPar; if(MenuItem.Var.Byte < MenuItem.Limit.Byte.Min || MenuItem.Var.Byte >= MenuItem.Limit.Byte.Max){ if(MenuItem.MnuOption.OverflowEn) MenuItem.Var.Byte=MenuItem.Limit.Byte.Max; else MenuItem.Var.Byte=MenuItem.Limit.Byte.Min; } break; } .... } </c>