2

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

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

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

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

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

我想以另一种方式做到这一点:将参数从高优先级中断传递到低优先级中断(目前我通过将参数留在内存中的固定位置来做到这一点)。

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

谢谢,

4

1 回答 1

1

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

较高优先级的中断可以随时中断较低优先级的处理(除非您专门将其与硬件同步并且您确信这不会发生,但可能并非如此)

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

于 2010-05-02T14:59:14.753 回答