- 博客(609)
- 资源 (18)
- 收藏
- 关注
原创 嘉立创梁山派PCB设计规则设置
PCB设计关键参数设置指南:1. 安全间距设置板框间距>10mil(建议20mil),内电层遵循20H规则(GND内缩20mil,PWR内缩40mil)。2. 导线规范:信号线匹配焊盘尺寸(如8mil),电源线建议通过过孔连接内电层,可通过网络类管理器分组设置线宽。3. 阻焊处理:阻焊扩展建议2-4mil(本设计取2.5mil),确保焊接可靠性;助焊扩展(钢网层)保持与焊盘一致无需扩展。4. 其他注意事项:差分对需阻抗匹配计算,内电层设置前文已提及,铺铜需单独处理。注:BGA等密集封装需特殊考虑阻焊扩展设置
2025-10-27 11:20:07
805
原创 电源层和GND层的内缩20H
PCB内电层设计规则设置摘要:GND层需内缩离板边20mil,电源层(PWR5V/3V3)需内缩40mil。设置步骤:1)在规则管理中修改内电层到边框间距为20mil,重建GND层;2)新建PWR层并设置间距为40mil,在网络规则中将3V3网络分配至PWR规则,最后重建3V3层。该设置可确保不同电源层满足安全间距要求。(150字)
2025-09-27 11:46:01
350
原创 C语言注意事项
作用:sizeof 用于计算数据类型或变量占用的内存大小(以字节为单位)。sizeof 返回整个字符数组占用的字节数,包括字符串末尾的 '\0'。对于指针,返回指针本身的大小(通常是4或8字节,取决于系统架构)。字符串、字符数组和整型数组在存储上的区别。返回整个字符数组占用的字节数 5。对于数组,返回整个数组占用的字节数。这是一个整型数组,包含5个元素。返回单个整型元素占用的字节数。这是一个字符数组,包含5个字符。结尾的字符数组,等价于字符串。返回整个数组占用的字节数。变量(如数组、结构体等)。
2025-07-30 17:23:22
428
原创 STM32 CubeMX超详细开发带FreeRtos
在操作系统中,通常使用SVC指令来请求系统调用,而PendSV来进行线程切换时上下文保存动作。刚开始学习操作系统的时候,有点困惑为什么要这样做功能划分,这两个中断都让我有点傻傻分不清楚。后来觉得其实这应该也不算是硬性规定,就是约定俗成这么干,理论上用哪个去申请系统调用和切换上下文都是可以的。这也不是随意猜测的,如下可以看几个例子,在FreeRTOS中第一个任务的调用就是用的SVC,后面就一直是使用PENDSV做上下文切换;而在UCOS和RT-Thread中则是从第一个任务开始就都是使用的PENDSV。
2025-05-15 11:49:22
1523
原创 硬件22、嘉立创EDA布线时不显示GND网络(对GND铺铜)
这样可以看到GND之间没有了那条引导线,暂时可以不连接GND,一会对GND进行铺铜就好了。部分,将GND部分设置为不可见。
2024-04-26 14:37:33
7463
原创 linux下网卡多IP静态IP
修改/etc/network/interfaces# interfaces(5) file used by ifup(8) and ifdown(8)auto loiface lo inet loopbackauto eth0iface eth0 inet staticaddress 192.168.0.36netmask 255.255.255.0auto eth0:1iface eth0:1 inet staticaddress 192.168.10.46netmask 255
2022-04-15 17:38:19
336
原创 基于CN3702芯片5A 7.4V双节锂电池充电管理开关型充电电路
基于CN3702芯片的7.4V双节锂电池开关型充电电路,采用同步整流的开关充电架构,实现恒流/恒压充电、充电状态指示与电池温度保护,专为2串锂电池组(满电8.4V)设计。CN3702 是 PWM 降压模式双节锂电池充电管理集成电路,独立对锂电池充电进行自动管理,CN3702 具有恒流和恒压充电模式,非常适合锂电池的充电。在恒压充电模式,CN3702将电池电压调制在 8.4V,精度为士1%;在恒流充电模式,充电电流通过一个外部电阻设置。
2026-01-07 09:53:51
原创 QT C++ 好看的连击动画组件
显示连击数(如 "x10"),由 "x" 图标 + 数字图片组合而成。每次触发连击时,数字会有一个“放大后缩回”的动画效果。动画支持可调的持续时间、缩放因子、缓动曲线。数字图片支持 0~9,可自定义图片路径。
2026-01-07 09:31:18
46
原创 一个简单的3.7V锂电池升压5V的电路方案原理图
该电路是一款以TCS5420同步升压DC-DC转换器为核心的便携设备供电方案,主要应用于便携低功耗的消费电子,小型智能硬件类产品,实现3.7V锂电池到5V USB接口的升压稳压输出,同时集成ESD静电防护与USB数据传输功能,整体工作分为供电输入、升压转换、输出稳压、接口防护与数据传输四大核心阶段,各模块协同完成电能的转换、传输与保护。
2026-01-07 09:13:14
250
原创 FreeRtos中断优先级的红线:SysCall Safe边界
SysCall 红线:configMAX_SYSCALL_INTERRUPT_PRIORITY 是 RTOS 安全的边界。规则:想调 API?优先级必须 低 于红线(数值更大)。想零延迟?优先级设为 高 于红线(数值更小),但别碰 API。API 后缀:ISR 里只能用 FromISR 版本的函数,且绝不能阻塞。
2026-01-07 08:52:29
203
原创 电路跳动的心脏----常用晶振有哪些?价格如何?
晶振在数字电路中广泛使用,如果拿到下面的PCBA,能快速识别出哪个是晶振?是什么类型的晶振?能快速了解价格水平是怎样的吗?本文总体介绍常用晶振类型及相应价格水平,让大家有初步了解。晶振主要类别有恒温晶振,压控晶振,温补晶振,晶体振荡器,还有拓展的可编程晶振等其他的各种类型。下面具体介绍下恒温晶振(Oven Controlled Crystal Oscillator,OCXO)是一种提供高精度频率基的小型电子系统,它包含晶体振荡电路,电源电路,热流等技术。
2026-01-05 15:40:22
226
原创 FreeRtos资源保护:关中断 vs 互斥量 (Mutex)优先级继承和翻转
核心差异:关中断是“让世界停止”;互斥量是“排队等待”。而互斥量特有的优先级继承机制,是它区别于普通信号量的关键。
2026-01-05 15:38:08
484
原创 QGridLayout 网格布局构建一个数字键盘布局
findChildren很方便的获取所有按钮,它适合排布那些横平竖直的多行列内容,这样布局会老老实实的按照按钮的限制,然后依次给按钮设置最小值和最大值。这是因为按钮的大小被限制了,好像和预期的不太一样是吧!一个方方正正的网格布局,就很适合用网格布局来处理。其中有三个按键不太安分。加号和回车键要竖跨两行。怎么帮按钮界限突破下呢?每个按键占据一个网格,再来看界限突破后的样子。数据键盘有5行4列,
2026-01-05 09:41:18
100
原创 QBoxLayout支持水平布局和垂直布局构建一个键盘
所以代码中用了满满当当的stretch。最后把这六个水平布局丢到垂直布局中,唯一麻烦的地方就是要算好按钮比例。能支持水平布局和垂直布局,为了使键盘能支持放大缩小,用盒子布局再适合不过了。且能保持键盘的布局不乱,大概就是先创建水平布局,然而键盘的左侧字母区,
2026-01-05 09:39:31
138
转载 电流转电压4-20mA转0-3.3/5V/10V/15V转换电路原理解析
不难看出这是一个差分放大电路,也就是一个减法运算电路,输出电压UA=(R5/R3)*(U1-U2)=U1-U2,UA即是电阻R1两端的电压差,假如流过该电阻的电流为20mA,那么产生的电压=20*100=2000mV,还没有达到我们单片机的电压测量范围(这里默认单片机AD检测的范围为0-5V)。在这里U1C的作用即是最终放大,那么在使用时,将输入电流设置为20mA时,调节RP1电位器,即调节电压放大倍数,直至输出电压为5V或其他量程的10V、15V,即可完成对量程的设置。
2026-01-05 09:20:46
14
原创 C语言union使用技巧:内存复用的高效玩法
实际开发中,常用“struct嵌套union”的模式,用一个“类型标记”(枚举/整数)标识当前有效的union成员,实现安全的多类型数据管理。在C语言的自定义类型家族中,struct(结构体)早已是大家耳熟能详的“老熟人”,而它的“孪生兄弟”union(共用体/联合体)却常常被忽略。掌握union的使用技巧,不仅能帮你写出更高效的代码,还能加深对C语言内存布局的理解——毕竟,能玩转内存的程序员,才是真正的C语言高手!核心逻辑:用时间上的“先后使用”,替代空间上的“同时占用”,实现内存高效利用。
2025-12-31 10:58:08
706
原创 C/C++中的signed char和unsigned char详解
char的符号性:默认char的符号性由实现定义,不可移植数值范围: -128 到 127: 0 到 255使用场景ASCII字符:使用char大数值(>127):使用二进制数据:使用需要负值:使用最佳实践:明确指定符号性以提高代码可移植性这个全面的示例展示了和的区别、使用场景和最佳实践,帮助您在不同情况下做出正确的类型选择。
2025-12-31 10:33:22
394
原创 QSizeGrip无边框窗口设计的鼠标缩放控件
总是免不了要移除Windows自带的边框,如果不想让QSizeGrip直接显示出来,去掉了边框也去掉了窗口大小调整功能,如果不想自己去实现麻烦的鼠标事件时,当我们想要完全自定义窗口风格时,不妨试试QSizeGrip。用一个垂直布局和两个水平布局。可以通过QSS的方式。
2025-12-31 10:22:39
164
原创 QUdpSocket---广播、组播
1)每次发送都会重新创建一个socket,主要用来测试绑定不同的地址。组播就像向某个微信群里发了一条消息,只有群里的人能看到消息。2)发送的目标是广播地址,即255.255.255.255。192.168.200.22 是本地网卡地址,发送广播包时绑定的地址是0.0.0.0。绑定所有的IPv4地址和指定的端口,广播发送则多出个选择绑定的IP地址,3)端口则是我们界面上指定的9999。本地网卡收到消息时,虚拟网卡没有;虚拟网卡收到消息时,本地网卡没有;不同点在于发送的目标是组播的地址。
2025-12-29 08:05:46
277
原创 Linux下Qt编译出现“cannot find -lGL“问题解决办法
Qt 默认在 /usr/lib/ 目录下查找动态链接库,但是很多 Linux 发行版将 OpenGL 链接库放在其它目录,例如对于CentOS 7,OpenGL 链接库位于 /usr/lib64/ 目录,而对于 Ubuntu,OpenGL 链接库位于 /usr/lib/i386-linux-gnu/mesa/ 目录。只要我们把 libGL.so 拷贝到 /usr/lib/ 目录,或者在 /usr/lib/ 目录下为 libGL.so 创建一个链接,就能解决问题。显然第二种办法更好。
2025-12-28 21:05:07
279
原创 QUdpSocket---单播
Qt发个UDP消息,实打实得就两步:1)创建QUdpSocket2)发消息就是这么滴简单,相比纯用C/C++来写,简直简化了太多。
2025-12-27 19:01:41
361
原创 QTextEdit 右键菜单显示中文
场景推荐做法开发阶段从加载发布阶段将.qm打包进资源文件(.qrc支持多语言按需加载对应语言的自定义控件使用tr()并生成自己的.qm文件避免仅依赖系统语言自动翻译(Qt 不会自动加载.qm通过加载widgets.qm翻译文件,我们轻松解决了QTextEdit右键菜单英文显示的问题。这背后是 Qt 强大的国际化框架在支撑。掌握的使用,不仅能中文化 Qt 内置控件,还能为你的应用提供完整的多语言支持。一个专业的 Qt 应用,不仅要功能完善,更要尊重用户的语言习惯。
2025-12-27 18:41:56
887
原创 嵌入式linux中pthread条件变量怎么用
pthread条件变量的核心价值是“高效的等待-通知”,解决了轮询和sleep的资源浪费问题。互斥锁的原子配合while循环检查条件signal/broadcast的场景匹配。
2025-12-27 18:40:37
519
原创 Linux线程:线程栈的内存优化大小设置,防止溢出
在程序运行的大舞台上,栈就像是一个幕后的 “超级管家”,默默地为程序的顺利执行提供着关键支持。它是一种遵循后进先出(LIFO,Last In First Out)原则的数据结构 ,就好比我们平时放盘子,先放进去的盘子会在最下面,最后放进去的盘子在最上面,拿的时候也是先拿最上面的盘子。在程序里,栈主要承担着两大重要职责:函数调用和局部变量存储。当程序执行到一个函数调用时,就会在栈中为这个函数开辟一块新的空间。在这个空间里,会存放函数的参数、局部变量以及函数执行结束后返回的地址等重要信息。
2025-12-26 09:15:06
1019
原创 Linux驱动-设备树2
字符设备驱动通常适用于相对简单的设备。但对于电源管理、热插拔事件管理等功能而言,字符设备框架可能不够灵活和高效。为此,Linux 内核提供了设备模型,它允许开发人员以更高级的方式描述硬件设备及其关系,并提供了一组通用的 API 和机制来处理设备注册、热插拔事件和电源管理等任务。使用设备模型,驱动开发人员可以将更多的底层功能交给内核处理,而不必重复实现这些基础功能。这使得驱动编写更加高级和模块化,减少了重复工作和出错的可能性。
2025-12-24 20:25:12
959
原创 Linux驱动-设备树
属性所在节点作用中断控制器节点声明“我是一个中断控制器”中断控制器节点定义“描述我的一个中断需要几个参数”设备节点(中断源)指定“我的中断线连接到哪个中断控制器”interrupts设备节点(中断源)描述“我连接到父控制器的哪个输入,以及如何触发”属性适用节点作用时钟提供者定义标识一个输出时钟所需的参数个数clocks提供者/使用者提供者:声明输入时钟;使用者:声明所需时钟提供者/使用者为clocks中的时钟命名时钟使用者列出需要固件配置的时钟时钟使用者为列出的时钟指定频率。
2025-12-24 20:19:33
1023
原创 Linux内核中断--工作队列及工作队列管理
中断处理程序(上半部)要求执行速度极快,不能阻塞,以快速响应硬件。但在实际应用场景中,很多中断后需要进行的操作是耗时的,例如处理大量数据、读写磁盘、与用户空间通信等。共享工作队列虽然简单易用,但在某些场景下存在局限性:•隔离性问题:所有任务共享同一队列,一个耗时任务可能阻塞其他任务。•优先级控制不足:无法为特定任务设置优先级。•并发性限制:无法针对特定工作负载优化并发度。•资源控制缺失:无法限制特定队列的资源使用。自定义工作队列通过为特定任务创建专用队列和工作者线程来解决这些问题。// 工作项。
2025-12-24 19:43:41
664
原创 Linux 内核驱动-中断
在一个复杂的片上系统(SoC)中,可能存在数十甚至上百个能产生中断的外部设备。如果每个设备都直接连接到CPU的中断引脚,这在物理设计和逻辑管理上都是不可能的。GIC 的作用就是充当一个中央集线器和智能调度器•统一入口:所有外设的中断线都汇入 GIC。•统一出口:GIC 通过少数几条信号线(如图中的IRQ和 FIQ)与每个 CPU 核心相连。•智能管理:GIC 负责对所有中断请求进行裁决、筛选和转发。tasklet是一种特殊的软中断,在Linux内核中,一般使用tasklet机制来实现中断下文。
2025-12-24 19:35:48
673
原创 Linux设备节点与平台总线-设备树
1.设备表示:设备通常通过或arm,plxxx(如pl330pl011)等compatible属性表示。2.驱动注册:驱动使用注册。3.设备节点:设备节点通常包含在总线定义下。4.自动化匹配机制:支持基于 AMBA ID 或compatible属性的自动化匹配机制。•定义位置:通常定义在.dts文件中。•驱动注册:使用和。•手动注册:不可自动探测,需要静态注册。•适用范围:一般用于 SoC 内部的 UART、GPIO、SPI 控制器、DMA 控制器等。
2025-12-24 19:33:07
551
原创 Qt 跨版本兼容指南正确重写QTcpServer:incomingConnection 以支持32/64 位及 Qt4/Qt5+
qintptr是什么?#else// 在 32 位系统上通常是 32 位#endif其无符号版本为quintptr。目的:确保在 64 位系统上能完整表示指针或套接字句柄(如 Windows 的SOCKET类型在 64 位下是 64 位)。问题原因解决方案64 位下不触发Qt5+ 参数从int改为qintptr,旧签名无法重写虚函数使用条件编译✅最佳实践永远使用qintptr作为的参数(Qt5+);若需兼容 Qt4,采用条件编译;在函数声明后加上override。
2025-12-23 13:06:07
596
原创 U-Boot 核心知识汇总
U-Boot 定义:Universal Bootloader(通用引导加载程序),开源、跨架构(ARM/x86/MIPS 等)的嵌入式 Bootloader,由德国 DENX 团队维护,是嵌入式领域事实标准。核心作用:硬件初始化:上电完成 DDR、时钟、串口、存储、网络等底层初始化,为内核运行准备环境;镜像加载:从 Flash/eMMC/SD/ 网络加载 Linux 内核、设备树(DTB)、根文件系统到内存;交互调试:提供命令行接口,支持硬件检测、参数配置、固件升级、故障排查;环境管理:通过环境变量存储启动
2025-12-23 13:04:40
711
原创 数组指针:连续内存的操控
数组指针的本质是 “指向连续内存块的精准工具”,它的核心价值在于:精准操控二维数组:避免普通指针的步长计算错误,逻辑更清晰;高效传递二维数组参数:明确数组列数,编译器能精准优化;管理连续动态内存:实现高效的 “伪二维数组”,兼顾灵活性与性能。掌握数组指针的关键,是记住三个核心点:语法口诀:(*p)[N],括号定指针,N定数组长度;核心差异:与指针数组的区别看 “优先级”,数组指针是 “指针”,指针数组是 “数组”;应用场景:二维数组遍历、函数参数传递、连续动态内存操控。
2025-12-23 13:03:20
705
原创 二级指针:一级指针变量的内存地址
二级指针的本质是 “对指针的间接控制”,它的核心价值在于:实现 “修改一级指针指向” 的函数逻辑;简洁操作指针数组(如字符串数组);灵活创建动态二维数组(按需分配内存)。掌握二级指针的关键,是理清 “地址的嵌套关系”:一级指针:*p 访问数据;二级指针:*pp 访问一级指针,**pp 访问最终数据。二级指针就像 C 语言的 “高阶导航罗盘”,看似复杂,实则是解决指针间接控制、动态内存分配等问题的关键工具。只要避开类型不匹配、野指针、释放顺序错误等坑,就能用它写出更灵活、高效的代码。
2025-12-23 12:51:44
822
原创 const 指针:内存安全锁
在 C 语言的内存操作中,“误修改” 是最常见的踩坑根源 —— 比如不小心改写常量字符串、意外篡改函数传入的只读数据。而const与指针的组合,就像给内存加了一把 “智能安全锁”:既能保护关键数据不被意外修改,又能明确代码意图,让编译器帮你排查错误。很多初学者觉得const指针难,核心是没搞懂 “锁的对象是谁”—— 是指针指向的数据,还是指针本身?const 修饰谁,谁就不能被修改。下面我们用 “钥匙与房间” 的比喻,拆解三种最常见的 const 指针组合。
2025-12-23 12:40:30
541
原创 char 指针:字符串
char*指针的核心价值,在于它对内存的 “精准操控能力”—— 既能指向常量字符串(只读),也能管理动态内存(灵活),还能操作数组(便捷)。但权力越大责任越大,使用时必须牢记三点:指针必须指向 “合法内存”(要么是常量区、栈区,要么是 malloc 申请的堆区);动态内存 “申请了就必须释放”,且只能释放一次;避免越界访问,不操作野指针。掌握了char*,你就掌握了 C 语言操作字符串和内存的核心技巧 —— 它就像一把锋利的手术刀,用得好能精准解决问题,用不好就会 “伤己伤人”。
2025-12-23 11:15:20
754
linux下多线程服务器编程
2022-07-28
Qt写的支持多个客户端连接的服务器
2022-07-20
飞腾上银河麒麟编译qt5.9.8,使用aarch64-linux-gnu-g++,可以在飞腾直接编译,也可交叉编译
2022-07-15
Qt自定义弹窗,可阻塞,可以点击确定和取消并且两个按键可以做不同操作,界面可根据需求修改
2022-06-17
Qt在linux和windows通过QStorageInfo类来获取某个特定磁盘信息,包括大小
2022-06-13
pjsip库的头文件文件夹
2022-04-20
嵌入式linux搭建nfs服务器必备的两个工具:nfs-utils,portmap,以及S60nfs文件
2023-05-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