嵌入式开发星球
以培养优质嵌入式工程师为目的,持续分享优质嵌入式内容;答疑解惑,获取资源,可添加博主微信:18270720391;关注公众号:“嵌入式开发爱好者”,输入:“1024” 领取资料。
展开
-
嵌入式系统调用底层基本原理分析
系统调用将留给应用程序的内核API接口统一管理硬件访问权限、特权指令。原创 2025-04-23 21:35:03 · 77 阅读 · 0 评论 -
嵌入式linux系统中内存管理的方法与实现
Linux内核的内存管理是操作系统最核心的部分之一,它涉及到物理内存和虚拟内存的划分、内存管理单元(MMU)的工作原理、页表和TLB的协作机制,以及内存申请、释放和映射等操作。在这篇文章中,我们将详细解析Linux内核如何划分物理内存和虚拟内存,页表、MMU(内存管理单元)与TLB(转换后备页表)如何协作,以及如何使用Linux内核接口进行内存申请与释放。操作系统通过页表的管理来实现虚拟内存的抽象,确保每个进程的虚拟内存与物理内存之间的映射正确。理解这两者的差异,是我们深入理解内存管理的第一步。原创 2025-04-19 18:06:25 · 196 阅读 · 0 评论 -
嵌入式Linux系统中设备树基本操作与实现
设备树(Device Tree)是一种硬件描述机制,用于在嵌入式系统和操作系统中描述硬件设备的特性、连接关系和配置信息。使用设备树来剔除相对内核来说的“垃圾代码”,既用设备树来描述硬件信息,用来替代原来的device部分的代码。虽然用设备树替换了原来的device部分,但是平台总线模型的匹配和使用基本不变。并且对硬件修改以后不必重新编译内核。直接需要将设备树文件编译成二进制文件,再通过bootloader传递给内核即可。原创 2025-04-10 17:39:08 · 188 阅读 · 0 评论 -
嵌入式Linux系统文件调度实现
Linux系统中文件调度,是系统调度的重要过程,关注它的运行过程非常重要。Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。1:设备节点调度方法2:磁盘文件调度方法。原创 2025-04-10 14:37:29 · 48 阅读 · 0 评论 -
嵌入式字符设备驱动控制代码具体实现方法(详解)
3:Linux系统中Makefile文件具体实现。2:Linux中RTC驱动代码具体实现。1:应用代码控制实现app.c。原创 2025-04-09 22:51:56 · 50 阅读 · 0 评论 -
Linux系统中应用端控制串口的基本方法
函数原型:int tcsetattr(int fd,int actions,const struct termios *termios_p);重点只需要关注:输入模式c_iflag 控制模式c_cflag和传输速度c_ispeed\c_ospeed。//设置数据位为8位。//打开串口uart9设置可读写,不被输入影响,不等待外设响应。原创 2025-03-29 17:59:07 · 292 阅读 · 0 评论 -
linux系统中文件操作调度方式与实现
1:普通文件--用户存储数据的标准文件,常见的有.c、.h、.txt、.bin,这里面除了.bin文件是二进制文件,其他的都是文本文件。2:可以使用linux中对应的函数来获取文件的详细状态信息。它可以用来检索文件相关的属性,如文件的权限、所有者、大小、时间戳等信息。原创 2025-03-29 10:18:06 · 124 阅读 · 0 评论 -
嵌入式linux系统中对应的文件锁详细实现方法
/文件锁:flock用于对文件加锁或者解锁但是只能产生建议性锁,并且同一个文件不会同时具有共享锁和互斥锁。原创 2025-03-28 22:11:04 · 230 阅读 · 0 评论 -
嵌入式linux内核开发中的三大实用特性:标号元素、局部标签与可变参数宏
printfprintfprintf标号元素、局部标签和可变参数宏是内核开发中三大实用特性。它们不仅提高了代码的灵活性和可读性,还在内核开发中发挥了重要作用。通过合理使用这些特性,开发者可以编写出更高效、更可维护的内核代码。希望本文能帮助开发者更好地掌握这些特性,并在实际开发中发挥它们的威力!原创 2025-03-19 12:20:34 · 167 阅读 · 0 评论 -
嵌入式Linux堆栈管理深度解析:从原理到实践
堆栈管理是嵌入式开发的底层核心技能,深入理解其机制能够帮助开发者编写高效、稳定的代码。通过结合理论分析与实践案例,本文系统性地梳理了栈帧操作、堆内存分配策略、内存泄漏防范等关键知识点。后续可通过反汇编调试、性能分析工具进一步巩固这些概念,最终在复杂系统中游刃有余地驾驭内存资源。原创 2025-03-04 20:46:31 · 208 阅读 · 0 评论 -
嵌入式单片机STM32温湿度模块控制与实现详解
3.通信的开始(打电话)需要注意,该过程需要调用40次,因为传输一次数据有40bit:如果采集的温湿度数据超过了用户设置的阈值,比如用户设置的温度上限为24℃,如果实际的温度超过该值,则蜂鸣器报警,并自动打开风扇,注意:用户可以通过手机设置温湿度的阈值。如 “set temp=20\n” // strstr strtok atoi。原创 2025-03-03 19:53:14 · 221 阅读 · 0 评论 -
嵌入式Linux高级编程:深入解析编译、链接与运行机制
优化程序性能:通过分析符号表和重定位信息,减少冗余代码。解决系统级问题:如动态库版本冲突、内存地址错误等。定制化需求:编写链接脚本控制代码布局,适配特殊硬件。原创 2025-03-02 18:46:49 · 414 阅读 · 0 评论 -
嵌入式linux中启动文件init.d详解
在Linux嵌入式系统的开发和维护过程中,了解系统启动和服务管理机制是至关重要的。其中,/etc/init.d/目录扮演了关键角色,它包含了用于初始化、启动、重启或停止各种服务的脚本。本文将深入浅出地介绍这个目录下常见启动文件的作用,帮助读者更好地理解如何管理和优化嵌入式Linux设备。init.d是指包含一系列Shell脚本的目录,这些脚本用于控制服务(也称为守护进程)的生命周期。当系统启动时,init进程会根据预定义的规则执行这些脚本,以确保必要的服务能够正确启动。/etc/init.d/目录下的所有文原创 2025-03-02 10:06:30 · 236 阅读 · 0 评论 -
嵌入式系统启动流程分析:从汇编到C语言环境的过渡分析
嵌入式系统的启动过程通常分为几个阶段,具体流程会因硬件平台和启动加载程序的不同而有所不同。1.上电(Power On):系统硬件上电后,CPU开始执行固化在硬件中的初始指令(通常是ROM中的启动代码)。2.硬件初始化:在这一阶段,CPU、内存、时钟、外设等硬件初始化。3.引导加载程序(Bootloader):加载并执行Bootloader程序,如U-Boot,它负责从存储介质加载操作系统内核。原创 2025-03-02 09:54:07 · 365 阅读 · 0 评论 -
嵌入式系统中C语言从源代码到进程终止调度过程
编译链接:预处理→编译→汇编→链接的完整流程。进程管理:操作系统如何加载、调度和终止进程。系统调用:用户程序与内核交互的桥梁。原创 2025-03-01 17:51:50 · 59 阅读 · 0 评论 -
彻底搞懂TCP通信协议中三次握手与四次挥手详解
通过这篇文章,TCP的三次握手和四次挥手的来龙去脉应该都清楚了。TCP 之所以这样设计,是为了实现可靠的网络通信:三次握手确保双向通信可靠、序列号同步以及避免历史连接;四次挥手则确保数据传输完整、连接优雅关闭,以及防止旧连接影响新连接。看似繁琐的每一次握手和挥手,其实都是为了解决具体的网络通信问题,体现了 TCP 协议的可靠性和严谨性。一旦理解了这些设计背后的原因,也就理解了 TCP 协议的精髓。原创 2025-02-28 21:05:22 · 111 阅读 · 0 评论 -
嵌入式linux利用标准字符驱动模型控制多个设备方法
设备号:由主设备号(Major)和次设备号(Minor)组成cdev结构体:表征字符设备的核心数据结构文件操作集合:file_operations结构体定义设备操作sysfs接口:提供用户空间设备管理能力传统单设备驱动与多设备驱动的关键差异在于:动态设备号分配设备实例管理次设备号的灵活运用本文实现的驱动模型具有以下优势:支持设备热插拔良好的扩展性资源隔离性符合Linux驱动设计规范完整示例代码可在以下Gist获取:[示例代码链接]后续可扩展方向:实现自动设备发现机制。原创 2025-02-19 22:17:36 · 104 阅读 · 0 评论 -
嵌入式linux系统中高级编程控制与实现
函数参数局部变量函数返回值编译器生成的临时变量栈初始化:DDR/SDRAM/SRAM初始化初始化栈指针不同处理器的栈指针:ARM:SP寄存器(R13)、FP(R11)X86:ESP(栈顶指针)、EBP(栈底指针)原创 2025-02-11 21:05:17 · 84 阅读 · 0 评论 -
嵌入式linux系统中VIM编辑工具用法与GCC参数详解
s/^old/new/g将文本中所有以old开头的字符串替换为new。高亮显示::sethls *:光标处单词高亮显示;%s/old/new/g 将文本中所有字符串old替换为new。s/old/new 将当前行的第一个字符串old替换为new。s/old/new/g 将当前行所有字符串old替换为new。普通模式:打开一个文件时的默认模式,按ESC返回普通模式。在当前光标的前/后面插入字符:i/a。若文件已被修改,放弃修改,退出:q!若文件已被修改,保存修改,退出:wq。原创 2025-02-10 22:25:37 · 289 阅读 · 0 评论 -
嵌入式linux系统中对应的docker容器的作用
Docker是一个开源的容器化平台,它允许开发者将应用程序及其所有的依赖(包括库、运行时环境、系统工具等)打包成一个标准化的单元,这个单元被称为容器。容器是一种轻量级的、独立运行的软件包,它在任何安装了Docker引擎的操作系统上都可以运行,并且能够保证运行环境的一致性。与传统虚拟机(VM)相比,Docker容器更加轻量。虚拟机是通过模拟硬件来运行一个完整的操作系统,而容器是直接运行在宿主机的操作系统内核之上,共享宿主机的内核,只是在用户空间进行隔离。原创 2025-02-10 19:42:54 · 179 阅读 · 0 评论 -
嵌入式linux驱动中MMC/SD驱动模型
MMC/SD驱动模型在嵌入式开发中应用比较广,其对应的Linux系统框架可以归类到块设备中,如果想了解IO存储栈的小伙伴可以先从简单的MMC/SD驱动模型入手。原创 2025-02-07 20:25:04 · 74 阅读 · 0 评论 -
05--嵌入式linux系统内核中SPI驱动底层详解
我们常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿。* 也可以使用设备树创建一个节点,内核解析设备树时注册platform_device。* 左边注册一个platform_driver结构体,里面是比较固定的、通用的代码。CPOL:表示SPICLK的初始电平,0为电平,1为高电平。在SPI协议中,有两个值来确定SPI的模式。原创 2025-01-21 16:00:06 · 111 阅读 · 0 评论 -
04--嵌入式linux系统内核中UART串口底层详解
实现对应的drv_open/drv_read/drv_write等函数,填入file_operations结构体。* 其他完善:提供设备信息,自动创建设备节点:class_create, device_create。* 有入口函数就应该有出口函数:卸载驱动程序时,出口函数调用unregister_chrdev。* 把file_operations结构体告诉内核:register_chrdev。得有一个入口函数:安装驱动程序时,就会去调用这个入口函数。* 定义自己的file_operations结构体。原创 2025-01-21 15:25:22 · 481 阅读 · 0 评论 -
03--嵌入式linux系统内核中pinctrl底层详解
Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的:* 引脚枚举与命名(Enumerating and naming)* 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能* 引脚配置(Configuration):比如上拉、下来、open drain、驱动强度等。原创 2025-01-21 13:11:51 · 86 阅读 · 0 评论 -
02--嵌入式linux系统内核中LCD驱动底层详解
[13:12] : 00 : CSC数据不交换(小端模式)默认就为0,不需设置。* [15:14] : 00 : 输入数据不交换(小端模式)默认就为0,不需设置。* [19:16] : 111 :表示ARGB传输格式模式下,传输24位无压缩数据,A通道不用传输)/* fb的物理地址 */* [1] : 0 : 24位数据均是有效数据,默认就为0,不需设置。* [17] : 1 : 设置为1工作在DOTCLK模式。原创 2025-01-20 20:05:53 · 88 阅读 · 0 评论 -
01--嵌入式linux系统内核中LCD驱动底层详解
LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分辨率是:xres*yres。原创 2025-01-20 11:01:25 · 187 阅读 · 0 评论 -
嵌入式系统里面malloc函数底层原理
ptmalloc通过brk(堆内存)或者mmap(内存映射)系统调用从内核申请一大块连续的内存,申请的内存由top chunk管理,用户程序调用malloc函数从内存池申请内存(chunk),如果内存池有空闲的chunk,则从空闲的chunk返回给用户程序,如果没有空闲的chunk,则从top chunk裁剪出可用的chunk返回给用户程序。用户程序调用malloc函数申请内存时,首先会去查询空闲链表,如果空闲链表没有足够的chunk,则去查询top chunk进行内存分配。原创 2025-01-11 19:32:54 · 209 阅读 · 0 评论 -
嵌入式linux系统中QT实现音频播放
大家好,今天主要给大家分享一下,如何使用Qt中的网络模块,编写实现TCP/IP客户端和服务器。接下来,可以通过QHostInfo 和 QNetworkInterface 类获取本地网络所有接口的信息。原创 2025-01-08 21:05:02 · 114 阅读 · 0 评论 -
嵌入式中QT实现文本与线程控制方法
利用QT进行读写文本的时候进行读写,读取MP3歌词的文本,对这个文件进行读写操作。实例代码,利用Qfile,对文件进行读写。//读取对应文件文件,头文件的实现。原创 2025-01-07 22:15:58 · 269 阅读 · 0 评论 -
嵌入式linux中socket控制与实现
在开始只是设置了socket的listen模式,listen函数只用于服务端,服务器进程不知道要与谁连接,因此,它不会主动的,只是一直监听是否有其他客户进程与知连接,然后响应该连接请求处理,一个服务进程可以同时处理多个客户进程的连接。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。它使用数据报协议UDP。(1)IP地址如身份证一样,是标识的电脑的,一台电脑只有一个IP地址。原创 2025-01-05 20:15:34 · 354 阅读 · 0 评论 -
嵌入式linux系统中QT信号与槽实现
信号与槽是Qt编程的基础。因为有了信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。原创 2025-01-05 18:00:52 · 414 阅读 · 0 评论 -
嵌入式linux中数据结构详解与分析
数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明。编程的核心是数据结构,而不是算法。——Rob Pike。原创 2025-01-04 20:27:47 · 635 阅读 · 0 评论 -
嵌入式linux系统中CMake的基本用法
CMake 是一个跨平台的项目构建工具,通俗点说,它会帮你生成 Makefile 或其他编译系统需要的构建文件。原创 2025-01-04 20:21:23 · 260 阅读 · 0 评论 -
嵌入式中MQTT协议分析与详解
MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。原创 2024-12-12 20:46:45 · 139 阅读 · 0 评论 -
嵌入式Linux应用开发中CAN通信实现
14.1.1 CAN是什么?CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入 CAN 控制装置。一个由 CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。例如,当使用 Philips P82C250 作为原创 2024-12-11 22:57:51 · 460 阅读 · 0 评论 -
嵌入式系统中TCP/IP模型基本实现
想要了解以太网协议相关内容,首先需要了解OSI和TCP/IP参考模型。OSI(Open Systems Interconnection,即开放系统互连)七层模型是由ISO(国际标准化组织)开发的一套网络通信参考模型。该模型将网络通信过程分为七个层次,每一层都定义了不同的功能和协议,以便实现计算机网络设备之间的互操作。OSI参考模型,具体见图 1。图 1 OSI参考模型OSI参考模型各层功能定义:应用层:OSI参考模型中最靠近用户的一层,为计算机用户提供应用接口和各种网络服务。原创 2024-12-10 22:55:51 · 431 阅读 · 0 评论 -
嵌入式linux系统中实现I2C通信的方法
I2C tools包含一套用于Linux应用层测试各种各样I2C功能的工具。它的主要功能包括:总线探测工具、SMBus访问帮助程序、EEPROM解码脚本、EEPROM编程工具和用于SMBus访问的python模块。只要你所使用的内核中包含I2C设备驱动,那么就可以在你的板子中正常使用这个测试工具。i2cdetect的主要功能就是I2C设备查询,它用于扫描I2C总线上的设备。它输出一个表,其中包含指定总线上检测到的设备的列表。原创 2024-12-06 20:24:16 · 639 阅读 · 0 评论 -
嵌入式linux中PWM编程控制与实现
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%。是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。原创 2024-12-05 21:26:38 · 336 阅读 · 0 评论 -
嵌入式linux系统中RTC基本控制与实现
包含了可读格式的日期和时间信息 Www Mmm dd hh:mm:ss yyyy,其中,Www 表示星期几,Mmm 是以字母表示的月份,dd 表示一月中的第几天,hh:mm:ss 表示时间,yyyy 表示年份。上边说过了,那是Unix系统“元年”时候的事情,32位的时间已经足以解决当时的问题了。现在主流CPU都是64位的,使用64位的数据表示时间也是顺其自然的事,用64位的有符号数来表示时间,可以表示到292,277,026,596年12月4日15时30分08秒,相信我们再也不用愁时间回归的问题了。原创 2024-12-03 20:10:20 · 176 阅读 · 0 评论 -
嵌入式Linux应用开发框架分析
GPIO(General-Purpose IO Ports),即通用IO接口。GPIO的使用较为简单,主要分为输入和输出两种功能。GPIO主要用于实现一些简单设备的控制。在作为输入型GPIO的情况下,我们可以将该IO连接外部按键或者传感器,用于检测外部状态。当作为输出时,我们可以通过输出高低电平来控制外部设备的运转。由于GPIO的功能多种多样,我们需要首先将引脚设置为GPIO。设置为GPIO之后,我们需要设置GPIO的方向。当设置为输出时,我们可以控制输出高电平或者低电平。原创 2024-12-01 10:30:24 · 97 阅读 · 0 评论