小弟一直没有搞清楚流水和中断的问题,想请专家们给解释一下:
1)优化后的代码,即流水很充分的代码,执行过程中,可否允许中断发生?
2)若发生中断,对流水本身有何影响?
3)流水过程中,若发生中断,中断的响应会否延后?若延后,延后的周期数怎么确定?
4)若发生中断延后的情况,如何避免这个延后?
希望专家们针对以上4个问题不吝赐教,或者给出相应的文档,小弟好参详
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
小弟一直没有搞清楚流水和中断的问题,想请专家们给解释一下:
1)优化后的代码,即流水很充分的代码,执行过程中,可否允许中断发生?
2)若发生中断,对流水本身有何影响?
3)流水过程中,若发生中断,中断的响应会否延后?若延后,延后的周期数怎么确定?
4)若发生中断延后的情况,如何避免这个延后?
希望专家们针对以上4个问题不吝赐教,或者给出相应的文档,小弟好参详
Shaquille Wu 说:1)优化后的代码,即流水很充分的代码,执行过程中,可否允许中断发生?
通常情况下不允许。
Shaquille Wu 说:2)若发生中断,对流水本身有何影响?
可能导致结果不对。
Shaquille Wu 说:3)流水过程中,若发生中断,中断的响应会否延后?若延后,延后的周期数怎么确定?
如果中断没有被disable,就会被响应。
Shaquille Wu 说:4)若发生中断延后的情况,如何避免这个延后?
这是代码效率与中断实时响应之间权衡的问题。首先了解一个道理,没有绝对的实时,只要满足你系统的需求就算是满足你的实时要求。看spru187t文档里-mi选项。
非常感谢专家的回复,
不过有个疑问,按照您的意思,在流水代码的首位都要添加disable int和enable int,这样的语句,是这样吗?
平时,我都没有添加,貌似也没出什么问题,这是为什么呢?
比如,算法正在执行,我并没有disable int,此时GPIO的上的某个管脚正在监听某个中断的发生(并且这个监听是必须要进行的)。
或者说,算法正在执行,网络部分必须监听外部发来的命令。
像我这样的处理,肯定错了吗?
按照您的意思,好像必须通过-mi设定一个延迟,在某个流水结束的时候,再让int响应,是这么理解吗?
通常,我在-mi的地方设定的是200,也就是延迟200个cycle。
如果是这样理解,假设某个循环次数很大,那么这个流水肯能会经历非常大的周期数,200个cycle显然是不够的,那这种情况下,-mi的设定岂不是没用了?
你写的汇编吗?
如果不是,这些都是编译器完成了中断的disable和enable。
Shaquille Wu 说:通常,我在-mi的地方设定的是200,也就是延迟200个cycle。
是最多延迟200cycle.
Shaquille Wu 说:如果是这样理解,假设某个循环次数很大,那么这个流水肯能会经历非常大的周期数,200个cycle显然是不够的,那这种情况下,-mi的设定岂不是没用了?
不是-mi没用,而是流水安排会按200cycle分段,其实看一下加了-mi后编译产生的汇编代码,可以看到对全局中断的关闭和打开的。