Skip to content

Commit 2518d94

Browse files
authored
Add files via upload
1 parent 63eb1e9 commit 2518d94

1 file changed

Lines changed: 83 additions & 0 deletions

File tree

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
layout: post
3+
title: "ESP32学习记录01"
4+
subtitle: "核心知识"
5+
date: 2025-05-27
6+
author: "mkk"
7+
header-style: text
8+
catalog: true
9+
tags:
10+
- 笔记
11+
---
12+
13+
# freeRTOS
14+
esp-idf是基于freeRTOS的框架,所以是首先要掌握的内容
15+
16+
## freeRTOS任务概述
17+
在低端设备中,程序基本分为裸机和RTOS,针对简单的程序,我们用裸机程序完全可以满足,一旦功能复杂,程序模块众多,裸机程序往往很难满足我们的需求。因此我们就要用到RTOS系统。
18+
19+
使用 FreeRTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行,不依赖于系统内的其他任务或 RTOS 调度器本身。
20+
21+
任务分为四个状态:运行、准备就绪、阻塞、挂起
22+
23+
### 运行
24+
当任务实际执行时,它被称为处于运行状态。 任务当前正在使用处理器。 如果运行RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。
25+
26+
### 准备就绪
27+
准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态),但目前没有执行的任务,因为同等或更高优先级的不同任务已经处于运行状态。
28+
29+
### 阻塞
30+
如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态),直到延迟结束-一个时间事件。任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量事件。处于阻塞状态任
31+
务通常有一个"超时"期, 超时后任务将被超时,并被解除阻塞,即使该任务所等待的事件没有发生。“阻塞”状态下的任务不使用任何处理时间,不能被选择进入运行状态。
32+
33+
### 挂起
34+
与“阻塞”状态下的任务一样,“挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务没有超时。相反,任务只有在分别通过 vTaskSuspend() 和 xTaskResume()API 调用明确命令时 才会进入或退出挂起状态。
35+
36+
### 优先级
37+
每个任务均被分配了从 0 到 (configMAX_PRIORITIES-1) 的优先级,其中的configMAX_PRIORITIES 在 FreeRTOSConfig.h 中定义,低优先级数字表示低优先级任务。空闲任务的优先级为零。
38+
39+
### 任务创建
40+
41+
```
42+
BaseType_t xTaskCreatePinnedToCore(
43+
TaskFunction_t pvTaskCode, //任务函数指针,原型是 voidfun(void *param)
44+
const char *constpcName, //任务的名称,打印调试可能会有用
45+
const uint32_t usStackDepth,//指定的任务堆栈空间大小(字节)
46+
void *constpvParameters, //任务参数
47+
UBaseType_t uxPriority,
48+
(configMAX_PRIORITIES- 1)
49+
// 优 先 级,数字越大,优先级越大,0 到
50+
TaskHandle_t *constpvCreatedTask,
51+
//传回来的任务句柄
52+
const BaseType_t xCoreID) //分配在哪个内核上运行
53+
```
54+
55+
### 延迟函数
56+
57+
```
58+
// 阻塞指定的时间,单位为系统时钟节拍数
59+
void vTaskDelay( const TickType_t xTicksToDelay )
60+
//用于在指定的时间点之前阻塞任务,直到时间到达。
61+
void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement)
62+
```
63+
64+
### 示例
65+
```
66+
#include <stdio.h>
67+
#include "freertos/FreeRTOS.h"
68+
#include "freertos/task.h"
69+
#include "esp_log.h"
70+
71+
void TASK1(void *pvParameters){
72+
while(1){
73+
printf("TASK 1\n");
74+
vTaskDelay(pdMS_TO_TICKS(500));
75+
}
76+
}
77+
void app_main(void)
78+
{
79+
xTaskCreatePinnedToCore(TASK1, "TASK1", 2048, NULL, 1, NULL, 0);
80+
81+
}
82+
```
83+

0 commit comments

Comments
 (0)