美文网首页
SimonLiu的ESP8266与AliOS Things 学习

SimonLiu的ESP8266与AliOS Things 学习

作者: 刘知海SimonLiu | 来源:发表于2019-03-23 13:51 被阅读0次

    欢迎加入交流群:ESP8266 AliOS Things 群 号: 107723112
    所有教程请看 AliOS Things 入门教程系列
    此教程在SimonLiu的CSDN博客同步更新。

    关于AliOS的定时器,网上现在还没有专门的文章阐述,但是关于yloop异步框架的文章有些涉及。SimonLiu阅读了一下AliOS Things的AliOS Things API KERNEL Guide 相关内容,得出的结论是AliOS Things实现定时器的方法有两种:第一种方式是利用yloop框架实现,第二种方式是通过aos的定时器api实现。

    这里SimonLiu重新写了一个例程timertest(点击查看和下载源码),同时使用两种定时器的方法来打印信息。

    1. 通过yloop异步框架实现定时器

    实际上,在helloworld例程和SimonLiu的GPIO_LED例程UART例程中,都使用了yloop异步框架来实现定时执行某些函数。
    本文例程代码如下:

    int application_start(int argc, char *argv[])
    {
    /*这部分省略*/                         
    
        aos_post_delayed_action(1000, printMessage, NULL);
        
        aos_loop_run();
    
        return 0;
    }
    }
    

    主程序入口application_start里面做了这件事:

    1. 调用aos_post_delayed_action创建了一个1000毫秒的一次性定时器(Yloop里面只有一次性定时器),1000毫秒后运行printMessage()
    2. 调用aos_loop_run进入事件循环

    1秒后,定时器触发,printMessage()被调用,而printMessage()里面又做了2件事:

    static void printMessage(void *arg)
    {
        printf("[%06d]messager from  yloop\r\n" ,(unsigned)aos_now_ms());
        aos_post_delayed_action(1000, printMessage, NULL);
    }
    
    
    1. 打印信息
    2. 再次创建一个1000毫秒的定时器,到时间执行printMessage()。这样每次运行printMessage()都会创建一个定时器,1000毫秒后运行,从而实现定时器。

    2. 通过AliOS Things kernel api实现定时器

    AliOS Things 的kernel api页面:AliOS Things API KERNEL Guide 列出了定时器的相关函数 :

    aos_timer_new
    aos_timer_free
    aos_timer_start
    aos_timer_stop
    aos_timer_change
    

    熟悉ESP8266 non_os SDK的朋友,应该对其中的定时器不陌生,AliOS Things的定时器api使用方法和ESP8266 non_os SDK定时器差不多,步骤如下:

    • 声明一个定时器变量
    • 声明定时器回调函数
    • 定时器回调函数实现
    • 创建定时器
    • 启动定时器
    //声明一个定时器变量
    aos_timer_t timer1; 
    
    //声明定时器回调函数
    void timer1_cb(void); 
    
    //定时器回调函数实现
    void timer1_cb(void)  
    {
        printf("[%06d]messager from  timer\r\n" ,(unsigned)aos_now_ms());
    }
    

    然后在主程序入口中,创建并启动定时器:

       //创建定时器
        aos_timer_new(&timer1, timer1_cb, NULL, 1000, 1);   
        //启动定时器
        aos_timer_start(&timer1);         
    

    相关文章

      网友评论

          本文标题:SimonLiu的ESP8266与AliOS Things 学习

          本文链接:https://www.haomeiwen.com/subject/yjhsvqtx.html