![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RTOS
文章平均质量分 57
凉山有客不自赏
学习,记录,共享
展开
-
FreeRTOS--事件组
事件组:利用队列标记前置任务,通过检查标记拉触发条件任务的机制。例:存在任务A、B、C、D,C任务需要A或B完成后才可以触发,D任务需要A和B任务都完成才触发。xEventGroupSetBits()函数可在A、B的对应位置(事件位)写1 or 0(事件标志)用来标记是否完成。事件组的流程创建事件组等待(事件位,所有/任一,超时)a.关闭调度器 (不会再ISR使用Event Group)b.当前uxEventBits是否满足:满足:返回ok,不满足:1.返回ERR2.休眠:放入even原创 2022-03-22 16:46:16 · 304 阅读 · 0 评论 -
FreeRTOS--信号量与互斥量
信号量(semaphore):用来表示可用资源大小,对多个资源访问,实现有序访问,计数值可以从0~max互斥量(mutex):用于对一个资源的访问,可以优先级继承,有两个值:0、1优先级反转:假设有高中低优先级的任务,当低优先级的任务在获取semaphore,高优先级的任务也要获取该semaphore时,高优先级的任务会获取失败,此时中优先级的一直运行,高优先级的任务就被中低优先级的任务卡死优先级继承:假设有高中低优先级的任务,当低优先级的任务在获取mutex,高优先级的任务也要获取该mutex时,原创 2022-03-21 13:55:00 · 780 阅读 · 0 评论 -
FreeRTOS--队列
在讲队列前,先思考一下这个问题:下面这个程序,如果用RTOS实现会出问题吗?c:int a = 0;void fun_a(){ a++;}void fun_b(){ a++;}int main(){ while(1){ fun_a(); fun_b(); }}RTOS:int a = 0;void fun_a(){ a++;}void fun_b(){ a++;}int main(){ creat_Task(fun_a); creat_Task(fu原创 2022-03-20 18:27:16 · 189 阅读 · 0 评论 -
FreeRTOS-ARM架构、TCB结构体,调度机制
对于ARM架构来说,主要有3部分构成:CPU,RAM,FLASH。CPU内部主要是运算单元和寄存器单元,可以读写RAM,修改内存,也可以读取FLASH里的汇编代码。RAM为内部存储空间,有栈的数据结构,对于地址有内存存储,可被CPU改写。FLASH为存储代码的空间,可被CPU读取。对于每个任务在内存总都有相应的TCB结构体包含栈顶,两个链表(雾),优先级,栈的起始Q:在任务切换时,所有寄存器都要保留吗?A:都要保留,但是对于硬件中断来说,只需要保存用到的寄存器即可;对于子函数来说,不需要保存子函原创 2022-03-18 13:45:25 · 4214 阅读 · 0 评论