This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CODECOMPOSER:MAVPACKED 问题

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/873101/ccs-codecomposer-mavpacked-issue

器件型号:CODECOMPOSER

工具/软件:Code Composer Studio

你好。 我想在项目中使用 mavlink。 代码生成器生成下一个代码

…
#define MAVPACKED (__Declaration__)__pragma (pack (push,1))__Declaration____pragma (pack (pop))
......
MAVPACKED (
typedef struct __mavlink_message{
uint16_t CHECKSUM; ///<在 uint8_t
magic 数据包末尾发送; //<协议魔术标记
uint8_t len; //<有效载荷长度
uint8_t INCOMPAT_FLAGS;//<必须理解的标志
uint8_t COMPAT_FLAGS;//<如果不理解
uint8_t SEQ、可忽略的标志; ///<数据包 uint8_t
sysid 的序列; //<消息发送人系统/飞机
uint8_t COMPID 的 ID; //<消息发件人组件
uint32_t msgid:24的 ID; //<有效载荷 uint64_t
payload64[(MAVLINK_MAX_PAYLOAD_LEN+MAVLINK_NUM_CHECKSUM_Bytes+7)/8];
uint8_t ck[2]; //<传入校验和字节
uint8_t signature[MAVLINK_signature_BLOCK_LEN];
}) mavlink_message_t; 

宏 MAVPACKED 用于更改结构对齐。 TI 编译器不编译此代码。 我尝试像这样更改它

 

#define MAVPACKED (__Declaration__)#pragma pack (PUSH,1)__Declaration__#pragma pack (POP) 

但它也不会编译。 谁知道如何解决? 对我来说、在每个使用的地方替换这些宏是不好的变体。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我只能测试我建议的解决方案、因此我不能完全相信它是正确的。  但我认为与此相近的东西将会起作用...

    #if defined (__TI_Compiler_version__)//测试是否使用 TI 编译
    器#define MAVPACKED (__Declaration__)__Declaration____attribute__(packed)
    #else
    #define MAVPACKED (__Declaration__)__pragma (pack (push、1))__Declaration__
    (pop)#pragma (#diagende_pragma (pop))#define MAVPACKED (#define)_pragma (#define)_pragma (pop
    

    TI 编译器支持许多(并非所有) GCC 属性。  除 C2000外、所有这些器件都支持 packed 属性。

    谢谢、此致、

    乔治