Cortex-M3的PendSV中断以及uCOS系统一点思考

 uCOS中


OSStart函数
    |
OSStartHighRdy函数


会重新设置PendSV中断的优先级,把该中断优先级设置为最低




每次时钟中断时(一般为最高优先级),查看是否要进程切换。
如果此时有中断嵌套则不进行进程切换,防止破坏进程的空间


有些Moto的处理器支持中断处理函数使用指定的栈。


对于Cortex-M3架构来说,中断来后系统会把当前所有的寄存器值压入被中断的任务栈中,
如果任务切换,中断完成后将从错误的栈中恢复寄存器值。


uCOS的系统栈就是FLASH_LINKER文件中指定的栈地址(即启动uCOS之前配置的堆栈地址)


时钟中断处理函数就会悬起一个PendSV中断,当没有其他中断时,则在进行进程切换。


所以APP无需在设置PendSV的优先级
至于SVCall中断,则uCOS没有使用
所以uCOS操作系统的实现不是典型的Client/Server模型。
一般支持C/S的模型的系统,系统调用时,会有进程堆栈--》内核的堆栈切换。




cortex-M3的操作模式[thread mode和handler mode]
handler mode用来处理异常


thread mode用来执行任务代码


thread mode又包括 特权级和用户级


在线程模式,寄存器CONTROL控制着软件运行于哪种特权级别,在处理器模式,软件一直运行于特权级别。




uCOS没有使用这种特权级模型。以及Cortex-M3架构不支持的程序段/数据段优先级和访问限制


所以应用程序完全可以破坏OS的堆栈,导致系统崩溃,各个程序之前也可能会破坏相互之间的堆栈。导致系统崩溃。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值