Part Number:TMS320F28374S
CCS版本:Version: 12.1.0.00007
C编译器:TI v22.6.0.LTS
主要描述如下:
1,为了避免不必要的干扰,贴出数据类型重新定义的部分
2,创建结构体
3,声明结构体变量
4,使用结构体变量运行代码:
5,查看运行结果
结果显示不正常!!!
6,将claUSHORT数据类型改为claULONG:
7,查看运行结果:
8,数据显示正常
问题:这是怎么回事?使用CLA是需要注意些什么?
user5229665:
不是很明白你运行结果为什么那样不正常。
使用CLA是需要注意些什么?
我踩过的坑至少有三个印象深刻的
(1)CLA中int 是32bit的,一般不建议在cla中用int,要想使用16位的,用short,这可能是你换成long就行了的原因。只是可能,但具体原因我说不好
你可以把你数据类型定义中的int 换成short试试,也可以把你结构体中整形的定义放在一起,别这样和float穿插着。
试一试。
(2)IQmath库中Sqrt开方,被开方数可以是0,开方结果也是零,对0开方结果当然是零啊,这个好理解。 但是,当cla中使用哪个函数来着,我想想,好像是CLAsqrt,忘了是不是了,要是对0开方,得到的结果是无穷大!!!当时不知道啊,把程序从外环移植到cla中,导致最终计算结果不对,一开始没想到这样啊,根本没往这方面想,查了好久好久,后来发现原来是这里!
(3)一段代码,不改一个字. .cla文件的优化等级提高,就会产生一些难以解释的奇怪现象。
当时所用平台:28377s,CCS版本10,编译器版本也不是22,三年前的事情。
,
YuanZe Wang:
#ifdef __TMS320C28XX_CLA__ typedef shortint16; typedef longint32; typedef unsigned charUint8; typedef unsigned shortUint16; typedef unsigned longUint32; typedef floatfloat32; typedef long doublefloat64; typedef struct { Uint32 low32; Uint32 high32; } Uint64; typedef struct { int32low32; int32high32; } int64; #else // __TMS320C28XX__ typedef intint16; typedef longint32; typedef long longint64; typedef unsigned intUint16; typedef unsigned longUint32; typedef unsigned long longUint64;你的claUSHORT用的是unsigned int,这个在C28里面是16位,cla里面是32位。C28和CLA会用不同的方式解析你的结构体内容,最终导致错误,建议你用C99类型声明或者TI提供的类型声明。