- 博客(45)
- 收藏
- 关注
原创 CAN 通讯学习教程
经典CAN帧:│ SOF │ ID │ ... │ 数据(≤8B) │ CRC │125kbps~1Mbps(整个帧相同波特率)CAN FD帧:│ SOF │ ID │ ... │ 数据(≤64B) │ CRC │← 仲裁段:低波特率 → ← 数据段:高波特率 →CAN FD优势数据段波特率可达8Mbps(CAN FD SIC可达12Mbps)数据长度从8字节扩展到64字节向下兼容经典CAN(仲裁段使用相同波特率)DBC(Database CAN)是一个文本文件,用于。
2026-07-01 10:45:18
230
原创 嵌入式通信协议完全教程
│ 帧头 │ 长度 │ 地址 │ 命令码 │ 数据 │ CRC │ 帧尾 ││ 0xAA55 │ 小端序 │ 0x01-FF│ 见定义 │ 变长 │ CRC16 │ 0x0D0A │设计原则:帧头(Magic Number):用于帧同步,选择不易在数据中出现的值长度字段:小端序存储(低字节在前),包含从地址字段到数据字段的总字节数地址字段:多设备通信时标识设备命令码:操作类型(读/写/应答/通知/错误)变长数据:TLV(Type-Length-Value)格式灵活扩展CRC校验。
2026-06-29 14:55:42
323
原创 单片机IO不够?ULN2003A救急方案
芯片概述:7路达林顿晶体管阵列核心参数:500mA/路、50V耐压、内置续流二极管引脚定义与封装(DIP-16 / SOP-16)与ULN2004A、ULN2803A的区别ULN2003A适合中低速、大电流、多路驱动的场景若需更多IO,可组合ULN2003A + 74HC595/74HC164进阶方案:I2C/SPI扩展IO(如MCP23017、PCF8574)推荐阅读:单片机IO扩展的完整方案对比。
2026-06-09 07:00:00
379
原创 STM32上跑通TinyML:从模型训练到嵌入式部署实战
本文回顾:从数据到部署的完整链路进阶方向:多传感器融合边缘端在线学习低功耗场景优化(STM32L4+ 系列)使用 Edge Impulse / NanoEdge AI 等平台推荐学习资源(官方文档、社区、开源项目)
2026-06-09 07:00:00
420
原创 Docker基本命令
运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动。方法二:不想删容器,又想让这个容器设置开机自启动,那么我们修改其启动配置即可!我们还可以再创建一个容器redis03 使其成为容器二的子级容器。由于数据卷的缘故 他们数据是相互同步的,且同步到宿主机。docker attach 容器名/容器ID。docker kill 容器名/容器ID。可以使用多个 -v 类指定需要挂载的目录。查看Docker的磁盘使用具体情况。删除 无用的容器和 镜像。清除所有无容器使用的镜像。
2025-09-03 09:49:32
601
原创 linux命令
注意:rmdir命令只能删除空目录。当要删除非空目录时,就要使用带有“-R”选项的rm命令。rmdir命令的“-p”参数可以递归删除指定的多级目录,但是要求每个目录也必须是空目录。rmdir命令作用是删除空的目录,英文全称:“remove directory”。把webapps.dist目录下的所有文件和文件夹复制到webapps目录下。把webapps.dist目录下的所有文件和文件夹复制到当前目录下。把当前目录下的所有文件和文件夹复制到webapps。
2025-09-03 09:45:07
209
原创 常用git命令
git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
2025-09-03 09:43:35
326
原创 vsCode
快速复制一行 :shift+alt+ 下箭头(上箭头) 或者 ctrl+c 然后 ctrl+v。添加多个光标 : ctrl + Alt + 上箭头(下箭头)选择某个区块:按住shift + alt 然后拖动鼠标。如果想选中所有此单词:ctrl+shift+L。转到文件头部/尾部:ctrl+home/end。隐藏/显示终端:ctrl+~
2025-09-03 09:38:11
568
原创 C#如何实现一个输入框输入,匹配提示数据
首先需要创建一个包含所有候选项的字符串集合(List)或者从文件、数据库等地方获取到这些候选项。然后将该集合传递给TextBox控件的AutoCompleteCustomSource属性。在C#中可以使用AutoCompleteStringCollection类来实现输入框的自动完成功能。对于TextEdit控件想要实现相同的功能。比textbox控件多一步设置。
2024-02-04 16:25:09
1155
1
原创 C语言总结
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言第1章 程序设计和C语言第2章 数据类型、运算符和表达式第3章 顺序结构程序设计第4章 分支结构程序设计第5章 循环结构程序设计第6章 数组第7章 函数第8章 指针第9章 结构体与链表第10章 文件第11章 编译预处理第12章 位运算总结前言这些内容是我个人在学习C语言时遇到或使用到的个人觉得比较重要的内容,有些对于做题是比较重要的基础知识。第1章 程序设计和C语言1、C程序是由函数组成的。(重要)2、所有的C程.
2022-04-06 15:03:05
2474
1
原创 C语言数据结构-三-1 栈的实现与进制转换
注意:现在偷的懒以后都要补回来的!希望大家认真学好数据结构,不希望后悔!数制转换(十进制转二进制)【问题描述】利用栈实现十进制向二进制的转换。【输入形式】输入若干个十进制正整数,输出它们的二进制形式。(提示:输入采用scanf("%d",&x)==1)【输出形式】输出每个十进制正整数的二进制形式。【样例输入】572025512812710005000065535【样例输出】101111101001111111110000000111111111
2022-03-30 20:45:32
561
原创 C语言数据结构-线性表测试
注意:现在偷的懒以后都要补回来的!希望大家认真学好数据结构,不希望后悔!【函数】在顺序表中,输入一个元素插入到原表的最大元素之前【问题描述】设有顺序表,输入一个元素插入到顺序表最大元素之前。【输入形式】第一行输入一个N(N>=0且N<=100);第二行输入N个整数(以空格分隔);第三行输入一个整数(将该整数插入到顺序表最大元素之前)【输出形式】输出插入后的顺序表元素【样例输入】512 98 34 -87 -2320【样例输出】12 20 98 34 -87 -
2022-03-30 20:42:55
237
原创 C语言数据结构-3-(双向链表及一元多项式求和)
注意:现在偷的懒以后都要补回来的!希望大家认真学好数据结构,不希望后悔!双向链表中插入结点并输出【问题描述】对带头结点的双向链表,实现插入算法。【输入形式】第一行输入一个N(N大于等于1,小于1000);第二行输入N个整数,以空格作为分隔,创建长度为N的双向链表,为双向输出方便,需保留头尾指针;第三行输入pos和e,以空格分隔,分别表示插入位置和插入元素的值。【输出形式】第一行从头开始顺向输出双向链表中元素,用空格分隔;第二行从尾结点开始逆向输出双向链表中元素,用空格分隔。【样例
2022-03-30 20:39:14
233
原创 C语言数据结构-2-链表
注意:现在偷的懒以后都要补回来的!希望大家认真学好数据结构,不希望后悔!删除带头结点的单链表中值重复的元素【问题描述】建立带头结点的单链表,编写程序实现删除表中值重复的元素,即重复元素只保留一个。【输入形式】第一行输入一个N,表示建表的长度;第二行输入N个整数,表示数据元素。【输出形式】输出去重后的单链表元素。【样例输入】52 2 2 3 3【样例输出】2 3【评分标准】功能实现要求写成算法函数形式。约瑟夫环问题(循环单链表)【问题描述】约瑟夫环问题:N个人围成
2022-03-30 20:36:40
533
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