资讯详情

【平头哥RVB2601创意应用开发】使用体验03 -- 系统定时器

这个创意项目需要定期下达命令,轮询传感器节点,所以使用这个记录aos_timer的过程。

1.介绍系统定时器

AOS基于系统节拍的定时器tick作为最基本的时间调度单元,即最小时间周期。YoC该平台提供该基本软件定时器功能。CDK相关功能位于项目中aospack,其中的README.md列举的API如下所示。有关这些API进一步说明,可查看链接:https://yoc.docs.t-head.cn/yocbook/Chapter3-AliOS/操作系统接口/定时器.html。

图3-1定时器接口说明

分析API定时器功能需要定义aos_timer_t结构体变量,并将其指针传递到函数。结构体相关类型定义为../PACK/aos/v7.4.3/include/aos/kernel.h事实上,这是一种重定义的类型,本质上是一种空指针类型。

typedefstruct{ void*hdl; }aos_hdl_t;  typedefaos_hdl_taos_task_t; typedefaos_hdl_taos_mutex_t; typedefaos_hdl_taos_sem_t; typedefaos_hdl_taos_queue_t; typedefaos_hdl_taos_timer_t; typedefaos_hdl_taos_work_t; typedefaos_hdl_taos_event_t;

在跟踪代码时,发现定时器api在系统内核中定义HelloWorld”案例中AOS是基于rhino内核,定时器实现的相关代码位于../PACK/aos/v7.4.3/src/adapter/rhino/aos_rhino.c”中。

图3-2定时器代码位置

事实上,创建定时器的函数有两个aos_timer_new()”和“aos_timer_new_ext()后者多传递一个参数-auto_run,即定时器是否自动启动。

图3-3创建定时器函数文档截图

2.使用定时器

我的创意项目需要定期收集,周期是上次配置的项目参数period,本来单位是分钟,为了快速看到调试效果,暂时用秒作为单位。

定时器溢出回调是pollingTimerCb()通过日志输出调试发现第二个参数有两个参数。arg2是创建定时器时设置的回调传参。第一个参数是定时器结构变量中的hdl会员地址——hdl指向真实的定时器数据结构。

voidpollingTimerCb(void*arg1,void*arg2){ char*s1=(char*)arg1; char*s2=(char*)arg2; LOGI(TAG,"pollingtimercallback!arg1:%s,arg2:%s\n",s1,s2); if(arg1==polling_timer.hdl) LOGI(TAG,"arg1istimer'saddress\n"); } voidaita_InitTimer(void){ intret=-1; LOGI(TAG,"initializetimerforpollingjob!\n");  ret=aos_timer_new_ext(&polling_timer,pollingTimerCb,"args",period*1000,1,0); if(ret!=0){ LOGE(TAG,"polling_timercreatefailed\n"); }  LOGI(TAG,"pollingtimerstart\n"); aos_timer_start(&polling_timer); }  voidboard_yoc_init() { board_init(); console_init(CONSOLE_UART_IDX,115200,128); ulog_init(); aos_set_log_level(AOS_LL_DEBUG); LOGI(TAG,"Build:%s,%s\n",__DATE__,__TIME__);  /*loadpartition&initkvfunction*/ aita_InitKV();  /*setcycletimerforpollingjob*/ aita_InitTimer();  board_cli_init(); }

图3-4定时器功能测试

平头哥芯片开放社区

欢迎关注公众号:,查看更多应用实战文章。

标签: s1a5传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台