• 11
  • 11月

这几天,Hanny稍微用了一下MMA7660传感器,详细阅读了一下MMA7660的DataSheet,又借着机会与FreeScale的工程师交流了一下,在这里总结一下MMA7660传感器的使用心得。

MMA7660是一款重力传感器,主要用于检测X、Y、Z三个轴所受到的加速度大小。检测范围是-1.5g ~ 1.5g,其中,g为一个重力加速度。

由于MMA7660比较低端,因此也只有6BIT的精度,而且输出值上还会有3个刻度的误差,因此在值的输出上,必须经过一个软件的均值滤波处理。一般来说,如果传感器只是应用于方位检测的话,8个值的滤波就够了。而用于动作检测的话,一般使用32阶的均值滤波。

MMA7660有两种工作模式,一个为Auto-Sleep,即Running模式。在该模式下,传感器可以配置较高的采样率。另一个模式为Auto-Wakeup,即Sleep模式。值得注意的是,该模式并非真正的休眠模式,而只是低速采样模式。在该模式下,能够有效地降低芯片的运行功耗。

MMA7660内部还支持几种常见的中断。在这里值得一提的就是Tap中断了。由于Tap是一个短时间的脉冲,因此只有在最高采样速率下,即120Samples/S下,才能够有效地触发Tap中断。

在动作检测的过程中,尽量采用的是相对的坐标值,而不是绝对的坐标值。因为在生产过程中,并不能保证传感器的绝对水平。

MMA7660的采用IIC的接口。IIC接口这里就不详细介绍了。Hanny在这里要说的是:在读取XYZ坐标的时候,最好采用的就是Multiple Byte Read的方式,这样才能保证XYZ三个坐标是同一次采样的结果。如果分开读取,则有可能读取到不同组的采样数据。

最后,总体来说MMA7660还是一颗比较低端的芯片,如果有高端应用的话,可以考虑使用MMA8452。

附:MMA7660的datasheet

MMA7660FC.rar (提取码: rhzq, 620.9 KB, 下载次数: 3842, 最后修改: 2012-02-29 23:19)

  • 3
  • 11月

openrisc,或者说mips吧,跳转指令会有一个延迟槽。

首先,Hanny可能先需要解释一下什么是延迟槽。我们知道,CPU指令在执行跳转指令时,一般是会清空流水线的。这样,就会造成几个指令周期的浪费。具体浪费周期数取决于流水线的级数。

而延迟槽的作用呢,则是在执行完跳转指令,并执行跳转指令的下一条指令后,才会真正地跳转至目标PC。因此,延迟槽在一定程度上,能够提高CPU的效率。

有的时候,可能不想去利用延迟槽,在GCC的编译选项中增加

-fno-delayed-branch

这样,在编译过程中的跳转,都会在延迟槽中填入nop指令。缺点就是有点浪费程序空间了。

  • 3
  • 11月

