- 博客(929)
- 资源 (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
703
3
原创 嵌入式开发中的C语言标准演进与关键特性深度解析
标准选择建议资源受限场景:优先使用C99(变长数组、单行注释)。复杂系统:C11的泛型和多线程特性更适配RTOS开发。
2025-03-08 11:43:08
159
原创 嵌入式单片机STM32中IIC通信详解
可以看到从器件的地址是7bit,可以通过硬件原理图以及从器件的数据手册进行查找,比如AT24C02芯片的设备地址是1010000,但是由于IIC协议在数据传输的时候是以8bit为单位进行传输,而IIC总线只有一根数据线,所以只能采用半双工的方式通信,就要求主机设置数据的传输方向,数据的传输方向由1bit进行控制,这1bit和从器件的设备地址一起发出。每个挂载在IIC总线上的外围器件都有独立的器件地址,主机发送开始信号后,只需要发送想要通信的设备的地址,如果设备收到地址并且匹配正确,则开始进行单独通信。
2025-03-08 11:30:34
399
原创 嵌入式中Type-C 与快充相关知识详解
本章节将对Type-C 的接口进行大致了解,对封装类型进行讲述,另外关于快充协议分为公开和私有两个部分,公开协议主要以PD协议和QC协议,私有协议包括VOOC华为快充三星快充规格大致了解。
2025-03-06 12:55:36
281
原创 嵌入式C编码规范详解
结构名或枚举名必须小写,单词之间有下划线_字符结构或枚举可以包含typedef关键字所有结构成员都必须小写所有枚举成员必须是大写的结构/枚举必须遵循doxygen文档语法在声明结构体时,它可以使用以下三种不同的选项之一:1、当结构体仅用名称声明时,它的名称后不能包含_t后缀。char* a;char b;2、当只使用typedef声明结构时,它的名称后面必须包含_t后缀。char* a;char b;
2025-03-06 12:51:02
156
原创 嵌入式单片机STM32外设看门狗详细实现
注意:WWDG外设没有独立的时钟源,而是挂载在APB1总线下,APB1总线外设时钟为42MHZ。了解WWDG外设的使用流程,可以参考stm32f4xx_wwdg.c的开头注释,具体流程如下图所示注意:WWDG看门狗是具有提前中断唤醒功能的,可以利用中断服务函数来在芯片复位之前进行数据的保存,或者在某些情况下利用中断服务函数进行喂狗操作,防止芯片复位。
2025-03-04 20:49:58
25
原创 嵌入式Linux堆栈管理深度解析:从原理到实践
堆栈管理是嵌入式开发的底层核心技能,深入理解其机制能够帮助开发者编写高效、稳定的代码。通过结合理论分析与实践案例,本文系统性地梳理了栈帧操作、堆内存分配策略、内存泄漏防范等关键知识点。后续可通过反汇编调试、性能分析工具进一步巩固这些概念,最终在复杂系统中游刃有余地驾驭内存资源。
2025-03-04 20:46:31
162
原创 C语言嵌入式Linux高级编程:程序的编译、链接与运行深度解析
理解程序的编译、链接与运行机制是嵌入式开发的核心基础。从预处理到动态链接,每一步都涉及底层细节的精确控制。通过工具链(如GCC、Binutils)和脚本(如链接脚本),开发者可以灵活适配不同硬件平台,优化程序性能与资源占用。深入掌握这些知识,能够有效解决系统级问题,提升嵌入式软件的开发效率。
2025-03-03 20:42:46
238
原创 嵌入式单片机STM32温湿度模块控制与实现详解
3.通信的开始(打电话)需要注意,该过程需要调用40次,因为传输一次数据有40bit:如果采集的温湿度数据超过了用户设置的阈值,比如用户设置的温度上限为24℃,如果实际的温度超过该值,则蜂鸣器报警,并自动打开风扇,注意:用户可以通过手机设置温湿度的阈值。如 “set temp=20\n” // strstr strtok atoi。
2025-03-03 19:53:14
151
原创 嵌入式Linux高级编程:深入解析编译、链接与运行机制
优化程序性能:通过分析符号表和重定位信息,减少冗余代码。解决系统级问题:如动态库版本冲突、内存地址错误等。定制化需求:编写链接脚本控制代码布局,适配特殊硬件。
2025-03-02 18:46:49
376
原创 嵌入式linux中启动文件init.d详解
在Linux嵌入式系统的开发和维护过程中,了解系统启动和服务管理机制是至关重要的。其中,/etc/init.d/目录扮演了关键角色,它包含了用于初始化、启动、重启或停止各种服务的脚本。本文将深入浅出地介绍这个目录下常见启动文件的作用,帮助读者更好地理解如何管理和优化嵌入式Linux设备。init.d是指包含一系列Shell脚本的目录,这些脚本用于控制服务(也称为守护进程)的生命周期。当系统启动时,init进程会根据预定义的规则执行这些脚本,以确保必要的服务能够正确启动。/etc/init.d/目录下的所有文
2025-03-02 10:06:30
162
原创 嵌入式系统启动流程分析:从汇编到C语言环境的过渡分析
嵌入式系统的启动过程通常分为几个阶段,具体流程会因硬件平台和启动加载程序的不同而有所不同。1.上电(Power On):系统硬件上电后,CPU开始执行固化在硬件中的初始指令(通常是ROM中的启动代码)。2.硬件初始化:在这一阶段,CPU、内存、时钟、外设等硬件初始化。3.引导加载程序(Bootloader):加载并执行Bootloader程序,如U-Boot,它负责从存储介质加载操作系统内核。
2025-03-02 09:54:07
328
原创 嵌入式系统中C语言从源代码到进程终止调度过程
编译链接:预处理→编译→汇编→链接的完整流程。进程管理:操作系统如何加载、调度和终止进程。系统调用:用户程序与内核交互的桥梁。
2025-03-01 17:51:50
23
原创 嵌入式系统中总线、指令集与ARM架构解析
总线是硬件通信的桥梁,编址方式决定数据如何传递。指令集是CPU的底层语言,微架构决定性能天花板。ARM的灵活设计使其成为嵌入式领域的王者,从手环到无人机都在用。给初学者的建议动手写汇编代码,观察寄存器变化。用调试工具(如Keil、GDB)单步执行,理解指令流程。结合芯片手册,实战外设驱动开发(如点亮LED)。掌握这些核心概念,你就能从"调库侠"进阶为真正的嵌入式高手!
2025-03-01 17:11:50
168
原创 嵌入式开发中的计算机体系结构与主流架构深度解析
嵌入式开发的核心在于对硬件架构的深刻理解与灵活应用。无论是X86的高性能计算,ARM的低功耗设计,还是C51的简单易用,开发者需根据场景选择合适平台,并通过抽象与优化实现高效开发。未来的嵌入式系统将更趋复杂,但万变不离其宗——掌握体系结构,方能以不变应万变。拓展思考在RISC-V等开源架构崛起的背景下,传统架构如何保持竞争力?如何平衡嵌入式系统的实时性与功耗?
2025-02-28 21:21:49
295
原创 彻底搞懂TCP通信协议中三次握手与四次挥手详解
通过这篇文章,TCP的三次握手和四次挥手的来龙去脉应该都清楚了。TCP 之所以这样设计,是为了实现可靠的网络通信:三次握手确保双向通信可靠、序列号同步以及避免历史连接;四次挥手则确保数据传输完整、连接优雅关闭,以及防止旧连接影响新连接。看似繁琐的每一次握手和挥手,其实都是为了解决具体的网络通信问题,体现了 TCP 协议的可靠性和严谨性。一旦理解了这些设计背后的原因,也就理解了 TCP 协议的精髓。
2025-02-28 21:05:22
62
原创 XMT-AA/AD 数字温度传感器深度解析与嵌入式应用指南
XMT-AA/AD 凭借其高精度和单总线优势,成为嵌入式温控系统的理想选择。2. ROM 指令(Search/Match/Skip ROM)// 拉低640μs。
2025-02-22 19:41:21
65
原创 嵌入式linux利用标准字符驱动模型控制多个设备方法
设备号:由主设备号(Major)和次设备号(Minor)组成cdev结构体:表征字符设备的核心数据结构文件操作集合:file_operations结构体定义设备操作sysfs接口:提供用户空间设备管理能力传统单设备驱动与多设备驱动的关键差异在于:动态设备号分配设备实例管理次设备号的灵活运用本文实现的驱动模型具有以下优势:支持设备热插拔良好的扩展性资源隔离性符合Linux驱动设计规范完整示例代码可在以下Gist获取:[示例代码链接]后续可扩展方向:实现自动设备发现机制。
2025-02-19 22:17:36
74
原创 嵌入式linux系统中高级编程控制与实现
函数参数局部变量函数返回值编译器生成的临时变量栈初始化:DDR/SDRAM/SRAM初始化初始化栈指针不同处理器的栈指针:ARM:SP寄存器(R13)、FP(R11)X86:ESP(栈顶指针)、EBP(栈底指针)
2025-02-11 21:05:17
55
原创 嵌入式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
255
原创 嵌入式linux系统中对应的docker容器的作用
Docker是一个开源的容器化平台,它允许开发者将应用程序及其所有的依赖(包括库、运行时环境、系统工具等)打包成一个标准化的单元,这个单元被称为容器。容器是一种轻量级的、独立运行的软件包,它在任何安装了Docker引擎的操作系统上都可以运行,并且能够保证运行环境的一致性。与传统虚拟机(VM)相比,Docker容器更加轻量。虚拟机是通过模拟硬件来运行一个完整的操作系统,而容器是直接运行在宿主机的操作系统内核之上,共享宿主机的内核,只是在用户空间进行隔离。
2025-02-10 19:42:54
143
原创 嵌入式linux驱动中MMC/SD驱动模型
MMC/SD驱动模型在嵌入式开发中应用比较广,其对应的Linux系统框架可以归类到块设备中,如果想了解IO存储栈的小伙伴可以先从简单的MMC/SD驱动模型入手。
2025-02-07 20:25:04
39
原创 05--嵌入式linux系统内核中SPI驱动底层详解
我们常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿。* 也可以使用设备树创建一个节点,内核解析设备树时注册platform_device。* 左边注册一个platform_driver结构体,里面是比较固定的、通用的代码。CPOL:表示SPICLK的初始电平,0为电平,1为高电平。在SPI协议中,有两个值来确定SPI的模式。
2025-01-21 16:00:06
71
原创 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
428
原创 03--嵌入式linux系统内核中pinctrl底层详解
Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的:* 引脚枚举与命名(Enumerating and naming)* 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能* 引脚配置(Configuration):比如上拉、下来、open drain、驱动强度等。
2025-01-21 13:11:51
52
原创 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
62
原创 01--嵌入式linux系统内核中LCD驱动底层详解
LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分辨率是:xres*yres。
2025-01-20 11:01:25
149
原创 2024嵌入式系统的未来发展与技术洞察分享
嵌入式技术作为一种基础性的技术,正在与物联网、人工智能、5G等前沿技术深度融合,推动社会向更加智能化、自动化的方向发展。然而,技术的进步不仅带来机遇,也引发了诸多挑战和思考。在这个变革的时代,我们需要在拥抱技术创新的同时,也要保持对其社会的影响,确保技术发展能够造福全人类。
2025-01-18 10:30:40
1576
8
原创 嵌入式开发中常见的数据结构实现
如果你是一名程序员,数据结构就是你的核心。它们是高效算法和系统设计的基本构建模块。无论你是在为编码面试做准备,优化你的代码,还是在处理复杂的应用程序,理解如何使用和实现数据结构是至关重要的。在这篇博客文章中,我们将剖析每一位开发人员都应该熟悉的 11 种数据结构。这些结构不仅在面试中很常见,而且对于在实际应用中编写高效且可扩展的代码也至关重要。数组是最基本且常用的数据结构之一。它在连续的内存块中存储元素,并允许通过索引进行快速访问。数组中的每个元素位于一个索引编号处,该索引提供了直接访问以检索或更新一个元素
2025-01-13 20:26:44
65
原创 嵌入式QT中调用对应的数据库控制与实现
大家好,今天主要给大家分享一下,如何使用嵌入式系统中的数据库存储数据,管理数据等。如果没有数据库,则闹钟程序关机了数据不保存在物理储存设备里,下次运行闹钟时就没有上次设置的闹钟数据,这显然是不合理的。所以我们需要用到数据库。在项目中使用Qt SQL模块,需要在项目配置文件中添加如下语句。
2025-01-12 21:40:57
52
原创 嵌入式系统中项目开发的基本要素
嵌入式开发各个环节紧密相扣,从最初对系统需求的精准洞察,到硬件平台的审慎抉择,再到代码编写的精雕细琢、测试调试的严苛把关,以及上线后的持续优化维护,每一步都承载着产品的品质与未来。作为嵌入式软件开发从业者,遵循可靠的方法论能助力我们打造出稳定可靠、性能卓越的嵌入式软件产品。
2025-01-11 19:52:09
100
原创 嵌入式系统里面malloc函数底层原理
ptmalloc通过brk(堆内存)或者mmap(内存映射)系统调用从内核申请一大块连续的内存,申请的内存由top chunk管理,用户程序调用malloc函数从内存池申请内存(chunk),如果内存池有空闲的chunk,则从空闲的chunk返回给用户程序,如果没有空闲的chunk,则从top chunk裁剪出可用的chunk返回给用户程序。用户程序调用malloc函数申请内存时,首先会去查询空闲链表,如果空闲链表没有足够的chunk,则去查询top chunk进行内存分配。
2025-01-11 19:32:54
174
原创 嵌入式单片机内存泄漏处理与实现
最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网运行数月以后,因为内存耗尽而导致单板复位现象。一方面,内存泄漏问题属于低级错误,此类问题遗漏到现网,影响很坏;另一方面,由于内存泄漏问题很可能导致单板运行固定时间以后就复位,只能通过批量升级才能解决,实际影响也很恶劣。同时,接连出现此类问题,尤其是其中一例问题还是我们老员工修改引入,说明我们不少员工对内存泄漏问题认识还是不够深刻的。本文通过介绍内存泄漏问题原理及检视方法,希望后续能够从编码检视环节就杜绝此类问题发生。
2025-01-08 21:14:34
358
原创 嵌入式linux系统中QT实现音频播放
大家好,今天主要给大家分享一下,如何使用Qt中的网络模块,编写实现TCP/IP客户端和服务器。接下来,可以通过QHostInfo 和 QNetworkInterface 类获取本地网络所有接口的信息。
2025-01-08 21:05:02
69
原创 嵌入式中QT实现文本与线程控制方法
利用QT进行读写文本的时候进行读写,读取MP3歌词的文本,对这个文件进行读写操作。实例代码,利用Qfile,对文件进行读写。//读取对应文件文件,头文件的实现。
2025-01-07 22:15:58
253
原创 嵌入式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
325
原创 嵌入式linux系统中QT信号与槽实现
信号与槽是Qt编程的基础。因为有了信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
2025-01-05 18:00:52
388
原创 嵌入式linux中数据结构详解与分析
数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明。编程的核心是数据结构,而不是算法。——Rob Pike。
2025-01-04 20:27:47
595
原创 嵌入式linux系统中CMake的基本用法
CMake 是一个跨平台的项目构建工具,通俗点说,它会帮你生成 Makefile 或其他编译系统需要的构建文件。
2025-01-04 20:21:23
224
原创 嵌入式系统中C++的基本使用方法
大家好,今天主要给大家分享一下,最近操作C++代码的控制方法。什么是构造函数?构造函数在对象实例化时被系统自动调用,仅且调用一次。什么是析构函数?与构造函数相反, 在对象结束其生命周期时系统自动执行析构函数。
2025-01-01 10:18:09
184
3
电机+嵌入式详细解说+各个电机分析与说明,包括常见的直流电机、异步电机、同步电机等
2024-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人