很明显,马达处理放在中断里会影响通讯输入,如果马达处理中断优先级高于通讯输入,那么通讯可能丢失数据,因为马达处理要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.
|