自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木下~learning的博客

对电子信息行业感兴趣,努力学习嵌入式软件知识 ing~~!日常分享学习过程总结,有哪里不对的请读者帮忙指正,感谢!!助力他人解决问题的同时也能回忆、巩固自己的知识点哦!

  • 博客(31)
  • 收藏
  • 关注

原创 Linux 驱动:RK3399 从零手写 GT911 电容触摸屏驱动(完整可运行)

本文详细介绍了在RK3399开发板上从零实现GT911电容触摸屏驱动的全过程。文章首先讲解了硬件连接和开发环境准备,重点强调了禁用内核自带驱动的重要性。核心部分包括GT911的上电复位时序、寄存器操作原理,以及完整的I2C通信封装实现。通过分步解析驱动框架、中断处理、坐标上报等关键代码,提供了可直接使用的完整驱动实现方案。文中还包含设备树配置、编译测试方法,以及常见问题的排查指南。该驱动支持5点触摸,基于标准Linux接口,只需修改GPIO和分辨率参数即可适配其他ARM平台。

2026-04-14 00:18:12 1267

原创 嵌入式Linux 小项目:RK3399 基于 MPlayer 实现视频播放器(从环境搭建到完整播放列表)

在嵌入式 Linux 开发中,音视频播放是非常常见的需求,比如广告机、工业触摸屏、智能家居中控等场景。MPlayer 作为一款轻量级、开源、跨平台的多媒体播放器,对硬件资源要求低,支持几乎所有主流音视频格式,是嵌入式平台的首选方案。本文基于 RK3399 开发板(NanoPC-T4/SOM-RK3399 通用),从零环境搭建开始,一步步讲解 MPlayer 的基础使用、核心 Slave 模式编程控制,最终实现一个支持自动扫描视频、播放列表、上一首 / 下一首、音量调节、进度跳转。

2026-04-13 17:02:09 1049

原创 嵌入式开发必备:数据结构与算法从入门到实战(C 语言全实现)

嵌入式开发中数据结构与算法至关重要,文章针对MCU资源受限、实时性要求高等痛点,详细讲解了4种常用线性数据结构(动态数组、单链表、栈、循环队列)和2种查找、2种排序算法的C语言实现。通过对比数组与链表的适用场景,提供嵌入式开发选型建议,并列举串口缓存、传感器滤波等典型应用场景。所有代码可直接应用于STM32、Linux嵌入式项目,帮助开发者提升数据处理效率和系统稳定性。

2026-04-09 17:26:30 711

原创 Linux I2C 子系统从原理到实战:手把手实现设备与驱动分离式开发

本文介绍了Linux I2C子系统的开发原理与实战实现。I2C子系统采用三层架构(核心层、适配器层、设备层)实现硬件隔离与驱动解耦,使开发者无需关心底层时序细节。文章详细解析了i2c_client、i2c_adapter等核心结构体,并提供了完整的设备注册(i2c_dev.c)和驱动开发(i2c_drv.c)代码示例,支持设备树和传统id_table两种匹配方式。同时总结了常见错误排查方法,如地址获取错误、匹配表格式错误等。最后通过模块加载验证了设备与驱动的成功匹配,为后续扩展I2C外设驱动开发奠定了基础。

2026-04-09 17:13:48 832

原创 MySQL 从入门到精通:安装、终端操作、远程连接与 C 语言 API 全教程

本文是一篇MySQL全栈入门实战教程,涵盖从基础概念到实际开发的完整流程。主要内容包括: 数据库基础概念解析,包括数据库、表、字段等核心概念 Ubuntu环境下MySQL安装配置全流程 MySQL终端操作指南,包括用户管理、数据库操作、表操作等 表的增删改查完整示例 局域网远程连接MySQL的配置方法 C语言API开发详解,包含核心函数说明和完整示例代码 教程适用于零基础学习者,所有命令和代码均经过实测验证,可直接复用。内容从基础到进阶,覆盖MySQL管理的各个方面,特别适合嵌入式开发、后端开发等需要快速上

2026-04-08 20:02:07 659

原创 零基础Git入门:Linux+Gitee实战指南

本文是一篇Git零基础入门教程,面向Linux环境开发者,详细讲解Git的核心原理和完整使用流程。文章首先介绍Git的三大核心价值:多人协作开发、版本回溯管理、多端安全存储。然后分步骤指导环境搭建,包括Gitee远程仓库创建、Git工具安装、SSH密钥配置等。核心部分系统讲解Git工作流程和常用命令:从仓库初始化(git init)、文件跟踪(git add)、版本提交(git commit),到版本查看(git log)、回退(git reset)、远程同步(git push/pull)等。特别针对团队协

