FreeRTOS
不够好才能进步
这个作者很懒,什么都没留下…
展开
-
(六)FreeRTOS软件定时器、事件组、内存管理
软件定时器 为了周期性处理某些事务,每个MCU都自带几个硬件定时器,FreeRTOS也是实现了定时器,不过是软件层面上的,所以精度自然没有硬件定时器高,但是处理某些精度要求不高的事务还是够的。 像MCU上的硬件定时器一样,我们希望定时器经过一个周期之后就能反馈一定的动作。所以软件定时器中也需要中我们也要自己实现回调函数,但是在定时回调函数中不能调用任何回阻塞任务的A...原创 2019-10-14 15:21:07 · 1014 阅读 · 1 评论 -
(五)FreeRTOS信号量
信号量包括二值信号量、互斥信号量、计数型信号量、递归互斥信号量,用于管理共享资源以及任务间的同步,利用信号量值代表信号量的情况,当申请信号量时,信号量值会减一,当释放信号量时,信号量值会加一,所以任务间要共享某个变量或者要进行同步时,只需要查询信号量中的信号量值是否满足。二值信号量舍友B在洗澡,占了浴室,而浴室一般是一个人在里面洗澡,并且锁上门,这时候舍友A跑再快去浴室也没...原创 2019-10-14 15:11:06 · 839 阅读 · 0 评论 -
(四)FreeRTOS队列
在没有使用队列之前,任务之间的通信是通过共享全局变量或者传递指针参数来进行消息传递,但是全局变量一旦使用多了就会占用很大的资源,在操作系统中,这就会涉及到资源管理的问题。操作系统需要管理有限的资源,进而产生了队列,解决了任务与任务、中断与中断、任务与中断的通信问题,任务与任务、任务与中断之间要交流的数据保存在队列中,这就叫做队列项目。而队列中能存储的数据是有限的,每个数据项目大小是固...原创 2019-10-14 14:59:23 · 2261 阅读 · 0 评论 -
(三)FreeRTOS调度器开启过程分析
Main函数中创建完任务后,当前的任务指针pxCurrentTCB就指向了第一个任务,但是此时系统并未启动,还需要启动任务调度器,任务调度器才是整个系统的核心,在启动器中创建了一个空闲任务,最主要的是启动软件定时器和初始化了一些中断、启动第一个任务。//...符号是删除了一些不是很重要的源码void vTaskStartScheduler( void ){ BaseT...原创 2019-10-14 14:49:14 · 907 阅读 · 0 评论 -
(二)FreeRTOS列表及列表项
FreeRTOS管理任务中一个相当重要的数据结构就是列表和列表项,FreeRTOS创建完成后,是一个个独立的个体,如果没有一个约束的关系,那么调度器是是无法分配的,列表和列表项将这些独立的任务的串起来,然后调度器根据每个列表项中的信息来决定哪个任务获得CPU使用权。列表:在FreeRTOS中用以跟踪任务,在源码中的结构也是比较简单的缩减后就是一个简单的表格:...原创 2019-10-14 14:29:31 · 526 阅读 · 0 评论 -
(一)FreeRTOS任务初识
一、初识任务 引入FreeRTOS操作系统是因为需要其并发行,如何实现并发性就是通过多个任务实行抢占式调度来达到多个任务同时运行的假象,与单纯的裸机程序不同,操作系统中为每个任务都分配了一个时间片,但是FreeRTOS支持抢占式调度,由调度器来决定哪个任务先运行,哪个任务后运行,高优先级任务可以打断低优先级任务的运行,等待高优先级任务完成后,再将CPU使用权交出去,给低优先级任...原创 2019-10-13 21:01:24 · 966 阅读 · 0 评论