我试着让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/

10-11 22:47