- 博客(954)
- 资源 (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
709
3
原创 嵌入式单片机中SPI串行通信详细操作与实现
串行外设接口(Serial Peripheral Interface)的简称也叫做SPI,是一种高速的、全双工同步通信的一种接口,串行外设接口一般是需要4根线来进行通信(NSS、MISO、MOSI、SCK),但是如果打算实现单向通信(最少3根线),就可以利用这种机制实现一对多或者一对一的通信。SPI总线采用的环形结构,利用的是主从模式(主机---->从机)进行数据的传输,由于是同步通信,所以在主机发送数据的同时也会收到从机发送的数据。主机的工作模式必须根据从设备的数据手册的说明进行设置。
2025-04-01 15:20:00
12
原创 嵌入式单片机ADC数模转换的基本方法
一般在电路中,信号分为两种,一种是模拟信号,一种是数字信号,绝大多数传感器采集的都是模拟信号,如温度、湿度、烟雾浓度、亮度.......,但是对于计算机需要处理的数字信号,那就需要利用电路把模拟信号转换为数字信号,这个转换的过程需要利用模数转换器,也被称为ADC。流程可以参考stm32f4xx_adc.c的注释以及ST公司提供的帮助手册进行分析,然后以开发板的电位器(滑动变阻器)为例进行说明。想要实现模数转换或者数模转换,必须要掌握流程,基本分三步:采样 量化 编码。
2025-04-01 15:14:03
138
原创 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
256
原创 linux系统中文件操作调度方式与实现
1:普通文件--用户存储数据的标准文件,常见的有.c、.h、.txt、.bin,这里面除了.bin文件是二进制文件,其他的都是文本文件。2:可以使用linux中对应的函数来获取文件的详细状态信息。它可以用来检索文件相关的属性,如文件的权限、所有者、大小、时间戳等信息。
2025-03-29 10:18:06
94
原创 嵌入式linux系统中对应的文件锁详细实现方法
/文件锁:flock用于对文件加锁或者解锁但是只能产生建议性锁,并且同一个文件不会同时具有共享锁和互斥锁。
2025-03-28 22:11:04
194
原创 嵌入式单片机C语言中指针详解
第二,它是一个指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第0号单元占据的内存区是不同的。&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。该指针所指向的类型是p的类型,这里是int*。
2025-03-26 14:58:45
584
原创 嵌入式C++基础与三大特性实现
c++是一种中级语言,由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。c++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。C++的三大特性封装所谓封装就是将某些东西包装盒隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口以及特定的访问权限来使用类的成员继承。
2025-03-26 12:07:02
83
原创 嵌入式C++常用的函数分享
通常,在程序设计中,我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上标识符即可。在遇到第一个不能作为数值识别的字符时停止,这可能是结尾的空字符,或者是第一个大于或等于 base 的数值字符。功能:从 src 拷贝 n 个字节,交换每对相邻的字节,并把结果存储在 dest 中。功能:将字符串 nptr 转换成 double 型数据,在遇到第一个不能作为数值识别的字符时停止,这可能是结尾的空字符。
2025-03-25 17:19:43
328
原创 嵌入式硬件开发中如何将对应的EDA文件导入PADS方法
在工作中,需要使用不同的原理图绘制软件,所以学会在不同的软件之间进行文件的导入十分有必要。这里将演示将已经在嘉立创绘制好的原理图导入到PADS。7.点击导入后找到刚刚在嘉立创EDA导出的文件位置,找到Schematic1后点击打开。2.找到菜单栏上的文件,点击导出之后,选择PADS。9.可以选中原理图部分然后将其复制到Sheet1中。4.选择一个地方保存,以下示例是保存在F盘。1.打开嘉立创EDA并选择想要导入的原理图。10.有些字体重叠需要将其分开美观处理。3.点击导出PADS。6.点击菜单栏上的文件。
2025-03-25 16:38:45
209
原创 嵌入式C语言中指针类型详解
被调用函数swap中交换了形参指针变量pi,pj的值(地址),但是因为同样是参数的单向传递,形参、实参占用的是不同的内存空间,所以在尽管在swap中交换了形参指针变量pi,pj值,实参指针变量pa,pb不会改变,还是分别指向a,b。*q表示q所指向对象的内容,由于在定义q时为其初始化,将p中n的地址给q,因此p中存放n的地址,*q表示q所指向对象n的内容.因此*p=*q 相当于 n=n;选项A,*P表示P所指向对象的内容,此时P指向a[0], *P即a[0]的值1. *P+9=1+9=10。
2025-03-24 10:16:05
99
原创 嵌入式C语言中函数基本操作与实现
可以将main函数放在整个程序的最前面,也可以放在整个程序的最后,或者放在其它函数之间。例中,主函数中调用max函数的语句是:nmax=max(n1,n2,n3);注解:选项A、D不是C语言的函数定义格式,C语言在函数定义的函数头部,形参的定义是每一个形参都要有自己的关键字。例中,函数头int max(int x,int y,int z)中x,y,z就是形参,它们的类型都是整型。注意:函数不能单独运行,函数可以被主函数或其它函数调用,也可以调用其它函数,但是不能调用主函数。
2025-03-24 10:06:10
94
原创 嵌入式C语言中数据溢出的常见的问题与危险
数据溢出(Data Overflow)是指在计算机程序中,尝试将一个数值存储到变量中时,该数值超出了变量所能表示的范围。简单来说,就是当一个操作的结果超过了变量的数据类型能够存储的最大值或最小值时,发生的溢出现象。数据溢出是嵌入式开发中一个不可忽视的问题,它可能导致程序崩溃、计算错误甚至安全漏洞。在进行算术运算之前,检查数值是否超出了目标变量的范围。使用更大的数据类型(如int32_t代替int8_t)来降低溢出的风险。配置编译器选项(如GCC的)以增加溢出检测。
2025-03-22 10:56:02
28
原创 嵌入式C语言中指针类型常见的使用方法
简介:指针是一个类型指针定义:指针是一种特殊的变量,用于存储另一个变量的内存地址。void指针: 所指类型未指定,能存储任何类型变量的地址。 例如:void *p函数指针:void (*p)(void)在C语言编程中,指针是一种强大且灵活的工具,但其复杂性也常常让人感到困惑。本文将从基础概念开始,层层递进,深入探讨指针的类型、分类、运算符以及复杂的指针声明方法。通过本文,你将能够更好地理解和使用C语言中的指针,掌握嵌入式开发中的一项关键技能。一、指针的基本概念1. 什么是指针?在C语言中,指针
2025-03-21 21:43:00
26
原创 嵌入式C语言指针:从基础到深入的全面解析
在C语言中,指针是一种数据类型,它用于存储内存地址。可以说,指针是“指向”某个变量的标记。通过指针,我们可以直接操作内存地址,从而实现对数据的高效操作。*p++;和&p++;*p++;表示对p指向的变量进行自增操作。&p++;表示对p的地址进行自增操作。int*a[10];和int*a[10];:一个包含10个int*的数组。:一个指向10个int的数组的指针。和:一个数组指针。:一个函数指针,函数接受一个int参数,返回int。
2025-03-20 15:39:07
123
原创 嵌入式系统中补码的重要性:揭秘数据存储的精髓
首先,我们需要明确补码(Two’s Complement)的定义。补码是一种用于表示有符号整数的编码方式,广泛应用于计算机系统中。正数的补码:与其原码相同,即最高位为0,后面跟着绝对值的二进制表示。负数的补码:通过将绝对值的原码进行反码(取反)后再加1得到。例如,3的补码是00000011,而-3的补码是11111101。补码的引入解决了多个关键问题,包括统一正负数的运算方式、解决零的双重编码问题等。接下来,我们将详细探讨这些优势。
2025-03-20 12:03:01
30
原创 嵌入式单片机硬件设计PADS软件安装详解(win11亲测有效)
9.勾选【PADS Layout】、【PADS Router】、【Design Entry】、【Libraries】,并且取消勾选【Server Services】15.右键【以管理员身份】运行【Crack.exe】(如运行Crack.exe无法正常运行,需找到【MentorKG.exe】并右键其以【管理员身份运行】)10.选择【Target Path】,点击【Browse】调整安装路径,避免安装在C盘且安装路径不能含有中文,选择完后点击【Done】1.首先关闭电脑自带的杀毒软件与防火墙(很重要!
2025-03-19 14:54:24
367
原创 嵌入式linux内核开发中的三大实用特性:标号元素、局部标签与可变参数宏
printfprintfprintf标号元素、局部标签和可变参数宏是内核开发中三大实用特性。它们不仅提高了代码的灵活性和可读性,还在内核开发中发挥了重要作用。通过合理使用这些特性,开发者可以编写出更高效、更可维护的内核代码。希望本文能帮助开发者更好地掌握这些特性,并在实际开发中发挥它们的威力!
2025-03-19 12:20:34
148
原创 嵌入式编程优化技巧:do-while(0)、case范围扩展与内建函数
结构特别适合用于定义函数式宏或复合语句。通过这种方式,可以在宏中包含多个语句,同时避免因为宏展开导致的逻辑问题。在嵌入式编程中,优化代码的性能和可靠性是开发者的核心任务。通过合理使用结构、case范围扩展和内建函数,开发者可以显著提升代码的效率和可维护性。帮助开发者避免宏的常见问题,case范围扩展优化了条件语句的执行效率,而内建函数则为关键任务提供了高效的实现方式。无论是处理复杂的宏定义,还是优化内存操作和数学计算,这些技术都能在实际开发中发挥重要作用。
2025-03-18 21:10:59
151
原创 嵌入式GCC中属性声明以及优化代码的强大工具
GCC的属性声明为开发者提供了强大的工具,用于优化代码的性能、内存布局和符号管理。通过合理使用weakaliasconstaligned和packed属性,开发者可以编写出更高效、更可靠的代码。无论是处理符号冲突、优化纯函数,还是精细控制内存布局,这些属性都能在实际开发中发挥重要作用。
2025-03-18 20:59:06
20
原创 GCC属性声明在嵌入式开发中的应用
formatsectionGCC的属性声明为嵌入式开发提供了强大的工具,帮助开发者优化代码、提高代码质量以及满足特定的开发需求。format属性增强了变参函数的安全性,aligned和packed属性控制了内存对齐,而section属性则允许开发者指定代码或数据的段。在实际开发中,合理使用这些属性可以显著提高代码的效率和可靠性。如果你有更多关于GCC属性声明的应用场景或问题,欢迎在评论区留言讨论!
2025-03-17 20:51:29
229
原创 深入理解嵌入式开发中的三个重要工具:零长度数组、container_of 和 typeof
零长度数组(Zero-Length Array)是一个数组,其长度为零。int len;char a[0];尽管其长度为零,但它为结构体提供了一个灵活的扩展点。是一个内核宏,用于从结构体成员的地址获取结构体的首地址。它的功能类似于从指针获取结构体的起始位置。typeof是一个关键字,用于获取变量或表达式的类型。它在内核开发中主要用于宏定义中,帮助开发者编写更灵活的代码。typeof常用于宏定义中,帮助开发者编写通用的代码。a = b;b = _t;})这个宏可以交换任何类型的变量。typeof。
2025-03-17 20:32:12
148
原创 嵌入式单片机中串口的控制与实现
串行外设接口(Serial Peripheral Interface)的简称也叫做SPI,是一种高速的、全双工同步通信的一种接口,串行外设接口一般是需要4根线来进行通信(NSS、MISO、MOSI、SCK),但是如果打算实现单向通信(最少3根线),就可以利用这种机制实现一对多或者一对一的通信。SPI总线采用的环形结构,利用的是主从模式(主机---->从机)进行数据的传输,由于是同步通信,所以在主机发送数据的同时也会收到从机发送的数据。通过这两位可以得到四种不同的组合,就被作为SPI总线的工作模式(
2025-03-15 21:25:53
155
原创 嵌入式C语言中堆栈管理与数据存储的精髓
堆栈管理和数据存储是C语言嵌入式开发中的核心内容。通过深入理解栈的初始化、函数调用、参数传递以及数据存储机制,开发者可以编写出高效、安全的嵌入式程序。在实际开发中,合理使用栈和堆内存,避免内存错误和溢出,是提升程序稳定性和性能的关键。
2025-03-15 21:22:19
88
原创 嵌入式开发中的C语言标准演进与关键特性深度解析
标准选择建议资源受限场景:优先使用C99(变长数组、单行注释)。复杂系统:C11的泛型和多线程特性更适配RTOS开发。
2025-03-08 11:43:08
192
原创 嵌入式单片机STM32中IIC通信详解
可以看到从器件的地址是7bit,可以通过硬件原理图以及从器件的数据手册进行查找,比如AT24C02芯片的设备地址是1010000,但是由于IIC协议在数据传输的时候是以8bit为单位进行传输,而IIC总线只有一根数据线,所以只能采用半双工的方式通信,就要求主机设置数据的传输方向,数据的传输方向由1bit进行控制,这1bit和从器件的设备地址一起发出。每个挂载在IIC总线上的外围器件都有独立的器件地址,主机发送开始信号后,只需要发送想要通信的设备的地址,如果设备收到地址并且匹配正确,则开始进行单独通信。
2025-03-08 11:30:34
448
原创 嵌入式中Type-C 与快充相关知识详解
本章节将对Type-C 的接口进行大致了解,对封装类型进行讲述,另外关于快充协议分为公开和私有两个部分,公开协议主要以PD协议和QC协议,私有协议包括VOOC华为快充三星快充规格大致了解。
2025-03-06 12:55:36
333
原创 嵌入式C编码规范详解
结构名或枚举名必须小写,单词之间有下划线_字符结构或枚举可以包含typedef关键字所有结构成员都必须小写所有枚举成员必须是大写的结构/枚举必须遵循doxygen文档语法在声明结构体时,它可以使用以下三种不同的选项之一:1、当结构体仅用名称声明时,它的名称后不能包含_t后缀。char* a;char b;2、当只使用typedef声明结构时,它的名称后面必须包含_t后缀。char* a;char b;
2025-03-06 12:51:02
171
原创 嵌入式单片机STM32外设看门狗详细实现
注意:WWDG外设没有独立的时钟源,而是挂载在APB1总线下,APB1总线外设时钟为42MHZ。了解WWDG外设的使用流程,可以参考stm32f4xx_wwdg.c的开头注释,具体流程如下图所示注意:WWDG看门狗是具有提前中断唤醒功能的,可以利用中断服务函数来在芯片复位之前进行数据的保存,或者在某些情况下利用中断服务函数进行喂狗操作,防止芯片复位。
2025-03-04 20:49:58
50
原创 嵌入式Linux堆栈管理深度解析:从原理到实践
堆栈管理是嵌入式开发的底层核心技能,深入理解其机制能够帮助开发者编写高效、稳定的代码。通过结合理论分析与实践案例,本文系统性地梳理了栈帧操作、堆内存分配策略、内存泄漏防范等关键知识点。后续可通过反汇编调试、性能分析工具进一步巩固这些概念,最终在复杂系统中游刃有余地驾驭内存资源。
2025-03-04 20:46:31
172
原创 C语言嵌入式Linux高级编程:程序的编译、链接与运行深度解析
理解程序的编译、链接与运行机制是嵌入式开发的核心基础。从预处理到动态链接,每一步都涉及底层细节的精确控制。通过工具链(如GCC、Binutils)和脚本(如链接脚本),开发者可以灵活适配不同硬件平台,优化程序性能与资源占用。深入掌握这些知识,能够有效解决系统级问题,提升嵌入式软件的开发效率。
2025-03-03 20:42:46
253
原创 嵌入式单片机STM32温湿度模块控制与实现详解
3.通信的开始(打电话)需要注意,该过程需要调用40次,因为传输一次数据有40bit:如果采集的温湿度数据超过了用户设置的阈值,比如用户设置的温度上限为24℃,如果实际的温度超过该值,则蜂鸣器报警,并自动打开风扇,注意:用户可以通过手机设置温湿度的阈值。如 “set temp=20\n” // strstr strtok atoi。
2025-03-03 19:53:14
186
原创 嵌入式Linux高级编程:深入解析编译、链接与运行机制
优化程序性能:通过分析符号表和重定位信息,减少冗余代码。解决系统级问题:如动态库版本冲突、内存地址错误等。定制化需求:编写链接脚本控制代码布局,适配特殊硬件。
2025-03-02 18:46:49
388
原创 嵌入式linux中启动文件init.d详解
在Linux嵌入式系统的开发和维护过程中,了解系统启动和服务管理机制是至关重要的。其中,/etc/init.d/目录扮演了关键角色,它包含了用于初始化、启动、重启或停止各种服务的脚本。本文将深入浅出地介绍这个目录下常见启动文件的作用,帮助读者更好地理解如何管理和优化嵌入式Linux设备。init.d是指包含一系列Shell脚本的目录,这些脚本用于控制服务(也称为守护进程)的生命周期。当系统启动时,init进程会根据预定义的规则执行这些脚本,以确保必要的服务能够正确启动。/etc/init.d/目录下的所有文
2025-03-02 10:06:30
179
原创 嵌入式系统启动流程分析:从汇编到C语言环境的过渡分析
嵌入式系统的启动过程通常分为几个阶段,具体流程会因硬件平台和启动加载程序的不同而有所不同。1.上电(Power On):系统硬件上电后,CPU开始执行固化在硬件中的初始指令(通常是ROM中的启动代码)。2.硬件初始化:在这一阶段,CPU、内存、时钟、外设等硬件初始化。3.引导加载程序(Bootloader):加载并执行Bootloader程序,如U-Boot,它负责从存储介质加载操作系统内核。
2025-03-02 09:54:07
340
原创 嵌入式系统中C语言从源代码到进程终止调度过程
编译链接:预处理→编译→汇编→链接的完整流程。进程管理:操作系统如何加载、调度和终止进程。系统调用:用户程序与内核交互的桥梁。
2025-03-01 17:51:50
37
原创 嵌入式系统中总线、指令集与ARM架构解析
总线是硬件通信的桥梁,编址方式决定数据如何传递。指令集是CPU的底层语言,微架构决定性能天花板。ARM的灵活设计使其成为嵌入式领域的王者,从手环到无人机都在用。给初学者的建议动手写汇编代码,观察寄存器变化。用调试工具(如Keil、GDB)单步执行,理解指令流程。结合芯片手册,实战外设驱动开发(如点亮LED)。掌握这些核心概念,你就能从"调库侠"进阶为真正的嵌入式高手!
2025-03-01 17:11:50
189
原创 嵌入式开发中的计算机体系结构与主流架构深度解析
嵌入式开发的核心在于对硬件架构的深刻理解与灵活应用。无论是X86的高性能计算,ARM的低功耗设计,还是C51的简单易用,开发者需根据场景选择合适平台,并通过抽象与优化实现高效开发。未来的嵌入式系统将更趋复杂,但万变不离其宗——掌握体系结构,方能以不变应万变。拓展思考在RISC-V等开源架构崛起的背景下,传统架构如何保持竞争力?如何平衡嵌入式系统的实时性与功耗?
2025-02-28 21:21:49
312
电机+嵌入式详细解说+各个电机分析与说明,包括常见的直流电机、异步电机、同步电机等
2024-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人