文章分类 -  RTOS

摘要:一:资源管理 怎么保护一个临界资源? 比如说一个全局变量,我们可以使用互斥量 int a; int add_val(int val) { // 获得互斥量 a += val; // 释放互斥量 } 那问题又变成:怎么实现互斥量? 一句话就可以理解今晚的主题: 神挡杀神,佛挡杀佛。 任务B跟任务A抢? 阅读全文
posted @ 2022-08-04 17:34 韦东山 阅读(55) 评论(0) 推荐(0) 编辑
摘要:一:上节回顾 上节课我们详细的讲了定时器的内部机制: 我们分为两条线来看定时器: 1.上图里面左边的那些函数,都是去写队列:写不同的命令 2.右边的定时器任务:他平时是阻塞状态,他怎样阻塞? 他会调用这个函数:等待队列有数据,但是会指定最多等待多长时间 vQueueWaitForMessageRes 阅读全文
posted @ 2022-08-04 17:34 韦东山 阅读(67) 评论(0) 推荐(0) 编辑
摘要:一:定时器的机制 我们使用手机,设置一个有效的闹钟,需要设置的内容如下: 定时器也有三要素: 超时时间 超时函数 是否重复 我们使用队列的时候创建了一个结构体 我们使用信号量的时候,创建了一个信号量结构 我们使用事件组的时候创建了一个结构体 我们使用定时器的时候也要去创建一个结构体 用这样的函数来创 阅读全文
posted @ 2022-08-04 17:33 韦东山 阅读(220) 评论(0) 推荐(0) 编辑
摘要:一:队列的读写 对于队列,我们只要理解它就是一个环形缓冲区,然后还可以去休眠、唤醒,就可以了。 1.写数据的时候,如果没有空间自己就休眠 2.读数据的时候,如果没有数据自己就休眠 3.写数据成功之后,如果有其他任务在等待数据,就把它唤醒 4.读数据成功之后,如果有其他任务在等待空间,就把它唤醒 比环 阅读全文
posted @ 2022-08-04 17:32 韦东山 阅读(109) 评论(0) 推荐(0) 编辑
摘要:一:上节回顾 在上次课里,我们从代码的角度来分析了任务通知的内部机制 先来回顾一下,用图形的方式,用链表的方式来展示内部机制 1.1初始状态 假设一开始有两个任务:他们优先级都是n,放在一个就绪链表里 可以看到任务一或者任务二,它们的TCB里面有一个状态: TCB.ucNotifyState[0] 阅读全文
posted @ 2022-08-04 17:32 韦东山 阅读(43) 评论(0) 推荐(0) 编辑
摘要:一:作业讲解 上一节课留了一个课后作业: 为什么IDLE任务的波形有大有小? task2运行了1个tick,轮到idle任务。 idletask->hook->flagIdleTaskrun=1, 礼让,轮到task1运行, task1从printf中间继续运行,打印完下一个字符后,才设置flagI 阅读全文
posted @ 2022-08-04 17:31 韦东山 阅读(82) 评论(0) 推荐(0) 编辑
摘要:一:任务调度(续) 上一节课讲调度,我们还没有讲完, 调度是理解后续所有知识的基础,可以说调度是RTOS中最重要的部分。 今天有一个同学提了这么一个问题,实时性怎么体现? 实时性,就体现在下面3点: 中断优先级,高于 任务优先级。“中断优先级最低”的中断,高于“任务优先级最高”的任务 中断里,高优先 阅读全文
posted @ 2022-08-04 17:30 韦东山 阅读(206) 评论(0) 推荐(0) 编辑
摘要:一:设备子系统 1.1 抽象结构体 我们一直强调,面向对象的思想,即对某一个硬件,抽象出一个结构体。 怎么描述一个对象? 它有什么属性? 结构体成员 它有什么功能? 函数指针 因此,我们就要概括出它的属性,抽象出它的功能。 举个例子,LED有哪些属性? 我们先说简单一点,注意这个电路图,我们可以得出 阅读全文
posted @ 2022-08-04 17:29 韦东山 阅读(30) 评论(0) 推荐(0) 编辑
摘要:一:上节回顾 在上一节课我们贴了这么一个图: FreeRTOS里面有很多个链表,这些链表分为三类:就绪列表、暂停列表、Delay链表。 对于就绪列表,每一个优先级都有一个链表,比如我们有32个优先级,那么就有32个就绪链表。 就绪链表里面存放的是:就绪状态的任务、运行状态的任务。 同一时间,对于单核 阅读全文
posted @ 2022-08-04 17:29 韦东山 阅读(86) 评论(0) 推荐(0) 编辑
摘要:一:程序框架 1.1 调用关系 我们先来看看各层函数的调用关系。 函数的调用关系,可以从单元测试的代码去看。 如下图是第一步: 首先加入输入设备,即把设备放入链表: 然后是初始化,即把链表中的每个设备,都调用它的初始化函数。 大家的疑问可能在于设备的初始化: 我们去构造这个输入设备的时候,就给他提供 阅读全文
posted @ 2022-08-04 17:28 韦东山 阅读(139) 评论(0) 推荐(0) 编辑
摘要:一:程序框架 我们使用HAL库来开发项目,如果框架设计的好的话,在rtos上面代码不需要改动太多。 程序框架可以参考这本书,我在中兴的时候基本上人手一本。 我们来看看这个产品,可以通过手机发送网络数据到开发板上, 开发板根据这些指示来点灯、转风扇。 功能比较简单,但是我们的框架可以做的有很多层次。 阅读全文
posted @ 2022-08-04 17:27 韦东山 阅读(126) 评论(0) 推荐(0) 编辑
摘要:一、环形缓冲区 在上一次课中,只讲了UART的硬件协议,没有讲环形缓冲区。 本节课就讲解环形缓冲区。 环形缓冲区它就是一个数组,是一个长条形的缓冲区。 开始的时候读写位置都指向0:r = w = 0 ,所谓读写位置就是数组的下标。 想想看,一开始的时候就是空的,那空是怎么判断的? if (r == 阅读全文
posted @ 2022-08-04 17:26 韦东山 阅读(208) 评论(0) 推荐(0) 编辑
摘要:一、I2C 对于I2C,在芯片内部有I2C控制器。 他的结构如下图: 我们配置好I2C控制器之后,去读写寄存器就可以了。 但是在我们的视频里,我们使用GPIO引脚来模拟I2C。 我们先来看看 I2C的协议,这是硬件连接图: 一个主芯片,多个从芯片。 假设我们的arm是主芯片,他要去访问这条i2c总线 阅读全文
posted @ 2022-08-04 17:25 韦东山 阅读(149) 评论(0) 推荐(0) 编辑
摘要:一、GPIO 下面我们来讲GPIO和I2C。 我们先来看看gpio的框图: 在嵌入式系统中,在一个芯片上面有CPU,有gpio,有串口,有USB等等外设模块。 有一些模块平时为了省电,他是不工作的。 你要去使用它,要先使能它,就是给他提供时钟。 一个芯片,它外面有密密麻麻的引脚,这些引脚接到芯片内部 阅读全文
posted @ 2022-08-04 17:24 韦东山 阅读(119) 评论(0) 推荐(0) 编辑
摘要:一、学习方法 因为有些学员是刚进群,所以这里再把学习方法讲一下。 1. 预习 我们会在每一节晚课之后会通知要预习的章节,学员需要按如下操作观看相关视频。 ​ 1.1 打开官网:百问网官网 ​ 1.2 点击首页的"深入学习单片机双架构双系统项目实战线上班" ​ 1.3 再点击"单片机双架构双系统项目实 阅读全文
posted @ 2022-08-04 17:21 韦东山 阅读(198) 评论(0) 推荐(0) 编辑
摘要:一、课程学习方法 因为有些学员是刚进群,所以这里再把学习方法讲一下。 1. 预习 我们会在每一节晚课之后会通知要预习的章节,学员需要按如下操作观看相关视频。 1.1 打开百问网官网 ​1.2 点击首页的"深入学习单片机双架构双系统项目实战线上班" ​1.3 再点击"单片机双架构双系统项目实战",观看 阅读全文
posted @ 2022-08-04 17:20 韦东山 阅读(43) 评论(0) 推荐(0) 编辑
摘要:1. 问: 我去别的城市工作要换手机号怎么办? 答: 更换手机号,单独联系 班主任 处理。 2. 问: 今天是文字直播?/现在有视频直播吗? 答: 碰到疑难问题,才会用视频直播。今天应该不会有视频直播。 3. 问: 单片机的裸机课预计上几次课? 答: 裸机课程3、4次课。 4. 问: 学这个课程是不 阅读全文
posted @ 2022-08-04 17:15 韦东山 阅读(15) 评论(0) 推荐(0) 编辑
摘要:一. 前言 C语言基础,有些同学基础扎实,有同学能用但是理解不深,这个训练营的重点在于RTOS和芯片架构,对C语言的要求也不算高. 结构体、指针、链表,掌握这三点就可以,基本不涉及复杂的语法,基础弱的同学,可以看唐老师的C语言视频,免费的。 我们并不需要停下来单独去学习C语言,C语言可以在RTOS的 阅读全文
posted @ 2022-08-04 17:14 韦东山 阅读(60) 评论(0) 推荐(0) 编辑
摘要:一. 怎么上课 1.预习看视频:根据下一节晚课的内容提前预习学习视频。 1.1 打开百问网官网 1.2 点击首页的"深入学习单片机双架构双系统项目实战线上班" 1.3 再点击"单片机双架构双系统项目实战",观看视频 也可以在微信小程序上观看视频,微信搜索“韦东山嵌入式随身课堂”。 2.上课时间: 2 阅读全文
posted @ 2022-08-04 17:08 韦东山 阅读(126) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示