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

 
 
> Union в разных компиляторах., не могу понять...
MicroDiP
сообщение Dec 22 2007, 16:58
Сообщение #1


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

Группа: Свой
Сообщений: 104
Регистрация: 31-07-05
Из: Shenzhen, China (深圳市, 中国)
Пользователь №: 7 233



Столкнулся в апликухе от Микрочипа (в исходнике) с таким моментом. Код написан под MCC18. Я использую IAR-pic18. Вопрос - каким образом они объявили объединение вот таким образом:

Код
typedef union _BD_STAT
{
    byte _byte;
    struct{
        unsigned BC8:1;
        unsigned BC9:1;
        unsigned BSTALL:1;
        unsigned DTSEN:1;
        unsigned INCDIS:1;
        unsigned KEN:1;
        unsigned DTS:1;
        unsigned UOWN:1;
    };
    struct{
        unsigned BC8:1;
        unsigned BC9:1;
        unsigned PID0:1;
        unsigned PID1:1;
        unsigned PID2:1;
        unsigned PID3:1;
        unsigned :1;
        unsigned UOWN:1;
    };
    struct{
        unsigned :2;
        unsigned PID:4;                 //Packet Identifier
        unsigned :2;
    };
} BD_STAT;


Смущает собственно объявления нулевого, первого и седьмого битов в первых двух структурах (BC8, BC9 и UOWN). Ведь имена не должны повторяться ? О чём мне и сообщает IAR. Микрочиповский компилятор позволяет это делать ? 07.gif


--------------------
Все языки несут в себе черты своих обладателей. И идиомы каждого языка повторяются снова и снова: "Он чужеземец, а значит - варвар". (Роберт Хайнлайн)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Dec 22 2007, 17:38
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Последние ИАРовские компиляторы вообще очень строго стали проверять все до мелочей. Даже ругаются на несоответствие параметров аргументам с char и unsigned char, хотя стоит галка "char is unsigned char. Приходится давить этот warning.

А в приведенном примере ИАРовцы правы: объявление union некорректное: а что если программист ошибся и назначил одинаковые имена разным битам?

Цитата(МикроДИП @ Dec 22 2007, 19:30) *
Да мне собственно интересно - это что: особенность MCC18 ? Ошибка ? Опечатка ? Просто хотел взять исходник за основу себе в проект, а раз его ИАР не принимает, то прийдётся сейчас все файлы править где эти биты встречаются.

Все править не нужно, уберите только дубликаты объявлений битов:
Код
typedef union _BD_STAT
{
    byte _byte;
    struct{
        unsigned BC8:1;
        unsigned BC9:1;
        unsigned BSTALL:1;
        unsigned DTSEN:1;
        unsigned INCDIS:1;
        unsigned KEN:1;
        unsigned DTS:1;
        unsigned UOWN:1;
    };
    struct{
        unsigned :2;
        unsigned PID0:1;
        unsigned PID1:1;
        unsigned PID2:1;
        unsigned PID3:1;
        unsigned :2;
    };
    struct{
        unsigned :2;
        unsigned PID:4;                 //Packet Identifier
        unsigned :2;
    };
} BD_STAT;
Go to the top of the page
 
+Quote Post
MicroDiP
сообщение Dec 22 2007, 17:51
Сообщение #3


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

Группа: Свой
Сообщений: 104
Регистрация: 31-07-05
Из: Shenzhen, China (深圳市, 中国)
Пользователь №: 7 233



Спасибо. Да, действительно. Их же можно просто в одной из структур как два анонимных бита задать и всё.

Цитата(zltigo @ Dec 23 2007, 01:45) *
... но к сожалению индийско-китайско-студенческий бред в AN совершенно обыденное явление sad.gif. Но что много более тоскливо, как правило, обработка ошибок и нештатных ситуаций отсутствует - типичные паркетные исходники sad.gif


biggrin.gif

М-даа... Спасибо.


--------------------
Все языки несут в себе черты своих обладателей. И идиомы каждого языка повторяются снова и снова: "Он чужеземец, а значит - варвар". (Роберт Хайнлайн)
Go to the top of the page
 
+Quote Post



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

 


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


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