如何实现微妙级别的延时?在ucos上基本是不可能实现这么高精度的延时的,如果你不介意高频率切换任务带来的cpu浪费,你当然可以把它的节拍调到微妙级别以下,然后通过OSTimeDly来获得这个延时。最可靠的实现方法是使用硬件定时器来获得这个高精度的延时。另外如果你真的考虑把时钟节拍调到微妙级来实现高精度延时,我建议你最好把节拍调到100ns,因为ucos的延时计算也有个精度问题,他的误差波动在1个时钟节拍内,也就是说你需要把节拍调到100ns后,其误差(≤0.1us)才会显得可以忽略掉(相对于1us)
我说的是UCOSII 的周期性执行任务,不是时间分片。
而周期性任务的结构如下:
void MyTask (void *pdata) //周期性执行的任务函数
{
进行准备工作的代码
for () //无限循环,也可用 while (1)
{
任务实体代码
OSTimeDly( )
}
}
有四个周期性执行的任务,任务A(优先级=0)、任务B(优先级=1)、任务C(优先级=2)、任务D(优先级=3)
如果每个任务的延时节拍时间OSTimeDly( )设置的不合理,可能会导致永远也执行不到“任务D”
有没有设置“延时节拍时间OSTimeDly( )”的一般方法呢?
首先你要开总中断EA其次你才是开启五个小中断ET0 ET1 ES INT0 INT1
只要你对应中断的接口接受到有效电平它就启动
设置这些优先级
不过我的建议是 刚学习中断 基本是一个中断没什么优先级好说的 只有你对一个中断玩熟了 才慢慢设置多个中断
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)