打印

帮忙分析一下程序执行架构

[复制链接]
2047|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
目前用mega64的cpu,用16M的晶体。一般来说速度是没问题的。
问题是经我分析,有点麻烦。在不用操作系统前提下,有如下任务:
马达控制:2个马达。一个马达处理耗时50us左右(我调试时直接放在定时器中断里,出入中断动作耗时13微妙,计算处理耗时37微妙左右)。马达处理间隔为400微妙左右。
通讯输入:45微妙左右一次数据输入中断。处理时间大概为13微妙(目前直接放在中断里面处理)。
通讯输出:波特率和数据结构和输入一样,但间隔没要求。
电平跳变中断输入:一共4个输入中断。处理时间不明(估计在20us内),间隔最快只有500us.

其他任务:液晶显示,按钮判断,菜单处理。AD转换处理。马达数据处理。其他数据运算处理。全部的运行时间不明。当中有32位运算,求商求余。但这些任务慢一点没影响。

我又做了一个CPU执行效率测试。得出一个表格

32位乘除法最大耗时55us,为了避免我只用了移位。16位除法有用到。(显示数字有超过255的)目前这种情况,应该如何分配cpu的执行时间,让所有通讯数据和中断无一遗漏?

相关帖子

沙发
ayb_ice| | 2012-4-19 14:22 | 只看该作者
合理的分配前后台任务,中断优先维,是没有问题的

使用特权

评论回复
板凳
airwill| | 2012-4-19 15:01 | 只看该作者
我曾经为了效率, 用汇编改写了除法子程序 24位除以 16 位. 记得是 8MHZ 下 2xuS. 好象比你的效率高多了.

使用特权

评论回复
地板
wjy1107| | 2012-4-19 15:41 | 只看该作者
最好别在中断里做那么多事情,终端只做标志位,具体工作出来干。

使用特权

评论回复
5
joyme| | 2012-4-19 16:48 | 只看该作者
很明显,马达处理放在中断里会影响通讯输入,如果马达处理中断优先级高于通讯输入,那么通讯可能丢失数据,因为马达处理要50us,而通讯是45us就有数据进来,如果通讯优先级高于马达处理的优先级就会影响马达处理的实时性。所以要么不要考虑马达处理的实时性将马达处理放到中断外做,要么降低输入通讯的速率

使用特权

评论回复
6
mugenwon|  楼主 | 2012-4-21 11:52 | 只看该作者
很明显,马达处理放在中断里会影响通讯输入,如果马达处理中断优先级高于通讯输入,那么通讯可能丢失数据,因为马达处理要50us,而通讯是45us就有数据进来,如果通讯优先级高于马达处理的优先级就会影响马达处理的实 ...
joyme 发表于 2012-4-19 16:48


是这样的。问题目前系统,对马达,中断,和通讯3者要求都极高,都不能有任何丢失(特别是中断输入,1000%不能丢失处理半次)。此系统本来是用2个芯片来完成的,我为了节省成本,自认为有能力用1个芯片完成(还有个版本比这个更多了一个任务,LED调光)。
经过我分析,首先,mega64芯片UART有2级缓冲。能连续输入3个数据可以不处理。这功能我没测试过。假如是的话,那么有90us的时间可以不处理通讯(输入2个数据,不要等3个满了再处理保险一点)。马达有2个,每个50us可以分来做。那么可以这样做:

马达1--通讯接收--马达2--通讯接收--中断接收处理---其他事情。
当中,其他事情这个内容很多,假如都一次性处理,耗时绝对会超出下一次马达处理的时间。所以,这些任务要砍开几块。每一次循环处理一块。
如果直接在中断中处理马达需要50us,看了汇编那是因他把n个寄存器全部压栈出栈了(谁叫你用32位操作呢),假如在中断不处理,外面没了这些堆栈操作,那耗时才30多us.

使用特权

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

本版积分规则

96

主题

430

帖子

3

粉丝