FreeRTOS任务相关基础知识

一、单任务系统和多任务系统

单任务系统一般为裸机系统,while(1)做一个大循环,也包含一些中断,完成所有的程序逻辑处理。如果应用程序需求繁多,程序设计复杂,应考虑多任务系统。

多任务系统在操作系统基础上实现,可将繁杂的应用程序“分而治之”,将大问题划分为多个小问题,由不同的任务去解决,可以认为它们是并发运行的(其实是多个任务轮转运行,每个任务执行时间很短),RTOS中有一个任务调度器决定哪个任务先运行,哪个后运行。

 

二、FreeRTOS任务特点:

在程序设计中,一个应用业务可以单独作为一个任务,每个任务都拥有自己独立的运行环境,不依赖于其他任务,一个时刻同时只有一个任务在运行,由任务调度器决定哪个任务运行。在调度过程中,任务调度器需保证一个任务在开始运行时,其上下文环境与任务上一次退出的时候相同。故,每个任务都必须有独立的堆栈保存上下文环境。

任务支持抢占/优先级/独立的堆栈。

三、任务的状态

FreeRTOS任务的状态有4种:运行态,就绪态,阻塞态,挂起态。

  1. 运行态

该任务正在运行,正占用处理器。

     2. 就绪态

指已经准备好运行的任务(没有被挂起或阻塞),就绪态还没有运行,在等待同优先级任务或者更高优先级任务让出处理器。

     3. 阻塞态

任务在等待某个外部事件,处于阻塞状态。如任务调用vTaskDelay(),在等待延时完成,等待队列/信号量/事件组/通知/互斥信号量等,阻塞态会有超时时间,超过改时间,退出阻塞态。

     4. 挂起态

与阻塞态类似,进入挂起态也不能被调用进入运行态,但是挂起态没有超时时间,调用vTaskSuspend()和xTaskResume()使任务进入和退出挂起态。

状态之间转换如下图:

每个任务都有优先级,0~(configMAX_PRIOIRTES-1),0的优先级最低,FreeRTOS调度器确保处于就绪态的最高优先级任务优先执行,当宏configUSE_TIME_SLICING定义为1时,多个任务可以使用相同优先级,数量不限,对于处于就绪态的优先级相同的任务,将由时间片轮转调度器决定谁先运行。

 

四、任务的创建

FreeRTOS中创建任务使用xTaskCreate()或者xTaskCreateStatic()来创建任务,

BaseType_t xTaskCreate(   TaskFunction_t pxTaskCode,

                                                 const char * const pcName,                                                       const configSTACK_DEPTH_TYPE usStackDepth,

                                                 void * const pvParameters,

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS是一个开源的实时操作系统,它专为嵌入式系统设计,提供了任务调度、内存管理、中断处理、时间管理和通信机制等功能。在FreeRTOS中,系统时钟的节拍可以通过配置文件FreeRTOSConfig.h来设置,使用#define configTICK_RATE_HZ来定义时钟节拍的频率,例如#define configTICK_RATE_HZ ((TickType_t) 1000)表示时钟节拍为1毫秒。 FreeRTOS还提供了事件标志组(Event Group)的功能,通过一系列函数可以实现对事件的操作。这些函数包括xEventGroupCreate()、xEventGroupCreateStatic()、vEventGroupDelete()、xEventGroupWaitBits()、xEventGroupSetBits()、xEventGroupSetBitsFromISR()、xEventGroupClearBits()、xEventGroupClearBitsFromISR()、xEventGroupGetBits()、xEventGroupGetBitsFromISR()、xEventGroupSync()等。通过这些函数,可以创建、删除、等待和设置事件标志组,以实现任务间的同步与通信。 在使用FreeRTOS时,一般需要进行一些基本的配置,如时钟配置、串口使能以及勾选任务信息相关的宏定义(方便查看任务信息)。另外,还可以根据需要添加消息队列等组件以满足不同的应用需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [FreeRTOS学习笔记(一)——基础知识体系](https://blog.csdn.net/xingzhewanfu/article/details/85262135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值