FreeRTOS基于STM32F103移植
文章平均质量分 81
参考正点原子系列视频与103开发手册的学习记录
ghujlhdrx
记录点滴
展开
-
FreeRTOS系列补充1:重点记忆知识点
FreeRTOS采用抢占式优先级调度策略。任务根据其优先级进行调度,优先级高的任务会抢占优先级低的任务的执行权。FreeRTOS使用任务控制块(Task Control Block,简称TCB)来管理任务信息和状态。调度器根据任务的优先级和状态进行任务切换。原创 2024-04-01 18:28:10 · 648 阅读 · 0 评论 -
FreeRTOS系列补充2:重点API函数的应用代码范例(特特特详细)
其实在网上已经有很多相关的博文了,不过我还是决定自己动手来记录一下。按照之前的经验,需要达到的目的为切题,详细。否则回看的时候不清楚。好多,整理的好累。应用场景:FreeRTOS在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。原创 2024-04-01 18:25:46 · 1258 阅读 · 0 评论 -
FreeRTOS系列:操作系统中的优先级反转与中断机制
优先级继承策略(Priority inheritance):当一个任务占有了资源并且随后阻塞了其他申请该资源的任务时,该任务将临时改变它的优先级为所有申请该资源的任务中的最高优先级,并以这个临时优先级在临界区执行。此时优先级最高的任务A不仅要等任务C运行完,还要等优先级低的任务D运行完才能被调度,如果任务D和任务C需要执行很长时间,那么任务A的执行就不能得到保证,整个系统的实时性能很差。T2时刻,任务A抢占任务C,并尝试获得资源R,因为优先级继承的原因,任务C的优先级被提升到任务A的优先级;原创 2023-07-01 19:07:52 · 444 阅读 · 0 评论 -
FreeRTOS系列一:FreeRTOS移植实验
在D:\探索者F4 资料盘(A盘)\【正点原子】STM32F103最小系统板资料\4,程序源码\4,扩展例程\5,FreeRTOS例程\5,FreeRTOS例程\FreeRTOS实验2-1 FreeRTOS移植实验\USER打开。对应目录:D:\探索者F4 资料盘(A盘)\【正点原子】STM32F103最小系统板资料\STM32F1 FreeRTOS开发手册_V1.1\STM32F1 FreeRTOS开发手册_V1.1。到正点原子官网里面下载对应的资料,看到这个的应该都会,这里主要补充自己学习的细节。原创 2023-06-24 15:57:59 · 288 阅读 · 1 评论 -
FreeRTOS系列二:FreeRTOS系统配置
所以,如果外部晶振的频率已经确定了,那么确定PLL_M,PLL_N,PLL_P的系数就可以得到对应频率的系统时钟SYSCLK,其中PLL_M,PLL_N,PLL_P可以有多种组合,只要满足相应的条件即可。例如,假设外部晶振为8M,对STM32F407来说,系统时钟的最大频率为168M,那么久可以分别设置PLL_M = 8,PLL_N = 336,PLL_P = 2。其中PLL_M,PLL_N,PLL_P,PLL_Q是一个分频器,而PLL_M是一个倍频器。主PLL产生的时钟一般会用作系统时钟。原创 2023-06-24 20:16:39 · 2654 阅读 · 1 评论 -
FreeRTOS系列三:动态任务创建和API函数介绍和实战编程
参考材料:"D:\探索者F4 资料盘(A盘)\【正点原子】STM32F103最小系统板资料\6,软件资料\6,软件资料\13,FreeRTOS学习资料\13,FreeRTOS学习资料\FreeRTOS实时内核使用指南-中文.pdf"我在这里不累述文档里已经有的概念,只是记录核心思想和困难。任务的函数原型宏 configSUPPORT_DYNAMIC_ALLOCATION 必须为 1ps:pcName包括’\0’结束符。如果传入的字符串长度超 过了这个最大值,字符串将会自动被截断。原创 2023-06-27 19:51:50 · 453 阅读 · 1 评论 -
FreeRTOS系列四:动态任务的创建和删除详细过程(函数解析)
这一节主要是对正点原子手把手教你学FreeRTOS系列的P11中代码中task.c中的代码根据老师的解释和自己在网上找到的资料对代码做了详细中文注释。方便以后自己复习,结合视频更好理解。把代码粘贴到keil里面然后对着视频理解就好。太多了,记录到视频30分钟。原创 2023-07-01 16:11:45 · 235 阅读 · 0 评论 -
FreeRTOS系列五:任务的挂起与恢复的API函数(理论)
如果有用户中断函数调用到freertos提供的系统函数,一定要使用带FromISR的freertos提供的系统函数,并且这个用户中断的优先级一定要在configKERNEL_INTERRUPT_PRIORITY和configMAX_SYSCALL_INTERRUPT_PRIORITY的优先级之间,一般configKERNEL_INTERRUPT_PRIORITY设置为单片机最低优先级,configMAX_SYSCALL_INTERRUPT_PRIORITY是FreeRTOS系统能够屏蔽的最高优先级。原创 2023-07-01 19:30:35 · 130 阅读 · 0 评论 -
FreeRTOS系列六:任务的挂起与恢复的API函数(实战附代码)
同时在任务一执行时LCD屏幕上显示TASK1 runing,任务二执行时LCD屏幕上显示TASK2 runing。串口实时打印按键数据。链接:https://pan.baidu.com/s/1S_MK8rIcKOuKaIgXg6qY8g?实验现象:按键KEY1按下执行挂起任务一,按键KEY2按下执行挂起任务二,按键WK_UP按下恢复任务一。贴一下main.c,完整代码链接在最后。原创 2023-07-02 19:20:15 · 229 阅读 · 1 评论 -
STM32F103移植FreeRTOS系列八:FreeRTOS中断管理(实战文末附代码)
当任务 interrupt_task()运行了 5 次以后就关闭了中断,此时由于 TIM5 的中断优先级为 5, 等于 configMAX_SYSCALL_INTERRUPT_PRIORITY,因此 TIM5 被关闭。2)、设置定时器 5 的抢占优先级为 5,等于 configMAX_SYSCALL_INTERRUPT_PRIORITY, 因此在调用函数 portDISABLE_INTERRUPTS()关闭中断的时候定时器 5 中断肯定会被关闭的。函数是开始任务的任务函数,在其中创建了中断测试任务(原创 2023-07-05 20:00:52 · 581 阅读 · 4 评论 -
STM32移植FreeRTOS系列七:FreeRTOS中断管理
目录1、什么是中断2、中断优先级分组设置3、中断相关寄存器原创 2023-07-04 19:09:21 · 1527 阅读 · 5 评论 -
STM32F103移植FreeRTOS系列九:FreeRTOS临界段代码保护
临界区是通过禁用任务调度来屏蔽中断的FreeRTOS 与 临 界 段 代 码 保 护 有 关 的 函 数 有 4 个 :taskENTER_CRITICAL_FROM_ISR() 和 taskEXIT_CRITICAL_FROM_ISR()原创 2023-07-05 22:19:31 · 254 阅读 · 0 评论 -
STM32F103移植FreeRTOS系列十:任务调度器的挂起和恢复
我们知道,系统是通过pendsv中断来进行任务切换的,那么这个变量又是怎么和这个中断联系在一起的呢?如果临界区代码量很多,执行时间长会造成延时中断,这样子如果中断得不到响应的话,不符合实时操作系统。还有个挂起任务调度器的功能,要截图实在太多了,大家看完上面的再看视频应该就可以了。这里等于0说的是变量uxSchedulerSupended等于0。的值(一个整数)赋给该指针,实际上将寄存器的值设置为。此时相当于任务调度器被挂起,也是嵌套的一个功能。被定义为一个指向寄存器地址的指针。原创 2023-07-06 15:39:47 · 199 阅读 · 0 评论 -
STM32F103移植FreeRTOS系列十一:列表和列表项(原理详解)
* 初始化时,列表中只有 xListEnd,因此 pxIndex 指向 xListEnd *///(1)/* xListEnd 的值初始化为最大值,用于列表项升序排序时,排在最后 *///(2)/* 初始化时,列表中只有 xListEnd,因此上一个和下一个列表项都为 xListEnd 本身 *///(3)//(4)/* 初始化时,列表中的列表项数量为 0(不包含 xListEnd) *///(5)/* 初始化用于检测列表数据完整性的校验值 *///(6)//(7)原创 2023-07-06 21:47:37 · 268 阅读 · 0 评论 -
STM32F103移植FreeRTOS系列十二:列表项的插入和删除实验(文末附代码)
本实验基于stm32f103rct6和正点原子源码进行12.1 实验程序设计1、实验目的: 学习使用 FreeRTOS 列表和列表项相应的操作函数的使用,观察这些操作函数的运行结果 和我们理论分析的是否一致。2、实验设计 本实验设计 3 个任务:start_task、task1_task 和 list_task,这三个任务的任务功能如下:start_task:用来创建其他 2 个任务。task1_task:应用任务 1,控制 LED0 闪烁,用来提示系统正在运行。原创 2023-07-08 08:00:00 · 132 阅读 · 0 评论 -
STM32移植FreeRTOS系列十三:RTOS中的任务切换流程(总结)
在了解PendSV(可悬起系统调用)前,需要对SVC(系统服务调用,亦简称系统调用)有一个基本的概念。SVC 用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就会产生一个 SVC 异常,然后操作系统提供的 SVC 异常服务例程得到执行,它再调用相关的操作系统函数,后者完成用户程序请求的服务。原创 2023-07-09 16:24:13 · 3657 阅读 · 1 评论 -
STM32移植FreeRTOS系列十四:时间片调度实验(文末附代码)
基于STM32F103RCT6。原创 2023-07-12 15:01:06 · 516 阅读 · 0 评论 -
STM32移植FreeRTOS系列十五:任务状态查询API函数总结
()获取任务优先级()设置任务优先级()获取系统中任务的数量()获取所有任务状态信息()获取指定单个的任务信息()获取当前任务的任务句柄()根据任务名获取该任务的任务句柄()获取任务的任务栈历史剩余最小值()获取任务状态vTaskList()以“表格”形式获取所有任务的信息()获取任务的运行时间( constxTask此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1。原创 2023-07-13 17:18:36 · 138 阅读 · 0 评论 -
STM32移植FreeRTOS系列十六:任务运行时间统计API函数
函数 vTaskGetRunTimeStats()会将统计到的信息填充到 一个表里面,表里面提供了每个任务的运行时间和其所占总时间的百分比。使用此函数需将宏 configGENERATE_RUN_TIME_STAT置1形参描述接收任务运行时间信息的缓存指针参数: pcWriteBuffer: 保存任务时间信息的存储区。存储区要足够大来保存任务时间信息。// 保存任务运行时间信息// 获取任务运行时间信息顺便贴一下相关的函数,想要用直接到官网就好,这期随便写写,下期队列才比较重要。原创 2023-07-16 19:50:09 · 334 阅读 · 0 评论 -
STM32移植FreeRTOS系列十七:队列
链接:https://pan.baidu.com/s/1is1OMw4j2lWD_VSJ9YqQAw?pwd=rtos提取码:rtos原创 2023-07-18 19:32:55 · 703 阅读 · 0 评论 -
STM32移植FreeRTOS系列十八:信号量详细解读
二值信号量其实就是一个只有一个队列项的队列,这个特殊的队列要么是满的,要么是空的。二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常类似,但是还是有一 些细微的差别,互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。因此二值信号另更适合用于同步(任务与任务或任务与中断的同步),而互斥信号量适合用于简单的互斥访问2.2、二值信号量相关API函数使用二值信号量的过程:创建二值信号量———释放二值信号量————获取信号量。原创 2023-07-21 14:48:13 · 347 阅读 · 0 评论