请教UCOS时间调度问题

[复制链接]
3035|12
 楼主| lixiaoxu2meng 发表于 2011-4-28 11:52 | 显示全部楼层 |阅读模式
ucos, TI, ST, pi, IO
本帖最后由 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里面维护这属于自己的延时计数变量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1679

帖子

2

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