我试着让BLE121LR模块与外部MCU(EFM32)一起工作。
我可以理解,这段代码声明了将结构转换为二进制数据,对吗?
有人能给我解释一下如何增加手臂(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
最佳答案
是的,压缩结构会影响结构在内存中的存储方式,内存通常被用作将结构转换为二进制数据的一种快速而肮脏的方式。
PACKSTRUCT宏不是为keil armcc编译器编写的。要解决这个问题,我们必须首先找到如何识别何时使用armcc。在this page上,我们可以看到armcc提供了define\u armcc\u版本,我们可以使用它。
现在,我们如何使用armcc声明一个压缩结构?Here,我们看到应该使用打包限定符:
/* 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
关于c - 有条件地将压缩结构与armcc配合使用(BGLib中的PACKSTRUCT),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32346812/