ucos学习笔记2

4.ucos的中断中断过程:只有开放了中断,系统在接受中断请求后,才会停止当前运行的任务,而去运行中断服务子程序。当中断服务子程序运行结束后,系统将会根据情况,返回到被终止的任务继续运行,或者转向另一个具有更高优先级别的就绪任务。注意:对于可剥脱型的ucos2内核在说,中断服务子程序结束后,系统将会根据情况进行一次任务调度去运行优先级别高的任务,而不一定返回。ucos允许中断嵌
摘要由CSDN通过智能技术生成

4.ucos的中断


中断过程:只有开放了中断,系统在接受中断请求后,才会停止当前运行的任务,而去运行中断服务子程序。当中断服务子程序运行结束后,系统将会根据情况,返回到被终止的任务继续运行,或者转向另一个具有更高优先级别的就绪任务。
注意:对于可剥脱型的ucos2内核在说,中断服务子程序结束后,系统将会根据情况进行一次任务调度去运行优先级别高的任务,而不一定返回。
ucos允许中断嵌套,即高级别的中断源的中断请求可以打断低优先级别的中断服务程序的运行,用一个全局变量OSIntNesting。
在写中断服务程序时,要用到两个重要的函数OSIntEnter()和OSIntExit()。
OSIntEnter()的调用通常发生在中断服务程序保护了呗中断任务的断点数据之后(即把被中断的任务放进任务数据栈后),运行中断服务程序前。
OSIntExit()函数在中断嵌套层数计数器为0、调度器未锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下将要进行任务切换,否侧就会返回被中断的服务子程序。

中断任务切换函数:ucos运行完中断服务程序之后,并不一定返回到中断任务。而是通过一次任务调度来决定返回的去向,因此系统还需要一个中断级任务调度器。OSIntExit函数在中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下进行任务切换,完成这个工作的函数OSIntCtxSw(); 就叫做中断切换函数。

临界段:当有异步时间发生时会引发中断请求,但CPU只有在中断开放期间才响应,也就是说所有的CPU都具有开中断和关中断指令,以便一些代码不受中断干扰,这些代码叫临界段。
ucos用os_enter_critical和OS_Exit_critical封装相关允许中断的命令。
上面命令的实现方法一共有三种通过OS_CRITICAL_METHOD来设定。STM32用的是第三种方法。
#if OS_CRITICAL_METHOD == 3
#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}
#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
#endif

4.2uscos的时钟
ucos也是用硬件
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值