2026-04-07 19:40:46 781

原创 初学Linux之设备树的使用| RK3399上实操

本文介绍了Linux设备树(Device Tree)在驱动开发中的应用。设备树通过独立于内核代码的.dts文件描述硬件资源,解决了传统平台总线开发中硬件修改需重新编译内核、板级代码冗余的问题。文章详细讲解了设备树的核心概念、语法规范及节点编写方法,重点分析了平台总线的设备树匹配规则,并通过按键驱动改造案例展示了设备树适配的具体实现步骤。最后总结了设备树开发常见问题及解决方法,强调设备树实现了驱动代码与硬件描述的完全解耦,是当前Linux驱动开发的主流标准。该技术显著提升了驱动的可移植性,使同一驱动可适配多款

2026-03-31 23:48:03 1120

原创 初学Linux 平台总线驱动模型 | 非设备树匹配方式 | RK3399

本文介绍了Linux平台总线驱动模型,该模型通过设备与驱动解耦解决传统字符设备驱动开发中的软硬件耦合和代码复用问题。平台总线作为虚拟总线,管理没有专用物理总线的外设,核心思想是将硬件资源描述与驱动逻辑分离。文章详细解析了平台总线的三大核心实体(总线、设备、驱动)及其匹配规则,并提供了一个完整的按键驱动实现示例,包括设备端描述硬件资源和驱动端实现中断处理逻辑。代码经过健壮性修复,可直接编译运行。文章还总结了开发中常见的陷阱及解决方案,最后建议拓展学习设备树匹配方式以应用于企业级开发。

2026-03-30 19:32:27 479

原创 对于Linux中等待队列和工作队列的讲解和使用|RK3399

本文深入解析了Linux驱动开发中的等待队列和工作队列两大核心机制。等待队列用于实现进程的条件等待和阻塞IO,通过休眠-唤醒机制避免CPU资源浪费;工作队列则作为中断底半部实现方案,将耗时操作推迟到内核线程执行。文章详细介绍了二者的数据结构、工作原理、API接口及典型应用场景,并以按键驱动为例展示了它们的组合使用方法。等待队列解决进程同步问题,工作队列处理中断延迟任务,二者协同工作可构建高效可靠的Linux设备驱动。

2026-03-28 09:54:43 1017

原创 如何给虚拟机扩容

摘要:本文介绍了虚拟机磁盘扩容的操作步骤。首先需要删除快照并关闭虚拟机,然后在设置中查看原始磁盘状态。通过终端使用fdisk工具删除原有分区(d命令),创建新分区并保存设置。最后使用resize2fs命令调整文件系统大小并重启磁盘。整个过程包括分区删除、重建和文件系统扩展等关键操作。

2026-03-24 14:21:21 289

原创 STM32中DMA使用|STM32F407实操

STM32 DMA技术摘要 DMA(直接存储器访问)是STM32内置的硬件数据搬运控制器,可独立完成外设与存储器之间的数据传输,无需CPU全程干预。STM32F407系列包含2个DMA控制器(DMA1/DMA2),每个控制器有8个数据流,支持灵活的外设匹配。 DMA核心功能包括:数据流/通道选择、优先级仲裁、三种传输方向(外设↔存储器、存储器↔存储器)、数据宽度配置、地址递增、循环模式、FIFO/直接模式选择等。典型应用场景包括串口通信、ADC采集、存储器数据搬运等。 配置流程包括:开启时钟→关闭数据流→配

2026-03-19 20:02:26 1411

原创 shell脚本语言知识点总结

本文摘要: Shell脚本是运行在Linux终端的脚本语言,由命令集合组成,无需编译即可执行。核心特性包括弱类型变量、直接调用终端命令、实现操作自动化。脚本编写需遵循解释器声明、权限设置等规范。文章详细介绍了Shell语法要点:变量定义与使用(包括自定义变量、位置变量)、算术运算、输入输出命令、条件测试(字符串、整数、文件)、逻辑运算、流程控制结构(if/case选择、for/while循环)以及流控制语句。重点讲解了变量赋值规则、test命令的返回值机制、循环结构的实现方式等核心知识点,为Linux系统管

2026-03-18 19:40:18 703

原创 C语言和嵌入式开发中对于指针的学习应用

