- 博客(189)
- 收藏
- 关注
原创 Linux驱动之平台总线
/ 平台设备节点:描述 GPIO LED 的资源(GPIO 引脚、设备名)// 兼容属性(用于驱动匹配,替代 name 匹配)// GPIO 资源:gpio1 组的第 2 引脚,高电平点亮// 设备使能("disabled" 表示禁用)说明compatible属性用于驱动匹配(替代传统的名称匹配),驱动侧需通过声明支持的compatible值。
2025-10-09 16:42:29
1034
原创 Linux字符和杂项设备驱动
/ 字符设备核心结构体(管理设备号、操作集合)// 设备号(主+次)// 设备类(用于自动创建设备节点)// 设备实例(用于自动创建设备节点)// 硬件模拟数据(如LED状态、串口接收缓存)// 模拟LED状态:0=熄灭,1=点亮(实际场景需替换为GPIO控制)// 数据缓冲区:用于用户层与内核层的数据交互初始化.minor = MISC_DYNAMIC_MINOR, // 动态分配次设备号(避免冲突)
2025-10-09 11:48:11
758
原创 STM32之RTOS移植和使用
1. RT-Thread概述1. RT-Thread概述RT - Thread(Real - Time - Thread)是一个开源、成熟、可商用的嵌入式实时操作系统。它由中国开源社区主导开发,并得到了来自全球开发者的贡献。RT - Thread 不仅仅是一个实时内核,它也是一个完整的组件平台,包含了文件系统、网络框架、设备框架等,适用于各种资源受限的微控制器(MCU)和物联网(IoT)应用。RT - Thread 官网。
2025-09-13 16:50:24
1292
原创 STM32之wifi模块与MQTT模块详解
广泛用于物联网设备联网通信的传输协议,基于 TCP/IP 实现MQTT 区分客户端和服务器,本地 STM32 + ESP8266 + MQTT 支持,可以认为是 MQTT 的客户端,同时云平台 (ThingsCloud Onenet Aliyun) 物联网平台可以认为是 MQTT 服务器。MQTT 协议中,重点内容是【服务器连接】【订阅主题】【发布消息】服务器连接:当前 MQTT 客户端链接对应的 MQTT 服务器。
2025-09-10 08:55:33
972
原创 STM32之RS485与ModBus详解
连接与传输:基于硬件有线连接的数据传输方式,属串行(串行)通信,用于工业场景对比 RS232:RS232 电气稳定性差、易受干扰、传输距离短;RS485 稳定性好、传输距离远接线与连接:需 A、B 两根数据线,MCU 借差分线连 485 芯片保障数据稳定一致。
2025-09-09 22:57:08
1407
原创 STM32之IIC详解
IIC(Inter-Integrated Circuit)中文全称为集成电路总线,是由飞利浦公司(现恩智浦 NXP)在 1980 年代开发的一种简单、双向、二线制、同步串行通信总线。它主要用于连接同一块电路板上的各个集成电路(IC),让芯片之间能够以低速、短距离的方式进行通信,因其设计简洁、占用引脚少而被广泛应用。EEPROM(也常写作 E²PROM)是 “电可擦除可编程只读存储器”(Electrically-Erasable Programmable Read-Only Memory)的缩写。它是一种。
2025-08-29 16:43:44
1170
原创 STM32之通用定时器详解
PWM 核心参数频率:1 秒钟,PWM 输出波形的次数。需依据实际设备应用场景分析确定,不同场景对频率需求不同,如电机控制、LED 调光等场景,合适频率可保障功能稳定与效果。占空比:一个 PWM 周期内,高电平持续时间与整个 PWM 周期时间的比值,决定了有效电平在周期内的占比,影响输出能量、亮度等。实现依赖。
2025-08-27 12:41:47
1126
原创 STM32之Systick与基础定时器
SysTick 是 ARM Cortex - M 内核芯片内部设计的系统定时器。内置一个 24 位递减计数器,最大数值范围是 0x0 ~ 0xFFFFF。SysTick 响应速度很快,基本可以认为 SysTick 单次计数周期时间是当前 MCU 的 1 / 频率,例如 72MHz STM32F103,单次时间为 13.8888ns,从而提供标准的定时器时间标准。
2025-08-26 11:59:45
1232
原创 STM32之DMA详解
DMA 是 MCU 内部预先设计的 “数据管道”,不占用内存空间,专门用于快速搬运数据,让 CPU 从繁琐的数据传输中解放。
2025-08-25 16:45:02
763
原创 STM32之ADC详解
信号输入:外部 / 内部模拟信号经ADCx_IN或内部传感器进入,模拟多路开关选通通道。触发转换:规则 / 注入通道通过定时器、外部中断等触发,启动模拟至数字转换器工作。数据转换:逐次逼近法转换模拟电压为 12 位数字量,存入对应数据寄存器。结果处理:可触发中断通知 CPU 读取,或通过 DMA 传输数据;模拟看门狗实时监测,超限触发报警,实现从模拟信号采集到数字信号处理、异常响应的完整流程,支撑 STM32 对模拟量的精准采集与智能控制。五、举例讲解。
2025-08-22 16:51:26
1876
原创 STM32之中断详解
外部中断线一共有 EXTI0 ~ EXTI19。其中 EXTI0 ~ EXTI15 对应 GPIO 口,规则是 EXTI0 对应所有 GPIO 组中的 0 引脚,例如 PA0 ~ PGO。其他 EXTI16 ~ EXTI19 暂时不使用。3.2外部中断判断逻辑框图外部中断线通过上升沿触发选择寄存器下降沿触发选择寄存器决定当前中断的触发方式。需要根据电路分析,找到默认的电平情况下,选择合理的触发方式。3.3按键功能实现外部中断控制EXTI3.3.1按键原理图。
2025-08-22 09:12:36
1094
原创 STM32之MCU和GPIO
STM32 是意法半导体公司基于 ARMv7 Cortex - M 内核设计的 32 位 MCU 芯片。F 表示通用型号,还有 L、H、W、G 相关系列。103 表示增强型。F1xx 表明当前内核为 Cortex - M3 内核。ZET6 各部分含义:Z:表示引脚数为 144。E:表示闪存 Flash 为 512KB,属于大容量存储设备。T:表示封装标准为 LQFP 封装。6:表示工作温度限制在 - 40℃~85℃。二、 GPIO2.1 GPIO 概述。
2025-08-19 14:34:52
931
原创 C++面试题总结
在 C++ 中,模板的定义通常需要放在头文件中,而非源文件中。因为模板是在编译期根据使用的类型进行实例化的,若放在源文件中,其他源文件无法看到模板的完整定义,会导致链接错误。为例,在 64 位机中,类的大小计算需考虑成员变量的大小、内存对齐以及是否有虚函数(虚函数会带来虚函数表指针,占 8 字节)。2.当线程被notifiy_one或者notify_all唤醒,会立即重新获取锁,且wait的解锁、阻塞、唤醒、加锁是原子性的。是双向链表结构,被删除元素两边的元素的迭代器指针会自动更新,其他迭代器不受影响。
2025-08-18 14:58:25
768
原创 OpenHarmony定时器与点灯案例
定时器(Timer)是用于实现定时任务的组件,可在指定时间间隔后执行特定任务,支持一次性执行或周期性重复执行。智能设备的定时控制(如智能鱼缸定时喂食、灯光定时开关);周期性数据采集(如传感器定时上报数据);定时提醒(如耗材更换提醒、系统维护提示)。在 OpenHarmony 中,定时器的时间周期以 “系统嘀嗒(tick)” 为单位,1 个嘀嗒默认对应 10ms,因此定时参数需根据实际需求转换为嘀嗒数(如 500ms = 50 个嘀嗒)。
2025-08-13 11:52:29
1055
原创 OpenHarmony系统编程
互斥锁(Mutex)是一种同步机制,用于控制多个线程对共享资源的访问,确保同一时间只有一个线程能进入共享资源的临界区,从而避免线程间的资源竞争和数据冲突。C 语言系统编程与 OpenHarmony 中 Mutex 的使用流程一致定义并初始化互斥锁变量;在访问共享资源前,通过lock函数上锁(仅当前线程可进入临界区);线程处理完共享资源后,通过unlock函数解锁(释放锁,允许其他线程进入);销毁互斥锁对象,释放资源。P 操作(获取资源)
2025-08-13 11:33:56
856
原创 OpenHarmony概述与使用
HarmonyOS(鸿蒙系统 ):华为自主研发的商业闭源分布式操作系统,聚焦全场景智慧体验,通过 “硬件互助、资源共享”,实现手机、平板、智能穿戴、智慧屏等华为终端的无缝协同,为消费者与商业场景提供深度整合的操作系统能力。OpenHarmony(开源鸿蒙 ):由开放原子开源基金会(OpenAtom Foundation )孵化、运营的开源分布式操作系统,面向全行业开放生态。
2025-08-11 17:14:24
1470
原创 Linux应用开发相关面试题总结
方式 1:逐个赋值(最常用)# 定义数组(无需声明类型)# 输出数组元素(通过索引访问)echo ${arr[0]} # 输出:appleecho ${arr[1]} # 输出:banana方式 2:一次性赋值(简洁写法)# 用括号包裹所有元素,空格分隔# 等价于信号是软件中断,是软件层次上对中断机制的模拟。它可能导致一个正在运行的进程被另一个运行的异步进程中断,转而处理某一突发事件。
2025-08-07 11:32:02
905
原创 C语言相关面试题
野指针是指指向无效内存区域的指针,常见成因包括: 指针释放后未置空:使用释放动态分配的内存后,指针仍指向原地址(已回收),成为野指针。 指针操作超越变量作用域:指向局部变量的指针,在变量生命周期结束后(如函数返回),指针指向的内存已被释放。 2. 描述内存分区程序的内存分区可分为运行前和运行后两个阶段:程序运行前(静态分区):程序运行后(动态分区):内核空间(Kernel Space)栈区(Stack)内存映射区(Memory Mapping Segment,mma
2025-08-07 11:10:24
1440
原创 C++、STL面试题总结(三)
函数模板和普通函数同时存在时,C++ 编译器的调用规则遵循 “优先普通函数 → 模板精准匹配 → 模板重载” 的逻辑,确保调用符合开发者意图。原理:普通函数是开发者显式定义的 “定制逻辑”,编译器默认认为这是更贴合需求的实现,因此优先匹配普通函数,即便函数模板能生成完全匹配的实例。示例验证:关键:若普通函数和模板函数都能匹配,编译器无条件优先选择普通函数。若想强制调用模板函数,需用空模板实参列表。语法:调用时显式添加 ,如 ,告诉编译器 “跳过普通函数,仅从模板中匹配”。示例验证:适用场景
2025-08-06 18:06:36
907
原创 C++、STL面试题总结(二)
当类包含 ** 引用成员(需重新绑定)或引用成员绑定到新的有效对象(或值)。指针成员重新分配堆内存(深拷贝)。2. 对explicit关键字的理解父类的同名成员变量仍被继承到子类,但子类的同名成员会 “隐藏” 父类成员(默认访问子类成员)。public:public:// 子类同名成员,隐藏父类的 moneySon son;// 访问子类的 money(输出50)// 显式访问父类的 money(输出100)return 0;若子类函数与父类函数同名但参数不同。
2025-08-06 17:55:59
1613
原创 电路基础相关知识
定义:电阻是导体对电流的阻碍作用,用符号 R 表示,单位是欧姆(Ω)。作用:限制电流大小。分压(将电压分配到不同电路部分)。发热(如电热器利用电阻发热)。实际应用分压电路(如电位器调节电压)。限流保护(如 LED 串联电阻)。信号匹配(如阻抗匹配)。电容(Capacitance)是指在给定电位差下的电荷储藏量,记为 C。它表征了电容器容纳电荷的本领,从物理意义上来说,电容反映了导体或导体组储存电能的能力电容的国际单位是法拉,简称法,符号是 F。
2025-08-05 17:57:39
1859
原创 网络编程之原始套接字
原始套接字(Raw Socket)是一种套接字类型,它允许用户绕过传输层(如 TCP、UDP)的常规处理,直接与网络层(IP 层)甚至链路层进行交互。在操作系统提供的套接字编程接口中,除了常见的流式套接字(,用于 TCP 协议)和数据报套接字(SOCK_DGRAM,用于 UDP 协议)外,原始套接字以SOCK_RAW标识。特殊应用层协议实现:某些特定的应用场景需要使用自定义的应用层协议,而原始套接字可以提供最灵活的方式来实现这些协议。
2025-08-02 11:32:32
1030
原创 TCP相关讲解以及代码示例
一、TCP一、TCPTCP(Transmission Control Protocol,传输控制协议)是一种面向连接、可靠的、基于字节流的传输层通信协议,位于 OSI 模型的第四层(传输层),与 IP 协议(网际协议)共同构成了 TCP/IP 协议族的核心,因此常被合称为 “TCP/IP”。
2025-08-02 11:00:25
1248
原创 网络编程概述与UDP编程
在现代软件开发与系统交互场景里,基于Socket直播场景:主播端通过 Socket 建立的网络连接,将音视频流以数据包形式,依托 TCP 或 UDP 协议(依据场景选择,如低延迟需求可能用 UDP 结合纠错策略 ),实时传输到平台服务器,再由服务器通过多进程通信分发给百万级观众端,实现直播内容的跨地域传播。文件发送与资源下载:发送端把文件拆分为网络数据包,借由 TCP 可靠传输(保障文件完整性 ),按序发送给接收端;
2025-07-28 17:44:45
1186
原创 MQTT的原理
可变报头是 MQTT 控制报文的中间组成部分,位于固定报头和负载之间,其内容会根据报文类型动态变化 ,核心作用是为特定类型的报文补充关键元信息,像报文标识符(Packet Identifier)就是可变报头里高频出现的重要字段。有效载荷是报文里实际承载业务数据的部分,位于可变报头之后(若有可变报头),部分 MQTT 控制报文会包含它,用于传输像应用消息内容、订阅主题列表这类关键信息。
2025-07-28 17:19:23
1026
原创 线程 -Thread
每个进程(Process)由线程(Thread)组成,进程可利用多线程模式,同时执行多个任务操作,像微信聊天、软件多功能实现。线程使用的相关资源由进程提供,线程不会自主申请系统资源。多线程操作能增强软件能力,满足软件多任务操作,但进程中线程过多,会致资源剧增、程序卡顿。项目中使用多线程的场景文件管理,涉及到锁与写操作,可用单一线程完成。网络连接。IPC 进程间通讯,共享内存、消息队列、管道。硬件多线程控制,如舵机、电机、摄像头、无线通信。
2025-07-23 17:50:32
1281
原创 RT_thread的工作原理及应用
硬件设计与芯片手册推荐:ST 官方针对 STM32F103 系列,在参考手册、开发指南里,会给出基于其内部 PLL(锁相环 )、晶振(一般外接 8MHz 无源晶振 )的时钟配置方案,通过合理设置 PLL 倍频、分频系数,能稳定输出 72MHz 系统时钟,这是经过验证、兼容性和稳定性较好的配置。外设兼容性平衡:72MHz 的系统时钟,能较好适配 STM32F103 大部分外设需求。
2025-07-23 17:30:42
1330
原创 IPC-共享内存
共享内存无内置数据类型,进程间需提前约定 “协议”(如结构体格式、数组长度)。(查询状态、修改权限、销毁内存等),是共享内存生命周期管理的核心函数。共享内存是最快的 IPC 方式,但因多个进程可直接读写,共享内存的核心操作依赖以下函数,需包含头文件。创建新共享内存,或获取已存在的共享内存,返回。,让多个进程直接映射到自己的地址空间,实现。断开当前进程与共享内存的映射关系(,返回可直接操作的内存指针。共享内存是 Linux 中。擦除旧数据),使用后需。IPC - 共享内存。IPC - 共享内存。
2025-07-22 17:49:58
821
原创 IPC-消息队列
消息队列(Message Queue, MQ)是 Linux 中。消息队列的核心操作依赖以下函数,需包含头文件。并接收数据包,支持阻塞 / 非阻塞模式。的进程间通信(IPC)方式,核心用于。,用于标识消息队列、共享内存等资源。),其余字段自定义(建议用。消息队列的数据包需遵循。
2025-07-22 17:41:51
542
原创 IPC-管道
管道是 Linux 进程间通信(IPC, Inter Process Communication)的核心方式之一,用于实现。:父进程创建无名管道,fork 子进程后,子进程向管道写数据,父进程读数据。有名管道(FIFO, First In First Out)是一种。实现父子进程双向交互,解决 “读写顺序依赖。,本质是基于内核的 “内存文件”。一、IPC - 管道(无名管道)一、IPC - 管道(无名管道)数组,存储管道的读、写描述符。(FIFO),用于进程间通信。:在当前目录创建一个名为。
2025-07-22 17:30:21
1143
原创 IPC-信号
信号是基于Unix内核基础,在Linux内核中,提供个一种进程中,完成通知事件通知消息的一种方式-->信号,类似于,摔杯为号。A进程发送了一个信号,通过内核调度,将信号给予B进程,B进程需要进行响应。在系统编程中,信号是依托【软件层】技术实现,后续在硬件课程中,可以称之为【中断】
2025-07-19 17:58:57
883
原创 RT-Thread的概念和移植
操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。 操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器
2025-07-19 16:31:30
1565
原创 Process 进程
场景_exit(系统调用)exit(C 标准库)缓冲区刷新不刷新(残留数据丢失)自动刷新(确保输出完整 )atexit回调执行不执行执行(按注册逆序调用 )适用场景需快速终止、无需清理(如守护进程 )需正常退出、确保资源释放(如业务程序 )7.vfork函数特性vfork行为内存机制共享父进程内存(而非拷贝),子进程修改会影响父进程。执行顺序子进程优先执行,父进程阻塞等待子进程退出或显式释放控制权。退出要求子进程必须显式调用exit_exitreturn。
2025-07-18 12:00:07
766
原创 Linux内核task_struct中的fs_struct和files_struct理解
以下为该结构体的定义: 逐个变量讲解: 其中,path的具体定义如下: pwd中的dentry是当前进程的工作目录,而vfsmount则是该目录所在的文件系统的挂载点信息。 而root保存的是进程的根目录以及根目录对应的挂载点。 以下为该结构体的定义: 逐个讲解变量:也就是说: 小 FD 优化: 当 FD 数量 ≤ 64 时,直接使用 内嵌的静态数组 ,FD 编号即数组索引。动态扩展: 当 FD 数量超过 64 时,内核分配 结构体(含动态数组),
2025-07-18 10:46:03
777
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