自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 FreeRTOS-任务通知源码分析

任务通知可用来代替信号量、消息队列、事件标志位,而且使用任务通知的形式效率会更高,它不需要像信号量那样创建队列和操作队列,任务通知的存储变量来自任务控制块中,当宏 configUSE_TASK_NOTIFICATIONS 被定义为1时就可以使用任务通知相关的函数了。任务通知的接口函数同样存在发送和接收,发送的接口函数如下:/* 发送通知,有通知值但不保留接收任务原通知值 */xTaskNoti...

2019-02-27 18:10:59 532

原创 FreeRTOS-事件标志组源码分析

事件标志组的具体实现过程和前面信号量实现方式非常相似,信号量只能和单个任务或事件进行同步,而事件标志组能和多个任务或事件进行同步。事件标志组顾名思义就是用事件位来表示某个任务是否发生了,发生了的话就标记一个标志位,然后通知接收任务去做相应的处理工作。当然标志可以以组的形式出现,就是接收任务同时要求有多个事件(所有需求的标志都置位了)发生了才执行处理。事件标志组的相关接口函数如下:/* 创建事...

2019-02-26 14:13:33 826

原创 FreeRTOS-信号量源码分析

信号量主要用来进行资源管理和任务同步,FreeRTOS中信号量分为二值信号量、计数型信号量、互斥信号量、递归互斥信号量。二值信号量: 一个只有一个队列项,队列项大小为0的队列,队列只有满和空两种状态。一般用于中断和任务之间的同步,例如串口通信,在串口通信中断服务函数中接收到串口发送过来的数据后释放二值信号量来通知串口的处理任务接收到了数据,串口处理任务由原来的阻塞状态恢复为就绪状态,实现了在没数...

2019-02-23 16:20:14 2010

原创 FreeRTOS-队列源码分析

FreeRTOS的队列是用于任务与任务、任务与中断之间通信的一种数据结构。各个任务之间的数据通信通过一段共同的存储空间按需获取和发送数据,这段存储空间采用队列的形式进行访问,可以采用动态或静态的方式来创建这段内存。任务往队列中发送数据和接收数据通常采用先进先出(FIFO)的存储缓冲机制,当然也可以使用后进先出(LIFO)的形式。FreeRTOS往队列发送和接收数据采用的是直接拷贝的形式,将要发送和...

2019-02-17 18:03:44 1064

原创 FreeRTOS-时间管理(延时、系统时钟)源码分析

在写FreeRTOS的应用程序时,经常需要使用到延时函数,当执行到延时函数时,会将任务从就绪状态变为延时等待状态,这里会放弃CPU的占用权进入阻塞态,将CPU让给其它任务使用直到延时时间结束会重新变为就绪态。FreeRTOS中的延时函数有两种模式,一种是相对模式,另一种是绝对模式。相对延时函数使用 vTaskDelay() ,相对延时函数是指每次执行都是从函数接口处开始计时,计时到指定时间结束回来...

2019-02-14 08:40:01 1304

原创 FreeRTOS-任务删除、挂起、恢复源码分析

由于后面的源码分析会涉及到一些任务的操作函数,所以这里先分析一下任务的一些相关操作,包括任务的删除、挂起、恢复操作。任务删除:#if ( INCLUDE_vTaskDelete == 1 ) void vTaskDelete( TaskHandle_t xTaskToDelete ) { TCB_t *pxTCB; /* 进入临界区 */ taskENTER_CRITICAL...

2019-02-11 15:12:32 976

原创 FreeRTOS-任务切换源码分析

前面分析了启动任务调度器的源码,在创建好空闲任务后启动滴答定时器(systick)后就调用SVC中断跳转到任务去执行,但作为OS我们一般不会只创建一个任务,都是有多任务需求才使用OS,后续任务一旦多了,就涉及了到了任务切换,这也是OS的核心,如何根据任务的优先级的和当前状态来切换任务,怎么保证每个任务都有执行的机会,这就是调度器做的工作。在我们前面分析的启动好任务调度器后下一步就是启动空闲任务了,...

2019-02-09 22:03:51 1210

原创 FreeRTOS-任务创建源码分析

任务创建是FreeRTOS系统启动的第一个步骤,前面在启动调度器的时候先创建了空闲任务,然后再由调度器跳到任务里面去执行。任务创建函数里面做了很多的工作,先会为任务堆栈和任务控制块分配内存并初始化它们,然后将任务添加到就绪列表里面,等待调度器来调用。任务创建的接口定义如下:BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, con...

2019-02-07 00:07:38 631

原创 FreeRTOS-列表和列表项源码分析

前面在调度器启动之前先创建了两个任务,一个启动任务一个空闲任务,然后调度器会跳到启动任务去执行。在分析任务创建的源码之前,需要先分析一下列表和列表项,创建任务实际上就是初始化任务的各个成员变量(即初始化任务控制块的成员),在初始化完后这个任务就会进入到就绪状态,等待调度器来执行它,其中任务控制块就有一项用于描述任务当前的状态,这个状态就是列表项,存放列表项的容器就是列表(链表结构),前面提到就绪状...

2019-02-04 18:12:53 595

原创 FreeRTOS-启动任务调度器源码分析

本章基于FreeRTOS的启动任务调度器源码分析,后续将会上传其它我对FreeRTOS的源码分析过程及理解,首先来认识一下任务调度器。任务调度器:任务调度器主要用于实现任务的切换,任务并不是我们所熟知的函数,而是指一段占有独立内存空间,专门用于处理一组逻辑事件的任务块。最直观的对比理解就像是可以有多个while函数,以前我们写代码都是一个main函数一个while循环,我们会在while循环...

2019-02-02 22:42:10 1685

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除