请教UCOS时间调度问题
本帖最后由 lixiaoxu2meng 于 2011-4-28 11:53 编辑本人是菜鸟,刚接触UCOS,想请教一下OSTimeDly();函数的用法,
假如:有两个任务:任务1的优先级高于任务2
任务1
void Task1(void *pdata)
{
pdata = pdata; // 避免编译警告
while(1)
{
GPIO_SetBits(GPIOF, GPIO_Pin_6);
OSTimeDly(100); /* Wait 100 ticks */
}
}
任务2
void Task2(void *pdata)
{
pdata = pdata; // 避免编译警告
while(1)
{
GPIO_ResetBits(GPIOF, GPIO_Pin_6);
OSTimeDly(80); /* Wait 80 ticks */
}
}
开始执行任务1 当执行到 OSTimeDly(100);时,将任务挂起,然后每个OSTimeDly进行任务调度,查找当前最高优先级的任务,即任务2,那么当执行到任务2的 OSTimeDly(80);时,此时任务一的OSTimeDly(100); 和OSTimeDly(80);是否冲突;
请高手指点 怎么没有人回答呢 急迫指点 没有冲突,他去跑Idle任务了 每个任务的TimeDly都保存在自己的TCB中 谢谢4楼5楼的指点 5# delin17
也就说每个任务内的OSTimeDly都是独立的 两个任务内的OSTimeDly不会发生冲突 LZ所说冲突指什么呢 8# 原野之狼
上一个任务中调用了OSTimeDly(100),而下一个任务调用了OSTimeDly(80),
同一个函数,传递参数不就改变了吗 看来你对OS的机制理解还不够深刻
好好的去理解一下多任务的机理 10# 原野之狼
恩我是菜鸟刚刚接触 昨天看书 个人理解好像是每个任务内的参数都保存在自己的堆栈了但是还是不太容易理解多谢楼上 每个任务都有自己的堆栈
且OSTimeDly已经把参数复制到了TCB中 任务控制块TCB~~看看那个数据结构吧~~每个任务都有一个任务控制块TCB里面维护这属于自己的延时计数变量
页:
[1]