![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
freertos
嵌入式软件和硬件
有趣才精彩,而不是精彩才有趣
展开
-
freertos 关中断和临界区的关系
freertos 临界区基础概念:临界区:保证一段代码操作的原子性。原子性:即一段代码不能被打断运行,直到退出改代码段。用于保证资源变量被多个线程或代码段访问时产生的冲突。**实现:**在单核系统中,可以使用关中断来实现原子操作。freertos中的实现:进入临界区#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 )voi原创 2021-07-04 16:07:15 · 851 阅读 · 0 评论 -
freertos源码解析-5调度器控制
第四章讲了调度器和任务切换调度器和任务切换为了保证操作系统和任务安全运行,有时候需要void vTaskSuspendAll( void ){ /* A critical section is not required as the variable is of type BaseType_t. Please read Richard Barry's reply in the following link to a post in the FreeRTOS support forum bef原创 2020-05-20 14:55:20 · 240 阅读 · 0 评论 -
freertos源码解析-4调度器和任务切换
调度器调度器就是使用相关的调度算法来选择相关任务运行的代码。基本功能:(1)调度器可以区分就绪态任务和挂起任务;(2)调度器可以选择就绪态中的一个任务,然后激活它;(3)不同调度器之间最大的区别就是如何分配就绪态任务间的完成时间。抢占式调度器:(1)每个任务都有不同的优先级;(2)任务一直运行到被更高优先级任务抢占或者遇到阻塞式API函数。【单纯的抢占式调度没有时间片的概念,最高优先级的任务就绪,立马抢占,不用等到下一个滴答时间中断来临】时间片调度:(1)每个任务的优先级都相同,任务会运行固定的时间原创 2020-05-19 19:43:53 · 419 阅读 · 0 评论 -
freertos源码解析-3任务和任务创建
任务void vATaskFunction( void *pvParameters ){ for( ;; ) { /*-- 应用程序代码放在这里. --*/ }/*正常情况下任务函数是一个死循环,不会退出*/ vTaskDelete( NULL );/*如果任务完成,需要退出,需要删除该任务,vATaskFunction没有返回值*/}任务状态运行:任务占用CPU,单核处理器任意时刻只有一个任务在运行。就绪:任务处于准备随时可以运行的状态,等待原创 2020-05-19 16:40:33 · 358 阅读 · 0 评论 -
freertos源码解析-2内存管理
内存管理freertos支持动态分配内存和静态分配内存Freertos的内存分配是在portable层中实现,与内核实现分开。目录:Source/Portable/MemMang静态内存管理特点对象可以分配在特定的内存地址处;最大内存占用可以在链接时确定,而不是运行时;用户不需要关心内存分配失败的处理方式;允许在不使用动态内存分配的地方使用RTOS。定义宏 configSUPPORT_STATIC_ALLOCATION = 1 使用静态内存分配。既可以使用以下函数,里面使用的内存原创 2020-05-19 15:02:47 · 269 阅读 · 0 评论 -
freertos源码解析-0准备工作和疑问
freertos 准备工作和思考freertos操作系统freertos操作系统:可以理解为一个大程序,这个大程序里面有很多任务(函数),这个大程序会按照优先级或事件发生的先后来控制各个任务有条不紊的运行。类似于一个大循环,里面有很多子函数,但是子函数的运行不是按照编程的先后顺序运行,而是由调度器控制,来决定哪个任务运行,哪个任务阻塞(休息)。源码分析建议首先对操作系统有个基本认识,知道堆、栈、任务、调度、内存管理等基本概念。建议看操作系统相关书籍。如果是有学习过其他操作系统经验的,可以直接上手fr原创 2020-05-19 09:23:38 · 354 阅读 · 0 评论 -
freertos源码解析-1启动过程分析
freertos启动过程分析启动过程流程图启动过程完成的事情1.创建必要的任务:空闲任务和软件定时器任务(后者可选)2.初始化系统的全局变量3.初始化systick中断 PendSV中断 SVC中断4.启动调度器5.触发SVC中断, 启动第一个任务代码分析...原创 2020-05-19 08:42:01 · 1592 阅读 · 1 评论