
FreeRTOS
文章平均质量分 50
小灰俠
渣渣研、创业党、=Software and hardware technology supporter!
展开
-
轻松理解链表、物联网、uC/OS链表、FREERTOS链表
先给出链表所用结构体定义:/* 节点结构体定义 */struct xLIST_ITEM{ TickType_t xItemValue; /* 辅助值,用于帮助节点做顺序排列 */ struct xLIST_ITEM * pxNext; /* 指向链表下一个节点 */ struct xLIST_ITEM * pxPrevious; /* 指向链表前一个节点 */ void * pvOwner; /* 指向拥有该节点的内核对原创 2021-12-07 16:04:27 · 3180 阅读 · 0 评论 -
STM32的寄存器、uC/OS 寄存器必备基础知识、ARM、Cortex-M4、Cortex-M3、中断寄存器
ARMCortex处理器的寄存器——数据处理与控制寄存器大部分能够访问通用寄存器的指令都可以访问R0-R12。其中:低位寄存器(R0~R7)能够被所有访问通用寄存器的指令访问;高位寄存器(R8~R12)能够被所有32位通用寄存器指令访问,而不能被所有的16位指令访问。寄存器R13被用作堆栈指针(SP) ,用于访问堆栈。寄存器R14为子程序连接寄存器(LR)寄存器R15是程序计数寄存器(PC),指向当前的程序地址。ARMCortex-M4F处理器的寄存器——特殊功能寄存器程序状态字...转载 2021-12-01 11:58:55 · 1399 阅读 · 0 评论 -
FREERTOS之定时器
定时器,顾名思义,定时完成某项任务freertos中的定时器需要注意的地方:定时器是有历史的,也就是说,在某一时刻要插入所要延时的时间,那要加上该时刻所在的系统时间,原创 2021-06-10 17:31:01 · 1093 阅读 · 0 评论 -
二值信号量和互斥量在FreeRTOS中的代码中的区分
互斥量的创建: /* 创建MuxSem */ MuxSem_Handle = xSemaphoreCreateMutex(); if(NULL != MuxSem_Handle) printf("MuxSem_Handle互斥量创建成功!\r\n"); xReturn = xSemaphoreGive( MuxSem_Handle );//互斥量创建二值信号量: /* 创建Test_Queue */ BinarySem_Handle = xSemaphor.原创 2021-04-24 10:34:26 · 369 阅读 · 0 评论 -
FreeRTOS之互斥量
互斥量本名互斥信号量:特殊的二值信号量区别于信号量:1、互斥量所有权:互斥量类似于令牌的功能……保护资源的令牌……任务想要访问资,持有令牌的才可以访问这个资源,否则不行!2、互斥量本身的意思:用互斥的数学属性比较容易理解:不会同时发生,也就是你(任务1)用的时候我(任务2)不能用,我(任务2)用的时候你(任务1)不能用,对应的也就是开锁和闭锁的状态,即互斥量被任务持有,那么该互斥量也就闭锁,任务释放互斥量,也就是开锁状态;3、互斥量的递归访问:很容易理解,我(任务2)用着这个互斥量呢,我还想原创 2021-04-22 11:15:07 · 552 阅读 · 0 评论 -
FreeRTOS之消息队列
消息队列:任务之间通信的时候用的任务能从队列中读取消息,这些消息可以是其他任务写进来的,如果这些消息为空时,可以设置阻塞时间来等消息的到来再读走,还可以当超过指定时间没有读到消息的时候把任务从阻塞态转为就绪态。给出FreeRTOS的消息队列的源代码和使用代码,来分析分析首先使用他#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGene原创 2021-03-10 21:24:30 · 358 阅读 · 0 评论 -
FreeRTOS之任务管理
任务管理必然跟任务所处的状态有关系,下表为任务的四个状态,主要关注点在挂起态,下面给出FREERTOS源码中挂起API函数代码:#if ( INCLUDE_vTaskSuspend == 1 ) void vTaskSuspend( TaskHandle_t xTaskToSuspend ) { TCB_t *pxTCB; taskENTER_CRITICAL(); { /* If null is passed in here then it is the run.原创 2021-03-10 15:43:33 · 511 阅读 · 0 评论 -
FreeRTOS之空闲任务和阻塞延时
空闲任务的创建:参考我之前的文章:FreeRTOS之创建任务(静态创建为例)无非老三样:空闲任务栈、空闲任务控制块、空闲任务函数然后创建任务就是把老三样合为一个:创建空闲任务代码如下void vApplicationGetIdleTaskMemory( TCB_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer,原创 2021-03-10 01:53:22 · 713 阅读 · 0 评论 -
FreeRTOS之临界段的保护
临界段含义:一段在执行的过程中不可被中断的代码段FREEROTS的临界段比较容易临界段的保护无非是利用开关中断来实现的有四种:1、不带返回值的关中断函数:不可嵌套---这样的函数不能再中断中调用2、带返回值的关中断函数:可嵌套---这样的函数可以在中断中调用3、不带中断保护的开中断函数:和不带返回值的关中断函数成对使用4、带中断保护的开中断函数:和带返回值的关中断函数成对使用上面这四种函数的组合就可以实现临界段的保护。临界段代码的应用两种场合:1、中断:临界段可以嵌套原创 2021-03-08 22:45:04 · 481 阅读 · 0 评论 -
FreeRTOS之调度器
首先看调度器这三个字啥意思呢?调度器的主要作用是在就绪队列中选择优先级最高的任务运行,如果优先级最高的任务不止一个,则选择队头的任务运行(某度查到的)一句话理解他:好多作业都没写呢,先写那个好呢?嗯,不错,你想先写那个作业就写那个作业,你说了算,没错,你就是调度器下面我们用两个任务的切换来是看看调度器到底是怎么干活的!假设两任务分别为:Task1TCB和Task2TCB言归正传,上代码:void vTaskStartScheduler( void ){ /* 手动指定第一原创 2021-03-08 17:16:24 · 1167 阅读 · 0 评论 -
FreeRTOS之实现就绪列表(或者说就绪列表的建立更容易理解)
就绪列表顾名思义:一个个需要在操作系统里面运行的好多任务,我们需要给这些任务分配好,先运行那个,也就是事情的轻重缓急呗。具体步骤很简单:先初始化一个链表,吧这个链表起个名字叫做就绪列表,那么初始化该链表也就是就绪列表的初始化,参考代码如下:#define configMAX_PRIORITIES ( 5 )List_t pxReadyTasksLists[ configMAX_PRIORITIES ];/* 初始化任务相关的列表 */void prvIniti原创 2021-03-08 15:48:54 · 706 阅读 · 0 评论 -
FreeRTOS之创建任务(静态创建为例)
从任务开始到调度过程:简单讲述一个任务A的架构:第一步、写一个数组,给他取名叫做任务A的任务栈,存放如下图这些数据的第二步、写一个结构体,给结构体取个名字叫任务控制块;写该结构体的成员,写好之后给这些成员取一些新的名字,分别叫做栈顶指针、任务节点、任务栈起始地址、任务名称(都是任务A的哦) 简单解释一下每个名字的意思: 栈顶指针:顾名思义存放的是个指针,一...原创 2021-03-08 14:43:57 · 515 阅读 · 0 评论 -
FreeRTOS之PENDSVSET
从CORTEX-M3中找到对应的SCB寄存器和SCB基址如截图:找到SCB_ICSR(中断控制和状态寄存器)的和对应PENDSV的控制位如图:之后可以看下对应位的解释如图:给对应位写1即可设置 PendSV 产生上下文切换...原创 2021-03-01 18:26:14 · 415 阅读 · 0 评论