【FreeRTOS】内核实现:task.c

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

之前写博客说过:

一直跟着野火的教程学习,从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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值