自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 静态链接库和动态链接库的生成使用和库移植

动态链接库:.so静态链接库.a。

2025-11-03 15:12:36 617

原创 linux实现设备驱动-platform

miscdevice结构体:描述杂项设备相关信息(次设备号、设备名称)结构体:驱动层操作函数集合(

2025-11-02 16:14:55 763

原创 linux实现设备驱动-字符型设备驱动和杂项设备驱动

定义一个。

2025-11-01 21:40:01 1082

原创 数据结构—栈和队列

define MAX_SIZE 100 // 栈的最大容量// 栈结构定义// 存储栈元素int top;// 栈顶指针(-1表示空栈)} Stack;遇到数字时,累加并入数值栈;遇到运算符时,比较其与符号栈顶运算符的优先级:若当前运算符优先级更高,则直接入栈;否则,不断弹出符号栈顶运算符与两个数值进行计算,结果重新压入数值栈,直到满足入栈条件。表达式结束后,处理剩余符号栈中的运算符。目标表达式示例:20*3+5,预期结果为 65。链式栈// 数据类型别名/**

2025-10-31 10:14:40 773

原创 嵌入式 Linux 开发核心流程(含应用运行、联网、内核移植与编译,向内核添加新文件)

②利用交叉编译命令生成在开发板能运行的可执行文件:(这个的使用条件为直接打开开发板)

2025-10-30 22:22:08 992

原创 编写Makefile文件

①TARGET:目标可执行程序名②CC:编译器。可设为gcc,arm-linux-gcc(交叉编译)③LDFLAGS:编译链接选项:-lpthread④OBJ/OBJ+:目标文件。

2025-10-30 20:44:30 867

原创 数据结构-双向链表

char sex;int age;int score;} DATATYPE;int clen;} DIRECT;// 函数声明#endif。

2025-10-27 09:36:12 194

原创 ADC模数转换器

基准电压为\(3.3V\),所以每个量化等级对应的电压值为\(3.3\div4096\) V。ADC 是模数转换器(Analog-to-Digital Converter)的缩写,它的作用是将连续变化的模拟信号(比如电压、电流等)转换为离散的数字信号,以便数字系统(如单片机、计算机)进行处理、存储和分析。首先对模拟信号在特定时间点进行采样,然后保持这个采样值一段时间,接着将采样得到的模拟值与基准电压等进行比较,划分成不同的等级(量化),最后把这些等级用数字代码表示出来(编码),从而得到对应的数字信号。

2025-09-29 19:53:06 407

原创 基于IMX6ULL芯片--I2C总线简单应用

应用场景分类核心作用具体原理与说明典型示例针对开漏 / 开集输出1. 提供默认高电平,消除悬空态开漏 / 开集输出仅能拉低电平(逻辑 0),晶体管截止时信号线悬空(电平不确定);上拉电阻将信号线接电源,截止时提供电流回路,把信号线拉至电源电压(稳定逻辑 1),实现 0/1 逻辑全覆盖,避免误触发。单片机 GPIO 开漏输出的按键检测(按键未按时,GPIO 通过上拉电阻保持高电平)2. 限流保护,防止芯片烧毁开漏 / 开集输出导通时,信号线直接接 GND;

2025-09-28 20:55:29 1885

原创 基于IMX6ULL 芯片 UART1

这段代码适用于 NXP IMX6ULL 芯片的 UART1 接口,实现了基本的串口收发功能,可用于调试信息输出或简单的串口通信。

2025-09-27 23:10:13 482

原创 基于IMX6ULL的时钟,定时器(EPIT,GPT)

主打高效的周期性定时中断能力。工作时,计数器从预设值开始递减,当与比较寄存器值匹配时触发中断,且支持自动重装载功能 —— 计数到 0 或匹配事件后,能自动将初始值重新载入计数器,无需软件干预即可实现稳定的周期性定时,非常适合需要固定间隔触发任务(如周期性数据采集、定时刷新)的场景,功能专一且响应高效。比较功能不仅能触发中断,还可通过配置在外部引脚输出特定波形(如 PWM)。这种多模式、多接口的特性,使其适用于更复杂的场景,如电机调速(PWM 输出)、外部事件计时(捕获功能)等,灵活性远高于 EPIT。

2025-09-25 21:28:22 1184

原创 IMX6ULL利用IRQ中断(按键)

代码说明:,无论设备是否有请求都会占用资源,实现简单但效率低,适合简单或高频率固定请求场景;当主轮询承担大量的、复杂的、耗时的业务时轮训方式则会存在漏查问题;举例这种延迟出现在实时性要求较高的场景,例如:汽车刹车。②是设备有需求时主动向 CPU 发送信号,CPU 暂停当前任务处理后再返回,资源利用率高、响应快,。是 ARM 架构中用于管理和分发中断的硬件组件,主要负责接收、优先级排序、屏蔽和分发中断信号到各个处理器核心。

