soulmate 发表于 2012-3-31 19:14

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

本帖最后由 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处理任务虽然优先级较低,但协议栈进程优先级高
页: [1]
查看完整版本: 请教一个osii任务切换的 问题~