
FreeRTOS
文章平均质量分 56
CLO_se_
大学生重新从零开始学习编程语言
展开
-
FreeRTOS中断管理
在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先级并不是从 0 ~ 5 ,默认情况下它是从 5 ~ 15 , 0 ~ 4 这5个中断优先级不是FreeRTOS控制的(5是取决于configMAX_SYSCALL_INTERRUPT_PRIORITY)。首先设置好中断,并勾选RTOS。任何中断的优先级都大于任务!原创 2025-04-20 22:20:13 · 189 阅读 · 0 评论 -
FreeRTOS软件定时器
如果定时器服务任务的优先级设置的高的话,定时器命令队列中的命令和定时器回调函数就会及时的得到处理。STM32芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成PWM、输入捕获、捕获比较,等等功能强大,但是由于硬件的限制,个数有限。在调用函数vTasksStartScheduler()开启任务调度器的时候,会创建一个用于管理软件定时器的任务,这个任务就叫软件定时器服务任务。定时器是一个可选的,不属于FreeRTOS内核的功能,他是由定时器服务任务来提供的。只超时一次,调用一次回调函数。原创 2025-04-20 18:36:26 · 825 阅读 · 0 评论 -
FreeRTOS延时函数
vTaskDelay作用时让任务阻塞,任务阻塞后,RTOS系统调用其它处于就绪状态的优先级最高的任务来执行。HAL_Delay一直不停的调用获取系统时间的函数,直到指定的时间流逝然后退出,故其占用了全部CPU时间。绝对延时:vTaskDelayUntil。相对延时:vTaskDelay。原创 2025-04-19 23:29:34 · 73 阅读 · 0 评论 -
FreeRTOS任务通知
ulBitsToClearOnExit:表示在函数退出前,清零任务通知值那些位,(置1)在清零前,接收到的任务通知值会先被保存到形参*pulPreviousNotifyValue中。pdFALSE:把通知值减一(计数型信号量);在大多数情况下,任务通知可以替代二值信号量,计数信号量,事件标志组,可以替代长度位1的队列(可以保存一个32位整数或指针数),并且任务通知速度更快,使用的RAM更少!如果被通知任务没有取走上一个通知,由接收到一个通知,则这次通知值丢弃,在这种情况下视为调用失败并返回pdFALSE。原创 2025-04-19 00:11:48 · 893 阅读 · 0 评论 -
FreeRTOS事件标志组
事件标志组本质是一个16位或32位无符号的数据类型EventBits_t,由configUSE_16BIT_TICKS决定(如果是0,代表是32位,其它情况下是16位)尽管使用32位无符号的数据类型变量来存储事件标志,但其中的高8位用作存储事件标志组的控制信息,低24位用作存储事件标志,所以说一个事件组最多可以存储24个事件标志!事件标志组:是一组事件标志位的集合,可以简单的理解事件标志组,就是一个整数。uxBitsToSet:指定要在事件组中设置的一个或多个位的按位值。设置之后事件组中的事件标志位值。原创 2025-04-17 23:41:06 · 217 阅读 · 0 评论 -
FreeRTOS互斥量
举个例子,这里有A,B,C三人,优先级是依次下降的,首先C醒来先去上厕所,上到一半,A醒来也要上厕所,但是厕所已经被C占用了,所以A被阻塞了,然后B醒来,但是他不上厕所,他喝水,所以B也执行完任务了,接着C完成上厕所,最后才到A。当C在上厕所时,A被阻塞了,在优先级继承中,C的优先级就会被提升到A的优先级,且不会被B醒来打断,这样C执行完任务,就轮到A执行。在多数情况下,互斥性信号量和二值型信号量非常类似,但是从功能上二值型信号量用于同步,二互斥型信号量用于。成功,返回对应互斥量的句柄;原创 2025-04-17 11:08:00 · 210 阅读 · 0 评论 -
FreeRTOS计数信号量
计数型信号量是相当于队列长度大于1的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。uxInitialCount:创建信号量是分配给信号量的计数值,也就是初始放几个信号量。uxMaxCount:可以达到的最大计数值,也就是可以放几个信号量。计数型信号量的释放和获取与二值信号量完全相同!成功,返回对应计数型信号量的句柄;首先,要enable下面的值。失败,返回NULL。原创 2025-04-17 10:21:52 · 108 阅读 · 0 评论 -
FreeRTOS二值信号量
信号量,其中,信号可以起到通知信号的作用,然后我们的量可以用来表示资源的数量,当我们的量只有0和1的时候,它可以被称为二值信号量,只有两个状态,当我们的量没有限制时,比如0,1,2,3,4,5,6.......,它就是计数型信号量。二值信号量就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用它来进行互斥访问或任务同步。注意,在cubeMX中信号量是已经放入的,所以一上电是不能放入的,故一开始按获取是失败的。失败,返回errQUEUE_FULL。成功,返回对应二值信号量的句柄。原创 2025-04-16 23:53:29 · 223 阅读 · 0 评论 -
FreeRTOS队列
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间,中断和任务间传递消息。通常使用先进先出(FIFO)的数据存储缓冲机制,即先入队的数据会先从队列中被读取。也可以配置为后进后出(LIFO)方式,但用的比较少。使用实际值传递,即将数据拷贝到队列中进行传递,也可以传递指针,在传递较大的数据的时候采用指针传递。队列不属于某个任务,任何任务和中断都可以向队列发送/读取消息当任务向一个队列发送消息时,可以指定一个时间,假设此时队列已满无法入队。原创 2025-04-16 22:51:54 · 588 阅读 · 0 评论 -
任务的状态
类似暂停,通过调用函数 vTaskSuspend() 对指定任务进行挂起,挂起后这个任务将不被执行,只有调用函数 xTasResume() 才可以将这个任务从挂起态恢复。处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同优先级或更高优先级的任务正在运行。当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一个任务仅一个任务处于运行态)。如果一个任务因延时,或等待吸信号量、信息队列、事件标志组等而处于的状态被称之为阻塞态。原创 2025-04-16 18:06:56 · 197 阅读 · 0 评论 -
FreeRTOS任务的创建和删除
xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 创建成功。其实就是堆栈的分配,动态堆栈是由系统分配,而静态是由用户自己传递,一般情况下使用动态来创建任务。任务其实就是线程/进程,创建一个任务,就会在内存开辟一个空间,例如:游戏运行,浏览器,都是一个任务。xTaskCreate() 函数原型。vTaskDelete() 函数原型。看返回值就可以知道任务是否创建成功。优先级我们选normal即可。原创 2025-04-16 17:45:57 · 123 阅读 · 0 评论 -
FreeRTOS的移植串口
前面的FreeRTOS移植就不过多介绍,直接说说将串口接入cubeMX,在cubeMX中打开串口后,直接打开usart.c文件,插入下面的代码。然后直接在main文件里面,直接写printf ()函数即可实现串口的传输,上电即可发送。原创 2025-04-16 16:38:34 · 101 阅读 · 0 评论