本文系统讲解了C语言指针的核心概念与高级用法。首先解析指针三要素(变量名、自身类型、指向类型)和关键符号(&、*),重点说明指针移位规则。然后详细阐述指针与数组的结合(一维/二维数组访问)、指针数组与数组指针的区别。接着介绍const修饰指针的三种权限控制、指针与函数的结合(地址传递/指针函数/函数指针)。最后深入讲解二级指针、指针强转与内存操作、结构体指针等高级用法,并总结常见指针陷阱与规避方法。全文通过丰富代码示例,帮助读者全面掌握指针这一C语言核心特性。

2026-03-18 00:16:28 695

原创 Linux网络编程练习:网络聊天室设计

本文介绍了一个基于TCP Socket和select多路复用技术实现的聊天室系统。该系统采用客户端-服务器架构,使用单向链表管理在线用户信息,支持群聊、私聊、用户上下线通知等功能。服务器端通过select实现单线程处理多客户端连接,客户端同样使用select同时处理用户输入和服务器消息。系统包含完整的工程结构,采用自定义消息协议,实现了用户登录校验、消息类型区分、异常处理等机制。编译运行后,用户可通过命令行界面进行实时聊天,支持查看在线用户列表和发送私聊消息。该系统充分体现了TCP可靠通信和select多路

2026-03-13 18:00:55 460

原创 木下~Linux系统编程之网络通信|UDP

摘要:UDP协议是传输层无连接协议,具有高效低延时特性,适用于实时性要求高且可容忍少量丢包的场景。其通信核心是sendto和recvfrom函数,无需建立连接,通过IP地址、端口号和协议族定位通信对端。服务端需先启动并绑定地址,客户端主动发送数据建立通信通道。开发时需注意套接字类型必须为SOCK_DGRAM,正确处理字节序转换,recvfrom的addrlen参数需使用指针。文中提供了完整的服务端和客户端C语言实现模板,包含地址绑定、数据收发等关键流程,并指出常见错误规避方法。

2026-03-12 00:08:01 566

原创 木下~Linux系统编程之网络通信|TCP

本文系统介绍了网络通信的基础知识和Socket编程实现。主要内容包括:1.网络参考模型:对比OSI七层模型和TCP/IP四层模型,说明各层功能;2.核心概念:IP地址分类、端口号作用及字节序转换;3.传输层协议:详细对比TCP(可靠连接)和UDP(无连接)的特性差异;4.Socket编程:阐述套接字三要素(IP+协议+端口),提供Linux环境下完整的TCP通信实现代码,包含服务端(创建-绑定-监听-接收)和客户端(连接-通信)流程,并演示了父子进程和线程实现双向通信的方法。文章为网络编程提供了从理论到实践

2026-03-11 23:58:51 998

原创 FreeRTOS事件组与任务通知源码详解

FreeRTOS提供了事件组和任务通知两种任务通信机制。事件组采用广播模式,支持32位事件标志,通过位操作实现多任务同步,适合"与/或"条件等待场景。任务通知则是高效的点对点通信,直接利用TCB存储空间,提供五种通知方式(设置位、递增、覆写等),具有零内存分配和极低开销优势。源码分析显示,事件组通过EventGroup_t结构体管理事件位和等待链表,任务通知则通过TCB中的通知字段实现。选择时需考虑通信模式、性能需求和场景复杂度:广播/多条件用事件组,高性能点对点用任务通知。两种机制均通

2026-03-11 00:01:53 801

原创 FreeRTOS优先级继承机制详解

本文探讨了FreeRTOS实时操作系统中的优先级继承机制。当多个任务共享资源时,使用二值信号量可能导致优先级翻转问题,即高优先级任务因等待低优先级任务释放资源而被中优先级任务抢占。优先级继承机制通过临时提升持有互斥量的低优先级任务优先级来解决这一问题,确保高优先级任务尽快执行。文章详细分析了同步与互斥概念、信号量与互斥量的区别,并通过代码示例展示了使用二值信号量时的优先级翻转现象和使用互斥量时的优先级继承效果。最后给出使用建议:保护临界资源应使用互斥量,任务间同步则使用信号量。

2026-03-10 23:15:35 741

原创 木下~Linux系统编程笔记之线程

