FreeRTOS
文章平均质量分 67
记录学习FreeRTOS学习过程
m0_61973119
这个作者很懒,什么都没留下…
展开
-
FreeRTOS中实现延时1us,1ms
【代码】FreeRTOS中实现延时1us,1ms。原创 2024-01-25 17:05:44 · 593 阅读 · 0 评论 -
FreeRTOS任务
单任务系统的编程方式,即裸机的编程方式,这种编程方式的框架一般都是在 main()函数中使用一个大循环,,这个大循环的部分可以视为应用程序的后台,而应用程序的前台,则是各种中断的中断服务函数。因此单任务系统也叫做前后台系统。从宏观上来看,多任务系统的多个任务是可以“同时”运行的,因此紧急的事务就可以无需等待 CPU 处理完其他事务,在被处理。对于单核的 CPU 而言,CPU 在同一时刻只能够处理一个任务,但是,在宏观的角度看来,就像是多个任务同时运行了一样。原创 2023-12-29 10:09:07 · 989 阅读 · 0 评论 -
FreeRTOS任务四种状态
通常情况下,处于阻塞态的任务都有一个阻塞的超时时间,在任务阻塞达到或超过这个超时时间后,即使任务等待的外部事件还没有发生,任务的阻塞态也会被解除。要注意的是,处于阻塞态的任务是无法被运行的。如果一个任务得到 CPU 的使用权,即任务被实际执行时,那么这个任务处于运行态。如果一个任务已经能够被执行(不处于阻塞态后挂起态),但当前还未被执行(具有相同优。运行 RTOS 的 MCU 只有一个处理器核心,那么在任务时刻,都只能有一个任务处理运行态。,进行一段时间的延时,那么在延时超时之前,这个任务就处理阻塞态。原创 2023-12-29 09:32:03 · 473 阅读 · 0 评论 -
FreeRTOS 任务延时函数
等待延时时间到继续运行下面的程序。延时单位:系统时钟节拍//时钟节拍频率,设置为1000,周期就是1ms。原创 2023-12-29 09:28:39 · 435 阅读 · 0 评论 -
FreeRTOS软件定时器
【代码】FreeRTOS软件定时器。原创 2023-12-28 15:31:15 · 408 阅读 · 0 评论 -
FreeRTOS 空闲任务
FreeRTOS 会自动创建一个空闲任务,这样就可以确保系统中永远都。空闲任务是以系统中被创建的,这样可以确保空闲任务不会占用其他就绪态任务的被执行时间。当有任务被函数 vTaskDelete()函数删除时,如果函数 vTaskDelete()的调用者与被删除任务不是同一个任务,那么被删除任务的删除工作可以由函数 vTaskDelete()的调用者完成。如果,即一个任务调用函数 vTaskDelete()删除了自身,那么删除工作是不能完全由任务本身完成的,因此。原创 2023-12-28 14:55:10 · 359 阅读 · 0 评论 -
FreeRTOS中断、临界区和任务调度器
进入临界区只是关闭了freeRTOS管理的中断,通过配置freertosconfig.h中的宏 configMAX_SYSCALL_INTERRUPT_PRIORITY (配置 FreeRTOS 可管理的最高优先级的中断,值为5),所以进入临界区之后中断优先级大于5的都可以打断临界区的运行。然后任务切换也可以打断临界区的运行挂起任务调度器只是关闭了任务的调度和切换,但是此时中断都可以打断此任务的运行优先级最小的中断>优先级最大的任务 中断是数字越小优先级越高,任务优先级是数字越大优先级越高。原创 2023-12-28 14:09:48 · 1047 阅读 · 0 评论 -
FreeRTOS任务切换
PendSV(Pended Service Call,可挂起服务调用),PendSV的中断优先级是可以编程的,用户可以根据实际的需求,对其进行配置。,例如在应用任务在等待某个时间发生而需要停止的时候,那么就可以通过 SVC 指令来触发 OS内核的执行,以切换到其他任务;在 PendSV 的中断服务函数中,调用了函数 vTaskSwitchContext()来确定写一个要运行的任务。任务切换概念:在典型的 RTOS 中,任务的处理时间被分为多个时间片,FreeRTOS 在 PendSV 的中断中,完成。原创 2023-12-28 10:32:17 · 533 阅读 · 0 评论 -
FreeRTOS信号量
这就是二值信号量带来的优先级翻转问题,用户在实际开发中要注意这种问题。原创 2023-12-28 09:32:08 · 1011 阅读 · 0 评论 -
FreeRTOSConfig.h配置文件
FreeRTOS 使用 FreeRTOSConfig.h 文件进行配置和裁剪。FreeRTOSConfig.h 文件中有几十个配置项,这使得用户能够很好地配置和裁剪 FreeRTOS。FreeRTOSConfig.h 文件中的配置项可分为三大类:“config”配置项、“INCLUDE”配置项和其他配置项。原创 2023-12-27 16:30:10 · 525 阅读 · 0 评论 -
FreeRTOS调度任务不执行的原因
上述代码中task2的优先级大于task1,导致程序中会一直运行task2,不运行task1,所以程序没有任何输出。freeRTOS调度任务的机制是:优先级高的任务先运行,同优先级的任务时间片轮转运行。运行上述代码,为什么串口调试助手不会打印hello,原因在于任务的优先级。原创 2023-12-27 15:18:28 · 1104 阅读 · 0 评论 -
printf函数不可重入问题(FreeRTOS)
问题现象:如果在最开始的代码中加入printf打印函数,函数只会打印一部分,且后面的程序不在运行,直接异常。代码调试,结果也是遇到printf函数卡死,进入HardFault_Handler中断屏蔽打印函数之后,代码正确运行,说明printf函数严重影响程序的运行。原创 2023-12-27 14:50:27 · 561 阅读 · 0 评论 -
FreeRTOS队列和队列集
队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制。在队列中可以存储数量有限、大小固定的多个数据,队列中的每一个数据叫做队列项目,队列能够存储队列项目的最大数量称为队列的长度,在创建队列的时候,就需要指定所创建队列的长度及队列项目的大小。因为,因此1. 数据存储队列通常采用,当有新的数据被写入队列中时,永远都是写入到队列的尾部,而从队列中读取数据时,永远都是读取队列的头部数据。但同时 FreeRTOS。原创 2023-12-27 13:18:16 · 1234 阅读 · 0 评论 -
FreeRTOS列表
(1)列表是 FreeRTOS 中最基本的一种数据结构,其在物理存储单元上是非连续、非顺序的。FreeRTOS 中的列表是一个双向链表。(2):用于将待插入列表的列表项插入到列表 pxIndex 指针指向列表项的前面(如果pxIndex指向listend,那么也就是将列表项插入到Listend的前面,然后例如我们假设Listend为第一个结点,那么实质就是将列表项插入到链表的最后一个,即我们可以将listend当成头节点,然后 vListInsertEnd()方法就是插入到列表的末尾)(3)原创 2023-12-26 10:20:55 · 763 阅读 · 0 评论 -
FreeRTOS的由来
但是此时我们会发现在延时的那一秒钟里面CPU没有并没有干任何事情,死延时很占用CPU资源,后面我们开始用一个定时器计时,时间到了则调用读取温度的数据,这样可以大大提高CPU空闲时间。随着任务的复杂,代码逻辑的增多,我们在while(1)中写了无数个if语句,这很不利于我们去观看代码,并且逻辑也很复杂,所以出现了任务调度,也就是freeRTOS任务调度系统。最开始我们想要每一秒钟去读取一次温度的数据,所以代码如下。原创 2023-12-19 14:18:04 · 370 阅读 · 0 评论 -
SysTick_Config()函数的配置
从原理上来说,Systick定时器和开发板上的通用定时器没有区别。从功能上来说,Systick定时器主要是用来用来进行延时的,而通用或者高级定时器往往用来进行PWM输出、输入捕获等功能。至于为什么不用通用定时器或者高级定时器来完成延时功能,则是考虑到节省MCU的资源来做更重要的事。原创 2023-12-18 10:58:53 · 1677 阅读 · 0 评论 -
FreeRTOS移植步骤
(1) FreeRTOS源码打开(2) FreeRTOS文件夹打开(3)Soutce文件夹打开(4)portable文件夹打开。原创 2023-12-13 10:34:13 · 1509 阅读 · 0 评论