学习笔记-RTOS任务创建

简介:

任务的创建

1  任务需要 RAM 来保存与任务有关的状态信息(任务控制块)

2  需要一定的 RAM 来作为任务堆栈


  xTaskCreate()就会从FreeRTOS的堆中分配,必须提供内存管理文件

  默认使用heap_4.c


3 宏 configSUPPORT_DYNAMIC_ALLOCATION 必须为 1


4 函数 xTaskCreateStatic()创建的话这些 RAM 就需要用户来提供了

  configSUPPORT_STATIC_ALLOCATION设置为1


5 任务调度器启动前还是启动后,都可以创建任务

  最常用的一个

BaseType_t xTaskCreate(  TaskFunction_t pxTaskCode,

                         const char * const pcName,

                         const uint16_t usStackDepth,

                         void * const pvParameters,

                         UBaseType_t uxPriority,

                         TaskHandle_t * const pxCreatedTask )

pxCreatedTask 任务句柄,就是任务的任务堆栈,其他API可能会用到


  返回值 是反映任务创建成功或出错码

         pdPASS:  任务创建成功。


6 不常用

TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,

                                const char * const pcName,

                                const uint32_t ulStackDepth,

                                void * const pvParameters,

                                UBaseType_t uxPriority,

                                StackType_t * const puxStackBuffer,

                                StaticTask_t * const pxTaskBuffer )

 pxTaskBuffer:  任务控制块。

 返回值:NULL :  任务创建失败

         其他值:  任务创建成功,返回任务的任务句柄。


7 vTaskDelete( TaskHandle_t xTaskToDelete )

  xTaskToDelete:  要删除的任务的任务句柄。

  可以使用NULL做参数,删除任务本身


8  关键实验(学习动态创建):

  

  任务创建:

#define START_TASK_PRIO  1  //任务优先级 

#define START_STK_SIZE 128 //任务堆栈大小

TaskHandle_t StartTask_Handler; //任务句柄  

void start_task(void *pvParameters); //任务函数   


xTaskCreate((TaskFunction_t )start_task,   //任务函数 

    (const char* )"start_task",    //任务名称

            (uint16_t )START_STK_SIZE,     //任务堆栈大小

            (void* )NULL,                  //传递给任务函数的参数

            (UBaseType_t )START_TASK_PRIO, //任务优先级

            (TaskHandle_t* )&StartTask_Handler); //任务句柄


vTaskStartScheduler(); //开启任务调度  


开始任务:

 taskENTER_CRITICAL(); //进入临界区

 //创建 TASK1 任务

  。。。。。。

 //创建 TASK2 任务

 vTaskDelete(StartTask_Handler); //删除开始任务 

 taskEXIT_CRITICAL(); //退出临界区


任务堆栈、任务句柄、任务函数声明等,这样方便修改。这些东

西可以放到一个.h 头文件里面去,


开始任务:创建其他应用任务和信号量、队列等内核对象

 

 

 












本文转自飞行萌51CTO博客,原文链接:http://blog.51cto.com/8527508/1937225 ,如需转载请自行联系原作者




相关文章
|
API
FreeRTOS学习笔记—FreeRTOS移植
本文学习了如何移植FreeRTOS到自己的STM32工程。最后,根据正点原子提供的测试main函数,测试了移植效果。
566 0
FreeRTOS学习笔记—FreeRTOS移植
|
7月前
|
算法 API 调度
【FreeRTOS】多任务创建
【FreeRTOS】多任务创建
|
7月前
|
Rust 安全 开发者
Rust在操作系统组件开发中的应用:设备驱动与系统服务
本文探讨了Rust在系统级开发中的潜力,特别是针对操作系统组件如设备驱动和系统服务的开发。我们将分析Rust为何适合这些任务,展示其在实际项目中的应用,并讨论其面临的挑战和未来的可能性。
|
消息中间件
嵌入式:UCOS移植+简单创建任务
嵌入式:UCOS移植+简单创建任务
|
Linux 图形学 Windows
嵌入式课程实现Linux操作系统LVGL移植操作
嵌入式课程实现Linux操作系统LVGL移植操作
|
安全 Linux
嵌入式Linux C多进程编程(二)——进程概述
嵌入式Linux C多进程编程(二)——进程概述
嵌入式Linux C多进程编程(二)——进程概述
|
API 调度
HarmonyOS系统中内核多线程开发
HarmonyOS系统中内核多线程开发
351 0
HarmonyOS系统中内核多线程开发
|
安全 Linux 调度
内核调度器开发入门|学习笔记(一)
快速学习内核调度器开发入门
内核调度器开发入门|学习笔记(一)
|
定位技术 调度 开发者
|
消息中间件 存储 缓存
FreeRTOS记录(九、一个裸机工程转FreeRTOS的实例)
记录一下一个实际项目由裸机程序改成FreeRTOS,以前产品的平台还是C8051单片机上面的程序, 硬件平台改成了STM32L051,同时使用STM32CubeMX生成的工程,使用FreeRTOS系统
400 0
FreeRTOS记录(九、一个裸机工程转FreeRTOS的实例)

相关课程

更多