在Cortex-M3上的中断处理程序之间传递参数

时间:2010-05-02 00:28:26

标签: embedded interrupt cortex-m3

我正在为Cortex-M3构建一个轻型内核。

从高优先级中断我想调用一些代码在较低优先级的中断中运行并传递一些参数。

我不想使用队列将工作发布到优先级较低的中断。

我只有一个缓冲区和大小传递给它。

在编程手册中它说SVC中断处理程序是同步的,这可能意味着如果你从比SVC的处理程序更低优先级的中断调用它,它会被立即调用(这样做的结果是你可以传递参数到好像它是一个函数调用(有点像MS-DOS中的BIOS调用)。)

我想以另一种方式做到这一点:将参数从高优先级中断传递到较低优先级中断(此时我正在将参数保留在内存中的固定位置)。

最好的方法是什么(如果可能的话)?

谢谢,

1 个答案:

答案 0 :(得分:1)

我不熟悉Cortex-M3架构,但我确定您需要在共享内存上提供锁定机制。

优先级较高的中断可以随时中断较低优先级的处理(除非你有一些如何与硬件进行特定的同步,并且你不会发生这种情况,但事实并非如此)

锁定机制可能像一位标志一样简单,在关键部分内(禁止对标志进行读取 - 修改 - 写入的中断)以保证锁定标志上的原子交换。(即,如果优先级较低)进程/中断正在访问/更新锁定标志,更高优先级的中断确实进入并更改它。)该标志是用于读取和写入共享内存空间的同步机制,允许两个进程锁定另一个进程它正在访问共享资源,而不会在一段延长时间内禁用中断。(我想如果共享内存访问速度足够快,你可以直接访问共享内存时禁用中断)