发新帖我要提问
123
返回列表
打印

探讨一下ARM以及RVDS的使用

[复制链接]
楼主: xinzha
手机看帖
扫描二维码
随时随地手机跟帖
41
xinzha|  楼主 | 2010-7-22 22:40 | 只看该作者 回帖奖励 |倒序浏览
前一阵在做spi和dmx的验证的时候,spi模块在和主机通信的时候,主机软件必须加上很大的延时才能保证读到软件协议中的同步头,对于这个问题查了好几天,把spi和dma通信的每一步拆解分析,都是能够保证足够快的处理速度,并且模块间的协调也没有出问题,从收到主机从spi传来的数据到把应答压入到spi的fifo都是在极短时间内完成。
一次偶然的调试中把dmx模块关闭,结果spi传输就再也不出问题了,最终查出来居然是dmx的firmware中调用了printf,而恰恰是这些printf把spi中断推到了后面,导致通讯失去了实时性。查阅了一下arm的相关文档,在rvds中,如果调用了arm库提供的rvds的printf,那么在执行这个swi的时候,rvds会自动将arm的irq和fiq关闭,必须等到swi返回后才能恢复,而这些swi都是几十毫秒的执行时间。
在ARM架构中,swi却是比fiq和irq的优先级要低的异常,也就是说,在swi执行期间,如果软件不做特殊处理,irq和fiq异常依然可以得以响应,而rvds的做法却跟这个架构中写得明明白白的优先级相悖,我吐血鄙视rvds同学的这个特性,让我等无所适从,本来从架构方面分析我从来没怀疑过swi会延迟中断处理,浪费了好几天时间。

使用特权

评论回复
42
xinzha|  楼主 | 2012-6-20 17:53 | 只看该作者
解决了一系列空指针以及内存改写的bug,这类问题首先需要提高软件人员自身的素养以及良好的变成习惯来避免,其次需要有对发生问题时的判断能力,大胆怀疑,小心求证,最后还要有好工具的支持,目前多数仿真器都支持硬件断点监视,比如说我可以设置为当有人修改0地址内容时将cpu停住,这样就能很方便地抓到犯罪的语句了。不过也有例外情况,比如这块内存是被总线上其他master改掉的,那就没辙了,因为cpu只是总线上的一个master而已,仿真器监视的也是cpu自己的行为,总线上其他master从结构上来说跟cpu是同级的,如果他们修改内存是不能当时就捕捉到的,只能根据其他线索去查哪个master改的,以及软件的什么行为导致的修改。

使用特权

评论回复
43
电子学习员| | 2012-7-2 00:26 | 只看该作者
我知道是好贴,只是现在还没能充分领悟lz的思想

使用特权

评论回复
44
BaiWfg2| | 2012-7-2 21:35 | 只看该作者
学习啦。。高手尚在世,偶岂可酣睡?

使用特权

评论回复
45
xinzha|  楼主 | 2012-7-3 19:52 | 只看该作者
本帖最后由 xinzha 于 2012-7-27 10:13 编辑

经过一系列测试,rvds2.2和uvision4的优化存在问题,跟用rvds3.0时的优化效率完全没法比,而现在的公司由于没人爱用正版的rvds4.0(白白放在那儿不搭建环境。。。),又淘不到比rvds2.2更高级的可用的盗版IDE,所以只能等机会再在高版本上给出测试结果。

使用特权

评论回复
46
sys_suweixiao| | 2012-7-19 18:06 | 只看该作者
学习。

使用特权

评论回复
47
inurl| | 2012-12-7 09:06 | 只看该作者
楼主都用这么高级的功能, 我还停留在ARM MDK上

使用特权

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

本版积分规则