零基础FreeRTOS的常用函数示例

发布于:2025-07-29 ⋅ 阅读:(16) ⋅ 点赞:(0)

1. 任务

//原生xTaskCreate
BaseType_t xTaskCreatePinnedToCore(
				TaskFunction_t pvTaskCode, //任务函数指针, 原型:void function(void * param)
				const char * constpcName,  //任务名称
				const unit32_t usStackDepth, //任务堆栈空间
				void *constpvParameters,	//任务参数
				UBaseType_t uxPriority, 	//优先级,数值越大,优先级越高,0到(configMAX_PRIORITIES-1)
				TaskHandle_t * constpvCreatedTask,	//创建后的句柄
				const BaseType_t xCoreID)	//运行内核
//=================
//示例程序
//=================
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

void task1(void *param)
{
	while(1)
	{
	}
}
void main(void)
{
	xTaskCreatePinnedToCore(task1, "test", 2048, NULL, 3, NULL, 0)
}

2. 阻塞

//延时TicksToDelay个周期
void vTaskDelay(const TickType_t TicksToDelay)
//解除阻塞的精确时间
void vTaskDelayUntil(TickType_t *pxPreviousWakeTime, 
					const TickType_t xTimeIncrement)
//=================
//示例程序
//=================
//pdMS_TO_TICKS返回毫秒对应系统节拍
vTaskDelay(pdMS_TO_TICKS(100))
cnt = xTaskGetTickCount();	//获得当前系统节拍树
vTaskDelayUntil(&cnt, 100);

3. 队列操作

//创建队列
QueueHandle_t xQueueCreate(
			UBaseType_t uxQueueLength, 	//队列容量
			UBaseType_t uxItemSize) 	//队列占用内存
//想队列发送消息
BaseType_t xQueueSend(
			QueueHandle_t xQueue, 		//队列句柄
			const void *pvItemToQueue,	//待发送消息指针
			TickType_t	xTicksToWait)	//等待时间
BaseType_t xQueueReceive(
			QueueHandle_t xQueue, 		//队列句柄
			void *pvBuffer,				//接收消息的缓冲区指针
			TickType_t xTicksToWait)	//等待时间	
//=================
//示例程序
//=================
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
QueueHandle *queue_handle;
typeof struct{} queue_data_t;
void tRecieve(void *param)
{
	queue_data_t data;
	while(1)
	{
		if(pd=xQueueReceive(queue_handle, &data, 100)
		{}
	}
}
void tSend(void *param)
{
	queue_data_t data;
	memset(*data, 0, sizeof(queue_data_t));
	while(1)
	{
		xQueueSend(queue_handle, &data, 100);
		vTaskDelay(pdMS_TO_TICKS(100))
	}
}
void main(void)
{
	queue_handle = xQueueCreate(10, sizeof(queue_data_t));
	xTaskCreatePinnedToCore(tRecieve, "receiveTask", 2048, NULL, 3, NULL, 0)
	xTaskCreatePinnedToCore(tSend, "sendTask", 2048, NULL, 3, NULL, 0)
}


4. 信号量(互斥锁)

// 创建二进制信号量
SemaphoreHandle_t xSemaphoreCreateBinary(void);
//创建计数信号量
SemaphoreHandle_t xSemaphoreCreateCounting(
			UBaseType_t uxMaxCount,	//最大信号量数
			UBaseType_t uxInitialCount)	//初始信号量数
//获取信号量
xSemaphoreTake(SemaphoreHandle_t xSemaphore,	//信号量句柄
			TickType_t xTicksToWait)			//等待超时时间
// 释放信号量
xSemaphoreGive(SemaphoreHandle_t xSemaphore)
//删除信号量
void xSemaphoreDelete(SemaphoreHandle_t xSemaphre)
//=================
//示例程序
//=================
SemaphoreHandle_t semaphore_handle = xSemaphoreCreateBinary();
//获取互斥锁
xSemaphoreTake(semaphore_handle,portMAX_DELAY);
//执行程序
task()...
//释放互斥锁
xSemaphoreGive(semaphore_handle);

网站公告

今日签到

点亮在社区的每一天
去签到