lixiaoxu2meng 发表于 2011-4-28 11:52

请教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);是否冲突;
请高手指点

lixiaoxu2meng 发表于 2011-4-28 13:07

怎么没有人回答呢

lixiaoxu2meng 发表于 2011-4-28 13:32

急迫指点

delin17 发表于 2011-4-28 14:37

没有冲突,他去跑Idle任务了

delin17 发表于 2011-4-28 14:37

每个任务的TimeDly都保存在自己的TCB中

lixiaoxu2meng 发表于 2011-4-28 15:31

谢谢4楼5楼的指点

lixiaoxu2meng 发表于 2011-4-28 15:35

5# delin17

也就说每个任务内的OSTimeDly都是独立的 两个任务内的OSTimeDly不会发生冲突

原野之狼 发表于 2011-4-28 23:43

LZ所说冲突指什么呢

lixiaoxu2meng 发表于 2011-4-29 07:47

8# 原野之狼
上一个任务中调用了OSTimeDly(100),而下一个任务调用了OSTimeDly(80),
同一个函数,传递参数不就改变了吗

原野之狼 发表于 2011-4-29 08:38

看来你对OS的机制理解还不够深刻
好好的去理解一下多任务的机理

lixiaoxu2meng 发表于 2011-4-29 09:03

10# 原野之狼
恩我是菜鸟刚刚接触 昨天看书 个人理解好像是每个任务内的参数都保存在自己的堆栈了但是还是不太容易理解多谢楼上

原野之狼 发表于 2011-4-29 17:19

每个任务都有自己的堆栈
且OSTimeDly已经把参数复制到了TCB中

playjian 发表于 2011-4-29 22:42

任务控制块TCB~~看看那个数据结构吧~~每个任务都有一个任务控制块TCB里面维护这属于自己的延时计数变量
页: [1]
查看完整版本: 请教UCOS时间调度问题