83、嵌入式系统编程:SVC服务、重入中断与软件优化

嵌入式系统编程: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处理器中,当异常被接受和异常服务结束时,处理器的优先级会自动更新。在异常处理(包括中断)期间,如果触发了相同或更低优先级的异常,这些异常将被挂起,直到当前处理程序完成任务后再进行处理。

这种对相同或更低优先级异常的阻塞行为虽然有利于系统的可靠性,但对于需要移植遗留软件的开发者来说可能会带来问题,因为一些遗留软件依赖于重入异常行为来工作。

幸运的是,有一个软件解决方案。可以为中断处理程序创建一个包装器,使其切换到线程模式,这样在需要时可以再次

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值