FreeRTOS常用API
FreeRTOS的常用API主要按功能分为任务管理器、队列、信号量、软件定时器几大类。以下是核心接口的整理: 任务管理API(Task)用于创建、删除和调度任务,是FreeRTOS最基础的部分。 xTaskCreat():动态创建一个新任务。需要传入任务函数指针、任务名、堆栈深度、参数、优先级和任务句柄指针。任务函数通常是一个死循环,不能返回。 vTaskDelay():将当前任务延时(阻塞)指定的tick数,让出CPU给其他就绪任务。 vTaskDelayUntil():用于实现固定周期的任务执行。它会计算下一次唤醒的绝对时间,适合需要严格周期性的控制任务。 xTakGetTickCount():获取系统启动以来的tick数,常用于超时判断或计算时间间隔。 vTaskDelete():删除一个任务。传入NULL表示删除当前任务自身。 uTaskGetStackHighWaterMark():获取任务运行以来的最小剩余堆栈空间。返回值越接近0,说明堆栈越危险,是调试堆栈溢出的工具。 队列API(Queue)用于任务间或中断与任务间的数据传递(值拷贝)。 xQue...
对于RAM和FLASH的理解
RAM和FLASH是电子设备中两种最基础也是最重要的存储介质。简单来说,RAM是内存,负责临时存放正在运行的数据;FLASH是硬盘,负责长期保存数据。它们最核心的区别在于:断电后RAM里的数据会消失,而FLASH里的数据不会。 1. 核心特性对比 特性 RAM(随机存取存储器) FLASH(闪存) 易失性 易失:断电数据丢失 非易失:断电数据保留 读写速度 极快,纳秒级 相对慢,微秒级 主要用途 运行程序、暂存数据 存储固件、文件、代码 读写次数 几乎无限次 有限制(约1~10万次) 成本 单位容量成本高 单位容量成本低 典型容量 几十K到几十GB 几KB到几TB 2. 在嵌入式系统(如单片机)中的分工在单片机或嵌入式开发中,这个区别尤其关键: FLASH:存放程序代码和掉电后需要保存的数据(如配饰参数)。单片机复位后,CPU从FLASH中读取指令开始执行。你写的代码变异后就是烧录到FLASH里的。 RAM:存放程序运行时的变量、堆栈和临时数据。程序运行时,会把需要频繁读写的数据从FLASH中加载到RAM中操作,因为RAM快得多。 3. 常见...
结构体
结构体(struct)是C语言中一种重要的用户自定义数据类型,它允许将不同的数据类型组合在一起,形成一个逻辑单元。 一、基本概念1.1 为什么需要结构体基本数据类型(int\float\char等)只能表示单一类型的数据。当需要表示一个复杂的对象(如学生、图书、点坐标)时,需要将多个不同的数据组织在一起: 1234567891011//使用结构体:数据分散、难以管理char name[20];int age;float score;//使用结构体:数据聚合、逻辑清晰struct Student { char name[20]; int age; float score;} 1.2 结构体的定义12345struct 结构体名 { 数据类型 成员名1; 数据类型 成员名2; // ...} 示例: 1234567891011struct Point { int x; int y;}struct Student { char name[20]; int age; float score; cha...
4G
4G(第四代移动通信技术)在嵌入式领域,通常指基于LTE(Long Term Evolution)标准的蜂窝网络通信。它让设备拜托了有限或局域无线(Wi-Fi)的距离限制,能在移动网络覆盖范围内实现广域高速的无线传输。 网络架构:扁平化的两大平面与早期2G/3G网络相比,4GLTE的架构发生了根本性变化,核心是取消电路域、全面扁平化。 LTE网络主要分为两个平面: 用户平面:负责搬运你的数据(如传感器采集的温湿度值、摄像头画面)。数据从你的设备经过PDCP(头压缩、加密)、RLC(分段重传)、AMC(调度复用)逐层处理后,通过物理层射频发出。 控制平面:负责管理连接。当设备需要通信时,通过RRC协议与基站建立或释放连接,并利用NAS协议完成注册、鉴权和移动性管理。 架构上,LTE取消了2G/3G时代的RNC(无线网络控制器),把功能下放到基站(eNodeB),使得连接建立的延迟大幅度降低。 核心技术:OFDM与MIMO4G之所以能实现高速率,主要依赖两项关键技术: OFDM(正交频分复用)传统通信里一条马路之能跑一辆车;OFDM则把一条宽马路划分成许多并...
SWD
SWO(Serial Wire Debug,串行线调试)是ARM为Cortex-M系列处理器设计的两线制调试接口。它用两根线实现了JTAG四线制的主要调试功能,已经成为现代微控制器调试与烧录的主流选择。 核心定位:JTAG的精简与进化SWD并非要完全取代JTAG,而是在引脚资源有限的情况下提供替代方案。它保留了JTAG的核心调试能力,但放弃了边界扫描功能。 对比项 SWD JTAG 引脚数 2(SWCLK+SWDIO) 4+(TCK/TMS/TDI/TDO) 边界扫描 不支持 支持 调试能力 与JTAG相当 标准 典型场景 小封装MCU、引脚受限 FPGA、复杂板级测试 SWD与JTAG在协议层并不兼容,但许多芯片的调端口(SWJ-DP)支持两种模式切换,通过发送特定的切换序列即可在两种协议之间切换。 物理层:两线制与电气特性SWD仅需两根信号线即可完成所有的调试通信: SWCLK(Serial Wire Clock):时钟线,由调试器(如J-Link、ST-Link)驱动,单向输入到芯片。 SWDIO(Serial W...
RS-485
RS-485是一种差分信号串行接口标准,你可以理解为UART物理层的“工业强化版”。它沿用了UART的异步数据格式,但通过查分传输,将通信距离从几十米拓展到了上千米,并支持多节点组网。 核心机制:差分信号与半双工RS-485的核心在于查分传输。它使用一对双绞线(通常标记为A和B),用两线之间的电压差来表示逻辑状态,而不是像RS-232那样依靠单线对地的电压。 逻辑1(正逻辑):A线电压高于B线,压差在+2V至+6V之间。 逻辑0(负逻辑):B线电压高于A线,压差在-2V至-6V之间。 这种方式的优势在于抗共模干扰能力强。工业环境中的噪声通常会同时耦合到A、B两根线上,接收端只关心两者的“差值“,噪声就会被自然抵消,从而实现远距离可靠传输。 通常说的RS-485网络是半双工的:所有节点共享一对差分线,同一时刻只能有一个节点发送。因此,收发切换需要软件通过一个“方向控制引脚“(DE/RE)来严格管理。 关键电器参数RS-485标准制定义了物理层的电气特性,不涉及上层协议。你需要关注以下硬指标: 传输距离与速率:理论最长1200米,最高10Mbps。但这两者成反比,要在...
I²C
I²C(Inter-Integrated Circuit,读作“I-squared-C”)是一种同步、半双工、多主多从的串行通信总线。它由飞利浦(现NXP)在1980年代发明,核心设计目的是用最少的引脚连接低速外设——是需要两根线,就能挂载几十个设备。 物理层:两根线搞定一切I²C只使用两根信号线,都是开漏输出,必须外接上拉电阻: SCL(Serial Clock):时钟线,由主机产生,用于同步数据传输。 SDA(Serial Data):数据线,双向传输,承载地址、数据、ACK等信息。 开漏 + 上拉是关键设计:任何设备都可以将线拉低,但是有释放后由上拉电阻恢复高电平。这天然实现了线与逻辑,避免了多个设备同时驱动导致短路,也是多种仲裁的无力基础。 上拉电阻的取值需要权衡:阻值小则上升沿快、速率高、但功耗大;阻值大则省电,但边沿变缓。常见值在2.2k𝛺~10k𝛺之间,高速模式下会更小。 协议层:主机驱动的回答I²C是主机主导的协议:主机产生时钟并发起所有传输,从机只能被动响应。每次通信都遵循固定帧格式: 起始条件(Start):SCL为高时,SDA由高拉低。这是通信开始...
CAN通信
CAN是一种多主异步串行通信协议,核心设计目标是让网络上的多个节点在严苛环境下也能可靠通信。它的精妙之处在于,用“显性/隐性”电平配合独特的无损仲裁机制,解决了多节点同时发送时的冲突问题。 核心机制:显性与仲裁要理解CAN,先要理解它的物理层逻辑: 显性:逻辑0,被主动驱动到电压。显性位”覆盖“隐性位。 隐性:逻辑1,通过电阻拉回。总线空闲时就是隐性状态。 无损仲裁正是基于这个特性:但当多个节点同时发送时,它们逐位比较标识符(ID)。只要某个节点发送隐性位却从总线上读到显性位,它就明白自己ID的优先级较低,立即退出仲裁,转为接收模式。意味着ID数值越小,优先级越高,仲裁过程不会破环任何数据。 数据帧结构一个标准的CAN数据帧(以jydmCAN为例)由以下部分组成: 帧起始:1位显性位,通知总线传输开始。 仲裁场:包含11位标识符(标准格式)或29位(扩展格式),决定优先级,也用于接收方过滤报文。 控制场:包含DLC(数据长度码),指明数据场有几个字节(经典CAN为0-8字节)。 数据场:实际负载,经典CAN最多8字节。 CRC场:15位校验序列,用于检错。 ACK...
串口通信
UART(通用异步收发传输器)是一种异步串行通讯协议,它不需要共享时钟信号,仅通过两根数据线(TX\RX)即可实现全双工通信。理解UART的核心,在于理解它如何通过”数据帧“的格式来在无时钟的情况下保持收发双方的同步。 核心原理:无时钟如何同步?UART是异步通信,意味着发送方和接收方没有共享的时钟线。为了让接收方能正确解读数据,UART通过特定的数据帧格式来实现同步: 起始位:数据在空闲时保持高水平。当发送方拉低电平一个波特率周期时,接收方检测到这个下降沿,就知道一阵数据开始了,并以此校准自己的采样时钟。 数据位:紧接着起始位之后发送,通常是5-8位。UART协议约定最低有效位先发送。 校验位(可选):用于简单的错误检测。可以是偶校验(使数据位中的“1”的总数为偶数)或奇校验。 停止位:发送方将数据线拉高1或2个周期,标志一帧数据结束。高电平的停止位也为接收方提供了必要的缓冲时间,以处理时钟可能存在的微小误差。 关键参数要成功通信,双方必须事先约定好以下参数,否则会乱码: 波特率:衡量传输速率的指标,表示每秒传输的符号数。常见的波特率有9600、115200等。收发双方波...
通用输入输出
输出模式 模式名称 内部原理 电平控制能力 典型应用场景 推挽输出 内部由PMOS+NMOS组成,既能主动拉高,也能主动拉低 输出高电平为VDD,低电平为VSS,驱动能力强 SPI的SCLK、MOSI、UART的TX、PWM调光、LED驱动 开漏输出 内部只有NMOS,只能主动拉低,无法主动输出高电平 输出高电平必须依赖外部上拉电阻 I2C的SCL和SDA(强制要求)、总线电平匹配(如3.3V转5V) 关闭输出 引脚呈高阻态 不驱动总线相当于断开连接 仅在释放总线或作为输入时使用 关键规则(必记):SPI时钟必须用推挽(保证高速上升沿);I2C时钟必须用开漏+外部上拉电阻(保证多主机“线与”逻辑,否则会短路)。 输入模式 模式名称 内部连接 电平状态(无外部信号时) 典型应用场景 浮空输入 既不上拉也不下拉 不确定 必须由外部信号强驱动 上拉输入 内部接一个弱上拉电阻 默认高电平 按键检测 下拉输入 内部接一个弱下拉电阻约40k𝛺 默认低电平 检测高电平有效的脉冲信号 模拟输入 断开数字电路,直接连接ADC/DA...