之前写博客说过:

一直跟着野火的教程学习,从STM32基础、初级、高级,这部分学完就是下一部分的FreeRTOS。FreeRTOS的学习分两个阶段:1.从0到1写出FreeRTOS的内核,2.移植FreeRTOS到开发板上并逐步添加外设功能。
这章就是手把手写task.c的内容:
FreeRTOS学习记录:
-------01.07----------------------
今日完成:(1)将书第七章《任务的定义》,任务切换,所有代码手敲一遍,尽量作注释,理解FreeRTOS中任务调度
(2)调试代码 ——————
------------------------------------
以下笔记:
------------------------------------
第一部分:几个头文件的作用,功能,内容
//头文件portmacro.h :关于数据类型、函数返回值、宏定义的一些说明
#ifndef PORTMACRO_H
#define PORTMACRO_H
#include "stdint.h"
#include "stddef.h"
//数据类型的重定义 :FreeRTOS中
#define portCHAR char //
#define portFLOAT float //
#define portDOUBLE double //
#define portLONG long //
#define portSHORT short //
#define portSTACK_TYPE uint32_t //栈类型:
#define portBASE_TYPE long // 基类型:根据处理器的结构决定多少位,用于函数返回值 / bool类型
//自定义的数据类型 ,很多都是 xxx_t
typedef portSTACK_TYPE StackType_t;
typedef long BaseType_t;
typedef unsigned long UBaseType_t;
#if( configUSE_16_BIT_TICKS == 1 )
typedef uint16_t TickType_t; //定义时基计数器16位
#define portMAX_DELAY ( TickType_t ) 0xffff
#else
typedef uint32_t TickType_t; //定义时基计数器32位,根据configUSE_16_BIT_TICKS宏来定义计数器的类型
#define portMAX_DELAY ( TickType_t ) 0xffffffffUL
#endif //configUSE_16_BIT_TICKS==1
//以下是FreeRTOS中的编程风格,弄明白这个看代码会清晰点
/*
变量名前缀(箭头后面的内容):
char -> c
short -> s
long -> l
portBaseType -> x (portXxxxType -> x)
指针 -> p
char* -> pc
long* -> pl
*/
/*
函数名:包含函数返回值、文件名、功能
vTaskPrioritySet():返回值为 void 型,在 task.c 这个文件中定义
xQueueReceive():返回值为 portBASE_TYPE 型,在 queue.c 这个文件中定义
vSemaphoreCreateBinary():返回值为 void 型,在 semph

本文深入探讨FreeRTOS实时操作系统中任务的创建与调度机制。详细介绍了任务控制块(TCB)的结构,任务栈的初始化过程,以及如何通过就绪列表进行任务调度。通过实例代码分析,帮助读者理解FreeRTOS任务管理的核心原理。

698

被折叠的 条评论
为什么被折叠?



