打印

请教一个osii任务切换的 问题~

[复制链接]
1812|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
soulmate|  楼主 | 2012-3-31 19:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 soulmate 于 2012-3-31 19:17 编辑

现在假设有个高优先级的串口发送任务挂起,串口中断收到合适的数据后post信号量,这个任务得到信号量以后把数据发出去,现在这块儿高速收发都没有问题,还有一个低优先级的tcp处理任务,假设这个tcp任务发送1000多个字节数据过程当中,串口中断收到有效数据并且post信号量,这时候高优先级的任务可以立即执行吗?
  现在的实际现象是当低优先级的的tcp发送数据一半的时候,假如来了高优先级的串口任务,高优先级的串口发送任务好像并没有立即执行,直到tcp把这一包数据发完~我想发送中先停下tcp,做完串口发送后再执行剩下的tcp发送任务,实际会被打断,不知道是怎么回事?

相关帖子

沙发
yyql008| | 2012-4-1 16:07 | 只看该作者
串口收到数据POST信号量.任务不会立即切换到高优先级任务的.

POST信号量后,还需要进入定时中断处理函数OSTickISR,
OSTickISR 会调用OSIntExit进行任务切换.

使用特权

评论回复
板凳
john_lee| | 2012-4-1 16:52 | 只看该作者
lz标题上写的osii是啥?ucos2吗?lz是怎么确定的
高优先级的串口发送任务好像并没有立即执行
这个结论?

使用特权

评论回复
地板
llf021421| | 2012-4-11 23:53 | 只看该作者
请问你的串口中断处理函数是这么写的不?
isr()
{
    OSIntEnter();
    处理代码;
    清中断;
   OSIntExit();
}
如果后面没有加OSIntExit()这个函数,中断退出后是不可以引起处理器调度的。

使用特权

评论回复
5
madcool| | 2012-4-29 16:59 | 只看该作者
在ucosii中中断函数退出的时候就会调度高优先级的任务进行运行,所以比较奇怪:你是怎么确定线程任务先跑tcp任务然后再跑串口任务的

使用特权

评论回复
6
zcruise| | 2012-5-10 15:25 | 只看该作者
楼主应该是调用了协议栈吧,tcp处理任务虽然优先级较低,但协议栈进程优先级高

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

145

帖子

1

粉丝