移位操作的疑问

[复制链接]
1676|6
 楼主| liuzaiy 发表于 2014-4-27 22:04 | 显示全部楼层 |阅读模式
Code of TMS320F28335 CCS4\v120\DSP2833x_examples\eqep_pos_speed\Example_posspeed.c文件中有这么一段是计算机械角度的:
   pos16bval=(unsigned int)EQep1Regs.QPOSCNT;     // capture position once per QA/QB period
      p->theta_raw = pos16bval+ p->cal_angle;        // raw theta = current pos. + ang. offset from QA

   // The following lines calculate p->theta_mech ~= QPOSCNT/mech_scaler [current cnt/(total cnt in 1 rev.)]
   // where mech_scaler = 4000 cnts/revolution
1     tmp = (long)((long)p->theta_raw*(long)p->mech_scaler);   // Q0*Q26 = Q26
2     tmp &= 0x03FFF000;                                       
3     p->theta_mech = (int)(tmp>>11);           // Q26 -> Q15
4     p->theta_mech &= 0x7FFF;   

1~4为什么要这样进行位操作,请解释一下,多谢!
chuxh 发表于 2014-4-27 22:05 | 显示全部楼层
这个肯定是根据计算角度的公式,得到的程序呗
dingy 发表于 2014-4-27 22:09 | 显示全部楼层
是啊,首先的知道怎么计算角度的公式啊。
chuxh 发表于 2014-4-27 22:10 | 显示全部楼层
是啊,楼主你需要首先知道计算的公式是什么。
 楼主| liuzaiy 发表于 2014-4-27 22:12 | 显示全部楼层
哦,好吧
 楼主| liuzaiy 发表于 2014-4-27 22:12 | 显示全部楼层
算我没说吧,先结贴了哈
airwill 发表于 2014-4-28 13:57 | 显示全部楼层
只有
3     p->theta_mech = (int)(tmp>>11);           // Q26 -> Q15
这里是在移位操作, 是为了调整 Q26 到 Q15 的变换, 要知道为什么, 研究一下 IQ 库.
其他的 -> 操作符只是指针结构的成员操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

735

主题

7546

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部