嵌入式系统编程:SVC服务、重入中断与软件优化
1. SVC服务与异常优先级
在嵌入式系统中,SVC(Supervisor Call)服务是一种重要的机制,用于实现特权级的切换。由于中断程序状态寄存器(IPSR)不能直接写入修改,只能通过异常进入或返回来更改,因此SVC服务变得尤为重要。
在使用SVC服务时,需要定义相关异常的优先级。例如,因为SVC服务是在SysTick处理程序中调用的,所以SysTick异常的优先级必须低于SVC异常。以下是设置优先级的示例代码:
NVIC_SetPriority(SysTick_IRQn , 7); // Low priority
NVIC_SetPriority(SVCall_IRQn , 4); // Medium priority
同时,还需要创建自定义的非特权函数,当处理器处于非特权状态时执行该函数。
2. 重入中断处理
Cortex - M处理器与其他一些处理器架构的一个区别在于,它本身不支持重入异常。在Cortex - M处理器中,当异常被接受和异常服务结束时,处理器的优先级会自动更新。在异常处理(包括中断)期间,如果触发了相同或更低优先级的异常,这些异常将被挂起,直到当前处理程序完成任务后再进行处理。
这种对相同或更低优先级异常的阻塞行为虽然有利于系统的可靠性,但对于需要移植遗留软件的开发者来说可能会带来问题,因为一些遗留软件依赖于重入异常行为来工作。
幸运的是,有一个软件解决方案。可以为中断处理程序创建一个包装器,使其切换到线程模式,这样在需要时可以再次
超级会员免费看
订阅专栏 解锁全文
1179

被折叠的 条评论
为什么被折叠?



