TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28374S: 使用CLA时,采用结构体进行各种数据类型定义变量,出现变量使用不正常的问题

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提供的类型声明。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28374S: 使用CLA时,采用结构体进行各种数据类型定义变量,出现变量使用不正常的问题
分享到: 更多 (0)