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

Embedded 在Cortex-M3上的中断处理程序之间传递参数,embedded,interrupt,cortex-m3,Embedded,Interrupt,Cortex M3,我正在为Cortex-M3构建一个轻内核 在高优先级中断中,我想调用一些代码,在低优先级中断中运行,并传递一些参数 我不想使用队列将工作发布到低优先级中断 我只有一个缓冲区和大小可以传递给它 在编程手册中,它说SVC中断处理程序是同步的,这可能意味着如果您从优先级低于SVC处理程序的中断调用它,它会立即被调用(结果是,您可以将参数传递给它,就像它是一个函数调用一样(有点像MS-DOS中的BIOS调用)) 我想用另一种方法:将参数从高优先级中断传递到低优先级中断(此时我将参数保留在内存中的固定位置

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

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

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

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

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

我想用另一种方法:将参数从高优先级中断传递到低优先级中断(此时我将参数保留在内存中的固定位置)

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


谢谢,

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

高优先级中断可以在任何时候中断低优先级处理(除非您特别注意与硬件同步,并且您认为不会发生这种情况,但情况可能并非如此)

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