FreeRTOS笔记(二)任务

本文详细介绍了FreeRTOS中的任务概念,包括任务状态(就绪、运行、阻塞、挂起)、任务特征、任务控制块(TCB)大小、MSP和PSP栈指针的作用、空闲任务以及vTaskDelay()函数的功能。此外,还提到了如何检测堆栈剩余空间,并强调了任务创建时的参数设置和错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

在FreeRTOS中,线程(Thread)和任务(Task)的概念是相同的。每个任务就是一个线程,有着自己的一个程序。函数的模型示例如下所示,通常情况下包含一个永远不会退出的循环体。

void TaskFunction( void *pvParameters )
{
  int32_t test = 10; 
  for(;;)
  {
  }
  vTaskDelete(NULL);  
}

这个任务函数不能有返回值(即使用return语句),不然会导致异常。如果不需要这个任务的话,必须要用语句显示地删除这个任务(比如调用vTaskDelete()这个函数)。每一个创建的任务有自己的栈区(用于存储数据)以及优先级(用于任务的调度)。

任务的状态

包括就绪状态(Ready),运行状态(Running),阻塞状态(Blocked),挂起状态(Suspended)。状态之间的切换可以由调用对应箭头上的CMSIS RTOS函数实现。

 

任务的特征

  • 由C语言编写的
  • 运行在一个无限的循环里
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、付费专栏及课程。

余额充值