Re: Вопросы по С/С++ (СИ)
Добавлено: Вс янв 02, 2011 00:43:02
разобрался =)
в иар __LITTLE_ENDIAN__ в GNUC LITTLE_ENDIAN
Код: Выделить всё
#if DOXYGEN || LITTLE_ENDIAN || __AVR__
#define HTOL16(val) (val)
#define HTOL32(val) (val)
#elif BIG_ENDIAN
#define HTOL16(val) ((((uint16_t) (val)) << 8) | \
(((uint16_t) (val)) >> 8) \
)
#define HTOL32(val) (((((uint32_t) (val)) & 0x000000ff) << 24) | \
((((uint32_t) (val)) & 0x0000ff00) << 8) | \
((((uint32_t) (val)) & 0x00ff0000) >> 8) | \
((((uint32_t) (val)) & 0xff000000) >> 24) \
)
//**********IAR****************************************************
#elif DOXYGEN || __LITTLE_ENDIAN__ || __AVR__
#define HTOL16(val) (val)
#define HTOL32(val) (val)
#elif __BIG_ENDIAN__
#define HTOL16(val) ((((uint16_t) (val)) << 8) | \
(((uint16_t) (val)) >> 8) \
)
#define HTOL32(val) (((((uint32_t) (val)) & 0x000000ff) << 24) | \
((((uint32_t) (val)) & 0x0000ff00) << 8) | \
((((uint32_t) (val)) & 0x00ff0000) >> 8) | \
((((uint32_t) (val)) & 0xff000000) >> 24) \
)
//*******************************************************************
#else
#error "Endianess undefined! Please define LITTLE_ENDIAN=1 or BIG_ENDIAN=1."
#endif