我想在下面的代码块中实现受SVC保护的关键部分:
std::cout << image_tensor;
如何在cortex R5 ARM上实现SVC_disable / restore
有关澄清的代码流的其他详细信息
这是在ARM Cortex R5上运行的裸机应用程序
执行路径1:
key = SVC_disable();
... /* SVC protected critical block of code */
SVC_restore(key);
现在,当控制在关键部分时,可能会发生中断,并且中断服务程序可以发布可能损坏状态的SVC。
我不想在关键部分完全禁用IRQ / FIQ。仅延迟SVC,直到执行路径1离开临界区
ANy发布的SVC应该是一个待处理的异常,当执行路径1离开关键部分时会执行该异常
我看到禁用IRQ / FIQ的说明,但没有看到任何选择性地禁用SVC异常的选项。
答案 0 :(得分:2)
svc
is the user-space system-call instruction。所以只有当用户空间代码在当前核心上运行时才会发生,对吗?它不是异步发生的,禁用它是没有意义的,因为当svc
指令运行时应该发生什么?
为了避免在内核函数处于关键部分时运行用户空间代码(可能包括svc
),请在关键部分周围禁用内核抢占,并且不要睡觉。这是用户空间代码在运行某些内核代码(AFAIK)的同一核心上运行的唯一方式。