打印

请教UCOS时间调度问题

[复制链接]
2486|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任务了

使用特权

评论回复
5
delin17| | 2011-4-28 14:37 | 只看该作者
每个任务的TimeDly都保存在自己的TCB中

使用特权

评论回复
6
lixiaoxu2meng|  楼主 | 2011-4-28 15:31 | 只看该作者
谢谢4楼5楼的指点

使用特权

评论回复
7
lixiaoxu2meng|  楼主 | 2011-4-28 15:35 | 只看该作者
5# delin17

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

使用特权

评论回复
8
原野之狼| | 2011-4-28 23:43 | 只看该作者
LZ所说冲突指什么呢

使用特权

评论回复
9
lixiaoxu2meng|  楼主 | 2011-4-29 07:47 | 只看该作者
8# 原野之狼
上一个任务中调用了OSTimeDly(100),而下一个任务调用了OSTimeDly(80),
同一个函数,传递参数不就改变了吗

使用特权

评论回复
10
原野之狼| | 2011-4-29 08:38 | 只看该作者
看来你对OS的机制理解还不够深刻
好好的去理解一下多任务的机理

使用特权

评论回复
11
lixiaoxu2meng|  楼主 | 2011-4-29 09:03 | 只看该作者
10# 原野之狼
恩我是菜鸟刚刚接触 昨天看书 个人理解好像是每个任务内的参数都保存在自己的堆栈了  但是还是不太容易理解  多谢楼上

使用特权

评论回复
12
原野之狼| | 2011-4-29 17:19 | 只看该作者
每个任务都有自己的堆栈
且OSTimeDly已经把参数复制到了TCB中

使用特权

评论回复
13
playjian| | 2011-4-29 22:42 | 只看该作者
任务控制块TCB~~看看那个数据结构吧~~每个任务都有一个任务控制块TCB里面维护这属于自己的延时计数变量

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1679

帖子

2

粉丝