|
IAR AVR4.30, Проблема с union |
|
|
|
Jun 18 2009, 04:07
|
Местный
  
Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304

|
Пишу загрузчик для AT90CAN128 и столкнулся с проблемой. Далее привожу часть кода, которая вызывает ошибку. __C_task main(void) { // обявил переменную sum union { unsigned char b[4]; unsigned int w[2]; unsigned long dw; }sum; unsigned long data32; sum.dw = (unsigned long)0x00011278; // далее посыдаю побайтно sum.b[0], sum.b[1],sum.b[2],sum.b[3] в CAN data32 = (unsigned long)0x00011278; // далее посыдаю побайтно (unsigned char)data32, (unsigned char)(data32>>8), // (unsigned char)(data32>>16),(unsigned char)(data32>>24) в CAN }
В результате вижу по CAN: 1-ая посылка: 0x78, 0x12, 0x12, 0x00 2-ая: 0x78, 0x12, 0x01, 0x00 В чем глюк понять не могу. Это клюк компилятора или я что-то не так делаю? Уровень оптимизации стоит максимальный по объему кода. P.S. Скомпилировал проект под IAR AVR 5.20 все работает нормально. Подтвердите, это глюк компилятора?
|
|
|
|
|
 |
Ответов
|
Jun 19 2009, 03:02
|
Местный
  
Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304

|
TX_SET8 это макрос, вот его код #define TX_SET8(a,b,c,d,e,f,g,h,i,j) Can_Tx.cmd = a; Can_Tx.id.ext = (Uint32)(  ; Can_Tx.ctrl.ide = 1;\ Can_Tx.dlc = 8; Can_Tx.data[0] = c; Can_Tx.data[1] = d;\ Can_Tx.data[2] = e; Can_Tx.data[3] = f; Can_Tx.data[4] = g;\ Can_Tx.data[5] = h; Can_Tx.data[6] = i; Can_Tx.data[7] = j; Заодно привожу и описание Can_Tx: typedef enum { CMD_NONE, CMD_TX, CMD_TX_DATA, CMD_TX_REMOTE, CMD_TX_INT, CMD_TX_DATA_INT, CMD_TX_REMOTE_INT, CMD_RX, CMD_RX_DATA, CMD_RX_REMOTE, CMD_RX_MASKED, CMD_RX_DATA_MASKED, CMD_RX_REMOTE_MASKED, CMD_RX_INT, CMD_RX_DATA_INT, CMD_RX_REMOTE_INT, CMD_RX_MASKED_INT, CMD_RX_DATA_MASKED_INT, CMD_RX_REMOTE_MASKED_INT, CMD_REPLY, CMD_REPLY_MASKED, CMD_REPLY_INT, CMD_REPLY_MASKED_INT, CMD_ABORT } can_cmd_t; // ---------- typedef union{ Uint32 ext; Uint16 std; Uint8 tab[4]; } can_id_t; // ---------- typedef struct{ Bool rtr; Bool ide; } can_ctrl_t; typedef struct{ Uint8 handle; can_cmd_t cmd; can_id_t id; can_id_t mask; Uint8 dlc; // Uint8* pt_data; Uint8 status; can_ctrl_t ctrl; Uint8 data[8]; } st_cmd_t;
|
|
|
|
Сообщений в этой теме
KSN IAR AVR4.30 Jun 18 2009, 04:07 Sanya_kv А в чем глук? у тебя все правильно работает.
А где... Jun 18 2009, 06:06 KSN 1. Глюк в том, что получаю 0x78,0x12,0x12,0x00 ВМЕ... Jun 18 2009, 06:21 Sanya_kv Цитата// далее посыдаю побайтно sum.b[0], sum.b[1]... Jun 18 2009, 06:31 MrYuran ЦитатаP.S. Скомпилировал проект под IAR AVR 5.20 в... Jun 18 2009, 06:31 plombir Очень давно, в IAR3.хх с похожим столкнулся. Компи... Jun 18 2009, 06:46 Сергей Борщ Цитата(plombir @ Jun 18 2009, 09:46) Пото... Jun 18 2009, 07:43  plombir Цитата(Сергей Борщ @ Jun 18 2009, 11:43) ... Jun 18 2009, 14:30 KSN Прилагаю файлы iar430a.7z и iar520.7z
В первом лис... Jun 18 2009, 09:15 Сергей Борщ Цитата(KSN @ Jun 18 2009, 12:15) Прилагаю... Jun 18 2009, 10:54 Сергей Борщ Цитата(KSN @ Jun 19 2009, 06:02) TX_SET8 ... Jun 19 2009, 08:48 KSN Я правильно понял, это то что Вы просили?
Jun 19 2009, 10:22 Сергей Борщ Цитата(KSN @ Jun 19 2009, 13:22) Я правил... Jun 19 2009, 10:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|