找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

QCC512x QCC302x 延时函数 (阻塞与非阻塞)

2020-5-14 19:12| 发布者: csdn| 查看: 1558| 评论: 2|来自: CSDN

摘要: ADK4 与 ADK6 都提供了获取系统本地时间的函数,单位是 us 获取系统当前时间(阻塞) 函数原型: rtime_t Syst

ADK4 与 ADK6 都提供了获取系统本地时间的函数,单位是 us

获取系统当前时间(阻塞)

函数原型:

rtime_t SystemClockGetTimerTime(void)
{
    return (rtime_t)VmGetTimerTime();
}

调用的方法(延时 x ms):

void delay_ms(uint16 v_msec_16)
{
    /** add one to the delay to make sure we don't return early */
    uint32 v_delay = SystemClockGetTimerTime() + (v_msec_16 * 1000) + 1;

    while (((int32)(SystemClockGetTimerTime() - v_delay)) < 0);
}

原理是获取系统当前的时间,加上延时的时间,然后在while里循环里一直获取最新时间,并且与设定值比较,直到超过想要的延时,则退出。
在延时等待操作中,会阻塞app程序,但不会阻塞DSP,谨慎使用!
对于设置I2C器件的初始化、不经常性调用到的、想要方便操作的,可以这样子用。

利用消息来进行延时(非阻塞)

如果需要等待的时间较长,或者经常性用到的延时,可以使用 message 来操作。
函数原型:

void meMessageSendLater(Task task, MessageId id, void *message, uint32 delay)
{
    vm_message_send_later(task, id, message, delay, NULL, CONDITION_WIDTH_UNUSED);
}

使用的方法,需要建立 message (在宏中增加 message id),然后找到对应的xxxMessageHandler()函数,增加一个case来处理。
如果不需要跟参数的话,可以传入 NULL。
如果要跟参数的话,先定义参数结构体,然后调用meMessageSendLater()时候传入,并在xxxMessageHandler()中处理掉。

例如:增加 gaia app 交互的功能(带延时操作的功能)、定时关机、去pop音等,需要延时较长但又不能够阻塞的,需要用到 message。
特别地:message的内容不需要手动释放,系统会自己回收。


来源:https://blog.csdn.net/qq_29225913/article/details/100982991
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

路过
1

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

发表评论

最新评论

引用 格调 2022-2-15 09:19
谢谢楼主的分享
引用 Dark_moon 2020-10-2 08:24
楼主辛苦了,感谢分享!

查看全部评论(2)

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-29 12:17 , Processed in 0.114374 second(s), 15 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部