2.1k 2 分钟

下面用三个篇章解释 # 视频篇 # 漫画篇 图片取自网络 # 文字篇 电阻,作为最基础的无源器件之一,在电子电路中的应用十分广泛。 1、电阻器与欧姆定律 电阻器(Resistor),泛指所有用以产生电阻的电子或电机配件。电阻器的运作跟随欧姆定律,其电阻值定义为其电压与电流相除所得的比值。 其中 ・I 是流过导体的电流,单位是安培(A)。 ・V 是导体两端的电位差,单位是伏特(V)。 ・R 是导体的电阻,单位是欧姆(Ω)。 2、电阻单位和转换 采用国际单位制,电阻的单位为欧姆(Ω,Ohm)。电阻的倒数为电导 G,单位为西门子(S)。 其还有其他转换单位:千欧 (KΩ) 、兆欧...
7.9k 8 分钟

前言:git 用的好,删库不用跑,记一下踩过的坑 # vim 命令 # vim 插入模式命令 命令 说明 i 实现的是在光标之前的插入 I 大写的 i 实现在光标所在行的最前面插入 a 实现在光标后插入 A 实现在光标所在行的行尾插入 o 实现在光标所在行的上方插入新行 O 是现在光标坐在行的下方插入新行 # git 中 vim 的命令 命令 说明 :w 保存编辑后的文件内容,但不退出 vim 编辑器。这个命令的作用是把内存缓冲区中的数据写到启动 vim...
4.6k 5 分钟

# 事件位(或标志)与事件组 事件位:用于指示事件是否发生;事件位通常称为事件标志。 事件组:是一组事件位;事件组中的各个事件位由位号引用(即每一 bit 代表某个事件) # 事件组和事件位数据类型 事件组由 EventGroupHandle_t 类型的变量引用 如果 configUSE_16_BIT_TICKS 设置为 1 ,则事件组中存储的位数(或标志)为 8;如果 configUSE_16_BIT_TICKS 设置为 0 ,则为 24;对 configUSE_16_BIT_TICKS 的依赖性是由于在内部实现中用于线程本地存储的数据类型任务。 configUSE_16_BIT_TICKS...
5.2k 5 分钟

# 临界区简述 临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性;当有线程进入临界区时,其他线程或是进程必须等待。总的概括来说就是在执行该程序片段区间,不允许其他东西干扰到。 像我们在 MCU 上面跑实时操作系统,一般都是单核单进程的,而一个进程可以拥有多个线程;FreeRTOS 是主要以抢占式任务调度为主(通过 PendSV 中断),以时间片轮转调度任务为辅(通过 SysTick 系统节拍器中断)的实时操作系统,并且可支持同等优先级切换,具体配置可以看 FreeRTOS 篇章之 FreeRTOSConfig.h 分析...
3.7k 4 分钟

# 与二值量区别及应用 互斥量是一种特殊的二值信号量,用于控制在两个或多个任务间访问共享资源。 访问一个被多任务共享,或是被任务与中断共享的资源时,需要采用 “互斥”...
18k 19 分钟

# 采用二值信号量同步 二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断同步。这样就可以让中断事件处理量大的工作在同步任务中完成,中断服务例程 (ISR) 中只是快速处理少部份工作。 如果某个中断处理要求特别紧急,其延迟处理任务的优先级可以设为最高,以保证延迟处理任务随时都抢占系统中的其它任务。 在这种中断同步的情形下,信号量可以看作是一个深度为 1 的队列。这个队列由于最多只能保存一个数据单元,所以其非空则满(所谓 “二值” 即二进制,只有 0 / 1)。延迟处理任务调用 xSemaphoreTake()...
12k 13 分钟

# 队列特性 队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的 “深度” ;在队列创建时需要设定其深度和每个单元的大小。 通常情况下,队列被作为 FIFO(先进先出)使用,即数据由队列尾写入,从队列首读出;当然,由队列首写入也是可能的。 然后我们看一下队列的处理过程: # 队列的 API 函数 要想调用以下函数,需要 #include "queue.h" 1、队列创建 属性 API...
14k 14 分钟

# 任务状态 任务目前存在四种状态,分为:运行、就绪、阻塞、挂起; Running — 运行态 这是任务在执行的时候的状态,处在运行态意味着任务获得 CPU 的使用权,对于单核 CPU,此时不存在其他运行态的任务。 Ready — 就绪态 处在就绪态意味着这个任务是可以执行的,比如某个事件发生、队列数据到来、所请求的资源有效等;但是,因为此时有一个相同优先级或者更高优先级的任务正在运行,此时任务无法执行而处于就绪态。 Blocked — 阻塞态 如果一个任务正在等待一个时间到来或者外部的事件到来,比如一个调用 vTaskDelay()...
27k 28 分钟

# 移植修改 在 FreeRTOS 篇章之系统移植 中,我们有把 FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil 路径下的 FreeRTOSConfig.h 文件复制到我们用户可修改的 App 文件夹下,并且导入了工程,但是,该 FreeRTOSConfig.h 文件的内容并不是我们真正想要了内容,需要我们进行更改,而源文件内容就只有下面这么点内容 虽然能满足 FreeRTOS 跑起来,但是往往随着功能的添加,我们需要 FreeRTOS 的更多支持,而这里也只是展示了个别裁剪功能;为了物尽其用,避免以后还要继续添加,所以我们直接就导入...
28k 29 分钟

# FreeRTOS 内存分配选择 在 FreeRTOS 中,可以用静态(不使用 FreeRTOS 堆)或动态来分配 RTOS 的对象; 因此 FreeRTOS 中提供了 5 种堆管理方案,这些方案的复杂性和功能使得它的使用范围广泛,当然用户也可以自己实现堆管理;在官方的例程中,动静态的使用选择可以通过使能宏 configSUPPORT_STATIC_ALLOCATION 和宏 configSUPPORT_DYNAMIC_ALLOCATION 来进行决定(官方默认是使用动态内存进行分配的),当然,前提是使用 FreeRTOS 提供的 heap...