ucosii_中断服务中的任务调度

 最近在调试lwip协议包的过程中,始终有个问题困扰我,就是在tcpip这层任务上的消息队列失效了。主要的操作:

1.   传输层收到数据包后发送消息队列,也就是sys_mbox_post操作

2.   传输层的任务进行sys_mbox_fetch操作来获取消息。

结果,在调试的过程中,程序进行了sys_mbox_post消息,而任务却获取不到这个消息。

分析原因:

1.  创建该层任务的时候,是否优先级设置问题

2.  sys_mbox_post/sys_mbox_fetch是通过OSQPost/OSQPend来实现的,是不是ucosii未移植好呢

3.  ucosii的消息队列任务调度的问题

 

于是

首先查看优先级是否设置重复,发现没问题之后,便翻阅了ucosii的教程,从中了解了一些任务调度的原理,以及任务

通讯的原理,发现任务间的通信:包括信号量,邮箱,消息队列在进行Post和Pend操作过程中便会进行OSSched.

而OSSched操作中,便会检测是否是中断触发而进行的调度。因为在ucosii的任务调度过程中,任务切换的过程是将

当前任务的寄存器压栈,讲优先级高的任务的参数写入寄存器。 而这个时候如果中断产生了,系统的寄存器值是中断

前系统的值,这个时候强行进行OSSched的话,会有错误产生。

因此在ucosii中,不能在中断服务中调用任务切换,如果一定要在中断服务中调用任务切换,则需要进行OSIntEnter和

OSIntExit操作来进行任务切换。这2个操作主要是禁止在中断服务程序中进行任务切换,而在中断服务程序结束后进行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值