Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: typedef union в NiosII
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
torik
Обявляем такой вот тип в ниосе:
Код
typedef union _CAN_ID
{
    struct {
        unsigned    r1        : 3;
        unsigned    prior    : 3;
        unsigned    sid        : 8;
        unsigned    did        : 8;
        unsigned     mes        : 10;
    } id;
    struct {
        unsigned int        d;
    } w;
    struct {
        unsigned char        d[4];
    } b;
} CAN_ID;


С полем mes, которое 10 бит, возникают проблемы. Вот результат с тестовым числом:
Код
id = 0x01000100

d0 = 0
d1 = 8
d2 = 0
d3 = 1

prior = 0
did = 0
sid = 20
mes = 4


Т.е. возникло смещение на 2 бита. Компилятор хочет выровнять все по 8-бит границе.
Нельзя это победить какими-нибудь директивами компилятора?
vadimuzzz
добавить __attribute__ ((__packed__)) ?
torik
Сам спросил, сам ответил:
убрал из union байтовый массив и все стало на свои места, что вполне логично...

Цитата
добавить __attribute__ ((__packed__)) ?

я про такое и не слыхал sm.gif
vadimuzzz
Цитата(torik @ Feb 25 2011, 15:50) *
я про такое и не слыхал sm.gif

загляните в nios2eds/documents/gnu-tools

можно через nios2eds/documents/index.html добраться, там много всякого интересного
torik
спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.