FreeRTOS任务及常用数据类型定义

创建任务:
BaseType_t xTaskCreate(
TaskFunction_t pvTaskCode, //任务函数
const char * const pcName, //任务名称
unsigned short usStackDepth, //堆栈大小
void *pvParameters, //任务函数的参数
UBaseType_t uxPriority, //任务优先级
TaskHandle_t *pxCreatedTask ); //任务句柄

FreeRTOS规定任务函数的参数是一个指针,基类型是void(void*指针可以指向任一个类型的指针,理解为包罗万象的盒子,任何东西都能放进去),任务函数的原型如下:
void ATaskFunction( void *pvParameters );
注:任务的创建可以在调度器启动前,也可以是调度器启动后。

任务函数运行在死循环之内,不能以任何方式返回,如果任务函数实在不需要继续执行,那么可以使用vTaskDelete()API函数主动或者被动删除任务。任务删除后就不再运行,变成了“僵尸”,等待着内核收尸。vTaskDelete()的原型及需要的头文件如下:
void vTaskDelete( TaskHandle_t pxTask );

实例:
创建1个任务,串口间隔输出running,同时输出当前的任务数

#define START_TASK_PRIO 1 //优先级
#define STATR_STACK_SIZE 128 //堆栈大小
TaskHandle_t StartTask_Handler; //任务句柄

//任务函数
void start_task(void *pParam)
{
for(;?
{
printf(“task running, task number: %ld\r\n”,uxTaskGetNumberOfTasks());
vTaskDelay(1000);
}
}

void main(void)
{
printf(“before create task : %ld\r\n”,uxTaskGetNumberOfTasks());
//创建任务
xTaskCreate( (TaskFunction_t)start_task,
(const char*)“start_task”,
(uint16_t)STATR_STACK_SIZE,
(void*)NULL,
(UBaseType_t)START_TASK_PRIO,
(TaskHandle_t*)&StartTask_Handler
);
printf(“after create task : %ld\r\n”,uxTaskGetNumberOfTasks());
//开启调度器
vTaskStartScheduler();
}

常用数据类型:
typedef uint32_t TickType_t ;

typedef long BaseType_t ;

typedef unsigned long UBaseType_t;

#define portStackType_t uint32_t;

typedef portStackType_t StackType_t;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值