本文摘要:Linux多线程编程基础及核心控制函数。主要内容包括:1)进程与线程概念区分,线程共享进程资源但拥有独立栈区;2)线程分类及Linux实现方式,需链接pthread库;3)线程核心操作函数:创建(pthread_create)、退出(pthread_exit)、等待(pthread_join)、分离(pthread_detach)和取消(pthread_cancel);4)互斥锁机制解决共享资源竞争问题,包含初始化、加锁、解锁和销毁等操作流程。重点强调线程安全注意事项,如避免死锁、确保锁的全局可见

2026-03-10 19:20:40 580

原创 木下~Linux系统编程之静态库与动态库

本文系统介绍了Linux环境下库文件的开发与应用。重点解析了静态库(.a)与动态库(.so)的本质区别:静态库在编译时嵌入程序,动态库在运行时加载。详细说明了两种库的制作流程:静态库通过ar工具打包.o文件,动态库使用gcc的-shared参数生成。使用方式上,静态库需注意链接顺序,动态库必须部署到系统路径。对比维度显示,静态库移植性强但体积大,动态库节省内存便于升级。文章还列出了关键的gcc编译参数,包括-I(头文件路径)、-L(库路径)、-l(链接库名)等,为开发者提供了全面的库开发指南。

2026-03-09 19:56:17 451

原创 木下~Linux系统编程笔记之信号量集

摘要:信号量是System V IPC机制,用于进程同步和临界资源互斥访问。其核心是一个非负整数计数器,通过PV原子操作实现资源管理:P操作申请资源(减1),V操作释放资源(加1)。Linux提供semget创建信号量集、semctl控制信号量值、semop执行PV操作等API。示例展示了5个进程通过二元信号量(初始值1)实现文件互斥写入,确保同一时间只有一个进程访问临界资源。使用后需删除信号量集避免内核残留。

2026-03-09 19:28:28 573

原创 木下~RFID射频识别的原理及MFRC522读写器的驱动

本文详细介绍了RFID技术原理及基于STM32和MFRC522模块的开发实现。主要内容包括:1)RFID系统组成(阅读器、电子标签和应用系统)及13.56MHz高频M1 S50卡的特性(1KB存储、16扇区结构);2)MFRC522读写器的SPI通信接口配置与核心引脚定义;3)ISO14443A标准通信流程(寻卡、防冲突、选卡、认证、读写);4)关键库函数实现(复位、寻卡、防冲突、选卡、密码验证、读写数据);5)STM32硬件初始化及读写卡片的完整代码实现。文中特别强调了扇区密码验证、块地址计算等开发注意事

2026-03-08 16:50:52 712

原创 木下~CY8CMBR3116 电容触摸按键的原理及驱动

本文介绍了CY8CMBR3116电容按键芯片的应用开发。该芯片支持2-16个触摸按键检测,通过I2C接口(地址0x37)与主控通信。文章详细说明了芯片的寄存器配置,包括按键使能(SENSOR_EN)、防误触(FSS_EN)等关键寄存器。同时提供了完整的I2C底层驱动实现,包括起始/停止信号、字节收发、应答处理等基本操作。驱动程序实现了寄存器读写、配置校验、按键状态读取等功能,并封装了按键扫描函数CY8CMBR3116_key_scan()来获取键值。开发中需要注意配置CRC校验、非易失存储保存等关键操作

2026-03-08 16:17:42 427

原创 木下~Linux系统编程笔记之信号

本文概述了Linux系统中的信号机制。信号是进程间的异步通信方式,分为不可靠信号(1-31)和可靠信号(34-64),其中SIGKILL(9)和SIGSTOP(19)不可被忽略或修改处理方式。信号来源包括硬件(如键盘快捷键)和软件(如kill命令)。进程可对信号采取默认处理、忽略或自定义捕获三种方式。文章还介绍了信号通信流程的四个阶段(产生、注册、注销、处理)及核心API函数:kill()发送信号、alarm()定时发送SIGALRM、pause()阻塞等待信号、signal()设置信号处理方式。这些机制共

2026-03-07 10:00:00 592

原创 木下~Linux系统编程之SystemV IPC

本文详细介绍了Linux系统下的SystemVIPC进程通信机制,重点讲解了共享内存和消息队列两种核心组件。共享内存通过直接映射物理内存实现高效通信,但需要额外同步机制;消息队列则提供结构化消息传递和内置同步功能。文章系统阐述了两种通信方式的核心特性、API接口和使用流程,并提供了多个实用代码示例,包括简单收发、多终端聊天等场景。同时强调了SystemVIPC对象生命周期随内核的重要特性,以及使用过程中的常见注意事项,如共享内存延迟删除、消息队列类型限制等,为开发者提供了全面的技术参考和实践指导。

