- 博客(7)
- 收藏
- 关注
原创 FreeRTOS任务延时列表与时间片
在 FreeRTOS 中,有一个任务延时列表(实际上有两个,为了方便讲解原理,我们假 装合并为一个,其实两个的作用是一样的),当任务需要延时的时候,则先将任务挂起, 即先将任务从就绪列表删除,然后插入到任务延时列表,同时更新下一个任务的解锁时刻 变量:xNextTaskUnblockTime 的值。为了方便在逻辑分析仪中地分辨出任务 1 和任务 2 使用的时间片大小,任务 1 和任务 2 的主体编写成一个无限循环函数,不会阻塞,任务 3 的阻塞时间设置为 1 个 tick。在真正的项目中,并不会这样写。
2023-07-30 16:26:12
374
1
原创 FreeRTOS支持多优先级
任务在创建的时候,会根据任务的优先级将任务插入到就绪列表不同的位置。那么我们要想让任务支持优先级,即只要解决在任务切换 (taskYIELD)的时候,让 pxCurrenTCB 指向最高优先级的就绪任务的 TCB 就可以,前面 的章节我们是手动地让 pxCurrenTCB 在任务 1、任务 2 和空闲任务中轮转,现在我们要改 成 pxCurrenTCB 在任务切换的时候指向最高优先级的就绪任务的 TCB 即可,那问题的关键就是:如果找到最高优先级的就绪任务的 TCB。5.1如何支持多优先级。
2023-07-30 14:43:51
169
1
原创 FreeRTOS临界段的保护与阻塞延时
RTOS 中的延时叫阻塞延时,即任务需要延 时的时候,任务会放弃 CPU 的使用权,CPU 可以去干其它的事情,当任务延时时间到,重 新获取 CPU 使用权,任务继续运行,这样就充分地利用了 CPU 的资源,而不是干等着。既然这样,FreeRTOS 对临界段的保护最终还是回到对中断的开和关的控制。在 FreeRTOS 中,对中断的开和关是通过操作 BASEPRI 寄存器来实现的,即大于等于 BASEPRI 的值的中断会被屏蔽,小于 BASEPRI 的值的中断则不会被屏蔽,不受 FreeRTOS 管理。
2023-06-24 14:25:50
530
1
原创 Linux项目-文件远程传输
Linux网络编程实现的FTP服务器,服务器由服务端和客户端组成,具有浏览远程服务端的文件和浏览客户端本地文件,同时支持对远程服务端文件的删除,存储,归档操作处理,以及客户端对远程服务端文件的上传和下载。
2023-06-10 11:07:36
417
原创 FreeRTOS任务的实现
系统为了顺利的调度任务,为每个任务都额外定义了一个任务控制块, 这个任务控制块就相当于任务的身份证,里面存有任务的所有信息,比如任务的栈指针, 任务名称,任务的形参等。虽然多任务系统和顺序执行的波形图一样,但是,代码的实现方式是完全不一样的,由原来的顺序执行变成了任务的主 动切换,这是根本区别。,每个任务都是独立的,互不干扰的,所以要为每个任务都分配独立的栈空间,这个栈空间通常是一个预先定义好的全局数组,也可以是动态分配的一段内存空间,但它们都存在于 RAM 中。那么这个联系的工作就由。
2023-06-09 17:01:57
196
原创 FreeRTOS列表与列表项
同样,链表也类似,链表的节点本身不能存储太多东西,或者说链表的节点本来就不是用来存储大量 数据的,但是节点跟晾衣架的钩子一样,可以挂很多数据。链表有单向链表和双向链表。节点本身必须包含一个节点指针,用于指向后一个节点,除了这个节点指针是必须有的之外,节点都是一个自定义类型的数据结构,在这个数据结构里面可以有单个的数据、数组、指针数据和自定义的结构体数据类型等等信息。要通过链表存储的数据内嵌一个节点即可,这些要存储的数据通过这个内嵌 的节点即可挂接到链表中,就好像晾衣架的钩子一样,把衣服挂接到晾衣架中.
2023-06-08 19:37:22
109
原创 FreeRTOS裸机系统与多任务系统
在多任务系统中,根据程序的功能,我 们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们 称之为任务。轮询系统(相当于while)即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循 环里面不断循环,顺序地做各种事情。相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。在多任务系统中,任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。在轮询系统上加入了中断,外部中断的响应在中断里面完成,事件的处理还是在轮询系统上完成。
2023-05-28 11:26:06
186
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人