| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> FreeRTOS学习简易笔记 -> 正文阅读 |
|
[嵌入式]FreeRTOS学习简易笔记 |
?第1章?FreeRTOS引入及堆栈1.1 FreeRTOS学习三阶段1)、理解RTOS总原理,会移植官方Demo,会使用。 2)、知道内部机制,源码还没看! 3)、知道内部实现,能看懂源码!并能轻松移植任何单片机。 1.2 RTOS操作系统 与 裸机开发(前后系统)区别RTOS:根据任务需要 人为的为任务切换CPU资源,有的任务可能不能完整运行完,并对运行环境进行保护管理,相当虚拟了多个CPU。 裸机开发(前后系统):每个任务只能顺序获得CPU资源。一个任务运行一遍了才轮到下个任务。 1.3 中断服务函数与调用函数的区别
1.4 堆栈
1.5?中断服务函数、调用函数、操作系统任务 对栈操作区别
1.6 FreeRTOS与STM32启动文件 中的堆栈区别?
第2章 任务2.1 什么是任务?任务: 运行的函数 2.2 创建任务2.2.1 创建任务所需参数TCB结构体: 任务控制块。主要有函数指针,SP位置,优先级,参数等。 任务句柄(TaskHandle_t ): 就是TCB结构体指针。
2.2.2?创建任务时参数去向1)、分配了TCB机构体,将任务名、任务优先级赋给TCB结构体。 2)、分配了栈。在栈里写入了函数地址、参数指针。 2.3 任务调度机制2.3.1 任务优先级
优先级有关配置:
2.3.2 任务状态运行(Running): 任务正在执行,此时占用处理器。例如,汽车正在行驶。 就绪(Ready): 随时可以运行的任务,但还没轮到它。新创建的任务为就绪态。 阻塞(Blocked): 等待某个事件(时间延时,事件等)。例如,汽车等待绿灯。 暂停(Suspended)(挂起): 不等待,直接去休息了。 2.3.3 怎么管理FreeRTOS通过三种链表(就绪任务链表、阻塞任务链表、暂停任务链表)来管理任务。就绪任务链表 有多少个优先级就有多少个?就绪任务链表;阻塞任务链表、暂停任务链表 各1个。 1、从高优先级?就绪任务链表?向低优先级?就绪任务链表?中找到就绪任务,获取任务句柄给到运行指针, 运行它。 2、若有同级任务,排队轮流执行,链表前面的先运行,运行1个tick后排到队伍后面。 3、若某个任务阻塞,则将该任务从?就绪任务链表移到?阻塞任务链表 中;阻塞解除,则反之。 4、若某个任务暂停,则将该任务从?就绪任务链表移到?暂停任务链表 中;解除暂停,则反之。 2.3.4 怎么进行调度TICK定时中断,在Tick中断函数中会进行任务切换(链表种取出合适的任务运行)。每次中断会检查有哪些延时任务到期,将其从延时任务列表里移除并加入到就绪列表里。如果就绪任务的优先级都相同,如果开启时间片轮询,就会每个tick执行一个任务,轮询执行。 Tick中断做了什么:?1)、找到最高优先级的就绪任务 第3章 同步与互斥3.1 同步与互斥的概念同步: 任务之间的依赖,比如A任务的运行依赖于B任务产生的数据。例如:在团队活动里,同事A写完报表,经理B才能拿去向领导汇报。经理B必须等同事A完成报表,AB之间有依赖。 互斥: 对资源同时访问时,只能有一个获得资源,一个使用完后才能轮到下一个,往往需要进行互斥访问。例如:打印机同一时间内只能打印一个任务;A、B两人抢厕所,A先一步占用了,B只能等A用完再用。 3.2 同步与互斥的概实现方法能实现同步、互斥的内核方法有:任务通知(task notification)、队列(queue)、事件组(event group)、信号量(semaphoe)、互斥量(mutex)。 它们都有类似的操作方法:获取/释放、阻塞/唤醒、超时。 队列(queue)可以用于"任务到任务"、"任务到中断"、"中断到任务"直接传输信息。
? 第3章 队列3.1 队列队列是为了任务与任务、任务与中断之间传递不定长消息。可将一条或多条消息写入队列中;也可从队列中读取一条或多条消息。uCOS传递消息是传递指针方式,而FreeRTOS采用是复制消息方式,不过也可实现传递指针方式(复制数据指针就可以实现)。 队列核心操作:1-关中断,2-操作队列缓冲区,3-链表(记录因发送/接收(2种链表)而进入阻塞的任务)
3.2 消息邮箱消息邮箱就是消息队列长度为 1 的情况。 第4章 信号量信号是一种标志,如信号灯;量用于计数。顾名思义,就是标志计数。信号量功能本质就是计数。信号量其实就是只有一个队列项的队列,该队列项不是用来传递消息,而是用来计数。一般用来进行资源管理和任务同步,实现任务之间同步或临界资源的互斥访问。
4.1 计数信号量计数信号量用于事件发生次数计数或者对资源数量的管理,计数无限制。在任务和中断中可使用。 4.2 二值信号量
4.3 互斥信号量互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中断与任务之间的同步)二值信号量最适合。 可以在任务中使用,不可以在中断中使用。 互斥信号量不能用于中断服务函数中, 原因如下:
4.4 递归信号量递归互斥信号量,其实就是互斥信号量里面嵌套 互斥信号量。 第5章 事件组事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。 即一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒任务进行事件处理。同样,也可以是多个任务同步多个事件。(可以在任务和中断中使用)
第6章 任务通知通过任务通知方式可以实现 消息邮箱, 计数信号量,二值信号量,事件标志组。 在使用队列、信号量前,必须先创建队列和信号量,目的是为了创建队列数据结构。而由于任务通知的数据结构包含在任务控制块中,只要任务存在,任务通知数据结构就已经创建完毕,可以直接使用。任务通知处理更快,RAM 开销更小。 任务通知可以在任务中向指定任务发送通知,也可以在中断中向指定任务发送通知,FreeRTOS 的每个任务都有一个 32 位的通知值,任务控制块中的成员变量 ulNotifiedValue 就是这个通知值。 只有在任务中可以等待通知,而不允许在中断中等待通知。
第7章 软件定时器FreeRTOS软件定时器是基于 Tick 硬件定时器中断来运行的,其他操作系统也是,不过其他操作系统是在硬件定时器里调用软件定时器函数,而FreeRTOS不是。FreeRTOS它认为如果定时器函数很耗时,会影响整个系统,所以FreeRTOS是通过任务来处理软件定时器。 当 FreeRTOS 的配置项 configUSE_TIMERS 被设置为 1 时,在启动调度器时,会自动创建 RTOS Damemon Task(守护任务)。Tick 硬件定时器中断函数发现某个时间到了,写命令队列,守护任务里读定时器命令队列,有数据就处理,没数据就休眠。 第8章 中断机制FreeRTOS把MCU硬件中断分为两类,高优先级中断一类;低优先级中断一类。高优先级中断中不能使用FreeRTOS的API函数,它用于处理更紧急的事情,不依赖于FreeRTOS。低优先级中断可以在中断中使用FreeRTOS的API函数。 第9章 临界资源临界资源:一次仅允许一个进程或任务使用的共享资源。例如:?硬件有打印机、磁带机等;软件有消息缓冲队列、变量互斥量、变量、数组、缓冲区等。 临界资源的互斥访问通过?屏蔽/使能中断、暂停/恢复调度器 来实现。这样访问临界资源就可以不受干扰。 临界区:每个进程或任务中,访问临界资源的那段代码。也就是屏蔽/使能中断之间代码、暂停/恢复调度器之间代码。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:39:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |