首页 > 其他分享 >消息队列

消息队列

时间:2022-12-31 21:01:41浏览次数:33  
标签:队列 void ledc queue LEDC 消息 test cpu

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include "esp_err.h"
#include "string.h"
#include "esp_log.h"
#include "freertos/queue.h"

#define LEDC_TIMER              LEDC_TIMER_0            //LEDC定时器
#define LEDC_MODE               LEDC_LOW_SPEED_MODE     //LEDC的速度模式
#define LEDC_OUTPUT_IO          (12)                     //LEDC绑定引脚
#define LEDC_CHANNEL            LEDC_CHANNEL_0          //LEDC通道
#define LEDC_DUTY_RES           LEDC_TIMER_13_BIT       //LEDC占空比分辨率
#define LEDC_DUTY               (4095)                  //LEDC占空比
#define LEDC_FREQUENCY          (5000)                  //LEDC频率 5 kHz

static void example_ledc_init(void)
{
    //LEDC定时器配置
    ledc_timer_config_t ledc_timer = {
        .speed_mode       = LEDC_MODE,                  //设置定时器低速模式           
        .timer_num        = LEDC_TIMER,                 //设置定时器0  
        .duty_resolution  = LEDC_DUTY_RES,              //设置定时器分辨率 13位
        .freq_hz          = LEDC_FREQUENCY,             //设置定时器频率 5kHz
        .clk_cfg          = LEDC_AUTO_CLK               //设置定时器时钟选择
    };  
    ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer));    //设置定时器配置

    //配置LEDC通道
    ledc_channel_config_t ledc_channel = {                          
        .speed_mode     = LEDC_MODE,                    //设置通道模式低速模式
        .channel        = LEDC_CHANNEL,                 //设置LEDC通道0
        .timer_sel      = LEDC_TIMER,                   //设置LEDC定时器
        .intr_type      = LEDC_INTR_DISABLE,            //设置LEDC中断类型       
        .gpio_num       = LEDC_OUTPUT_IO,               //设置LEDCGPIO引脚   
        .duty           = 0, // Set duty to 0%          //设置占空比
        .hpoint         = 0                             //LEDC通道hpoint值
    };
    ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel));//配置LEDC通道参数
}

void cpu_task(void *ptr){
    uint8_t cpu_info[400];
    while (1)
    {
        memset(cpu_info,0,400);
        vTaskList((char *)&cpu_info);
        printf("%s",cpu_info);
        printf("--------------\r\n");
        memset(cpu_info,0,400);
        vTaskGetRunTimeStats((char*)&cpu_info);
        printf("%s",cpu_info);
        printf("--------------\r\n");

        vTaskDelay(5000/portTICK_PERIOD_MS);
    }
    
}

QueueHandle_t test_queue_handle = NULL;
void test_queue(){
        test_queue_handle = xQueueCreate(20,50);
        if(test_queue_handle!=NULL){
            ESP_LOGI("YCP","创建成功");
        }else{
            ESP_LOGI("YCP","空间不足");
        }
}

char *str = "消息队列发送测试";
void test_queue_send(void *ptr){
    while (1){
        xQueueSend(test_queue_handle,(void *)str,0);
        vTaskDelay(1000/portTICK_PERIOD_MS);
    }
}
void test_queue_receive(void *ptr){
    char queue_receive[50];
    while (1){
        int ret = xQueueReceive(test_queue_handle,(void *)queue_receive,500);
        if(ret){
            ESP_LOGE("消息队列接收","%s",queue_receive);
        }else{
            ESP_LOGE("消息队列接收","没收到");
        }
        vTaskDelay(1000/portTICK_PERIOD_MS);
    }
}
void app_main(void)
{
    test_queue();
    // 配置LEDC外设
    example_ledc_init();
    // 设置占空比(LEDC的速度模式,LEDC通道,4095+1) 50% 2^13 = 8192  4096即占一半,占空比50%
    ESP_ERROR_CHECK(ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, LEDC_DUTY));
    // 更新占空比
    ESP_ERROR_CHECK(ledc_update_duty(LEDC_MODE, LEDC_CHANNEL));
    xTaskCreate(cpu_task,"cpu_task_name",4096,NULL,1,NULL);
    xTaskCreate(test_queue_send,"test_queue_send_name",4096,NULL,1,NULL);
    xTaskCreate(test_queue_receive,"test_queue_receive_name",4096,NULL,1,NULL);    
}

 

标签:队列,void,ledc,queue,LEDC,消息,test,cpu
From: https://www.cnblogs.com/ycp666/p/17017254.html

相关文章

  • RabbitMQ从入门到精通-消息应答
    一、概念消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况。RabbitMQ一旦向消费者传递了一条消......
  • 数据结构之队列
    1.队列介绍队列是一个有序列表,可以用数组或者链表来实现。遵循先入先出的原则。即先存入队列的数据,要先取出。后存入的要后取出。2.数组模拟队列思路队列本身是有......
  • 单调栈和单调队列
    《单调栈》#include<iostream>#include<cstring>#include<algorithm>#include<stack>usingnamespacestd;constintN=3*1e6+2;intn;structnode{......
  • java企业通知小程序微信消息推送小程序企业消息通知系统网站源码
    简介本系统主要是利用小程序和springboot开发的企业分组消息推送,主要是员工关注小程序,由分组领导创建消息主体并设置消息提醒时间,利用微信的消息模板对选定的员工进行消息......
  • 消息认证码 数字签名 证书
    消息认证码什么是消息认证码消息认证码(MessageAuthenticationCode)是一种确认完整性并进行认证的技术,简称MAC;也可以理解为与密钥相关联的单向散列函数。消息认证码......
  • Android笔记--在活动之间传递消息
    显式Intent和隐式IntentIntent--各个组件信息沟通的桥梁组成部分:显式Intent:--精确匹配具体实现:1、在Intent的构造函数中指定2、调用意图对象的setClass方法指定......
  • 【22期】为什么需要消息队列?使用消息队列有什么好处?
    一、消息队列的特性业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行......
  • 什么是Rabbitmq消息队列? (安装Rabbitmq,通过Rabbitmq实现RPC全面了解,从入门到精通)
    目录Rabbitmq一:消息队列介绍1.介绍2.MQ解决了什么问题1.应用的解耦2.流量削峰3.消息分发(发布订阅:观察者模式)4.异步消息(celery就是对消息队列的封装)3.常见消息队列......
  • 我与 5 种消息队列的 8 年情缘
      谈起消息队列,内心还是会有些波澜。 消息队列、缓存、分库分表是高并发解决方案三剑客,而消息队列是我最喜欢,也是思考最多的技术。我想按照下面的四个阶段分享我与......
  • 使用Python制作自动推送微信消息提醒的备忘录功能
    日常工作生活中,事情一多,就会忘记一些该做未做的事情。即使有时候把事情记录在了小本本上或者手机、电脑端备忘录上,也总会有查看不及时,导致错过的尴尬。如果有一款小工具,可......