Cortex M3使用PendSV异常

我个人理解PendSV就是一个软中断(由软件触发的中断),触发方法为
SCB->ICSR |= 1 << 28;
	软中断有什么意义?我软中断何不直接调用PendSV_Handler()?效果不是都一样?
	要讲清楚这两者之间的区别就必须了解Cortex M3的运行模式, Cortex M3有两种操作模式:Handler模式(可以简单的认为就是中断服务函数中的代码)和Thread模式(普通的代码), 两种特权级别:特权级和用户级.
在Thread模式下可以拥有特权级或者用户级,在Handler模式下肯定是特权级.
	PendSV中断虽然是软中断,但也有特权级别啊.拥有某些特权就可以实现任务切换了(主要是某些寄存器必须是拥有特权级别后才能读写)


__asm __weak void PendSV_Handler(void)
{
	IMPORT CurrentTask
	IMPORT NextTask
	CPSID I
	MRS R0, PSP
	CBZ R0, next
	STMDB R0!, {R4-R11}
	LDR R1, =CurrentTask ; R1 = &CurrentTask
	LDR R1, [R1] ; R1 = CurrentTask
	STR R0, [R1] ; CurrentTask = R0
next
	LDR R1, =NextTask ; R1 = &NextTask
	LDR R1, [R1] ; R1 = NextTask
	LDR R0, [R1] ; R0 = *NextTask
	LDMIA R0!, {R4 - R11}
	MSR PSP, R0
	
	LDR R1, =CurrentTask
	LDR R2, =NextTask
	LDR R2, [R2]
	STR R2, [R1]
	
	ORR LR, #0x04
	CPSIE I
	BX LR
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值