2025-09-25 09:51:13 1061

原创 C语言中的关键字

2025-09-24 19:57:27 382

原创 链接脚本,编译过程和LED亮灯

用途:存放未初始化或者显式初始化为 0 的数据。运行特性:程序运行时,该段数据会被自动清零。典型示例// 静态变量(全局或局部)// 显式初始化为0的全局变量建立异常向量表和程序入口初始化系统模式和栈空间配置 GPIO 引脚功能(设置为输出模式)配置引脚电气特性(驱动能力等)编写 LED 点亮 / 熄灭控制函数(操作 GPIO 数据寄存器)实现延时函数控制闪烁频率主循环实现 LED 闪烁逻辑。

2025-09-23 21:07:13 1178

原创 ARM汇编指令集和立即数

ARM 指令集设计简洁(RISC 架构),核心围绕 “数据传输”“运算”“流程控制” 三大功能,配合特权指令实现系统级控制。立即数的合法性(mov受限于 8 位常数循环右移,ldr =可突破限制);带s后缀的指令对 CPSR 标志位的影响(用于条件判断);特权指令的使用场景(仅在特权模式下执行,如模式切换、中断控制)。本质:指令中直接编码的常数(如#5#0x10),用于快速给寄存器赋值、参与运算或位操作。优势:减少内存访问,提升指令执行效率,简化代码(无需先从内存加载常量)。

2025-09-22 21:21:05 1013

原创 嵌入式解谜日志之ARM架构的基础知识

计算机系统是硬件与软件的有机结合硬件系统(物理基础)运算器:执行算术(加减乘除)和逻辑运算(与或非),核心是 ALU(算术逻辑单元)。控制器:指挥硬件协调工作,包含指令寄存器、程序计数器(PC)等,是系统的 “指挥中心”。存储器:存储数据和程序,分内存(RAM/ROM,速度快但容量小)和外存(硬盘 / Flash,容量大但速度慢)。输入设备:将外部信息传入计算机(如键盘、传感器、摄像头)。输出设备:将处理结果反馈到外部(如显示器、打印机、电机)。软件系统(功能实现)系统软件。

2025-09-19 20:27:44 1054

原创 嵌入式解谜日志之数据结构—链式存储(单向链表)

malloc:是 C 语言中用于的核心函数特点:一组任意的存储单元存储线性表的数据元素,存储单元可以连续的,也可以不连续的。可以被存储在任意内存未被占用的位置上。

2025-09-17 20:34:22 597

原创 嵌入式解谜日志之数据结构—基本概念

O(1) < O(logn) < O(N) < O(nlogn) < O(n²) (for嵌套)< O(n³) < O(2ⁿ) < O(n!②结构体定义的是指针的引用:(per->ag)特征:支持随机访问--head+5 head[0] O(1)是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。结构体的引用:①结构体的定义是变量的引用:(per.age)#ifndef _SEQLIST_H_(文件名转换的):便于交流,阅读,理解(画流程图,给程序备注):存储低,效率高(代码简化)

2025-09-07 23:50:49 1001

原创 嵌入式解谜日志—多路I/O复用

创建实例:通过创建 epoll 实例(epfd注册事件:通过epoll_ctl向epfd中添加需要监听的 FD 及事件(如EPOLLIN等待就绪:通过epoll_wait阻塞等待,内核自动将就绪事件写入events数组;处理事件:遍历events数组,根据就绪的 FD 和事件类型(如可读)进行处理;循环监听:重复步骤 3~4,持续处理新的就绪事件。

2025-09-05 17:45:33 1136

原创 嵌入式解谜日志-网络编程(udp,tcp,(while循环原理))

(Media Access Control Address),解决 “同一局域网内设备如何通过 IP 地址找到对方物理地址” 的问题,是局域网通信的基础。(如子网掩码、网关、DNS 服务器等),避免了手动配置 IP 的繁琐和地址冲突问题,是局域网中不可或缺的基础设施。,解决 “记域名易、记 IP 难” 的问题,同时实现域名与 IP 地址的动态映射,支撑互联网服务的灵活部署。3.网络字节序:①pc,arm : 都是小端存储设备(数据的地位存放在低地址)7. 物理层(Physical Layer,第 1 层)

2025-09-02 22:36:56 2328

原创 嵌入式解谜日志之Linux操作系统—进程间共享内存

先运行写端 → 读取无效PID(0)导致 kill(0, SIGCONT) 失败。✅ 数据一致性:消息完整传递(写端未写入 \0 但缓冲区初始化为零)✅ 信号同步:SIGCONT 确保读端仅在数据就绪后执行。✅ 阻塞效果:读端在 pause() 处明确阻塞。缺少信号处理函数 → pause() 永久挂起。:成功写入数据后立即退出,无输出错误信息。:成功获取PID并发送唤醒信号后立即退出。后进程挂起,收到信号后继续执行。:挂起进程执行,直到收到信号。// 注册自定义闹钟处理。// 忽略Ctrl+C。

2025-09-01 23:53:08 1087

原创 嵌入式解谜日志之Linux操作系统—进程间的通信(IPC):无名管道,有名管道,信号通信5

在操作系统中,是指不同进程之间传递数据、共享资源或协调行为的机制。由于进程拥有独立的内存空间(隔离性),不能直接访问彼此的内存,因此需要操作系统提供专门的 IPC 机制。

2025-09-01 20:58:32 1086

原创 嵌入式解谜日志之Linux操作系统—线程控制互斥,同步4

注:任意时刻最多3个线程同时持有资源,资源获取/释放顺序可能不同,但不会出现超过3个"get win"连续出现。(如共享变量、文件、硬件设备等)时,可能因并发操作导致数据不一致(如 “丢失更新”“读脏数据”)。多线程协作时,往往需要按特定顺序执行(如 “先生产后消费”“先初始化后使用”)。注:任意时刻最多3个"get win"连续出现,资源释放后立即有新线程获取。的 “读 - 改 - 写” 三步作为原子操作执行,避免两个线程同时修改。注:严格交替输出"hello, world",共10组,无乱序或重复。

2025-09-01 19:38:35 761

原创 嵌入式解谜日志之Linux操作系统—进程2

其核心思想是多个调用者最初共享同一份资源,只有在某个调用者试图修改资源时(code,data,heap,stack),系统才会真正复制一份副本给该调用者(子进程)。②进程是动态的,程序执行的过程,包括进程的创建,调度(cpu利用时间片轮转,平级),消亡。0-3G是进程的空间(大小3G),3G-4G的内核的空间(大小1G),都是虚拟空间。1.内核主要的功能之一就是完成进程调度,硬件,bios,io,文件系统,驱动。因为子进程在fork()复制完父进程的数据后,两者单独运行,数据不共享。

2025-08-27 23:58:49 884

原创 嵌入式解谜日志之Linux操作系统—线程3

是进程内的执行单元,共享进程的内存和资源。同一进程内的多个线程可以并发执行,但线程崩溃可能导致整个进程终止。

2025-08-27 17:47:19 948

原创 嵌入式解谜日志之Linux操作系统—文件编程1

1.功能: 从指定的文件中stream中读取nmemb个元素,每个元素size大小的这么多数据,存放 到指定ptr文件中。fgets和fputs实现文件的拷贝,对于二进制文件大量存在'\0',fgets读取文件没有问题,但是fputs输出字符串,遇到'\0'就会结束输出。②遇到'\0'('\n'会被读到最终的buffer中),'\n'(换行)会读取结束;1.功能: 关闭流指针,并且刷新流中的数据到指定位置,同时关闭底层的文件描述符。

2025-08-13 20:14:21 884

原创 嵌入式解谜日志之shell编程

var=10 //shell中不需要指定类型,只需要变量名,可以直接赋值注意:自定义变量 书写时,等号左右两边不能有空格read//相当于是C语言中scanf,起到输入的作用read var //将值输入到var(所起的变量名)变量中,回车表示结束read var1 var2 ... //可以在一行,给多个变量赋值,不同值之间用空格隔开//但是最后一个变量,会将剩余值读走echo相当于C语言中的printf,起到输出的作用expr。

2025-08-11 19:46:54 954

原创 嵌入式解谜日志之C语言—结构体,共同体,枚举,位运算

struct 结构体名结构体类型名 结构体变量名;

2025-08-09 00:29:59 1990

原创 嵌入式解谜日志之C语言—指针

基类型 *指针变量名;1.基类型:说明了通过指针找到的空间(大小和用法),指针找到的空间上所存储的数据类型2.* :就是一个修饰符,用来说明现在定义的变量不是普通变量,而是指针变量.3.指针变量名:标识符//定义了一个int型指针变量p,用a的地址初始化 p指向aint a=20;int *p=&a;//定义一个指针变量p=&a;p=&a;//指针变量指向a的地址;*p=a;//*p指向a地址中的变量a5.指针运算符*:①*地址数据 :表示使用地址所在的空间。

2025-08-05 19:45:15 505

原创 嵌入式解谜日志之C语言—预处理命令

1.预处理命令:#define2.标识符:宏名,一般用大写字母表示3.字符串:宏值 只是预处理阶段的文本信息在函数中,使用宏名代替一个字符串,可以减少程序中重复书写后写字符串的工作量用途:1.用一个更有可读性的标识符(宏名):代表一个具体的值(常量),提高代码的可读性2. 符号常量:3.宏名的有效范围:#define命令一般出现在文件的开头,函数之前,宏名的范围为定义命令之后到源文件结束.4.可以用#undef命令终止宏定义的作用域.

2025-08-04 19:25:23 1104

原创 嵌入式解谜日志之C语言-二维数组(整型和字符型)的数据处理(找最大值,逆序),三种排序和查找

int i=0;for(i=0;i<5;//这里的10对应的是二维数组的10(字符串长度)//给max[10]数组赋初值s[0][10]用strcpy,括号中比较的是数组名(整个字符串)for(i=0;i<5;i++)if(strcmp(s[0],max)>0)//用strcmp函数比较两个字符型数组谁更大//用strcpy函数将s[i][10]赋给max[10];return 0;三.二分查找:前提,数组是有序的。end=mid-1;

2025-08-04 00:44:52 547

原创 嵌入式解谜日志之C语言—数组(一维数组,二维数组)

①计算数组空间大小:sizeof(array)/sizeof(int)

2025-08-03 22:22:47 898

原创 嵌入式解谜日志之C语言—选择结构和循环控制

2025-08-03 18:06:01 355

原创 嵌入式揭秘日志之C语言—函数

(1)类型标识符:int,short,long ...返回值类型(return),说明函数返回的结果的数据类型①当函数的返回值结果return的类型和定义的函数类型不一致时,return输出类型默认和函数类型 保持一致.(函数类型决定返回值类型)②如果返回值类型省略不写,默认为int 类型③如果不需要带出返回值:void 空类型对应的return后不能有值 return;(2)函数名:标识符,体现函数的功能,见名知意,代表的是函数入口地址。

2025-07-31 20:25:36 789

原创 嵌入式解谜日志之C语言-一维数组(整型和字符型)的数据处理(找最大值,次值,逆序),三种排序和查找

基本思想:适合的位置选择合适的数(升序)选择顺序是将数组中的值从a[0]开始到a[n-1],后面的值依次与其确定值比较,从下标0开始确定放入从小到大的值;每一次比较就能确定一个小值出来依次放入数组。

2025-07-30 00:02:47 293

原创 嵌入式解谜日志之C语言—输入输出

①int getchar(void); //函数原型 功能: 从键盘获得一个字符 参数:void ---空 -- 不需要传递实际参数 返回值: 成功 返回读到的 字符 对应的ASCII值 失败 EOF //end of file (-1) ②putchar int putchar(int c); 功能: 输出一个字符 参数: @c --- 要输出的字符 //ascii码值 返回值: 成

2025-07-25 20:30:03 970

原创 嵌入式解谜日志之C语言—数据类型2+转义字符

:除法 两个整型数相除取整(最终的结果也为整型)被除数不能为0;2.注意:强制不会影响运算的本身,本质上是一个运算结果。表达式1,表达式2,表达式3,...,表达式n。1.转换效果:将运算数的类型转换成()中指定的类型。②有符号的短类型 -- 高位补的是符号位。i++ //先用(表达式的结果) 后加 i。++i //先加i,后用(表达式的结果)2.长类型=>短类型 //高位截断。左值=值:将右边的值,给到左边的左值空间中。①无符号的短类型 -- 高位补0。

2025-07-24 20:23:29 548

原创 嵌入式解谜日志之C语言—数据类型1

C语言中的数据有两种存在形式:① 变量 : 在程序运行过程中,其值能被改变的量称为变量(定义变量:数据类型 变量名)② 常量 : 在程序运行过程中,其值不能被改变的量称为常量变量名命名规则名字 (标识符)1.数字、字母、下划线2.不能以数字开头3.区分大小写4.不要和系统中二级关键字重名 (include define)5.不能和C语言中的关键字重名 (32个关键字)6.不要和系统中库函数 重名。

2025-07-23 20:57:18 1146

原创 嵌入式解谜日志之linux系统基础知识

linux是一种开源的类Unix操作系统,内核由Linus Torvalds开发,具有多用户,多任务,支持多线程和多CPU的特点。是由内核,shell,文件系统和应用程序组成。也了解到linux系统的一些涉及领域:如Android系统是基于linux内核开发的,广泛运用于智能手机,平板电脑等移动设备。同时操作系统除了熟知的windows以外,linux操作系统适合开发者,开源爱好者使用。1.pwd(Print Work Directory):打印目录。2.ls。

2025-07-22 20:32:38 754

空空如也

空空如也

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

TA关注的人

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