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

[复制链接]
 楼主| 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()这个函数,中断退出后是不可以引起处理器调度的。
madcool 发表于 2012-4-29 16:59 | 显示全部楼层
在ucosii中中断函数退出的时候就会调度高优先级的任务进行运行,所以比较奇怪:你是怎么确定线程任务先跑tcp任务然后再跑串口任务的
zcruise 发表于 2012-5-10 15:25 | 显示全部楼层
楼主应该是调用了协议栈吧,tcp处理任务虽然优先级较低,但协议栈进程优先级高
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

145

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部