ucos 在stm32上,任务切换问题

刚学ucos,对于任务切换的机制不懂,开始以为OSTimeDlyHMSM函数和普通的延时函数一样,后面发现,不使用这个延时,任务就无法切换,可是任务不是在systick的... 刚学ucos,对于任务切换的机制不懂,开始以为OSTimeDlyHMSM函数和普通的延时函数一样,后面发现,不使用这个延时,任务就无法切换,可是任务不是在systick的中断函数里切换的么?下面是我写的两个任务,task_1的优先级高,结果发现,引脚输出的高电平时间很短,低电平相对长很多,这是为什么?
求大神指导!主要是任务切换、systick中断和这个delay函数的作用不太懂
展开
 我来答
充木2A
推荐于2016-06-01
知道答主
回答量:10
采纳率:0%
帮助的人:9.7万
展开全部

细看,两个任务,操作的是同一个端口资源,任务的调度并不是按想像的那样:task_1执行500ms后,再执行task_2 500ms,均匀地交替执行。 如果要实现对PB0的端口输出近1:1的方波,应该要把它放在同一个任务中操作。

 

举例:(系统运行时间为概数,方便说明)

  1. 系统运行0ms: task_1(优先级高) 先执行,PB0 输出高电平;紧接着暂停500ms。

  2. 系统运行1ms: task_1 被挂起,系统内核调度下一任务,这时task_2 被唤醒并执行,PB0拉低(这样PB0实际上只置高了1ms)。紧接着暂停500ms。

  3. 系统运行500ms: task_1 的500ms延时结束,重新唤醒并执行PB0置高(低电平时间持续了499ms);

  4. ...

    1ms的高电平时间:499的低电平时间,所以会出现高电平短、低电平持续时间很长的现象。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式