CC2640 , 关于使用Task_sleep()使用方法
最近有一个项目要用到驱动步进电机(马达),需要小于ms级别的精准定时,我在另一帖子已发问,但没有答复。
后来我采用了Task_sleep()功能来进行延时(定时),例如 Task_sleep(5300 / Clock_tickPeriod);// 延时5.3ms ,
这样基本可以使用,但发现有时马达会走不到位,估计是 Task_sleep() 功能被打断造成的。
问1: Task_sleep(5300 / Clock_tickPeriod);// 延时5.3ms , 这样写法是不是延时5.3毫秒?
问2: 怎样才能使 Task_sleep()功能不被打断?
1 Task_sleep( ((i) * 1000) / Clock_tickPeriod )
i 表示ms数。Clock_tickPeriod 在CC2640里面是10us.
2 Task_sleep() 功能被打断?是不是有更高优先级的中断?
Susan Yang , 你好,很感谢你的回复。
1 . Task_sleep( 5300 / Clock_tickPeriod ) = 5.3 毫秒,是对的吗? 其实我也看到原函数了, Task_sleep( ((i) * 1000) / Clock_tickPeriod ) ,但我需要的是 5.3,所以直接输入 5300 了。 总不能写 成 5.3*1000 / Clock_tickPeriod 吧。
2. 不知道为什么被打断了,怎么样查是否有更高优先级的中断? 我想有的话,应该是蓝牙方面(也就是说内核), 我不知道该怎样设置。
问题1的理解是对的,注意Task_sleep(x),x要大于10;
第二, Task_sleep只是在当前任务Task(调用 Task_sleep者)进行睡眠,其他Task任务仍然在实现,包括硬件中断和软件
Eggsy Pang , 感谢回复!
关于 第二点,我想再问清楚,请原谅我的无知。
第二, Task_sleep只是在当前任务Task(调用 Task_sleep者)进行睡眠,其他Task任务仍然在实现,包括硬件中断和软件。
问 :其他Task任务仍然在实现,包括硬件中断和软件 , 这样的情况下会不会打断 我当前任务Task(调用 Task_sleep者)进行的睡眠 , 从而造成延时不够?问题应该怎样解决?
请问您担心的是,如果你设置Task_sleep 700ms,可能由于中断导致延时,使得Task_sleep变成 800ms吗?
我最近用到了Task_sleep()函数,同样有这个疑问。在Task_sleep执行的这段时间,如果来了中断,然后中断里面Semaphore_post了一下,这时是否会导致Task_sleep立即执行完?还是说Task_sleep函数仍然会执行完才继续?或者ti有介绍Task_sleep的文档吗?感谢!