• ESP8266 SDK开发: 外设篇-系统任务(消息队列,通知)


    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/Learn8266ForSDK" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    说明

    咱先使用一下这个功能,然后再说明使用这个功能的应用场合

    写上以下程序

    #define os_event_t_buff_len 255 /*消息队列长度;最大255*/
    os_event_t    os_event_t_buff[os_event_t_buff_len]; //存储消息的数组
    #define TaskPrio 2 //任务等级(0,1,2),2是最高等级
    
    os_timer_t os_timer_one;//定义软件定时器结构体变量
    //定时器回调函数
    void os_timer_one_function(void *parg){
        //把消息插入队列(sig=0;par=0)
        system_os_post(TaskPrio, 0, 0);
    }
    /* 系统有空余时间的时候会取出消息队列里面的消息
      如果有消息则会调用其回调函数 */
    void os_task_t_callback(os_event_t *events){
        if(events->sig == 0 && events->par ==0){
            os_printf("os_task_t_callback
    ");
        }
    }
    uart_init_2(BIT_RATE_115200,BIT_RATE_115200);
        //os_task_t_callback:任务回调函数  //TaskPrio:任务等级(0,1,2),2是最高等级
        //os_event_t_buff:消息队列记录的数组   //os_event_t_buff_len  消息队列长度
        system_os_task(os_task_t_callback, TaskPrio, os_event_t_buff, os_event_t_buff_len);
    
        //配置定时器
        os_timer_setfn(&os_timer_one,os_timer_one_function,NULL);//os_timer_one:定时器结构体变量    os_timer_one_function:回调函数    yang:传给回调函数的参数
        //使能定时器
        os_timer_arm(&os_timer_one,1000,1);//os_timer_one:定时器变量        1:1s进一次    1:循环

    下载到开发板以后,打开串口调试助手

    会看到程序每隔1S打印 os_task_t_callback

    关于ESP8266的系统任务

    ESP8266内部可以运行消息队列任务.总共可以创建3个消息队列任务

    创建任务:

    调用创建消息队列任务函数的时候设置好任务的回调函数, 任务的消息等级, 缓存队列消息的数组.

    下面是固定的形式哈,就是这样子写.

    把消息插入消息队列:

    第一个参数 TaskPrio填写的是任务消息等级;

    后面的两个参数是 0- 4294967296之间的数

    后面是把0,0插入了消息队列.第一个0设置的是消息队列sig值; 第二个0设置的是消息队列par的值.

    系统有空的时候就从消息队列里面取出数据,然后调用回调函数:

    假设需要在适当的时候发送个通知关闭定时器

    system_os_post可以写到任意地方,我下面只是演示,就放到了定时器里面

    假设咱设置sig为1;par为1的时候用来关闭定时器

    在网络通信的时候,官方也是建议使用系统消息队列的形式关闭网络连接

    使用任务代替定时器

    定时器只能定时在5ms和100us的级别;而且经过测试,频繁的定时器会影响到网络信号的传输.

    如果需要轮训,可以使用下面的方式

    轮训一次任务的时间基本上是固定的,可以使用变量累加来执行定时操作

    停止轮训

  • 相关阅读:
    使文件(夹)默认显示方式为“详细信息”而非“平铺”
    一个简单的Oracle任务
    SQL Server查询速度慢原因及优化方法
    双筒望远镜选购知识
    在 net send 命令中实现换行(信使服务)
    用SQL产生一串5位数字的随机数
    初试couchbase(安装配置)
    php的扩展memcache和memcached区别分析
    监控程序执行时间并将其写入日志的脚本
    IOS Object C id,class,sel,bool
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/15139746.html
Copyright © 2020-2023  润新知