gpt4 book ai didi

有条件地使用带有 armcc 的打包结构(BGLib 中的 PACKSTRUCT)

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:36 28 4
gpt4 key购买 nike

我尝试使用外部 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

最佳答案

是的,打包结构会影响结构在内存中的存储方式,这通常用作将结构转换为二进制数据的快速而简单的方法。

PACKSTRUCT 宏不是为 keil armcc 编译器编写的。要解决此问题,我们必须首先找到如何识别何时使用 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

关于有条件地使用带有 armcc 的打包结构(BGLib 中的 PACKSTRUCT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32346812/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com