FreeRTOS
文章平均质量分 89
你要努力变强呦
这个作者很懒,什么都没留下…
展开
-
FreeRTOS内存管理
FreeRTOS 提供了5种动态内存管理方法。heap_1动态内存管理方法是5种方法中最简单的,但是申请的内存不允许释放。heap_2动态内存管理方法支持动态内存的申请和释放,但是不支持内存碎片的整理。heap_3动态内存管理方法采用编译器自带的malloc()函数和firee()函数进行简单的封装,以支持线程安全,即支持多任务调用。heap_4动态内存管理方法支持动态内存的申请和释放,支持内存碎片整理。heap_5动态内存管理方法在heap_4动态内存管理方法的基础上支持将动态内存设置在不连续的区域上。原创 2023-10-30 16:53:06 · 259 阅读 · 0 评论 -
FreeRTOS软件定时器
FreeRTOS 软件定时器有单次定时模式和周期定时模式两种工作模式。软件定时器在使用前要先创建,刚创建好的软件定时器处于休眠未运行状态。可通过启动、复位、停止等API操作软件定时器,这些API通过软件定时器命令队列传递命令给软件定时器服务任务。软件定时器要的功能通过软件定时器回调函数实现,在软件定时器回调函数中不能调用会导致任务阻塞的API函数。原创 2023-10-30 14:34:32 · 148 阅读 · 0 评论 -
FreeRTOS任务通知(用任务通知来模拟时间标志组)
使用任务通知可以提高运行速度和减少RAM的消耗,可用于轻量级的使用场所下替换二值信号量,计数信号量,事件标志组等。原创 2023-10-29 17:05:03 · 100 阅读 · 1 评论 -
FreeRTOS任务通知(用任务通知来模拟二值信号量)
任务通知是一个事件,FreeRTOS从v8.2.0版本开始增加了任务通知功能。每个TCB中有一个32位的成员变量ulNotifiedValue,专门用于任务通知。任务通知可以在某些场合用来代替信号量、事件标志组等,并且拥有更高的执行效率。接收任务通知的任务可因等待任务通知而进入阻塞态,在其他任务向这个任务发送任务通知后解除阻塞。根据FreeRTOS官方数据,使用任务通知相较于使用信号量和事件标志组,唤醒被阻塞任务时间的速度提升了45%,并且使用的RAM空间更少。但使用任务通知也有如下局性。原创 2023-10-29 16:02:19 · 80 阅读 · 1 评论 -
FreeRTOS事件标志组
事件标志组可以用来同步多个事件或任务,事件标志组要先创建后使用。在不同任务中均可操作事件标志组。可以设置和获取指定位的事件标志。事件标志位置1表示对应事件发生,xEventGroupWaitBits()函数可在等待多个事件的同时阻塞当前任务。原创 2023-10-27 17:14:37 · 190 阅读 · 1 评论 -
FreeRTOS信号量与任务同步-3互斥信号量
互斥信号量是一种特殊的二值信号量,用于控制在两个或多个任务之间访问共享资源。互斥信号量提供一种优先级继承机制,让持有互斥信号量的任务优先级提升到等待这个互斥信号量的任务优先级。与二值信号量主要用于同步不同,互斥信号量主要用于互斥访问。除优先级继承机制以外,二者的区别主要在于信号量被获取后发生的事情。互斥信号量在多任务资源共享上相当于与共享资源关联的令牌。一个任务想要合法地访问资源,必须先成功地得到(Take)该资源对应的令牌(成为令牌持有者)。令牌持有者在完成资源使用后,必须马上归还(Give)令牌。原创 2023-10-06 20:15:31 · 179 阅读 · 3 评论 -
FreeRTOS信号量与任务同步-2计数信号量
上一节的二值信号量可能会发现,在用二值信号量同步任务与中断的例子中,串口输出的同步信息数量明显少于中断次数。这是由于TIM2更新中断时间短,在使用二值信号量同步任务与中断时,信号的传递还没有完成,新的中断又发生了,二值信号量显然无法保存多次中断的状态,采用计数信号量则可以解决这个问题。计数信号量相当于长度大于1的队列,主要用于事件计数和资源管理。当计数信号量用于事件计数时,初值一般为0,事件处理函数每释放一次信号量其值加一,其他任务获取信号量其值减一。原创 2023-10-06 14:21:38 · 59 阅读 · 1 评论 -
FreeRTOS信号量与任务同步-1二值信号量
信号量是操作系统用来实现资源管理和任务同步的消息机制。FreeRTOS信号量分为二值信号量、计数信号量、互斥信号量和递归互斥信号量。可以将互斥信号量看成一种特殊的二值信号量,但互斥信号量和二值信号量之间还是有一些区别的。同步互锁。原创 2023-10-06 13:22:20 · 465 阅读 · 1 评论 -
FreeRTOS队列与消息传递-1FreeRTOS队列及其结构
任务与任务之间、任务与中断之间经常需要进行一些信息交互和消息传递。FreeRTOS利用队列来实现任务间的通信,队列可以用于在任务与任务之间、任务与中断之间传递消息,所以又被称为消息队列。另外,用于资源共享和访问的二值信号量、计数信号量、互斥信号量和递归互斥信号量也都是通过队列来实现的,这个我们后面在细说。原创 2023-10-02 17:01:27 · 504 阅读 · 1 评论 -
FreeRTOS任务函数 - 4统计任务运行时间信息
任务管理是FreeRTOS的核心功能,FreeRTOS提供了很多任务函数,比较常用的任务函数有延时函数,优先级控制函数,任务状态信息以及任务运行时间信息获取函数等。原创 2023-10-01 20:43:22 · 931 阅读 · 0 评论 -
FreeRTOS的裁剪和配置
FreeRTOS是一个可裁剪和配置的嵌入式实时操作系统,其裁剪和配置通过FreeRTOSConfig.h头文件实现,每个FreeRTOS项目中必须有一个FreeRTOSConfig.h文件,FreeRTOS通过以INCLUDE_和config_开始的宏进行裁剪和配置。原创 2023-09-21 14:17:49 · 443 阅读 · 0 评论 -
FreeRTOS任务函数 - 2优先级控制
在创建任务时,可以指定其优先级。在任务运行过程中,可以通过 uxTaskPriorityGet()函数查询任务优先级,通过vTaskPrioritySet()函数改变任务优先级。原创 2023-09-30 16:23:04 · 182 阅读 · 0 评论 -
FreeRTOS任务函数 - 1延时函数
任务管理是FreeRTOS的核心功能,除内核函数中的任务创建,挂起,恢复,删除和任务切换之外,还有用于让出CPU使用权的阻塞式延时,任务优先级查询,设置,获取任务状态信息,以及获取任务运行时间信息等辅助函数。下面是常用的FreeRTOS任务函数。原创 2023-09-30 12:54:17 · 627 阅读 · 0 评论 -
FreeRTOS任务调度
调度器开启后,程序就不会从调度器开启函数中返回。在开启调度器时会自动创建个空闲任务,用于回收资源、进入低功耗tickless 模式。空闲任务能够获得的执行时间径往用于衡量一个系统设计是否有足够裕度。FreeRTOS 任务切换通过PendSV中断实现无论是系统调用还是嘀嗒定时器中断,都是通过将ICSR的bit28置1来触发PendSV中断,从而实现任务切换的。对于一些需要保护的代码,可以采用进入和退出临界段或挂起调度器的方式进行保护。原创 2023-09-29 17:15:10 · 904 阅读 · 1 评论 -
FreeRTOS移植到STM32-任务的创建
FreeRTOS移植到STM32做一些小实验。原创 2023-09-20 15:36:11 · 318 阅读 · 1 评论 -
FreeRTOS任务基础
在接触操作系统前,单片机程序的编写采用的是在一个while死循环里面反复的执行,在循环中调用相应的函数来完成对应的操作。在循环中各个函数按照排队顺序轮流执行,不管这个功能模块有多紧急,没轮到就只能等着,因此整个系统的实时性差。对于稍大一点的嵌入式应用程序,显然是不适用的。除实时性受限制之外,各个功能模块的先后顺序安排也增加了程序设计的复杂度和不可预见性。为了解决系统的固有问题,引入了操作系统。几乎所有的操作系统都采用多任务系统,FreeRTOS也不例外。原创 2023-09-21 21:17:48 · 257 阅读 · 0 评论