搜索
bottom↓
回复: 13

发个讨论贴: 关于单片机的运算能力

[复制链接]

出0入0汤圆

发表于 2012-11-17 09:25:18 | 显示全部楼层 |阅读模式
本帖最后由 sgweilong 于 2012-11-17 09:27 编辑

从最早的89C52学起, 也有10多年了,虽然现在开发以ARM为主,但是还是对keil51有感情, 经常有些小项目或者改造项目,喜欢用51来实现.

最近做一个改造项目, 11.0592M, 6CLK. 发现了两个问题:
1. 串口处理数据, 不用中断反应比较快, 但有丢数据的风险.
中断用了接收FIFO, 一有数据先放在FIFO里面, 然后在主程序中屏蔽中断取数, 处理.
比较了一下同样的命令任务:
不用中断, 直接查询RI, 处理完数据最多是16ms.
加中断处理, 处理数据多在100~120ms左右. 同样的功能我用ARM7试过没有发现有区别,基本也是16ms左右.

2. 定时1s功能的实现, 用除法和不用除法, 结果区别很大:
定时器标准定时25ms溢出, 用中断和不用中断是一样的,这里不讨论中断问题. 但是下面两个语句造成的结果让我吃惊:
语句判断1: if ( ( SystemTicks1msec % 20 ) == 0 ) {1s定时到, SystemTicks1msec++; } //to long time esp if it is U16
语句判断2: if ( SystemTicks1msec > 20 ) {1s定时到, SystemTicks1msec=0; };

1s定时都没有问题,很准. 但是我用语句1的时候, 串口用查询方式基本无法工作, 发3次命令顶多能收到1次. 为了这个问题, 我搞了1下午,最后才发现用语句2就成功.
或者把20改为64也没有问题.

以上是个人的一点发现, 欢迎点评,共同进步!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-17 15:02:03 | 显示全部楼层

  建议LZ将第一段话给删掉。。

  你碰到的这些问题,都是比较基础的问题。

  串口接收问题,没有代码不好评,但我从来没有遇到你这样的问题。

  定时问题,是你自己对51理解不深。除法指令在51中是很费时的,可能一个除法还没做完,串口数据已经接收两次了。当然丢数据。
  而当你把除数改为64,应该是编译器优化为移位指令了,这要看你用的是哪颗芯片,有些芯片移位指令和除法周期相同,有些移位指令比除法指令快。

出0入0汤圆

 楼主| 发表于 2012-11-17 20:54:28 | 显示全部楼层
第一个问题,做过才知道。如果在中断中接收并直接处理数据,我相信还是很快的。
第二个问题没有谈定时问题,可能刚好是64时候,被优化了。谢谢提醒。

这是一个分享的平台,只是拿单片机混口饭吃,又不是搞科研。

出0入0汤圆

发表于 2012-11-18 16:27:25 | 显示全部楼层

  哈。。抱歉,说话重了点。

  你可以发第一个问题的一小段代码上来瞧瞧,让大家分析一下BUG在哪里。

出0入0汤圆

发表于 2012-11-18 16:48:44 | 显示全部楼层
我最近也在搞这个串口数据接收问题,如果不用中断,用查询,会不会浪费了很多等待的时间呢?或者说接受方式是什么样的可以既不占CPU又省时

出0入0汤圆

 楼主| 发表于 2012-11-19 13:41:50 | 显示全部楼层
duanll 发表于 2012-11-18 16:27
哈。。抱歉,说话重了点。

  你可以发第一个问题的一小段代码上来瞧瞧,让大家分析一下BUG在哪里。

没关系,来回帖的都是朋友

这个是一个讨论贴, 只是友善提醒大家, 单片机的确好用, 但是要注意一些速度上面的问题.

我自己一直用ARM做开发, 对新来的工程师总是推荐他们从51做起, 所以自己也回头看看, 写点收获.

出0入0汤圆

 楼主| 发表于 2012-11-19 13:45:20 | 显示全部楼层
今朝有酒 发表于 2012-11-18 16:48
我最近也在搞这个串口数据接收问题,如果不用中断,用查询,会不会浪费了很多等待的时间呢?或者说接受方式 ...

用查询, 对于接收来说并不会浪费时间, 你查询的只是一个标志位而已.
查询最大的问题是会miss数据, 特别是单片机有多个事情要处理的时候.

发送的时候用中断应该能节省一些等待时间, 但是需要多用掉一些RAM.

出0入0汤圆

发表于 2012-11-19 16:17:02 | 显示全部楼层
  如果做主机,用查询方式还勉强能用。如果做从机用查询,基本上单片机就做不了其它事了。

  我一般收发都用中断,只要调试OK,基本上没有丢过数据。

出0入0汤圆

发表于 2012-11-19 16:35:30 | 显示全部楼层
看看我的头像变了米?

出0入0汤圆

发表于 2012-11-19 17:01:23 | 显示全部楼层
俺喜欢 if( !(SysTim--)) {SysTim = 0;...}

出0入0汤圆

 楼主| 发表于 2012-11-20 11:09:03 | 显示全部楼层
如果就是一个U8和U16就造成这么大的区别, 不是正说明单片机运算能力问题么.

我一直对51很有感情, 当年也是很难才转到ARM做项目的,现在回头做51, 发现了很多以前没注意到的问题.

其实还准备发个贴讨论函数多级调用的问题 (汗, 因为函数中再次调用其他函数,现在程序卡住了, 不是我解决不了问题, 只是分享一下看法).

做51的,不管你理解多深, 还是向32位机或者AVR发展吧

出0入0汤圆

发表于 2012-11-21 15:16:12 | 显示全部楼层
LZ推荐一款2块以下的32位机看看。。  

出0入0汤圆

 楼主| 发表于 2012-11-21 18:31:31 | 显示全部楼层
duanll 发表于 2012-11-21 15:16
LZ推荐一款2块以下的32位机看看。。

2块钱的32位机没见过.
要不你推荐一款?

价钱低不是什么好事吧?
以前都说中国人人力成本低, 现在据说缅甸越南印度更低. 低到什么程度? 好像中国人的1/5吧, 你要不要跟他们比比?

出0入0汤圆

发表于 2012-11-22 11:41:50 | 显示全部楼层

  是啊,所以说32位机并不适应所有行业。不一定都要用32位机,AVR就更不用说了。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 20:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表