- 博客(88)
- 收藏
- 关注
原创 C语言拼接4字节数据为uint32_t
将4个字节数据拼接成一个uint32_t可以使用位操作(位移和按位或)来实现。假设你有4个字节abcd(类型为uint8_t),你可以按照大端序(Big-Endian)或小端序(Little-Endian)的方式拼接。
2025-05-23 15:18:53
222
原创 串口DTR信号作用与应用解析
数据终端就绪)是RS-232标准中的一个控制信号,主要用于串行通信中表示设备的就绪状态。:RTS(Request to Send)用于请求发送数据,而DTR表示全局就绪状态。:与DCE设备的DSR(Data Set Ready)配合,实现双向就绪检查。:在USB转串口适配器中,DTR可能被映射为控制功能(如复位MCU)。:终端程序(如PuTTY)可手动控制DTR信号,或依赖它检测连接状态。:若设备未使用DTR但信号被激活,可能导致意外行为(如误复位)。(公头)/ Pin 6(母头,部分设备可能不同)。
2025-05-20 10:42:10
268
原创 结构体内存对齐规则与优化
内存对齐是计算机系统中一种重要的内存管理机制,它要求数据在内存中的地址必须是某个值(通常是2、4、8等2的幂次方)的倍数。
2025-05-06 14:54:05
374
原创 C语言位域与结构体打包技术
位域和结构体打包技术可以有效地减少内存使用,特别适用于嵌入式系统或需要与硬件/网络协议交互的场景。但使用时需要注意潜在的性能影响和可移植性问题。
2025-05-06 10:33:36
326
原创 C语言实现卡ID启用排序
根据bindflag的高七位比特位来对userCardId数组进行重新排序,使得启用的卡 ID 排在前面,禁用的卡 ID 排在后面,并更新。
2025-04-28 15:38:28
139
原创 C语言实现卡ID删除与排序
根据bindflag的高七位 bit 来管理userCardId数组中卡 ID 的启用/禁用状态删除指定的卡 ID 后,需要重新排序数组,将有效的卡 ID 移到数组前面更新为当前有效的卡数更新bindflag使其高七位 bit 与新排序后的卡 ID 状态对应。
2025-04-28 14:22:09
179
原创 memcpy 使用指南 (C语言)
memcpy是 C 语言标准库中的一个重要函数,用于在内存区域之间复制数据。它是<string.h>头文件中定义的高效内存操作函数之一。
2025-04-27 14:25:39
334
原创 cJSON中#define cJSON_IsReference 256 和 #define cJSON_StringIsConst 512这定义的大小是?
确保它们不会与 JSON 数据类型(低 8 位)冲突,并能高效地进行标志管理。:cJSON 设计为轻量级,适用于嵌入式系统,位操作是最优选择。字段的低 8 位(0-7)用于存储 JSON 数据类型(如。等),而高位(8-15)用于存储额外标志。更高效,尤其是在频繁操作 JSON 树时。这两个宏的值(256 和 512)是。(第 10 位为 1,其余为 0)(第 9 位为 1,其余为 0):存储 JSON 数据类型(如。,以标记不同的对象属性。变量会占用更多内存。在 cJSON 中,,对应二进制表示中的。
2025-04-25 09:43:28
405
原创 C语言中封装JSON数组对象
在C语言中处理JSON数组对象,你可以使用一些流行的JSON库,如 cJSON、Jansson 或 json-c。下面我将以 cJSON 为例,展示如何创建、封装和处理JSON数组对象。
2025-04-24 15:54:33
232
原创 使用cJSON封装C语言数据结构体
cJSON是一个轻量级的C语言JSON解析库,可以方便地将C语言数据结构转换为JSON格式,或者将JSON数据解析为C语言数据结构。下面介绍如何使用cJSON来封装和解析C语言中的结构体。
2025-04-24 11:34:33
251
原创 else if 在 C 语言中的使用
在 C 语言中,else if用于在if语句之后添加额外的条件判断。它允许你在第一个条件不满足时检查其他可能的条件。
2025-04-23 15:07:47
230
原创 枚举(enum)在C语言中的使用
枚举(enum)是C语言中一种用户定义的数据类型,用于给整数值赋予有意义的名称,使代码更易读和维护。简单示例自定义枚举值使用typedef简化枚举与switch语句结合枚举的大小在C语言中,枚举类型的大小通常是的大小(通常是4字节),因为它实际上存储的是整数值。注意事项 枚举元素是常量,不能修改不同枚举中的枚举元素名称不能相同枚举本质上是整数,可以直接与整数比较枚举可以提高代码可读性,但不会增加类型安全性(编译器不会阻止你将任意整数值赋给枚举
2025-04-23 14:58:29
199
原创 单片机获取真实时间的实现方法
单片机获取真实时间(即当前的年月日、时分秒等)通常需要依赖外部时间源或模块,因为单片机本身没有内置的实时时钟(RTC)功能。
2025-04-23 09:53:38
853
原创 从GNRMC语句中获取时间的C语言实现
GNRMC是NMEA 0183协议中的推荐最小定位信息语句,包含时间、日期、定位等信息。下面是如何在C语言中从GNRMC语句中提取时间的实现方法。
2025-04-23 09:43:16
210
原创 C语言中的bool类型详解
bool是C语言中用于表示布尔值(真/假)的数据类型。在C99标准之前,C语言并没有原生的布尔类型,但C99及后续标准引入了_Bool关键字和头文件来支持布尔类型。
2025-04-22 09:51:10
426
原创 C语言中联合体(Union)和结构体(Struct)的嵌套用法
联合体和结构体是C语言中两种重要的复合数据类型,它们可以相互嵌套使用,为复杂数据的表示提供了灵活的方式。
2025-04-21 11:34:25
524
原创 cJSON_Print 和 cJSON_PrintUnformatted的区别
特性输出格式格式化(易读)紧凑(无空格/换行)适用场景调试、日志网络传输、存储字符串大小较大(含格式字符)较小(无冗余字符)
2025-04-19 14:27:49
389
原创 使用C语言的cJSON中给JSON字符串添加转义
如果你有特殊需求(如仅转义字符串而不生成完整 JSON),可以自己实现转义函数(参考上面的。,让 cJSON 在序列化时自动处理转义,避免手动管理转义逻辑。时会自动处理转义字符,确保生成的 JSON 字符串是合法的。
2025-04-19 14:18:28
325
原创 FreeRTOS 中软件定时器导致 HardFault_Handler 的原因分析
在 FreeRTOS 中使用软件定时器时遇到 HardFault 错误是一个常见问题,通常与内存管理、堆栈溢出或资源访问冲突有关。
2025-04-17 10:07:46
1005
原创 BCD格式详细介绍
BCD(Binary-Coded Decimal,二进制编码的十进制)是一种数字编码方式,它使用4位二进制数来表示一个十进制数字(0-9)。与直接将数字转换为二进制不同,BCD保持了十进制数的位结构,只是用二进制形式表示每个十进制数字。
2025-04-15 11:23:50
355
原创 使用 J-Flash 读取芯片 Flash 数据的方法
或选择 "Target" > "Read back" > "Range..." 指定要读取的地址范围。点击 "Target" > "Read back" > "Entire chip"(读取整个芯片)读取完成后,选择 "File" > "Save Data File As..."点击 "Target" > "Connect" 或工具栏上的连接图标。选择 "File" > "New Project" 创建新项目。使用 "View" > "Memory" 打开内存查看窗口。读取受保护的芯片可能需要先解除保护。
2025-04-07 15:56:30
270
原创 C语言实现的Bootloader
以下是一个简单的bootloader实现,用于从备份地址(0x08040000)将应用程序复制到运行区(0x08004000),页大小为4KB。这个实现适用于STM32系列微控制器,使用了标准外设库。
2025-04-03 15:20:37
266
原创 bootloader+APP中,有些APP引脚无法正常使用?
主控芯片GD32F415,多次测试给PB13引脚给高电平,均为成功。经过分析得知,是PB13引脚在。
2025-04-02 14:52:40
466
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人