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.

[参考译文] 编译器/TMS320F2.8335万:“„__packed__”的替代属性。

Guru**** 2587365 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/656291/compiler-tms320f28335-alternative-attribute-for-__packed__

部件号:TMS320F2.8335万
主题:controlSUITE中讨论的其他部件

工具/软件:TI C/C++编译器

您好,

 

我正在使用EtherCAT从属设备。 要实施从属设备,EtherCAT技术组将提供从属设备堆栈代码[1]。 此代码将结构与指针运算结合使用。 这样就有必要禁止结构中的伪字节,这些字节由编译器自动插入。 通常可以使用“__packed__”属性,告诉编译器对于特定结构不允许使用虚拟字节。 在[2]中,我发现C2000编译器不支持“__packed__”属性。

 

C2000编译器是否有其他方法禁止结构中的伪字节?

此致,Stephan

 

[1] https://www.ethercat.org/en/products/54FA3235E29643BC805BDD807DF199DE.htm</s>2.9643万

[2] http://processors.wiki.ti.com/index.php/GCC_Extensions_in_TI_Compilers#Type_Attributes


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

    我们的EtherCAT专家本周不在办公室。 当他回来时,他会处理这个问题。

    C2000是一款16位字机器。 这意味着它可以访问的最小数据量为16位。 因此,字节表示为16位字。

    我认为没有办法在C2000上按您的需要打包数据。 但我将请我们的专家澄清一下。 在这种情况下,您可能需要修改访问数据的方式。

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

    您好,Sal,

    感谢您的回答。 EtherCAT专家是否已准备就绪? 我确实对数据的访问方式进行了调整。 这现在适用于我正在使用的特殊工艺数据映像。 但我担心当我更改数据结构时,问题会再次出现。

    我发现编译器正在为以下结构插入一个16位dummy单词:

    typedef结构obj_struct_packed_start {
    UINT16 u16SubIndex0;
    UINT32 SI1;/* Subindex1 -参考7000.1 7000.2 7000.4 */
    UINT32 SI2;/* Subindex-参考UINT32
    SI3;/* Subindex3 -参考7000.3 */
    UINT32 Si4;/* Subindex5
    /* Subindex5 -参考7000.5 */
    UINT32 SI6;/*子索引6 -参考7000.6 *332/UINT32
    SI7;/*子索引7 -参考7000.7 */
    UINT32 SI8;/*子索引-参考7000.8 */
    UINT32 SI9;/*子索引7000.9 */
    UINT32 SI10; /* Subindex10 -参考7000.10 */
    UINT32 SI11;/* Subindex11 -参考}与7000.11 7000.14 *142/
    UINT32 SI12;/* Subindex12 -参考
    
    
    数据与7000.12 */ UINT32 SI13有关;/* Subindex13 -参考数据与7000.13 */ UINT32 SI14有关;/* Subindex14 -结构OBJ_TOB1600
    ; 

    dummy单词位于成员0和成员1之间。

    这是我的错误的根源。 是否有办法为这样的情况打包结构?

    此致,Stephan

    
    

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

    您好,Stephen:

    对于C28x,必须在32位边界上进行32位访问。 这就是为什么在成员0和成员1之间有一个虚拟字的原因。

    此致,
    SAL

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Stephan,
    没有办法解决这个问题,我们必须确保SW知道填充的字节数/字词,并在代码中解决这个问题。

    请查看我们在C28上的controlSUITE for EtherCAT中发布的软件宣传材料。
    C:1.0

    如果您按照用户指南(假定您已经是ETG成员) SPRUIG9操作,它将告诉您如何将修补程序应用到EtherCAT堆栈以使其在C28上运行。 目前这些修补程序仅适用于SSC 5.11。

    如果您生成从属堆栈源代码以及回声堆栈示例,它将显示我们如何解决您正在讨论的问题。

    如果您有任何疑问,请告诉我们您的想法。


    此致
    Santosh Athuru