ucos 在stm32上,任务切换问题
刚学ucos,对于任务切换的机制不懂,开始以为OSTimeDlyHMSM函数和普通的延时函数一样,后面发现,不使用这个延时,任务就无法切换,可是任务不是在systick的...
刚学ucos,对于任务切换的机制不懂,开始以为OSTimeDlyHMSM函数和普通的延时函数一样,后面发现,不使用这个延时,任务就无法切换,可是任务不是在systick的中断函数里切换的么?下面是我写的两个任务,task_1的优先级高,结果发现,引脚输出的高电平时间很短,低电平相对长很多,这是为什么?
求大神指导!主要是任务切换、systick中断和这个delay函数的作用不太懂 展开
求大神指导!主要是任务切换、systick中断和这个delay函数的作用不太懂 展开
1个回答
展开全部
细看,两个任务,操作的是同一个端口资源,任务的调度并不是按想像的那样:task_1执行500ms后,再执行task_2 500ms,均匀地交替执行。 如果要实现对PB0的端口输出近1:1的方波,应该要把它放在同一个任务中操作。
举例:(系统运行时间为概数,方便说明)
系统运行0ms: task_1(优先级高) 先执行,PB0 输出高电平;紧接着暂停500ms。
系统运行1ms: task_1 被挂起,系统内核调度下一任务,这时task_2 被唤醒并执行,PB0拉低(这样PB0实际上只置高了1ms)。紧接着暂停500ms。
系统运行500ms: task_1 的500ms延时结束,重新唤醒并执行PB0置高(低电平时间持续了499ms);
...
1ms的高电平时间:499的低电平时间,所以会出现高电平短、低电平持续时间很长的现象。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询