FreeRTOS-创建任务(动态)笔记

 

分析:BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,

const char * const pcName,

const uint16_t usStackDepth,

void * const pvParameters,

UBaseType_t uxPriority,

TaskHandle_t * const pxCreatedTask )

1.为任务堆栈分配内存

pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); //通过函数可以得到分配的堆栈内存大小为usStackDepth *StackType_t(值为4)

2.堆栈内存申请成功后,申请任务控制块内存

pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );

3.若任务控制块的内存申请成功后,把申请的堆栈内存赋值给新申请任务控制块的堆栈

pxNewTCB->pxStack = pxStack;

4.通过宏定义来确定任务是通过动态分配的、

5.初始化新建的任务:prvInitialiseNewTask()

6.把任务添加到就绪列表里面:prvAddNewTaskToReadyList()

7.创建完成。

 

分析static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,

const char * const pcName,

const uint32_t ulStackDepth,

void * const pvParameters,

UBaseType_t uxPriority,

TaskHandle_t * const pxCreatedTask,

TCB_t *pxNewTCB,

const MemoryRegion_t * const xRegions )

 

1.如果使用了堆栈溢出检测功能的话没就用0xa5来填充堆栈

 

2.确定栈顶位置

3.填充任务名数组

4.确定任务的优先级

5.初始化状态列表项和事件列表项

6.①设置状态列表项的pvOwner为该任务控制块②:设置事件列表项的优先级③:事件列表项的pvOwner为该任务控制块

7.设置MPU

8.初始化任务堆栈,在这里把PC之间寄存器指向了任务函数

9.把新的任务控制块赋给任务句柄

 

分析sStackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )

 

 

 

分析static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )

 

1.通过全局变量uxCurrentNumberOfTasks来统计任务数目

2.如果新创建的任务为第一个任务,则需要调用函数prvInitialiseTaskLists初始化列表

3.如果任务调度器没运行,新创建的任务的优先级比当前于行任务的优先级高,则把新创建的任务设置为当前运行的任务。

4.把任务添加到就绪列表中

5.如果新任务的优先级比当前运行任务的优先级高 并且任务已经运行 这时会进行一次任务切换。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS是一个开源的实时操作系统(RTOS),专门用于嵌入式系统。它提供了一套可移植的API,使开发者能够轻松地编写多任务应用程序。 以下是一些关于FreeRTOS笔记: 1. 任务(Tasks):FreeRTOS使用任务实现并行执行。每个任务都有自己的独立堆栈空间和优先级。任务可以创建、删除和挂起。 2. 调度器(Scheduler):FreeRTOS的调度器负责决定哪个任务应该在给定时间运行。它使用优先级调度算法,并且可以配置为使用抢占式或协作式调度。 3. 信号量(Semaphores):信号量是一种用于同步和通信的对象。它可以用于任务之间的互斥访问共享资源或任务之间的通信。 4. 队列(Queues):队列提供了一种任务之间传递数据的方式。任务可以将数据发送到队列,另一个任务可以从队列中接收数据。 5. 事件标志组(Event Flags):事件标志组用于任务之间的同步和通信。一个任务可以等待一组特定的事件标志发生,另一个任务可以设置或清除这些事件标志。 6. 定时器(Timers):FreeRTOS提供了软件定时器,可以在指定时间间隔内运行回调函数。 7. 内存管理(Memory Management):FreeRTOS提供了内存管理功能,可以动态分配和释放内存。 8. 中断(Interrupts):FreeRTOS可以与硬件中断一起使用,以实现任务的抢占式调度。 这些只是FreeRTOS的一些基本概念和功能,它还有很多其他特性和组件。如果你对某个特定方面有更多的兴趣,请告诉我,我会提供更详细的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值