基于ESP32的桌面小屏幕实战[8]:任务创建

news/2025/3/17 1:23:21/

调用任务创建必须要添加下面两个头文件:

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

还要定义一个静态的任务函数

static void test_task_example(void* arg)
{for(;;) {vTaskDelay(1000 / portTICK_PERIOD_MS);printf("task run \n");}
}

创建成功后,每秒打印一个数据。for(;;)表示一个无限循环,for(;;) 等效于 while(1)。任务函数一般是无限循环的,以便系统调度器能够持续执行它们,除非有特殊情况终止。vTaskDelay 是 FreeRTOS 提供的一个延迟函数,使任务进入阻塞状态,等待指定的时间后再继续执行。
1000 / portTICK_PERIOD_MS 将延迟时间设为 1000 毫秒(即 1 秒)。portTICK_PERIOD_MS 是一个系统常量,用于将毫秒转换为系统时钟周期数,以适配不同的时钟速率。

在主函数中创建任务

xTaskCreate(test_task_example, "test_task_example", 2048, NULL, 10, NULL);
  • test_task_example:指向任务函数的指针,也就是任务的入口函数。创建的任务会在 test_task_example 函数中执行。

  • "test_task_example":任务名称,是一个字符串标识符,用于在调试时识别任务。这个名字可以帮助开发者识别和管理任务,但不会影响任务的实际执行。

  • 2048:任务栈的大小,以字节为单位。栈大小为 2048 字节,意味着此任务可以使用 2048 字节的内存来存储局部变量、函数调用等。栈大小应根据任务的内存需求设置,避免过大或过小。

  • NULL:任务函数的输入参数,这里传递的是 NULL。如果任务需要初始化数据或控制参数,可以在这里传递参数。

  • 10:任务优先级。FreeRTOS 的任务调度基于优先级,数值越高,优先级越高。优先级决定了任务被调度器分配 CPU 时间的优先程度。在此示例中,优先级为 10。

  • NULL:任务句柄(Task Handle)的指针。句柄用于标识任务和与任务交互。此处为 NULL,表示不需要任务句柄,如果需要在其他地方引用或管理此任务,可以传入指向句柄的指针,例如 TaskHandle_t 类型的变量地址。

这行代码会在 FreeRTOS 中创建一个名为 test_task_example 的任务。任务创建成功后,调度器会根据任务的优先级和时间片分配 CPU 时间,运行 test_task_example 函数中的代码。如果任务成功创建,test_task_example 会每隔一秒打印 “task run”。

添加一个分支

git checkout -b dev2

按照上述内容修改hello_world_main.c文件

vim main/hello_world_main.c

i进入编辑模式,按Esc退出编辑,按:+w+q保存。
添加到库里,并打上标签

git add *
git commit -m "add xTaskCreate"

输入git log查看日志,按Q退出。

编译

idf.py -p /dev/ttyUSB0 flash monitor

终端中显示:
img

完整代码

/* Hello World ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES ORCONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "esp_log.h"static const char *TAG = "MAIN APP";static void test_task_example(void* arg)
{for(;;) {vTaskDelay(1000 / portTICK_PERIOD_MS);printf("task run \n");}
}void app_main(void)
{printf("Hello world!\n");/* Print chip information */esp_chip_info_t chip_info;esp_chip_info(&chip_info);printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",CONFIG_IDF_TARGET,chip_info.cores,(chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",(chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");unsigned major_rev = chip_info.full_revision / 100;unsigned minor_rev = chip_info.full_revision % 100;printf("silicon revision v%d.%d, ", major_rev, minor_rev);printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");printf("Minimum free heap size: %d bytes\n", esp_get_minimum_free_heap_size());ESP_LOGI(TAG, "system init V1.1");//打印日志xTaskCreate(test_task_example, "test_task_example", 2048, NULL, 10, NULL);//创建任务while(1){printf("system run ...\n");vTaskDelay(1000 / portTICK_PERIOD_MS);}
}

http://www.ppmy.cn/news/1579705.html

相关文章

ChatGPT、DeepSeek、Grok 三者对比:AI 语言模型的博弈与未来

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 随着人工智能技术的飞速发展&#xff0c;AI 语言模型已经成为人机交互、内容创作、代码生成、智能问答等领域的重要工具…

Docker 端口映射的 “隐藏炸弹“ 与安全访问方案

&#x1f4cc; 问题描述 在启动 Docker 容器时&#xff0c;使用 -p 3001:3001 端口映射后&#xff0c;发现&#xff1a; 防火墙规则&#xff08;firewalld、ufw&#xff09;中看不到 3001 端口&#xff0c;但外部仍然可以访问&#xff01;iptables 规则被 Docker 自动修改&am…

多种注意力机制(文本->残差->视频)

1.初代自我注意机制(多头注意力机制) 1.1原理 总体架构 上图是 Self-Attention 的结构&#xff0c;在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中&#xff0c;Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,…

后端主流数据库分析

一、关系型数据库(RDBMS) 1. MySQL:金融支付系统核心 行业场景:​ 金融支付:银行交易流水、支付订单(ACID事务保障)。​电商平台:商品库存管理、订单状态跟踪(高并发OLTP)。SaaS服务:多租户用户管理(分库分表隔离数据)。Python实战代码: # 金融交易事务操作(…

用Python实现持续集成与部署(CI/CD)流程:自动化测试、构建与部署

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代软件开发中,持续集成与持续部署(CI/CD)已成为提高开发效率、确保代码质量的关键实践。本文将详细介绍如何使用Python编写CI/CD脚本…

[IP]RGMII

ETH_RGMII是一个网口IP&#xff0c;接口为RGMII类型 包含MAC,ARP,UDP等模块&#xff0c;用户接口为axis。 IP界面 信号定义 、 IP 使用要求 IP须在Vivado 2024.1及以上版本使用&#xff01; Q/871128330 下载测试使用(含测试工程)

如何用AI制作PPT,轻松生成高效演示文稿

如何用AI制作PPT&#xff0c;轻松生成高效演示文稿&#xff01;在这个信息爆炸的时代&#xff0c;做一份引人注目的PPT变得越来越重要&#xff0c;尤其是当你需要快速交付工作或在演讲中展示时。你是否也曾因为制作PPT而头痛不已&#xff1f;一个好消息是&#xff1a;现在有了A…

CI/CD

CI/CD&#xff08;持续集成与持续交付/部署&#xff09;是一种软件开发实践&#xff0c;用于提高软件开发的效率和质量&#xff0c;尤其是在开发团队规模较大时。它通过自动化的方式&#xff0c;减少人工干预&#xff0c;使得开发过程更加高效和可靠。 1. 持续集成&#xff08…