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.

关于CLA中数据类型与CPU中数据类型匹配问题

Other Parts Discussed in Thread: C2000WARE

对于int型在CLA中为32位,而在CPU中为16位,很多外设寄存器的定义是用Uint16定义的,比如EPWM.h文件。然而很多时候会在CLA中访问这些寄存器,CLA与CPU如何实现Uint16数据类型的兼容的?

在E2E上面有些工程师给出:只要把f280xx_cla_typedefs.h文件定义放在device文件前面就可以?请问为什么?

而且在f28004x_cla_typedefs.h中存在预编译符号__TMS320C28XX_CLA__,按照《TMS320C28x Optimizing C/C++ Compiler》的解释,只要编译.cla的文件,__TMS320C28XX_CLA__就会被定义为1,如果按照这种思维,是否可以理解为:

对于使用CLA外设的情况下Uint16数据类型其实就是unsigned short,只不过被使用typedef从定义了,所以CPU和CLA编译器在编译的时候不会出现错误。

请专家对f280xx_cla_typedefs.h文件代码的功能和作用详细的解释一下啊!

谢谢

  • 您用的是f28004x芯片吗?请参考C2000Ware中C:\ti\c2000\C2000Ware_1_00_01_00\device_support\f28004x

  • 是的啊,但是里面没有给出详细说明啊。上面的那个文件还是不太理解,存在的必要。

  • 你可以参考我之前的回复另一个问题的链接:

    http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/p/140044/394519.aspx#394519 

    以及TI的关于CLA的官方文档 

    http://processors.wiki.ti.com/index.php/C2000_CLA_C_Compiler 

    问题的核心在于对于short类型的,CLA和CPU的定义是一致的,所以Uint16在所有地方可以通用,我觉得你应该仔细的阅读TI的官方文档,官方文档里面对此问题描述非常的清楚

  • 谢谢!

             你的解释和我之前的理解差不多,也就是上面说的在CCS编译器中定义了宏__TMS320C28XX_CLA__,只要编译器发现.cla文件,就会自动将__TMS320C28XX_CLA__变成1,所以int类型就被typedef成为了short,这样CPU28和CLA对寄存器就不会出现类型冲突了。这点可以确定了。

            但是不知道你是否发现“”f28004x_device.h”文件中也有和f28004x_cla_typedefs.h文件中一样的关于类型重定义的语句,这样你不觉得还要把f28004x_cla_typedefs.h文件放在f28004x_device.h前面多此一举吗?而示例文件中明确要把f28004x_cla_typedefs.h放在前面,这里还存在疑问,想请教一下你的理解。

           另外,在f28004x_device.h中主要包含了DSP外设的寄存器的重定义,但是再最后有:

    // byte_peripheral attribute is only supported on the C28
    //
    #ifndef __TMS320C28XX_CLA__
    #include "f28004x_can.h"
    #include "f28004x_dcc.h"
    #include "f28004x_lin.h"
    #endif

    如果按照上面的理解,会出现矛盾的,含有.cla文件的时候,ifndef __TMS320C28XX_CLA__为假,那么#include "f28004x_can.h"就不会被包含,这样CAN就不会正常工作,请问这怎么理解?

  • 首先程序是人写的,可以根据需要进行修改,如果你觉得不合适,改掉它就是了,TI的代码也不是十全十美的;

    如果你不确定那段代码会不会被编译,你可以直接查看宏定义,在编译器里面如果没有被包含的话,那段区域是加黑处理的;

  • 这TMS320C28x Optimizing C/C++ Compiler第39页对头文件中_TMS320C28XX_CLA_宏定义的,如果按照上面手册上的理解,f28004x_cla_typedefs.h文件里面加黑的区域实际上在编译的时候是被编译的,

    下面是device.h文件中关于类型定义的

    按照上面编译器预定义的宏,阴影的地方其实最终是被编译的

    仿真的情况下,带.CLA文件的项目中,运行CAN是可以的。TI会犯错误,但是大公司犯这种太明明显的错误可能性不高吧,估计还是我们没有真正搞明白其中的原理吧!做学问最好不要一知半解,懂了一点就认为全通了,要细心点,追根求源吧!

    希望大牛解释一下,也能知其所有然,谢谢。