打印

移位操作的疑问

[复制链接]
1496|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 | 只看该作者
是啊,楼主你需要首先知道计算的公式是什么。

使用特权

评论回复
5
liuzaiy|  楼主 | 2014-4-27 22:12 | 只看该作者
哦,好吧

使用特权

评论回复
6
liuzaiy|  楼主 | 2014-4-27 22:12 | 只看该作者
算我没说吧,先结贴了哈

使用特权

评论回复
7
airwill| | 2014-4-28 13:57 | 只看该作者
只有
3     p->theta_mech = (int)(tmp>>11);           // Q26 -> Q15
这里是在移位操作, 是为了调整 Q26 到 Q15 的变换, 要知道为什么, 研究一下 IQ 库.
其他的 -> 操作符只是指针结构的成员操作

使用特权

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

本版积分规则

735

主题

7546

帖子

2

粉丝