- 博客(1070)
- 资源 (17)
- 收藏
- 关注
原创 Linux通信IPC随笔
名字: HLS大神 QQ:331908961**功能:Linux内核间任意通信实现**#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <unistd.h>#include <string.h>#include <stdio.h>typedef struct MSG
2021-03-26 11:28:26
821
3
原创 嵌入式linux驱动模块编译方法
本文介绍了Linux内核驱动的编译与使用方法。主要内容包括:1)两种驱动编译方式(编译进内核或作为模块);2)以"Hello World"为例说明驱动开发流程,包含Makefile配置和模块加载命令;3)驱动基本框架的三大核心(加载/卸载函数、许可证声明)和可选组件(模块参数、导出符号等);4)实际操作步骤,包括交叉编译环境设置和驱动加载演示。文章通过简单示例阐述了Linux驱动开发的基础知识,为底层系统开发提供了入门指导。
2025-12-10 16:29:59
85
原创 嵌入式linux驱动系统调用过程分析
本文介绍了Linux系统调用的实现方法。首先说明系统调用是用户程序与内核交互的接口,然后详细讲解了添加自定义系统调用的步骤:在内核代码中添加服务函数并定义系统调用号,在用户程序中通过syscall()验证调用。文章还以getpid()为例分析了系统调用流程,包括用户态到内核态的切换、系统调用号的传递及服务例程的执行过程。通过具体代码示例展示了从用户空间触发系统调用到内核处理的完整路径。
2025-12-10 11:20:24
138
原创 嵌入式linux驱动开发控制实现
本文介绍了Linux驱动开发的基本框架,以一个简单的"helloworld"驱动为例,讲解了驱动程序的必要组成部分,包括模块加载/卸载函数、许可证声明等核心要素,以及可选参数、导出符号和作者信息。通过实验演示了从代码编写、Makefile配置到编译运行的全过程,为初学者提供了Linux驱动开发的入门指南。
2025-12-09 16:54:50
222
原创 嵌入式linux中静态库和动态库实现详解
本文介绍了Linux下静态库和动态库的区别与制作方法。静态库在编译时链接到目标代码,运行时不再需要,生成文件较大(.a后缀);动态库在运行时载入,生成文件较小(.so后缀)。制作静态库包括编译源码为.o文件、使用ar命令创建库文件;动态库制作则使用gcc命令,需通过-l指定库名、-L指定查找路径。文章还提供了具体实验步骤,包括创建mylib.c文件、编写测试代码test.c等操作示例,演示了两种库的实际制作过程。
2025-12-08 17:35:22
32
原创 嵌入式linux中目录控制与实现方法
本文介绍了目录I/O操作的基本函数,包括mkdir()创建目录、opendir()/closedir()打开和关闭目录流、readdir()读取目录内容。重点讲解了各函数的参数定义、返回值及使用场景,并通过实验代码演示具体实现。与文件I/O相比,目录I/O主要针对目录操作而非文件,是Linux系统编程中的重要组成部分。文章以简明的方式呈现了目录操作的核心API,为开发者提供了实用参考。
2025-12-08 10:57:43
134
原创 嵌入式linux中Makefile高级用法
格式:$(wildcard PATTENR)功能: 展开指定的目录举例:在 /home/topeet/test 目录有一个 a.c的c文件和一个 test 的文件夹,在/home/topeet/test/test 文件夹下有一个 b.c的文件。我们在当前目录下创建的 makefile 里面写下如下代码,echo 前面加了@ 符号,echo 这个命令就不显示:我们得到了 ./a.c和 ./test/b.c,所以 wildcard 函数会把我们指定的 ./和 ./test/ 目录下的c文件展开。格式:(notd
2025-12-02 17:40:51
33
原创 嵌入式linux中系统调用的详细过程
attribute_((regparm(8)))就是告诉 GCC 所有参数都从栈中读取,而 Linux 进入中断处理上下文时,会把 ebx、ecx、edx、esi、edi、ebp 寄存器的值保存到内核栈中,那么 系统调用 就可以从内核栈获取到参数的值。system_call过程获取 eax 寄存器的值,然后通过 eax 寄存器的值找到要调用的系统调用入口,并且进行调用。因为 用户态 和 内核态 使用的栈不同,而调用系统调用是在用户态调用的,而进入系统调用后会变成内核态,所以参数就不能通过栈来传递。
2025-11-29 11:38:05
33
原创 嵌入式linux系统中断言函数用法分析
摘要:C语言通过assert.h头文件提供静态和动态断言功能。静态断言(static_assert)在编译时检查条件(如int类型大小是否≥4字节),不满足则终止编译并报错。动态断言(assert)在运行时验证条件(如函数参数有效性),可通过NDEBUG宏控制其启用/禁用。两种断言分别用于确保程序的编译期和运行期正确性,帮助开发者提前发现潜在问题。静态断言支持自定义错误信息,而动态断言则更灵活可控。
2025-11-26 11:45:53
193
原创 嵌入式linux中管道实现详解
本文介绍了Linux系统中管道的实现原理。管道通过pipe()系统调用创建,包含读写两端(fds[0]和fds[1]),利用fork()后父子进程共享文件描述符的特性实现进程间通信。管道数据采用比特流形式,保持写入顺序,流向单向。通过关闭不同端口可实现单向或双向通信。内核使用16块pipe_buffer组成的环形缓冲区存储数据,保证小于4KB写入的原子性。当缓冲区满或空时,相应进程会被挂起等待。文章还说明了管道的内部数据结构和操作注意事项。
2025-11-26 11:11:55
55
原创 嵌入式linux中FrameBuffer 应用编程实现
本文介绍了FrameBuffer应用编程和LCD显示技术的基础知识。FrameBuffer是图形显示的显存抽象,在Linux系统中通过/dev/fbX设备节点访问,采用存储映射IO处理大量像素数据。LCD显示器通过TFT控制液晶分子方向实现成像,其关键参数包括分辨率(如1920x1080)和像素格式(如RGB32)。文章详细阐述了RGB颜色模式的存储方式,并解释了LCD成像的基本时序控制信号(VCLK、HSYNC、VSYNC)和扫描过程。这些概念为嵌入式系统图形显示开发提供了理论基础。
2025-11-21 16:38:35
61
原创 嵌入式linux串口应用编程实现
摘要:串口(SerialPort)是一种通过串行传输方式实现计算机与外部设备通信的异步全双工接口,采用TX、RX、GND三线连接方式。在嵌入式系统中广泛应用于调试、日志输出及外设连接。串口通信每帧包含11位数据结构(起始位、8位数据位、奇偶校验位和停止位),支持多种校验方式。使用流程包括打开设备、获取/修改配置、数据读写及关闭等步骤,主要通过tcgetattr()获取当前参数、tcsetattr()设置新参数,涉及波特率、数据位等关键属性的配置。
2025-11-19 11:52:24
140
原创 嵌入式linux中应用控制LED实现详解
摘要:Linux系统提供两种应用层操控硬件的方式:一是通过/dev目录下的设备节点,将其视为虚拟文件进行读写操作(如open/read/write),实现对硬件设备(如硬盘、串口)的控制;二是通过sysfs文件系统访问内核对象属性,以目录和文件形式控制设备参数,适用于LED、GPIO等简单设备。LED控制案例显示,系统通过/sys/class/leds目录中的brightness、trigger等属性文件实现亮度调节和触发模式设置。复杂设备(如LCD)通常需结合设备节点和专用接口(ioctl)进行控制。两种
2025-11-18 15:44:35
41
原创 嵌入式中systemtap工具使用方法说明
打一个比方,这类工具就好比医生的听诊器,病人就好比是在运行的系统,很多时候查看一些问题需要在系统在运行的时候来观察,这时候就需要这类动态跟踪工具。-L和-1这两个参数大体作用一样,都可以列举出二进制文件对应的函数在哪里(所在文件和行数),所不同的是,-L比-l还多了一些信息:可以打印出函数局部变量的信息。3.接下来,转换流程将解析树转换成 C源代码(pass 3)并使用解析后的信息和 tapset 脚本(SystemTap 定义的库,包含有用的功能)。
2025-11-17 16:33:14
54
原创 嵌入式C语言中代码优化方法与技巧
本文介绍了四种优化应用代码的技术:1.利用高速缓存:通过合理利用CPU多级缓存(L1-L3)提升数据访问效率,避免非连续内存访问。2.代码内联:使用inline关键字减少函数调用开销,适合短小且频繁调用的函数。3.restrict关键字:消除指针别名问题,使编译器能生成更高效的机器码。4.消除不必要内存引用(文中未详解)。这些技术通过减少内存访问、优化函数调用和消除数据冲突等方式提升程序性能,但需注意合理使用以避免副作用。
2025-11-15 16:07:37
46
原创 嵌入式中VScode软件中安装Deepseek方法
本文介绍了如何在VSCode中配置开源AI编程辅助插件Continue,以调用国产大模型Deepseek v3的API接口服务。详细步骤包括:安装Continue插件、创建Deepseek API密钥、修改插件配置等。配置完成后,用户可在VSCode中使用Continue调用Deepseek实现代码补全、错误检测等AI编程辅助功能。文中提供了相关官网链接供进一步参考。该方案以高性价比的方式为开发者提供了强大的AI编程支持。
2025-11-15 11:32:24
224
原创 嵌入式C语言中野指针和段错误问题分析
一旦出现未知性,它就是一个野指针,即使某一次没有产生严重后果,但埋下了这颗“地雷”后,就留下了不可预知的隐患,对于程序来说这是不可接受的。在本例中,p是自动局部变量,由于p没有被初始化,也没有被后续赋值,那么p中存放的是一个随机值,所以p指向的内存空间是不确定的。所谓野指针,就是指针指向一个不确定的地址空间,或者虽然指向一个确定的地址空间,但引用空间的结果却是不可预知的,这样的指针就称为野指针。在本例中,p虽然指向了一个确定地址0x43542354的空间,但是它对应的空间是否存在,其读写权限是否满足程序。
2025-11-13 09:00:56
262
原创 嵌入式开发中链表结构分析
链表和数组是两种基本的数据结构,各有特点。数组需要连续内存空间,而链表通过指针连接零散的内存块,更灵活。链表有三种常见类型:单链表、循环链表和双向链表。单链表的每个节点存储数据和下一个节点的地址,插入删除高效(O(1)),但随机访问较慢(O(n))。循环链表首尾相连,适合处理环形数据。双向链表支持双向遍历,每个节点有前驱和后继指针,操作更灵活但占用更多内存。链表适合频繁插入删除的场景,而数组适合随机访问。
2025-11-12 17:10:22
499
原创 嵌入式C语言中指针详解
C语言指针的核心在于其运算能力,特别是加减法操作,这赋予了程序更高的灵活性但也增加了学习难度。指针本质是存储内存地址的变量,通过间接寻址访问数据。在函数传参时,指针解决了值传递无法修改原变量的问题。指针运算与指向类型密切相关,加减操作会按类型大小调整地址偏移。虽然数组名可视为指针,但二者并不完全等同,主要体现在sizeof等操作上。指针运算特性使其能高效访问连续内存的数组元素,这是C语言强大底层控制能力的体现。
2025-11-11 17:58:47
47
原创 嵌入式C语言中结构体使用方法与技巧
本文介绍了内存对齐的概念及其重要性,主要包含三部分内容:1. 内存对齐原理,解释了数据类型地址需是其大小的倍数,并以struct Node为例说明对齐机制;2. 结构体成员排列优化,展示如何通过调整顺序减少内存空隙;3. 结构体操作,涵盖传统定义、成员访问和构造初始化方法。重点阐明了内存对齐对CPU效率和程序内存占用的影响,以及结构体内存优化的实用技巧,其中特别指出了ARM架构下非对齐访问会引发异常的情况。
2025-11-10 17:46:00
47
原创 嵌入式linux中git代码管理实现
Git助力代码原子性提交的实践指南 摘要:Git作为当前最流行的分布式代码管理系统,其灵活的分支和提交处理功能可有效提升代码提交的原子性。实现原子性提交(每个提交对应单一功能点)能带来三大优势:提升代码可读性、简化问题定位与回滚、促进持续集成。本文重点介绍了Git实现原子性提交的5种基础操作技巧,包括部分改动提交、提交拆分、提交修改、顺序调整等本地操作。掌握这些技巧可帮助开发者在本地仓库灵活处理提交,在不影响团队协作的前提下提升代码模块化和研发效能。
2025-11-10 14:00:33
165
原创 嵌入式linux中交叉编译器的安装与使用
前面我们写了 linux 上第一个c程序 heollo word ,我们是使用 gcc 编译器进行代码的编译,编译得到的可执行文件只能在 X86 结构的 PC 上运行,我们来看下,在我的 ubuntu 下有一个hello.c,这个程序也非常简单,就是一个 helo world ,我们来编译一下,然后我们运行下可执行文件,这个可执行文件是可以在PC 上运行的。然后我们使用 file 命令来看下这个文件,这个文件是可以在 X86 上运行的,但是它不能在 ARM 上运行,因为它这里写的是 X86。如下图所示。
2025-11-08 17:58:37
488
原创 嵌入式开发安装Samba服务实现方法
本文介绍了通过Samba实现Windows与Ubuntu文件共享的开发技巧。安装Samba后,在Ubuntu创建共享文件夹并配置smb.conf文件,即可将Ubuntu存储空间映射为Windows磁盘。这样开发者可以直接在Windows上修改代码,避免频繁传输文件,大幅提升嵌入式开发效率。关键步骤包括:安装Samba服务、创建共享目录、备份并修改配置文件等。这种方法特别适合需要频繁修改代码的开发场景。
2025-11-08 16:38:05
55
原创 嵌入式linux中SSH实现方法
本文介绍了在虚拟机Ubuntu系统中安装和配置SSH服务的步骤。首先通过终端命令"sudo apt-get install openssh-server"安装SSH服务,然后修改配置文件"/etc/ssh/sshd_config",将"PermitRootLogin prohibit-password"改为"PermitRootLogin yes"以允许root用户登录。文中详细说明了使用vi编辑器修改配置文件的搜索和修改方法,
2025-11-06 11:18:08
62
原创 嵌入式linux原厂驱动开发学习线路详解
本文系统介绍了Linux驱动开发学习路径及广告机项目开发流程。驱动开发部分分为基础(环境搭建、字符设备、中断处理)、进阶(设备树、GPIO子系统等)和高阶(USB、PCIe等)三阶段。广告机项目基于RK3568平台,涉及硬件驱动开发(DHT11温湿度、MPU6050加速度传感器等)和LVGL应用开发(UI界面、NTP时间同步等),详细阐述了从环境准备到系统设计的完整开发流程。项目实现了多媒体播放、环境监测、网络通信等功能,为嵌入式开发提供了实用参考案例。
2025-11-06 10:56:15
281
原创 嵌入式c语言面试题中指针详解
本文摘要了15个C/C++编程中的关键问题解析,主要内容包括:1) 指针常量和常量指针的区别;2) 字符串数组与指针的内存分配差异;3) sizeof在函数内外的不同行为;4) 数组指针运算的特殊性;5) 内存分配错误导致的程序崩溃;6) 字符串常量的不可修改性;7) 函数指针数组的声明方式;8) const修饰符的使用限制;9) 动态内存传递的问题;10) 字符串越界风险;11) 函数指针的强制转换;12) 释放内存后的访问问题;13) 未初始化数组的长度问题;14) 数组指针与指针数组的区别;15) 位
2025-10-13 20:16:00
78
原创 嵌入式C/C++面试题深度解析方法与实现
本文通过分析C/C++典型面试题,深入剖析了程序员必备的技术内功。文章首先以strcpy函数为例,展示了从2分到10分不同实现版本,揭示了扎实基本功的重要性。随后通过7道找错题考察了内存操作、指针使用等核心知识,包括常见的内存越界、野指针等问题。在内功题部分,文章详细讲解了变量零值比较、sizeof计算、宏定义使用等关键技术点,并提供了String类的完整实现示例。最后通过处理器字节序判断和求和函数两个技巧题,展示了编程中的巧妙思维。全文贯穿"技术深度决定编程水平"的核心思想,强调程序员
2025-10-11 14:54:03
87
原创 嵌入式中3D打印流程制作外壳方法
本文介绍了使用SolidWorks建模和BambuStudio切片软件进行3D打印的完整流程。首先在SolidWorks中完成建模并导出为STL文件格式,该格式通过三角形网格描述三维几何形状。然后将STL文件导入BambuStudio进行切片处理,设置相关参数后将文件保存至SD卡。最后将SD卡插入打印机,选择对应模型文件即可开始打印。文章详细说明了从建模到打印的各环节操作要点,为3D打印爱好者提供了实用指导。
2025-09-28 17:30:45
174
原创 嵌入式中电动车充电器电路设计详解
该充电器电路采用市电双向抗干扰滤波器和桥式整流电路,核心由IC1(KA3842AP/UC3842)控制功率转换。高压部分包含热敏电阻保护、斜坡补偿和独特的光耦反馈设计;低压部分通过LM324实现四路控制:电压/电流负反馈、充电状态转换及显示。电路特点包括:1)采用特殊接法的防反接二极管D14;2)两阶段充电控制(Q4切换取样电阻);3)第二功率限制电路保护低电量电池。典型故障表现为充电状态指示灯异常,多与反馈回路或比较器电路有关。
2025-09-15 11:50:28
105
原创 嵌入式中双向循环链表原理及应用
摘要:双向循环链表是一种特殊的链式结构,每个节点包含数据域、前驱指针和后继指针,形成首尾相连的闭环。其特点包括支持双向遍历、高效插入删除操作。文章详细介绍了链表的结构定义、创建空链表和节点的函数实现,以及头插、尾插、指定位置插入和删除等核心操作。通过多个代码示例展示了具体实现方法,并附有相关笔试题及其答案,完整呈现了双向循环链表的工作原理和操作要点。该结构因兼具双向性和循环性,在数据操作方面具有显著优势。
2025-09-10 14:22:03
84
原创 嵌入式中单向、双向链表及双向循环链表的原理
本文介绍了三种链表结构及其实现:1. 单向循环链表:尾结点指向头结点形成环形结构,便于管理;2. 双向链表:每个结点包含前驱和后继指针,提高访问效率;3. 双向循环链表:首尾相连的双向环形结构。文中详细说明了三种链表的创建、初始化、结点插入和删除操作,重点分析了带头结点的实现方式及其优势。这些链表结构各具特点,可根据不同需求选择使用,为数据存储和操作提供灵活解决方案。
2025-09-09 17:32:08
173
原创 嵌入式中二维码生成基本原理解析
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。
2025-09-08 19:39:05
247
原创 嵌入式中顺序表和链表基本分析
本文系统介绍了数据结构的两种基本存储方式:线性表的顺序存储(顺序表)和链式存储(链表)。顺序表采用连续内存单元存储,支持随机访问但增删效率低;链表通过指针连接离散内存单元,增删高效但需额外存储指针。文章详细讲解了顺序表和链表的实现原理、操作方法和优缺点对比,包括顺序表的创建、增删查改实现,以及链表的结点结构、头插/头删等基本操作。重点分析了两种结构在内存使用、访问效率和适用场景上的差异,为理解数据结构基础提供了清晰的技术框架。
2025-09-08 09:03:45
75
原创 嵌入式中关于数据结构的简单认识
摘要:数据结构是计算机存储和组织数据的方式,分为逻辑结构和物理结构。逻辑结构包括线性、非线性(树形、图形)和集合结构;物理结构包含顺序、链式、索引和散列存储。算法是解决问题的步骤,具有有穷性、确定性、可行性等特征。评估算法的优劣主要看时间复杂度和空间复杂度:时间复杂度反映语句执行次数(如O(n)),空间复杂度衡量内存占用。两者常相互制约,需根据需求选择平衡。好的算法应兼顾效率、可读性和可维护性。
2025-09-07 08:59:53
112
原创 嵌入式C语言中进制转换与控制实现
本文介绍了计算机中进制转换、原码/反码/补码表示及C语言中的位操作。主要内容包括:1)二进制、八进制、十进制和十六进制间的转换方法;2)计算机中数值的三种表示形式(原码存在±0问题,补码统一了加减法运算);3)C语言的进制表示方法(0b/0/0x前缀)和位操作运算符(&、|、^、~、<<、>>)。重点强调了补码在计算机存储中的重要性以及位运算的实际应用。这些基础知识对理解计算机底层数据表示和进行高效编程至关重要。
2025-09-04 11:58:26
86
原创 嵌入式开发中浅谈栈与队列
本文系统介绍了栈和队列两种基础数据结构。栈是后进先出(LIFO)的线性表,支持入栈(push)和出栈(pop)操作,通过top指针实现;队列是先进先出(FIFO)的线性表,支持入队(enqueue)和出队(dequeue)操作,通过front和rear指针实现。文章详细讲解了它们的存储结构(顺序栈、循环队列)、基本操作及C语言实现,并特别介绍了共享栈和循环队列的优化方法。这些数据结构在函数调用、任务调度等场景有重要应用,掌握其原理对算法设计和系统开发至关重要。
2025-09-04 11:48:20
224
原创 嵌入式Ubuntu22.04安装过程详解实现
本文详细介绍了在VMware Workstation Pro 17上安装Ubuntu 22.04 LTS虚拟机的完整流程。首先说明了系统要求(双核2GHz处理器/4GB内存/25GB存储),然后分步骤指导VMware安装、许可证激活、虚拟机创建配置(包括处理器2核、4GB内存、桥接网络等设置)。接着详细说明Ubuntu安装过程(跳过汉化、最小化安装等选项),并重点介绍了共享文件夹的配置方法及常见问题解决方案。最后补充了Linux终端的常用快捷键。该教程适合需要搭建Linux开发环境的用户参考。
2025-08-29 17:10:59
142
原创 嵌入式硬件中CD4013芯片控制与实现
本文分析了CD4013触发器的控制逻辑,重点阐述了R1(Reset)引脚对输出的优先级控制。当R1为高电平时(过流状态),Q1强制输出低电平,不受CLK和D1控制;R1为低时,输出由CLK上升沿和D1状态决定。文章详细推导了过流保护机制:过流时比较器输出高电平,通过R1使Q1置低,/Q1置高驱动三极管切断PWM。特别讨论了时钟信号的选择问题,指出三角波也可作为CLK信号源,但需满足高低电平阈值要求(<1.5V为低,>3.5V为高)。最后建议采用国产SN74LVC1G175触发器替代CD4013以
2025-08-12 17:42:10
311
原创 嵌入式项目电路设计中触发器原理设计与分析
本文分析了触发器电路的工作原理,重点介绍了CD4013触发器的特性和应用场景。文章首先阐述了PWM控制中过流保护的三极管释放条件,指出需要比较器信号不过流和PWM周期上升沿两个条件。随后详细讲解了CD4013触发器的引脚功能、数字信号处理特性以及与模拟电路的区别,强调了数字地和模拟地分离的重要性。文章还通过时序分析展示了触发器实现信号相位滞后的功能特性,并比较了其与RC延时电路的区别。最后指出触发器在纯硬件电机驱动等电路中的实际应用价值,为下节课继续讨论电路连接方式做铺垫。
2025-08-12 17:31:45
201
原创 嵌入式硬件中AI硬件设计方法与技巧
嘉立创EDA推出AI助手Kimi插件,为PCB设计提供智能支持。该插件具备四大核心功能:AI问答助手可解答各类电路设计问题;元件查询功能直接展示参数和应用场景;智能分析网表可检测潜在问题;电路图识别能解析图纸结构并提供改进建议。用户需通过扩展插件安装,并配置Kimi API密钥后使用。该工具旨在提升工程师的设计效率,减少查阅资料时间,特别适合项目交接和设计自查场景。
2025-08-11 17:26:10
567
电机+嵌入式详细解说+各个电机分析与说明,包括常见的直流电机、异步电机、同步电机等
2024-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