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...
1.2k 1 分钟

在移植之前,首先说明一下,该篇章,包括之后的文章都是建立在 CM-3 处理器上(用之前写 STM32 笔记的 STM32F103VET6),并且是用 FreeRTOS 的 V9.0.0 版本的核心文件进行移植,我们只需要把原有的 STM32 基础工程(STM32 的教程链接 ☜)二次添加我们所需的 FreeRTOS 核心文件就可以了 1、开发环境:Keil uVision5 V5.21 2、ST 外设标准固件库: V3.5 3、FreeRTOS 版本库:V9.0.0 4、目标芯片:STM32F103VET6(Cotrex-M3) 5、下载调试工具:J-Link # FreeRTOS...
1.7k 2 分钟

FreeRTOS 官网:https://www.freertos.org/index.html # V9.0.0 源码版本获取 1、官方托管在 SVN 的源代码链接:https://sourceforge.net/projects/freertos/files/FreeRTOS/ 2、官方托管在 GitHub 的源代码链接:https://github.com/FreeRTOS/FreeRTOS 这里使用 V9.0.0 版本,包括之后都是以 V9.0.0 版本为参考,不要问我为什么,哪个版本成熟稳定用那个。 # 文件分类 FreeRTOSv9.0.0 │ ├─ New - Direct...
5.3k 5 分钟

# 内存大小问题 有时候,我们在不同的编译环境,或者不同的机子上测试编译,会呈现不同的结果,于是我们会陷入疑问,内存的大小是谁分配的呢? 在系统中,系统对内存的识别是以 Byte(字节)为单位,每个字节由 8 位二进制数组成,即 8bit(比特,也称 “位” )。按照计算机的二进制方式,1Byte = 8bit;1KB = 1024Byte;1MB = 1024KB;1GB = 1024MB;1TB = 1024GB。 我们都知道 Byte(字节)的大小是固定的,但是,我们目前接触的都是以...
6.6k 7 分钟

前排声明一下,本篇是在学习 typedef 高级应用的时候发现对于指针的应用有很多不熟,然后查看了好多资料(参考链接在后面),于是又重新复习了一遍,并把它以自己通俗的语言整理出来,可能会有炒鸡多的不对,内容多来自书本和网络,希望各方大佬进行指正;同样的,在看这篇文章之前,不可全信,请务必持怀疑的态度去思考(我也不敢打保单一定是正确的,毕竟我也在学习中) 指针这东西,讨人喜爱的同时也惹人烦恼,反正对我而言,谈起指针就脑壳疼,所以别在我面前谈它,不然出来打一架;哈哈哈,开玩笑的 #...
4.8k 5 分钟

TTL、RS-232、RS422、RS-485 是指的电平标准(电信号),很多人把 RS-232、RS-422、RS-485 误称为通讯协议,这是很不应该的,其实它们仅是关于 UART 通讯的一个机械和电气接口标准(顶多是网络协议中的物理层面);也就是说对 MCU 等控制器编写了 UART 程序,串行数据会通过硬件电路在设备间进行收发,这个硬件电路要遵循一个电平标准,实现设备间的交互。 # 前言 要了解逻辑电平的内容,首先要知道以下几个概念的含义: 输入高电平(VIH):保证逻辑门的输入为高电平时所允许的最小输入高电平,当输入电平高于 VIH...
2.8k 3 分钟

DMX512(digital multiplex) 其实就是主机向从机整包单向广播发送的协议(protocol),从机自取所需。 DMX512 数据协议是美国舞台灯光协会(USITT)于 1990 年发布的一种灯光控制器与灯具设备进行数据传输的标准。它包括电气特性,数据协议,数据格式等方面的内容。 512 协议规定使用的波特率是 250Kbps # 链接拓扑(network topology) 根据后面的协议可以知道,其实就是将所有的 slave 挂到线上去。(线最长可以多长?) # 协议(protocol)时序 1) 先说明地址,包的格式是固定的,第一个数据帧就是地址 1(说是 0...