公司有一款产品使用CLA模块一切正常,现把这部分程序移植到另一款产品上,都是用28035,CCS5.3,编译与链接设置相同,但是移植完之后发现,除CLA模块之外的代码运行一切正常,但是主CPU传递给CLA的int类型变量转成float类型计算,再转成int返回之后,与预期结果不符;怀疑是类型转换的问题,于是传递一个常数1000到CLA,转换为float赋值给CLA变量,再转换为int返回主CPU,观察到该数变为992;常数换成2000,结果就是1984;还请各位指教,可能是哪里的问题。
xi ge:
有没有用SVPWM做单相逆变的朋友?
公司有一款产品使用CLA模块一切正常,现把这部分程序移植到另一款产品上,都是用28035,CCS5.3,编译与链接设置相同,但是移植完之后发现,除CLA模块之外的代码运行一切正常,但是主CPU传递给CLA的int类型变量转成float类型计算,再转成int返回之后,与预期结果不符;怀疑是类型转换的问题,于是传递一个常数1000到CLA,转换为float赋值给CLA变量,再转换为int返回主CPU,观察到该数变为992;常数换成2000,结果就是1984;还请各位指教,可能是哪里的问题。
hujun zhou:
问题已解决。
这个问题是一个大坑,DSP的int与short应该都是16位长,但是如果一个函数的形参是int,引用函数的时候传递一个short变量进去编译会报错;出现上面问题的原因就在这里,没加入CLA之前,变量定义一般都使用int;加入CLA的时候,同时加入了几个相关的.h文件,这些文件重新typedef了U16、S16等为相应的short类型,但是在编译的时候会跟之前的定义冲突,本人很不幸,把所有short都修改为了int,编译完成后,除CLA外一切正常,但是CLA与主CPU传递数据的时候,int与float转换就出错了;把程序里所有的int定义都修改为short,此问题解决。
公司有一款产品使用CLA模块一切正常,现把这部分程序移植到另一款产品上,都是用28035,CCS5.3,编译与链接设置相同,但是移植完之后发现,除CLA模块之外的代码运行一切正常,但是主CPU传递给CLA的int类型变量转成float类型计算,再转成int返回之后,与预期结果不符;怀疑是类型转换的问题,于是传递一个常数1000到CLA,转换为float赋值给CLA变量,再转换为int返回主CPU,观察到该数变为992;常数换成2000,结果就是1984;还请各位指教,可能是哪里的问题。
hujun zhou:
问题已解决。
这个问题是一个大坑,DSP的int与short应该都是16位长,但是如果一个函数的形参是int,引用函数的时候传递一个short变量进去编译会报错;出现上面问题的原因就在这里,没加入CLA之前,变量定义一般都使用int;加入CLA的时候,同时加入了几个相关的.h文件,这些文件重新typedef了U16、S16等为相应的short类型,但是在编译的时候会跟之前的定义冲突,本人很不幸,把所有short都修改为了int,编译完成后,除CLA外一切正常,但是CLA与主CPU传递数据的时候,int与float转换就出错了;把程序里所有的int定义都修改为short,此问题解决。
公司有一款产品使用CLA模块一切正常,现把这部分程序移植到另一款产品上,都是用28035,CCS5.3,编译与链接设置相同,但是移植完之后发现,除CLA模块之外的代码运行一切正常,但是主CPU传递给CLA的int类型变量转成float类型计算,再转成int返回之后,与预期结果不符;怀疑是类型转换的问题,于是传递一个常数1000到CLA,转换为float赋值给CLA变量,再转换为int返回主CPU,观察到该数变为992;常数换成2000,结果就是1984;还请各位指教,可能是哪里的问题。
Eric Ma:
回复 hujun zhou:
hujun
下面的数据格式参考:
Eric
公司有一款产品使用CLA模块一切正常,现把这部分程序移植到另一款产品上,都是用28035,CCS5.3,编译与链接设置相同,但是移植完之后发现,除CLA模块之外的代码运行一切正常,但是主CPU传递给CLA的int类型变量转成float类型计算,再转成int返回之后,与预期结果不符;怀疑是类型转换的问题,于是传递一个常数1000到CLA,转换为float赋值给CLA变量,再转换为int返回主CPU,观察到该数变为992;常数换成2000,结果就是1984;还请各位指教,可能是哪里的问题。
liang wang:
回复 hujun zhou:
哎 丫丫 这真是坑啊我才发现