2.5k 3 分钟

# 前言 newlib 的 strtod、sprintf、sscanf、snprintf、vsnprintf 这些函数都是非线程安全的,这些函数的行为和 keil \ IAR 以及我们的认知并不一样,这些函数在使用 %f or %lf 来输出浮点时,会在申请一块 3.5K 左右的内存空间,该内存空间只申请一次,且不释放。作为全局内存使用。如果有多个线程同时调用 sprintf 来字符串化浮点数据,会有几率或较大几率导致系统死机(尤其是多个线程高密度的调用 sprintf...
5.5k 6 分钟

在当前这个时代,对于 PCB 设计,有太多的 EDA 设计软件了,如:Cadence、PADS、Altium 等,但绝大多数是要授权的,而且如今人们版权意识正在提高;这对电子爱好者来说,要想 DIY 一个好东西,免不了依赖于这些设计软件,但如果有开源的、顺手的软件,那么我们更倾于应用这些软件,毕竟从版权意识上看以及投向开源社区来讲都是好的。 # 简介 KiCad 是一个开源软件工具,用于设计电子原理图和 PCB 图形。 其官网地址:https://www.kicad.org/ 各操作文档说明:https://docs.kicad.org/ 由于 KiCad...
14k 14 分钟

在程序开发阶段,少不了 Debug 调试,除去编程架构搭建不稳定所造成的错误外,大部分会出现或多或少的故障异常,而这些异常有可能是粗心或者对编程了解不到位所导致的 ‘ 堆栈溢出 ’ 、‘ 数组下标越界 ’ 、‘ 数学运算异常 ’ 等等;而本篇则主要以常见的进入 Hardfault 中断来进行分析错误来源。 # ARM Cortex-M 核心 ARM 架构,过去称作高级精简指令集机器(英语:Advanced RISC Machine,更早称作艾康精简指令集机器,Acorn RISC Machine),是一个精简指令集(RISC)处理器架构家族,其广泛地使用在许多嵌入式系统设计。 而对于 ARM...
5.6k 6 分钟

# 奇偶校验 # 介绍 奇偶校验位(英语:parity bit)或校验比特(英语:check bit)是一个表示给定位数的二进制数中 1 的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。 # 原理 奇偶校验常见于串口数据收发,如其名,可分为奇校验和偶校验: 奇校验:原始码流 + 校验位,其 “1” 的个数为奇数,则校验位为 “0”;若为偶数,则校验位为 “1”。 偶校验:原始码流 + 校验位,其 “1” 的个数为奇数,则校验位为 “1”;若为偶数,则校验位为 “0”。 奇校验是在每个字节后增加一个附加位,使得 “1”...
1.7k 2 分钟

# 8P8C(RJ45) 8P8C,常被误称为 RJ45,嘛,现在已经被叫成 RJ45 了,是以太网使用双绞线连接时常用的一种连接器插头。 8P8C(8 position 8 contact)的意思是 8 个位置(Position,指 8 个凹槽)、8 个触点(Contact,指 8 个金属接点)。 # TIA/EIA-568 1、接口 2、接线 在 T568A 中,与之相连的 8 根线分别定义为:白绿、绿;白橙、蓝;白蓝、橙;白棕、棕。 T568A 可以跟早期的 USOC 向下兼容。 在 T568B 中,与之相连的 8...
2k 2 分钟

# 差分信号跟单端信号 **1、差分信号:** 指在两根线上都传输信号,这两个信号的大小相等,极性相反,这两根线上传输的信号就是差分信号(差模信号),简单的说就是在同一时间段内,通过比较这两个电压的差值来判断逻辑状态 “0” 还是 “1” 。 **2、单端信号:**...
8.5k 9 分钟

继上一篇 cJSON 库 API 解析(上),本篇为下篇,以解析 JSON 数据包为主 # JSON 数据解析 在 cJSON 里,解析 JSON 数据包,其实就是通过搜寻对应的配对关键符号或者关键字,然后一个一个剥离成为链表节点 (键值对) 的过程。 其所支持的解析函数有以下几个: CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value); CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t...
7.9k 8 分钟

cJSON 项目可以说是一个很适合学习及应用 C 语言中的链表的项目,刨析它的源码,你会惊叹它设计之巧妙,其代码为之简洁;同时,在嵌入式应用场景中也经常发现它的身影。 本系列分为上下两篇,其中上篇以应用分析其 JSON 数据封装为主。 # 介绍 在认识 cJSON 之前,先来认识一下 JSON: JSON(JavaScript Object Notation,JavaScript 对象表示法,读作 /ˈdʒeɪsən/)是一种由道格拉斯・克罗克福特构想和设计、轻量级的资料交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。JSON...
5.5k 6 分钟

# 任务通知的特性 通过任务通知,无需单独的通信对象,任务就可以与其他任务进行交互,以及与 ISR 同步。通过使用任务通知,任务或 ISR 可以直接向接收任务发送事件。 任务通知可以通过以下几种方式更新接收任务的通知值: 直接设置而不用覆写接收任务的通知值。 覆写接收任务的通知值。 设置接收任务通知值的一个或多个 bit 位。 增加接收任务的通知值。 相对于使用中介对象发送到任务(这样的例子对象是队列,信号量,互斥对象和事件组)如下图: 任务通知是一种将事件直接发送到任务的方法,而无需这样做中介对象: 任务通知功能是可选的,要包含任务通知功能,请在 FreeRTOSConfig.h...
12k 12 分钟

# 介绍 MD5 消息摘要算法,英文全称:Message-Digest 5 Algorithm,是一种被广泛使用的密码散列函数,可以产生出一个 128 位(16 字节)的散列值(hash value),用于确保信息传输完整一致。但是,很不幸,自 1996 年后被证实存在弱点,可以被加以 “破解”;可由于这种算法的公开性和安全性,在 90 年代被广泛使用在各种程序语言中,用以确保资料传递无误等,对于非严格的安全信息,还是值得推选的;同时也是哈希算法的一种。 MD5 算法的算法特点如下: (1)压缩性:任意长度的数据,算出的 MD5 值长度都是固定的。 (2)容易计算:从原数据计算出 MD5...