- 博客(32)
- 收藏
- 关注
原创 系统驱动移植
1.bootargs:在uboot中设置环境变量setenv bootargs 'root=/dev/mmcblk0p1 rw console=ttyS0,115200',内核启动时会读取该参数,确定根文件系统位置、串口控制台、读写权限等。2.设备树:uboot将设备树二进制文件(dtb)加载到指定内存地址,启动内核时传递dtb地址,内核通过dtb识别用剑拓扑和外设信息。Linux内核是通用型内核,不直接绑定具体硬件,需要uboot传递硬件信息和系统配置才能让内核适配当前嵌入式硬件并正常启动。
2026-03-10 16:29:03
34
原创 Work to project
围绕“嵌入式项目该怎么设计才更有竞争力”展开。“智能垃圾管理系统”作为典型案例,把技术选型、系统架构、真实痛点和商业价值串了起来。比如“垃圾桶”,前500名和后500名就像垃圾分布不均——有人的地方垃圾多,没人的地方堆着浪费,需要。,彻底替代传统“人盯桶”的低效模式。更重要的是,嵌入式开发的项目不是为了炫技,而是要体现你的:从C语言纯软件 → 裸机硬件 → 带系统的复杂项目,层层递进,才显得真实可信。。从实际场景出发,一步步拆解如何构建一个完整的物联网系统。
2026-03-02 10:50:27
609
原创 Linux驱动复习小记
传统使用特定寄存器,现代基于设备树的方式 Uboot会将bootargs等参数填充到设备树的chosen结点中,然后将dtb的内存地址传递给内核。内核启动时解析设备树获取信息。目的:让内核知道它运行在那种硬件上(ID或设备树) 如何启动(bootargs) 确保内核能正确识别驱动硬件。RootFS 根文件系统 内核启动后第一个挂载的系统文件,包含了必要的程序和库是用户空间的基础。3.内核裁剪:为了移除不需要的驱动/子系统,减小内核大小和启动时间。内核成功启动后挂在的第一个文件系统,是整个文件系统的起点。
2026-02-24 16:46:03
560
原创 C语言复习小记
变量分为局部变量和全局变量,main()函数里的变量只能用于main()里,{}包围的叫代码块,代码块里的变量只能用于代码块里这个int c是一个全局变量,定义在全局局部变量只声明没赋值,值会随机。全局变量自动赋0声明一个常量,const可以声明一个常量后续无法修改这个常量但可以直接使用(只读)#define是宏定义,定义一个宏比如途中定义最大等级是一百,以后使用“max_level”时就可以使用%d,max_level这个宏的作用是在整个源文件(或包含该头文件的所有源文件)中,将所有出现的。
2026-02-10 18:49:29
363
原创 驱动day2kjfdkj
表格类别引脚名称功能说明地址线行/列地址输入Bank 地址BA0 / BA1(即 LADDR24 / LADDR25)选择存储体(Bank)数据线16 位数据传输控制信号控制读写、行/列激活等数据屏蔽LDQM, UDQM控制数据写入时哪些字节有效电源与地VDD, VSS, VDDQ, VSSQ 等供电和接地时钟与同步同步时钟相关。
2026-02-02 18:08:41
833
原创 再探ARMimxu6ll
ARM(Advanced RISC Machines)是一种基于RISC(精简指令集计算机)架构的处理器设计。它不是一家公司生产的芯片,而是一套技术授权,由 ARM 公司设计并授权给其他厂商(如高通、苹果、华为等)使用。广泛应用于手机、嵌入式设备、物联网、服务器等领域。ARM1~ARM11:早期经典架构Cortex-A:应用处理器(如智能手机)Cortex-R:实时控制(汽车、工业)Cortex-M:微控制器(MCU)模块关键点架构类型RISC,精简指令集核心组件存储器。
2026-01-30 17:42:27
1140
原创 Day6 时钟小记
时钟树是数字系统中一个至关重要的结构,它的目标是将一个或多个源时钟干净、及时、均匀地分配到芯片上的每一个需要时钟信号的寄存器(Flip-Flop)或存储单元。为了满足不同模块对时钟频率、相位和功耗的需求,时钟树设计中常常会集成这些功能单元。最常见的用途是将一个较低频率的参考时钟(例如晶振提供的 25MHz 或 50MHz)倍频到系统所需的更高频率。这些单元共同构成了复杂而灵活的片上时钟网络,满足了现代 SoC 对性能、功耗、可靠性和灵活性的综合需求。可以理解为,输入的频率需要除以一个数在输出。
2026-01-28 10:13:21
619
原创 day9 (IIC (LM75) & adc)
发送停止条件,主机在 SCL 为高时,将 SDA 从低拉高,结束本次通信。输出数字信号的位数,它决定了ADC能够区分的最小模拟电压变化——量化精度。分辨率越高,ADC 能够表示的电压等级越多,量化误差越小,转换精度越高。电子电路或器件,可以将连续变化的模拟信号转换成离散的数字信号。定义了ADC输入模拟信号的最大有效测量范围(量程)主机拉低sda,scl线,标志着一次通信的开始。同步半双工多主机多从机的串行通信总线。
2026-01-26 19:30:51
79
原创 阅读常记(日更?)
具体需要配置的寄存器取决于所使用的 ARM 芯片型号(如 STM32、S3C2440、i.MX6UL 等),不同的芯片厂商和系列会有不同的 GPIO 控制寄存器组。简而言之,链接脚本是链接器的“地图”和“说明书”,精确地告诉它如何组织和放置程序的不同部分,这对于嵌入式开发尤其重要,因为需要精确控制代码和数据在有限的物理内存中的位置。需要注意的是,像 MMU、Cache 这些组件,在某些 ARM 内核设计中是作为内核的一部分,而在其他设计中可能被视为独立的系统级组件。,取决于配置)的跳转指令列表。
2026-01-26 18:00:32
1229
原创 Day5 知识回顾
Day1重点结构知识ARM体系结构的入门课程,主要围绕硬件学习的特点、计算机系统的基本组成、各类处理器架构(CPU、GPU、DSP、MCU、MPU、SoC)的区分与应用场景,以及ARM指令集架构(RISC)与寄存器、总线、缓存、MMU等核心概念展开。再通过芯片封装类型、半导体器件(如三极管、MOS管、门电路)、存储器体系(SRAM/DRAM/Flash)、总线结构、处理器工作模式、异常处理机制及异常向量表等核心知识点,并结合硬件实例与工程实践进行深入剖析。
2026-01-21 19:52:14
567
原创 ARM SecDay
表格类型参数传递返回值处理注意事项C → 汇编r0~r3(前4个)r0函数需声明为 global汇编 → Cr0~r3r0需保存 lr,用 bl 调用所有标准都基于 AAPCS 规范,确保 C 和汇编互操作性。表格题号答案简述1立即数是指令中直接给出的常量;ARM 只能用mov加载 8 位可旋转的立即数(如 0xFF),不能加载任意值(如 0x1fb0)。2b是相对跳转,不改变状态;bx是绝对跳转,可切换 Thumb/ARM 模式。3ARM 内核使用。
2026-01-19 09:56:03
633
原创 51第三,从代码开始的异世界生活
按键数码管显示小程序通过改if语句可以按键未按下时进行判断,若未按下数码管显示0位选:在第一个数码管显示段选:在十个数字中选择显示。
2026-01-18 21:43:36
593
原创 51第二弹数码管续集
Genral Purpose Input Output,通用输入输出,是与外界交互最基本的形式,可以独立的将 引脚配置为输入模式/输出模式。控制引脚 输出高电平/低电平(给定控制信号) 开漏输出 推挽输出 复用开漏 复用推挽。检测引脚的电平(接收外部信号) 上拉输入 下拉输入 浮空输入 模拟输入。动态显示:快速刷新做到“余晖”1.12欠的一点东西整理完了。
2026-01-15 01:01:32
797
原创 初识51..标题短就短呗咋我车轱辘滚一滚滚一滚... ...
单片机相关硬件本人所用为普中51MS开发板,芯片为89C52RC硬件拆分发光二极管:二极管:阳极、阴极 单向导通性共阳极二极管:将所有发光二极管的阳极连接到VCC,发光二级的阴极接到单片机的引脚,此时阳极输出 高电平,给对应单片机引脚低电平,满足发光二极管的单向导通性,电流会从阳极流向阴极,LED被点亮。位运算1000 00011111 1110&= 不可以和 | 一样连续写,得分两行Keil软件的使用1.编辑main.c。
2026-01-12 21:51:13
687
原创 写一个音乐播放器
由于本人对进程部分的编程兴趣不高,决定先制作一个小项目。在做中学在学中做首先需要大致了解进程线程管道方面的基本知识正在执行的程序实例,是操作系统进行资源分配调度的基本单位PCB,进程控制块,在Linux中表现为结构体其中包含:PID(进程标识符);当前工作路径(可通过chdir改变);umask(文件创建掩码,默认0002);进程打开的文件列表;信号处理设置;用户ID、组ID;进程资源上限(ulimit -a查看)
2025-12-22 16:21:46
942
原创 进程,有点东西的东西
系统用于描述正在运行的进程的相关(所有)信息。2.安全性(权限管理),linux也是运行在内存上的。3、 守护进程 进程会自动运行,默认不需要输入,处于休眠状态。在多进程中,a进程不能访问b进程的内存空间。在操作系统中,在一个时间段内同时运行多个任务的能力。进程是一个程序执行的过程,会去分配内存资源,cpu的资源。1、交互式进程 进程运行后需要用户的输入,在给出对应的输出。4)进程与进程会存在竞争计算机的资源。2)进程有程序状态的变化,程序没有。1)程序是永存,进程是暂时的。3)进程可以并发,程序无并发。
2025-12-15 18:05:37
172
原创 指针,不多的记录
int *p1[5];取值运算符”*“和下标运算符“[ ]”(优先值高)同时作用于p1。)——>,数组是连续的,所以只需要直到第一个地址。*(array+1)表示的是指向第二行子数组的第一个元素的地址。p2先被定义为指针,指向数组。是一个数组,每个数组元素存放一个指针变量。array,指向包含五个数组元素的指针。这几个二维数组的值都是相同的。
2025-12-10 20:38:42
198
原创 指针指针你到底是什么
指针指针变量存地址,普通变量存数据pa/pf是指针,它们的存放地址是 11000 11004,一个指针占四个字节用来存放a/f的地址 10000 10005a/f这俩地址存放数据 F 123存放地址叫指针pa pf,地址的变量叫指针变量a f类型名 *指针eg:char *pa;// 指针变量中存放的地址指向的内存单元的数据类型(F/123)int *pb;取地址运算符和取值运算符获取某个变量的地址访问指针变量指向的数据用取值运算符(间接运算符)*pa是地址指向的变量的值。
2025-12-06 20:43:57
384
原创 GDB和小栈栈
应用:递归,回溯问题。与优先级有关区别:数据结构中栈和系统中栈的关系工作原来一样,先进后出系统栈,是03G内存中的一段(8M),存储。函数的调用关系,局部变量,参数,返回地址数据结构栈,内存空间在堆空间中开辟。适用场景更广。
2025-12-04 09:08:33
149
原创 杂七杂八的叽里呱啦
摘要:共用体(union)是一种自定义类型,其成员共享内存空间,大小为最大成员变量的大小,常用于大小端判断和函数参数传递(如EPOLL)。枚举类型(enum)用于限定变量取值范围,如星期、月份等。位操作针对整型变量的二进制位,常用于硬件寄存器操作。堆内存可动态申请(malloc)和释放(free),适用于需要大量内存(<2.5G)且需程序员管理生命周期的场景。
2025-11-25 17:40:28
252
原创 统筹数组世界
while先判断再执行,do_while先执行再判断。(循环初始化表达式;break 和 continue只能作用于一级循环。跳出当前语句(不执行)存储一批同类型数据的地方,数组不能动态定义。类型 数组名[元素个数] —— 订包厢。i=0,所以第一位同学成绩就是i+1;while 和 do_while。内层循环决定列 外层循环决定行。宏定义后期好切换数值。
2025-11-24 01:07:55
179
原创 路过if语句
case 'A':printf("你的成绩在90分以上!// 逻辑值为真所执行的语句、程序块。// 逻辑值为假所执行的语句、程序块。case 常量表达式1:语句或程序块1;case 常量表达式2:语句或程序块2;case 常量表达式n:语句或程序块n;default: 语句或程序块n+1;跳出整个switch语句。printf("请输入成绩:");... ... // 其它语句。... ... // 其它语句。... ... // 其它语句。... ... // 其它语句。
2025-11-19 21:12:16
290
原创 大荒囚天指
所有的指针都是8byte(64bit),不论什么类型。内存地址范围0-ffffffff ffffffff,刚好可以使用一个8byte的整数表示。//int*,相当变量的类型升级->升级为对应基类型的指针。野指针,1.p中存储的地址使用随机值;-> int 给指针降级,由原来的指针类型转换为对应基类型变量。'*' 解引用,获得指针变量指向空间的内容。操作对象是指针或地址。如果需要打印地址,使用printf("%p\n",&a);(&) 取地址运算符,获得对应变量内存的首地址。先定义指针,稍后在p中装入地址。
2025-11-19 21:11:31
309
原创 闯循环前传
/ 基类型 int[ ] int[5] a;无条件跳转,在应用层程序中禁止可以用其他循环替换,goto常用在linux的内核编程中的错误处理。循环三要素:初始化的变量,变量的条件检测,变量发生变化()使条件趋近于假。expr3:执行,循环控制变量的++,--。循环的控制:continue提前结束本次循环,break结束整个循环。expr2:运用逻辑(1,0),若为真执行,反之结束。外层循环运行一次,内层循环运行一遍。4.goto 无条件跳转?
2025-11-10 19:23:36
287
原创 初入C语言世界,.c程序的运行
昨天对第一天只是进行了巩固,遇到的小问题:/home/linux写作~/...,两者等价,故而不可写作/~/。十六进制 0 1 2 3 4 5 6 8 9 a b c d e f 逢十六进一。汇编 汇编文件转object文件,二进制 gcc -c 2.c -o 2.o。预处理#define gcc -E 2.c -o 2.i。上次学习了如何让程序输出,现在我们接着看看程序运转的动态。编译 gcc -S 2.c -o 2.s。链接 gcc 2.c -o a.out。2.从硬盘上加载a.out到内存。
2025-11-05 09:02:57
132
原创 Linux的初阶指导与尝试
由于本人才疏学浅,在cp过程中出现错误,发现是文件路径问题,决定使用刚才学习的显示目录中所有文件查找指定文件的文件名。cd .. 目录向上退一层(cd ../../.. 往上退三层,其中../../..为相对路径)2.gcc生成可执行文件,gcc 1.c(2.c,xx.c...)将产生可执行文件——a.out。1.2 在终端当中,可以使用tab建,进行文件名或目录的名的快速补齐。回顾得知,路径前面多了一个“/”,学习需要严谨。esc进入命令模式,'/'后输入查找内容,n下一个N上一个。
2025-11-03 20:25:13
294
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