最近使用GCC时,老是提示一个错误:
/cygdrive/xx/..\xxx/xxxx.c:118: multiple definition of `xxxx'<br />
xxx/xxxx.o:/cygdrive/xx/..\xxx/xxxx.c:118: first defined here


大概意思就是,有一个函数重定义了!
可是在整个程序中,我并没有去重定义这个函数啊!

最后,经过Hanny的一番查找,原来是斜杆和反斜杆惹的祸!

我们知道,Windows是比较喜欢用反斜杆的,而Linux却钟情于斜杆。

由于在GCC的Makefile中使用了反斜杆的路径,而在linker文件中却使用了斜杆路径,这样,链接器就认为是两个不同路径了。同一个文件也就链接了两次,造成了重定义的发生。

解决方法就是,统一使用斜杆或反斜杆就行了。而Hanny比较推荐斜杆。

  • 29
  • 9月

IAR对局部部变量,一般是采取虚拟寄存器的方式来进行访问。如果是外部堆栈的话,有时它会将SPH,SP的值赋至DPTR中,然后使用DPTR来对堆栈进行操作。

然而,除了将SPH和SP的值赋至DPTR外,它还会做一些动作。

ANL    A,#0x03         ; Maks out relevant ESP bits.<br />
ORL     A,#(HIGH(sfb(EXT_STACK)) & 0xFC)<br />
MOV    DPH,A


其实就是会将堆栈的高6BIT地址强制不可改。具体作用暂时不明。

不过,如果有做一些多BIN的工程时,可就要小心了,需要保证堆栈的高6BIT地址不变,否则可能出一些不可预料的错误。

  • 4
  • 9月

本想一气呵成,一下子写完的。没想到一拖又是好几天。趁着今天周末,把这个总结完了吧。毕竟路还是要向前走的。

五、平淡

工作一年后,慢慢开始冷却,慢慢开始平淡。每天开始变得很简单:吃饭、上班、睡觉。在这一年内,也有很多哥跳槽了。其实一年后,混得较好的,应该都有6、7字头的工资了吧?至少当时有认识的朋友有到这水平。其实老大有和我说过,像我们这样工作满一年出去的,去深圳,随随便便都能找个5k+以上的工作的。公司对我们确实压得有点过了。

当时,我也仔细地考虑过这个问题了,但是我依旧选择留下吧。我想,一件事还没做好之前,总不能半途而废吧。更重要的一个原因是,老大看得起我,有那种知遇之恩的感觉。出去未必还能遇到像老大这样的人,但是留下来,我觉得总会有机会的。是锥子,总能口袋戳穿的。

其实,这也和我的性格有点关系吧。老大也一直在说我不够自信,其实我可以的。但是不知为什么,每次遇到事情,总是在怀疑自己,总是在莫明地害怕。要彻底改掉一些自己不好的缺点,不是一件太容易的事情。但是,应该可以去慢慢地改它吧。

六、选择

在工作了两年后,迎来了也许是人生中的一次比较重大的选择吧。当时,公司的W总,带着一班子的“精英骨干”成员,准备出去另起小灶。也找到了我,也详细描述了一番出去后的前景、机会,能够持有公司多少原始股之类的。

那几个晚上,不眠之夜。似乎,该做点重要的选择了。经过了长时间的挣扎,当然,也问过很多朋友了,最后,我还是选择留下来了。

这次留下来,其实不是因为害怕,不敢出去的。而是真正地去权衡过了。首先,W总并没有以“核心成员”的态度来请我出去的。也就是说,出去后,我仍然只是一个很普通的员工,持有那么一点小P股吧。其次,机会来说,我觉得留下来的机会并不会小于出去的。公司还正在发展,突然间少掉这么多人,剩下的人的重要性也可想而知。第三,就是F哥并没有选择出去。F哥在公司的占着很重要的位置,他有自己不出去的理由。我从毕业起就觉得,不好决定的事实,可以看看F哥的。毕竟,我觉得自己和他还是有蛮多相似的地方。

七、机会

再经过几天的煎熬过后,那件事情还是发生了。当然,老板表示很震惊!想起来就像做梦一样,似乎在电影里才有的情节,就那么地发生了。

F哥其实一直有在和我说,其实过去的时间里,我已经做了很多东西了,对公司还是有一定的重要性的。只是,可能“上面”那些人不一定看得到而已。而经过了这么一次折腾,感觉,似乎自己就像那把锥子一样,要戳破那个口袋了。

当然,太尖锐也不是件好事。一下子很多重任压下来,反而觉得自己有点扛不起了。我希望这只是我缺乏自信的表现吧。

当然,和朋友聊天时,也有人问我现在有没有进管理层之类的。我想,虽然我现在还不是,也并不一定能做好,但是假如真有这个机会的话,我想我会去争取尝试下的。什么都要去试一下,才知道自己行不行,对吧。

八、坚持

我总对自己说,我要坚持做某事。虽然,我不一定能坚持下来。就像跑步一样,我总对自己说要坚持。不过也还好,断断续续地坚持下来了吧。

很多事情,是讲究缘份、运气、机遇的。因为我运气不好,所以我需要坚持。多来几次,总能成功的吧。

说到坚持,又想起高三那阵。那阵真是比较执着,大部份的作品也是那个时候完成的。我想,现在是不是也应该断续地坚持下去呢?把它当成爱好也好,事件也罢。总之,坚持下去,总会有它的用途吧。

九、迷茫

一晃,三年时间就过去了。一切变得更加平淡了。三年前的激情,也淡然无存了。那些读研的同学们,也该毕业了。三年前,我曾对自己说过,只要这三年我不放弃自己,我不会输给那些研究生的。现在他们出来了,也是时候验证一下自己了。

公司依旧在迅速地发展着。陆续在收到一些同学跳槽的信息。此刻,我反而却迷茫了。我是不是也该去体验一下大公司的文化呢?是不是跳一下,才能重新找回自己的激情呢?

三年了,感觉公司的发展和自己的发展同时都到了一个瓶颈了吧。到底是该努力去突破这个瓶颈呢,还是换一个更大的瓶子?

我很迷茫。突然有点不知道路要怎么走了。我想,我现在需要做的就是,慎重选择,然后就是坚持吧。

写给工作了三年的自己。