打印

我将优化级别由8级降为6级后好了很多(keil),不知如何找原因

[复制链接]
3289|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alphal|  楼主 | 2007-12-7 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mfrc500的程序,用的philip的源码,只是将中断改查询了,写数据到卡的操作总是会出现很多错误,优化级别为8时错误率非常高,达20%以上,而将优化级别降为6后,错误率只有万分之二以内,(写失败后重试7次的情况下的测试结果,不重试这么多次失败率会更高),可是老大认为不用重试,成功率应该基本为100%,而且天线的设计被认为是没有问题的。
真不知如何找原因了,难道是优化造成的,怎么找到被优化坏的地方?还有优化之外的问题,从何找起。。。郁闷。

相关帖子

沙发
alphal|  楼主 | 2007-12-10 09:38 | 只看该作者

期待高人指点

使用特权

评论回复
板凳
农民讲习所| | 2007-12-10 10:27 | 只看该作者

接收要中断,发送可以用查询

优化可能影响了一些中断执行的时间,也就影响了你查询串口的时间,有可能丢失串口数据。

设计中串口接收一定要用中断,否则是个不成熟的产品。

使用特权

评论回复
地板
alphal|  楼主 | 2007-12-10 11:03 | 只看该作者

这里的中断并非串口中断

这里中断是:mcu向mfrc500芯片写数据,等待它将数据发到卡,然后卡会给芯片mfrc500返回数据,芯片接收到数据后对mcu的外部中断引脚产生信号,mcu在外部中断服务程序里读芯片寄存器来获取数据并判断。
我的程序没用外部中断引脚,对芯片写入数据后,不停查询mfrc500的寄存器来获取数据并判断。

优化可能影响了一些中断执行的时间?
我这里没有中断,而且执行时间对我这里看不出有什么影响。

使用特权

评论回复
5
农民讲习所| | 2007-12-10 11:19 | 只看该作者

不熟悉mfrc500

是否和接收过程有判断程序?这样也会影响接收过程。如果可以,尽量使用缓冲先接收下来之后再做处理。

使用特权

评论回复
6
alphal|  楼主 | 2007-12-10 11:53 | 只看该作者

。。。

接收的时候是这样的。

产生中断以后,读芯片某状态寄存器,它里面包含了错误及是否有接收到数据等信息,如果有错误就进行错误判断,有数据就读数据。
现在的问题是优化级别为8级的时候经常会出现有错误,而优化6级情况就好很多。

使用特权

评论回复
7
农民讲习所| | 2007-12-10 11:57 | 只看该作者

应该不管三七二十一,将mfrc500数据全接收下来

防止mfrc500内部缓冲区数据溢出。

使用特权

评论回复
8
alphal|  楼主 | 2007-12-10 12:37 | 只看该作者

。。。

所长,就算全接收下来,就算也是对的(可能性不大,否则芯片有问题),错误也在那里,是不能回避的。。。

使用特权

评论回复
9
dai_weis| | 2007-12-10 12:47 | 只看该作者

既然用的是人家的源码,那么至少

得分析一下源码的结构,会不会是源码中有些延时等指令或者函数适应的优化级别不同,过高的优化导致某些代码被优化掉了。
最好再去验证一下那个天线,不能说:天线的设计被认为是没有问题的,既然出了问题都要怀疑,逐步求证,最后剩下的就是他了(好像福尔摩斯说的)

使用特权

评论回复
10
alphal|  楼主 | 2007-12-10 13:06 | 只看该作者

。。。。。。

会不会是源码中有些延时等指令或者函数适应的优化级别不同,过高的优化导致某些代码被优化掉了。

这里没有延时。。。本人也识别不出哪些代码适应哪样的优化级别。。所以说不知道从哪儿开始找问题了,郁闷。。。

使用特权

评论回复
11
alphal|  楼主 | 2007-12-10 16:42 | 只看该作者

waiting.......

使用特权

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

本版积分规则

112

主题

473

帖子

1

粉丝