- 博客(49)
- 收藏
- 关注
原创 U‑Boot 笔记
U‑Boot 是 bootloader 的一种,作用:内核加载前初始化硬件,为Linux内核提供引导功能。i.MX6ULL 上电启动链路:芯片上电 → 片内ROM → U‑Boot第一阶段 → U‑Boot第二阶段 → Linux内核 分两阶段原因:片内RAM(OCRAM)仅128KB,放不下完整U‑Boot镜像。
2026-10-08 14:43:01
205
原创 i.MX6ULL嵌入式Linux系统移植学习笔记
将U‑Boot、zImage内核镜像、rootfs根文件系统,烧写到开发板存储介质的整个过程,叫做系统移植。U‑Boot:开源引导加载程序;完成硬件初始化、镜像加载、给内核传递启动参数。zImage:Linux内核镜像,管理处理器、内存、进程调度、网络通信、硬件设备。rootfs:根文件系统,Linux运行基础,提供文件管理,用户交互。设备树记录硬件资源。Linux3.x以前硬件信息编译在内核镜像;3.x之后独立成dtb文件。
2026-10-07 11:16:48
217
原创 arm day3 汇编LED / C语言LED
DPIOx_ICR1:设置GPIOx组某个引脚中断触发方式(低电平、高电平、上升沿、下降沿)IOMUXC_SW_MUX_CTL_PAD:引脚复用功能 _GPIO_IO03。IOMUXC_SW_PAD_CTL_PAD:电气属性 _GPIO_IO03。GPIO1_GDIR:设置GPIO1组某个引脚方向(输入0/输出1)Id 链接器,合并多个.o,地址重定位,生成elf可执行文件。GPIOx_IMR:设置GPIOx族某个引脚中断屏蔽/允许。GPIOx_PSR(只读):读取GPIOx组某个引脚状态。
2026-09-18 17:45:25
207
原创 arm day2 汇编
立即数就是12位立即数imm12如果某个数的数值范围是0~0xFF之间,那么这个数一定是立即数;把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;这个数的二进制序列凑够8位之后的的右边必须为偶数个连续的 0。
2026-09-16 18:05:22
217
原创 arm day1
MMU内存管理单元:将程序中虚拟地北转化为物理地址CACHE高速缓存:CPU直接从CACIHE中访问数据,提高CPU的访间效率。
2026-09-16 16:56:13
194
原创 51单片机 ds18b20
(1)量程(温度测 量范围 ): -55℃ - 125℃(2)精度(传感器测量的温度与实际 温度值 之间 允许的最 大误差 ): ±0.5℃设备温度 环境温度实际温度值 : 25℃传感器采 集温度值 :24.5 - 25.5(3)分辨率(传感器对温度 变化敏感程度), 分辨率越高,能察觉到微小 温度变化 越小,读数 就越 细腻9位 : 0.5℃10位 : 0.25℃11位 : 0.125℃12位 :0.0625℃(4) 工作电压:3V - 5.5V。
2026-09-16 16:18:26
194
原创 51单片机 day3
半双工:数据的传输只有一根信号线;通信双方既可以是数据的发送方,也可以是数据的的接收方;数据的传输方向不固定,但同一时间数据传输方向呈现单一性。全双工:数据的传输有两根信号线;通信双方既可以是数据的发送方,也可以是数据的的接收方;数据的传输方向在任意时间都是固定的。单工:数据的传输只有一根信号线;数据的发送方和接收方固定;传输距离远,抗干扰性强(信号线少,干扰小,不存在多根信号线偏移)串行传输:通过一根信号线传输数据,按照先后次序逐个bit发送。同步通信:通信双方有一根共享的时钟信号线来约定通信频率。
2026-09-14 13:17:37
87
原创 51单片机 day2
51单片机中断源:外部中断0(P3_2)、外部中断1(P3_3)、定时器0、定时器1、串口(5个)2. 检查CPU是否允许中断及该中断源是否被屏蔽(CPU中断总开关 + 中断源子开关)PWM周期:一个方波所经历的周期(上升沿/下降沿到下一个上升沿/下降沿所经历的时间)中断概念:当CPU执行某个任务时,被外部紧急事件所打断,要求CPU暂停当前任务,无源蜂鸣器:不存在震荡源,通电后蜂鸣器不会发出声音,需要给定蜂鸣器一个震荡。有源蜂鸣器:存在震荡源,通电后蜂鸣器会发出持续固定频率的声音。3. 比较中断优先级。
2026-09-14 12:50:25
120
原创 51单片机 day1
箭头指向N型半导体,箭头的出发点是P型半导体,箭头朝外是NPN型三极管:基极输出高电平,三极管导通;通过4个NPN型三极管控制,给三极管基极对应引脚高电平,三极管导通,再通过P1寄存器,给定对应引脚高电平,则点亮。箭头朝内是PNP型三极管:基极输出低电平,三极管导通;MCU:微控制器 集成度高 所有功能集中在一片芯片,应用在简单领域,成本低。1.什么是CPU、MCU、MPU、GPU、NPU、FPU、SOC?SOC:片上系统 多个功能集成在一块芯片(体积小,功耗低)5.NPN型三极管和PNP型三极管的区别?
2026-09-14 12:33:06
80
原创 嵌入式平台数据库
打开一个数据库文件,获得操作数据库文件的句柄;如果数据库存在,则打开;打开数据库‑‑‑》读写数据库(增,删,改,查)‑‑‑》关闭数据库。以键值对存储,且结构不固定(//JSON):select查询到数据时执行的回调函数。将复杂的数据结构简化为二维表格形式。TEXT类型的数据,插入时要用。:将句柄传过去,获得出错原因。:在数据库中执行SQL语句。:关闭数据库句柄,释放空间。:释放保存出错信息的空间。
2026-09-07 10:16:44
163
原创 TCP并发服务器:多进程 多线程 IO多路复用(select poll epoll)
单循环服务器:一次只能处理一个客户端任务的服务器。并发服务器:能够同时处理多个客户端任务的服务器。(一对多)
2026-09-05 10:41:45
207
原创 TCP协议:特点 编程方法 粘包问题 TCP机制
TCP(Transmission Control Protocol):传输控制协议(流式套接字),传输层。
2026-09-03 11:09:00
237
原创 Linux应用软件编程笔记‑Linux网络编程 UDP
网络:不同主机,进程间通信。IP地址:计算机的软件地址,标记主机 端口号:识别同一主机上的不同网络进程。
2026-09-02 10:47:28
153
原创 Linux应用软件编程:进程间通信(IPC):管道 信号
进程间空间独立,不能直接通信,数据共享需要使用IPC机制进程间通信的方法:同一主机间进程通信:1.古老的通信方式有名管道无名管道信号2.IPC对象通信system V共享内存消息队列信号量集不同主机间进程间通信:3.socket通信网络套接字。
2026-08-30 18:00:19
240
原创 Linux应用软件编程:线程分离属性 互斥机制 同步机制 死锁
分离属性 :不需要被其他线程回收的线程,称为具有分离属性的线程,结束时可以被操作系统回收。非分离属性:可以被其他线程回收或者结束的线程,称为非分离属性的线程 ,结束后必须被其他线程回收默认属性:非分离属性设置线程分离属性:功能:设置线程的分离属性参数:thread:要设置的线程的线程ID返回值:成功:0失败:非0。
2026-08-29 18:51:04
245
原创 Linux应用软件编程:进程空间回收 exec函数簇 线程
线程是一个轻量级的进程,用来实现多任务并发。线程是操作系统任务调度的最小单位。(进程是操作系统资源分配的最小单位) 线程由某个进程创建。
2026-08-28 19:04:32
192
原创 Linux应用软件编程:目录IO framebuffer
帧缓存、帧缓冲技术。是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,通过设备,文件可以实现应用层向显存空间的数据写入,从而实现像素点的绘制。RGB888(四字节 RGB565(两字节。
2026-08-24 17:50:52
224
原创 Linux应用软件编程:文件IO 缓冲区 其他函数接口
当打开一个文件时,系统会为已打开的文件分配一个文件描述符用来标记该文件。功能:将格式化后的字符串写入到stream文件流代表的文件中。文件IO:Linux内核提供的文件操作接口。功能:将格式化后的字符串写入到fd文件描述符代表的文件中。只打开文件,不关闭文件,会造成文件描述符泄漏。打开文件---》读写文件---》关闭文件。功能:打开一个文件,并获得一个文件描述符。成功:返回当前读写位置到文件开头的偏移量。pathname:要打开文件的文件名。文件描述符:小的、非负的整形数据。
2026-08-22 17:20:28
465
原创 Linux应用软件编程:标准IO函数 bmp 时间函数
普通文件 分为:二进制文件ASCII码文件注意:1.fgets和fputs主要用于按行操作ASCII码文件,不能读写二进制文件(fputs无法写入0)
2026-08-21 18:33:53
396
原创 数据结构:哈希表 算法相关 排序算法
将要存储数据的关键字和春初位置之间建立对应映射关系,存储数据时,按照映射关系寻找存储位置;查找数据,根据关键字和映射关系,寻找原数据的存储位置映射关系称为哈希函数(散列函数)目的:提高查找效率f(key)=key%10:求余法f(key)=a*key+b:一次函数法key1!=key21.开放定址法2.链地址法1.创建哈希表2.设计哈希函数3.哈希表数据插入4.哈希表的查找5.销毁哈希表6.遍历哈希表。
2026-08-19 17:54:19
1004
原创 数据结构:二叉树
树:由根节点和若干个子节点构成的具有一对多关系的数据的集合,称为树形结构。完全二叉树:在满二叉树基础上,按照从左到右,从上到下依次增加节点的树形结构。二叉树:树的广度为2的树形结构,且各节点的左右子节点不能交换。满二叉树:在不增加层数的情况下,无法再增加一个节点。树的度(数的广度):树中节点最大的度是该数的广度。K层满二叉树:第K层的节点个数:2^(K-1)叶子节点(终端节点):向后没有子节点的节点。分支节点(非终端节点):有子节点的节点。节点的度:节点的子节点个数。叶子节点的节点的度为0。
2026-08-18 21:14:18
523
原创 数据结构:循环队列 栈
本文介绍了循环队列和栈两种数据结构。循环队列通过首尾相接的结构解决假溢出问题,使用(tail+1)%len==head判断队满,并提供创建、判空、入队等API。栈结构具有先进后出特点,分为顺序栈和链式栈,顺序栈根据栈顶位置和生长方向分为满栈/空栈、增栈/减栈。栈的API包括创建、入栈、判空等操作,应用于撤销功能、回文判断等场景。系统栈与数据结构中的栈不同,是由操作系统管理的内存空间。
2026-08-17 16:55:24
442
原创 数据结构:双向链表 内核链表 链式队列
本文介绍了链表操作中的几种常用算法技巧。主要包括:1. 快慢指针法(查找中间节点和倒数第k个节点);2. 链表基本操作(查找、删除特定节点、逆序、排序);3. 环形链表处理(判断是否有环、获取环入口);4. 双向链表操作(头插尾插、头删尾删);5. 内核链表与普通链表的区别;6. 队列的基本概念(FIFO特性)及其应用。这些算法涵盖了链表操作的核心技术,包括单/双向链表处理、环形链表检测以及队列实现等常见数据结构问题。
2026-08-15 18:21:11
445
原创 数据结构:数据与数据间的关系 单向链表 valgrind测试内存泄漏
本文摘要:数据结构是组织和存储数据的集合,与算法共同构成程序设计基础。主要内容包括:1)数据逻辑结构(集合、线性、树形、图形)和物理结构(顺序、链式、索引、散列存储);2)重点学习顺序表、链表(单向/双向/循环)、队列、栈、二叉树和哈希表;3)链表操作(创建、插入、删除、查找、遍历等),需掌握结构体和指针;4)使用valgrind工具检测内存泄漏问题。文章系统介绍了数据结构的基本概念和链表实现要点。
2026-08-13 18:29:49
266
原创 五子棋项目
本项目基于 Linux 帧缓冲手写一套极简 2D 绘图引擎,不依赖 Qt、LVGL 等第三方 UI 库,纯 C 实现 20×20 五子棋。
2026-08-13 09:10:09
541
原创 C语言基础:位运算 程序调试方法
本文介绍了位运算的基本概念和常见操作。位运算符包括按位与(&)、或(|)、异或(^)、取反(~)以及左移和右移,支持整型和字符数据类型。通过示例演示了如何用位运算进行指定位设置、清零和变量交换等操作。此外还介绍了三种求和方式,并说明了位运算符的优先级(~最高)。文章最后简要介绍了两种调试方法:printf打印调试和使用gdb工具进行调试的基本步骤
2026-08-10 16:04:11
538
原创 C语言基础:共用体 枚举体 内存管理与位运算
本文介绍了三种C语言特性:1)共用体(联合体),其成员共享内存空间,大小为最大成员字节数,存储最后赋值的成员数据;2)枚举类型,用于定义整型常量集合,默认从0开始编号;3)typedef关键字,用于为数据类型重命名。此外还讲解了动态内存管理(malloc/free/calloc)及堆栈区区别,指出堆区需手动管理且有内存泄漏风险,而栈区由系统管理但空间有限。文中包含大小端检测方法和枚举应用实例。
2026-08-07 17:38:32
551
原创 C语言基础:构造数据类型-结构体 memcpy系统函数
const指针:介绍const修饰指针的四种用法,包括指针常量、常量指针及双重const限制,强调初始化要求。 void万能指针:说明void作为通用指针的特性,演示与具体类型指针的转换及memcpy函数实现,包含内存重叠处理示例。 结构体详解:涵盖结构体声明、变量定义、初始化、成员访问(直接和指针方式)、内存对齐规则(含#pragma pack用法)及结构体作为函数参数的传递方式(值传递与地址传递的区别),附带结构体数组定义示例。全文通过代码片段辅助说明核心概念。
2026-08-06 17:26:49
257
原创 C语言基础:指针数组 指针函数 函数指针
本文系统讲解了C语言中指针相关的高级概念。首先介绍了指针数组(保存指针的数组)的定义、初始化方法,并与二维字符数组进行了对比分析。其次详细说明了二级指针的概念及两种使用场景:修改主调函数指针变量和处理指针数组。然后阐述了指针函数(返回指针的函数)及其可返回指针类型限制。最后讲解了函数指针的定义、初始化、赋值和应用场景,特别是回调函数的使用优势。这些知识涵盖了指针在C语言中的核心高级用法,对理解复杂指针操作和函数交互具有重要意义。
2026-08-05 17:41:23
518
原创 C语言基础:指针与数组的关系 数组指针
文章主要探讨了指针与数组的关系及其应用。首先说明一维字符数组名即首元素地址,是指针常量,并展示了通过指针访问数组元素的方法。接着介绍了const修饰指针的用法,以及如何用指针实现字符串长度计算、复制、拼接、比较和逆序等操作。第二部分讲解数组指针的概念,指出其本质是指向整个数组的指针,并给出定义语法和使用示例。最后分析二维数组与指针的关系,说明二维数组名是一维数组指针,并提供了二维数组作为函数参数的两种声明方式。文章通过代码示例详细演示了各种指针操作技巧。
2026-08-04 17:27:31
534
原创 C语言基础:预处理命令 指针
本文主要介绍了C语言预处理命令和指针的基础知识。预处理部分包括gcc编译的四个步骤(预处理、编译、汇编、链接),详细讲解了宏定义(带参和不带参)、头文件包含和条件编译的使用方法及注意事项。指针部分涵盖了指针变量的定义、初始化、运算符(*和&)使用、算术运算规则,以及指针作为函数参数的用法。文章特别强调了野指针的风险及防范措施,并说明了指针与一维数组的关系,指出数组名作为地址常量的特性。这些知识对理解C语言的底层机制和内存操作至关重要。
2026-08-03 17:37:02
515
原创 C语言基础:函数和数组的关系 变量的作用域和生命周期
数组传参:一维字符数组传参只需传递数组名,函数通过\0判断结束;二维数组传参需指定列数,行数需额外传递。数组传参本质传递首元素地址(8字节)。 变量作用域与生命周期: 局部变量:作用域限于定义块内,动态生命周期,存储在栈区; 全局/static变量:全局作用域或局部作用域(static),静态生命周期,存储在数据区(未初始化默认为0)。 存储类型: static延长局部变量生命周期或限制函数/全局变量作用域; register建议变量存寄存器(不可取址); extern声明全局变量/函数供外部文
2026-08-01 17:25:55
539
原创 C语言基础:函数基础(二) 函数与数组的关系
本文介绍了C语言函数相关的关键知识点:1.函数声明规则,包括前置声明和多文件调用;2.函数执行过程的保护/恢复现场机制;3.值传递特性及参数求值顺序(自右向左);4.递归调用的定义、注意事项及示例(求和与阶乘);5.数组作为函数参数的传递方式(首地址传递)及注意事项(需额外传递长度)。重点强调了值传递的单向性、递归的出口条件,以及数组传参时实际传递的是首地址的特性。
2026-07-31 17:29:04
301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