打印

是不是CCS的buge?

[复制链接]
1164|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhdm|  楼主 | 2018-1-9 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

定义一个联合体:

typedef union FACTORY_TEST
{
uint16_t  All[4];
  struct
   {
     uint16_t   IQ_FullScale_Hz;
     uint16_t   IQ_FullScale_V;
     uint16_t   ADC_FullScale_V1; //1V为单位
     uint16_t   ADC_FullScale_V2; //1V为单位

     }code;
}FACTORYT;

FACTORYT FactoryTest

FactoryTest.code.IQ_FullScale_V = 160;
FactoryTest.code.ADC_FullScale_V1 = 160;

_iq  Value_Mb = (_iq)(FactoryTest.code.IQ_FullScale_V);
_iq  Value_Ma = (_iq)(FactoryTest.code.ADC_FullScale_V1);

float_t  V_a = (float_t)(Value_Ma);
float_t  V_b = (float_t)(Value_Mb);

float_t  Value = V_a/V_b;

运行后显示:Value = 160.0;

显然结果不是期望的·Value = 1.0

不用联合,直接用结构:

typedef struct FACTORY_TEST
{

uint16_t   IQ_FullScale_Hz;
uint16_t   IQ_FullScale_V;
uint16_t   ADC_FullScale_V1; //1V为单位
uint16_t   ADC_FullScale_V2; //1V为单位

}FACTORYT;

FACTORYT FactoryTest

FactoryTest.IQ_FullScale_V = 160;
FactoryTest.ADC_FullScale_V1 = 160;

_iq  Value_Mb = (_iq)(FactoryTest.IQ_FullScale_V);
_iq  Value_Ma = (_iq)(FactoryTest.ADC_FullScale_V1);

float_t  V_a = (float_t)(Value_Ma);
float_t  V_b = (float_t)(Value_Mb);

float_t  Value = V_a/V_b;

运行后显示:Value = 1..0;

是期望的结果。

CCS 为6.2,编译器为c2000_15.12.3.LTS

dsp为 F28069M

出现这一问题的原因是什么?是否是CCS自身编译器的问题?

相关帖子

沙发
zhangmangui| | 2018-1-9 22:31 | 只看该作者
只能说DSP的相关数据类型比较复杂    需要好好研究
可能与VS的运行结果差距很大

使用特权

评论回复
板凳
airwill| | 2018-2-27 12:28 | 只看该作者
嗯, 这里特别要注意一点.  DSP 为了处理小数, 扩展了 _iq 这个数据类型.
这是用整数模拟的定点数. 看 _iq 的定义, 你会发现定义成了 long.
所以 _iq 的数据只有在 IQ 的运算里才是定点数, 否则是 long
因此你就不能用 (float) 做强制类型转换. 转换的结果会是错误的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

236

帖子

1

粉丝