我尝试使用外部MCU(EFM32)使BLE121LR模块正常工作。 据我所知,这段代码声明将结构转换为二进制数据,对吗? 有人可以解释一下如何为它添加ARM(EFM32)支持吗? 非常感谢!!
代码:
/* Compability */
#ifndef PACKSTRUCT
#ifdef PACKED
#define PACKSTRUCT(a) a PACKED
#else
/*Default packed configuration*/
#ifdef __GNUC__
#ifdef _WIN32
#define PACKSTRUCT( decl ) decl __attribute__((__packed__,gcc_struct))
#else
#define PACKSTRUCT( decl ) decl __attribute__((__packed__))
#endif
#define ALIGNED __attribute__((aligned(0x4)))
#else //msvc
#define PACKSTRUCT( decl ) __pragma( pack(push, 1) ) decl __pragma( pack(pop) )
#define ALIGNED
#endif
#endif
#endif
答案 0 :(得分:2)
是的,打包的结构会影响结构在内存中的存储方式,这通常被用作将结构转换为二进制数据的快速方法。
没有为keil armcc编译器编写PACKSTRUCT宏。要解决这个问题,我们必须首先找到我们如何识别何时使用armcc。在this page,我们可以看到armcc提供了我们可以使用的定义__ARMCC_VERSION。
现在,我们如何使用armcc声明一个打包的结构? Here,我们看到我们应该使用__packed限定符:
/* Compability */
#ifndef PACKSTRUCT
#ifdef PACKED
#define PACKSTRUCT(a) a PACKED
#else
/*Default packed configuration*/
#ifdef __GNUC__
#ifdef _WIN32
#define PACKSTRUCT( decl ) decl __attribute__((__packed__,gcc_struct))
#else
#define PACKSTRUCT( decl ) decl __attribute__((__packed__))
#endif
#define ALIGNED __attribute__((aligned(0x4)))
#else // not __GNUC__
#ifdef __ARMCC_VERSION
#define PACKSTRUCT( decl ) __packed decl
#define ALIGNED
#else // Assume msvc
#define PACKSTRUCT( decl ) __pragma( pack(push, 1) ) decl __pragma( pack(pop) )
#define ALIGNED
#endif
#endif
#endif
#endif