2026-03-07 10:00:00 1016

原创 木下~通信协议学习笔记之CAN总线|从解析到STM32实操

本文是一篇面向初学者的CAN总线学习笔记,详细介绍了CAN总线的基础知识和STM32开发实践。首先解释了CAN总线的基本概念、两种国际标准(ISO-11898高速CAN和ISO-11519低速CAN)及其应用场景。重点讲解了CAN总线的6大核心特点,包括多主控制、错误处理能力和非破坏性仲裁等。文章深入解析了CAN总线的物理层电平逻辑、数据帧结构、总线仲裁机制和位时序原理。最后提供了STM32 bxCAN模块的完整开发流程,包括初始化配置、数据收发函数实现和常见问题排查方法。全文采用通俗易懂的语言配合实际代码

2026-03-06 00:02:47 698

原创 木下~通信协议学习笔记之modbus&RS485|从解析到STM32实操

本文系统介绍了RS485通信和Modbus协议的技术要点及STM32实现方案。主要内容包括:1)通信层级划分:物理层(RS485差分传输)、数据链路层(串口UART帧格式)和应用层(Modbus协议);2)RS485核心特性:差分传输、SP3485收发芯片控制及EN引脚切换注意事项;3)Modbus协议详解:4种数据模型、常用功能码、RTU帧格式及03功能码请求/响应流程;4)STM32主从机实现方案:包含帧构建、CRC校验、超时检测等关键代码;5)常见问题排查指南。文章提供了完整的通信协议栈实现方案和实用

2026-03-06 00:00:27 969

原创 木下~Linux系统编程笔记之基础shell命令+Vim编辑器

本文整理了Linux常用命令和Vim编辑器核心操作速查指南。Linux部分涵盖基础命令、目录操作、文件管理、压缩解压、用户权限、GCC编译等实用内容,重点介绍了命令格式、常用参数和典型应用场景。Vim部分详细解析了四种模式切换方式、光标移动、文本编辑、查找替换等高频操作技巧,并提供了.vimrc配置模板和多行注释等批量操作方法。全文采用速查表形式组织,突出命令核心用法和关键参数,适合作为Linux/Vim日常使用的快速参考手册,帮助开发者提高命令行工作效率。

2026-03-05 00:14:42 669

原创 木下~Linux 系统编程笔记之文件 IO 与标准 IO

本文摘要: 文件IO与标准IO操作指南对比了Linux系统调用级IO和C标准库IO的核心特性。文件IO(低级IO)使用文件描述符,无缓冲区,适用于所有文件类型但效率较低;标准IO(高级IO)使用流指针,具有缓冲区机制,效率更高但仅适用于普通文件。文章详细介绍了两种IO的操作流程、核心API及注意事项,包括文件打开/关闭、读写操作、光标控制等关键函数,并重点分析了缓冲区机制差异和使用场景选择建议。最后通过对比表格总结了两种IO在本质、效率、适用范围等方面的核心区别。

2026-03-05 00:00:31 508

原创 木下~Linux 系统编程笔记之管道核心知识点

本文摘要: Linux系统提供了多种进程间通信(IPC)机制,主要包括: 无名管道(Pipe):仅限亲缘进程间通信,半双工,使用read/write操作内核缓冲区 命名管道(FIFO):通过文件系统节点实现任意进程通信,需mkfifo创建 标准流管道:封装管道创建与进程替换,通过popen/pclose和标准IO操作 其他IPC方式:消息队列、共享内存、信号量集等 关键区别: 无名管道无文件节点,命名管道有 标准流管道自动处理进程创建和重定向 管道都是半双工通信,遵循FIFO队列 这些IPC机制为Linux

2026-03-04 23:34:11 647

原创 木下~Linux系统编程笔记之进程

摘要:本文系统介绍了Linux进程管理的核心知识。主要内容包括:进程的定义与五大特性(动态性、并发性、独立性、异步性、结构性)、进程三种状态及其转换规则、进程管理命令(ps/kill)、关键概念(父子进程/僵尸进程等)以及进程控制函数(fork/exec/wait等)。重点阐述了进程创建、执行、终止的全生命周期管理,特别强调了僵尸进程的产生原因及解决方案。

2026-03-03 23:20:34 789

1_1_C语言考试题库及答案.doc

1_1_C语言考试题库及答案.doc

2023-04-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除