自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式Linux内核编译与配置

直接触发CPU异常,导致程序崩溃,系统打印寄存器信息后执行(复位CPU,重启或进入异常处理 )。常见于嵌入式开发(如mini2440这类ARM9开发板 ),解决核心是对齐编译工具链、指令集、内存管理三者的兼容性。如果是自己编译程序/内核,优先从编译选项、指令集配置查起;如果是运行别人的程序,重点检查内存访问是否越界~**

2025-08-25 21:58:40 1165

原创 硬件驱动---linux内核驱动 启动

关闭cache------D-Cache必须关 I-Cache ----确保数据的一致性;0地址就是整个内存(寻址空间)的起点,第一个位置,就像一条街道的门牌号从0开始一样。搬移内核到内存--------把操作系统内核加载到内存中。初始化异常向量表------用于处理系统异常情况。对硬件而言,0地址是“起点”,是故事的开始。初始化栈------为函数调用等准备空间。关看门狗------防止系统意外重启。初始化内存------准备好内存空间。初始化时钟-----设置系统时钟。初始化CPU—工作模式。

2025-08-22 21:13:57 262

原创 网络编程之多路复用---mutilio

单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力。

2025-07-24 21:23:33 903

原创 # 2网络编程之UDP用户数据报

【代码】# 2网络编程之UDP用户数据报。

2025-07-24 10:58:20 315

原创 第四部分:1、网络编程

请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。(10)首部检验和 占16位。(9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。

2025-07-21 21:10:10 1962

原创 # 进程间通信(IPC)之共享内存与信号量集

共享内存(shm)信号量集(sem)消息队列(msg)数据量比较大的时候:共享内存就是为了存储更大的内存-1 : 0;-1 : 0;

2025-07-21 10:23:28 882

原创 IPC进程间通信 interprocess communicate

IPC 进程间通信 interprocess communicate进程间通信的原理:a和b是独立的,所以要找到一个公共的空间,把信息存储在这个空间上,在内核空间上,开一片内存区域,a和b都可以找到这个公共的区域。

2025-07-17 22:22:51 1931

原创 pthread线程的控制

放在线程启动之前。

2025-07-16 20:20:11 2034

原创 POSIX线程(pthread)编程

优点比多进程节省资源可以共享变量概念线程是轻量级进程,一般是一个进程中的多个任务进程是系统中最小的资源分配单位线程是系统中最小的执行单位特征共享资源效率高(约提升30%)pthreadcloneposixpthread.h-lpthread(对应。

2025-07-15 20:03:11 937

原创 2\多进程/回调函数/退出函数exec/多个程序的切换

*比多进程节省资源可以共享变量。

2025-07-14 22:01:26 815

原创 初识进程——————proc

进程是程序的一次动态执行过程,是操作系统进行。

2025-07-14 09:16:01 646

原创 EDID编辑器开发总结

如有补充请你后期做补充。

2025-07-10 20:47:49 450

原创 数据结构之队列

队列:队列是只允许在一段进行插入,而在另一端进行删除操作的线性表。允许插入的称谓队尾,允许删除的一端队头。顺序队列。循环队列,常用操作,入队,出队。先进先出,FIFOint tlen;int head;int tail;}SeqQueue;int tlen;int clen;

2025-06-27 14:00:58 496

原创 小白初识嵌入式day14 指针(三)

/ p[i]等价于*(p+i),表示第i行的数组名。if (*(*(arr + i) + j) > max) { // 指针访问方式。◦ 复杂指针类型可通过"从右向左"阅读法理解(如int (*p)[4]是"指向int[4]的指针")• *(p + i) + j:在第i行中偏移j个int的位置,得到元素地址。◦ 二维数组本质是"数组的数组",数组指针int (*)[n]是访问的关键。// a的类型是 int (*)[4](指向包含4个int的数组的指针)

2025-06-16 21:34:09 396

原创 小白初始嵌入式day13

p是一个指向short型数据的指针,当对p进行解引用时,会从p所指向的地址开始,读取2个字节的数据(short型的大小),因此输出的是0x5678(假设系统为小端模式)。本文从指针的基本概念出发,讲解了指针的定义、运算、与数组和字符串的关系,以及在函数中的应用。这是因为指针存储的是内存地址,而64位系统的地址空间是64位的。这些函数的参数都使用了指针,其中const修饰的指针表示该指针所指向的内容不可修改,增加了函数的安全性和适用性。此时,指针p的数据类型是int*,表示这是一个指向int型数据的指针。

2025-06-16 21:27:16 728

原创 小白初识嵌入式Day12

• 参数加括号:#define SQUARE(x) ((x)*(x)),避免SQUARE(a+b)变成a+b*a+b。printf("表达式测试: %d\n", MAX(a++, b));#define C B*2 // 展开后为10+5*2=20,而非(10+5)*2=30。• 特殊情况:字符串中的同名标识符不替换,如printf("PI");printf("最大值: %d\n", MAX(x, y));

2025-06-12 01:02:48 509

原创 小白初始嵌入式Day11

之所以需要额外传递数组长度,是因为在函数传参后,数组退化为指针,此时使用sizeof运算符无法获取数组的实际元素个数,在64位系统中,sizeof作用于数组参数的结果为8(即地址的大小)。此外,通过数组下标的访问方式,在被调函数中修改数组元素的值,实际上会修改主调函数中数组对应位置的元素,这是因为传递的是数组的地址,函数内外操作的是同一块内存区域。在C语言的学习过程中,函数与数组的结合使用是一个非常重要的知识点,尤其是数组作为函数参数的相关内容,掌握好这部分知识对编写高效、灵活的代码至关重要。

2025-06-11 07:40:58 686

原创 小白初始嵌入式Day10

(1)类型说明符:函数处理完成数据后,其结果的类型-----返回值类型(return);(2)函数名:体现函数的功能功能(3)形参:用来接受处理的数据(输入)传递给函数处理(4)函数体:具体实现函数功能的代码。

2025-06-10 15:11:17 905

原创 小白初始嵌入式Day9

例如字符串常量"hello",在内存中实际存储为'h' 'e' 'l' 'l' 'o' '\0',其中'\0'是字符串的结束标志。需要注意的是,我们在处理字符串时,相较于数组的固定长度,更关注字符串的有效长度和内容本身。实现过程是先找到目标字符串dest的'\0'位置,然后将源字符串src的字符逐个复制到该位置之后,最后添加'\0'作为新字符串的结束标志。:用于从标准输入读取字符串。这里数组s长度为10,但字符串"hello"的实际长度为5(不包含结束符'\0'),剩余位置在初始化后可能是未定义值或0。

2025-06-09 01:26:57 283

原创 小白初始嵌入式Day8

if (a[j] > a[j + 1]) { // 升序比较(降序改为a[j] < a[j+1])if (a[j] < a[i]) { // 升序比较(降序改为a[j] > a[i])for (int i = 0;// 有效字符11个(不含`\0`),总长度12(含`\0`)while (j > 0 && a[j - 1] > temp) { // 向前查找插入位置(升序)// 输入"hello world"时,仅存储"hello\0",后续字符丢失。

2025-06-06 01:08:57 753

原创 小白初识嵌入式day7

4. 定义数组时,数组长度可以省略,但前提是必须进行初始化,实际长度取决于初始化元素的个数,如int[]={1,2} ,若不初始化直接省略长度,编译器无法分配空间,会报错。1. 全部初始化:int a[10] = {1,2,3,4,5,6,7,8,9,10};冒泡排序的核心是当后一元素大于前一元素时进行交换,这样每轮循环的开始元素都是那一轮循环的最小值,从而实现将数组从小到大排序。◦ 值:数组名代表数组首元素的地址,也是整个数组的起始地址,由于数组在内存中是连续存储的,通过该地址可以访问数组的所有元素。

2025-06-05 01:24:30 607

原创 小白初识嵌入式day6

1. 定义变量:old(原始数)、tmp(暂存个位)、new(倒序数)。• 不建议常用:破坏程序结构化(独立功能模块可提升可读性和移植性)。• continue:跳过本次循环剩余代码,直接进入下一次循环判断。2. 循环体:重复执行的代码,如累加sum = sum + i;回文数定义:正序和倒序读取结果相同(如121、1331)。注意:while后不加;4. 舍去原数个位:old = old / 10;• 已知循环次数:优先用for循环(结构清晰)。• 至少执行一次循环体:用do-while循环。

2025-06-04 09:20:10 570

原创 小白嵌入式day5

易错点:case写错为dafault时会变成标签(如dafault: printf();案例:a=1, b=2;--a&&++b → a=0,b=2(因--a后为0,++b不执行)• 顺序结构:按代码顺序逐行执行(如a=1;• 分支结构:根据条件选择执行路径(if-else、switch)◦ &&(与):全1为1,遇0短路(如a&&b中a为0则不计算b)◦ ||(或):全0为0,遇1短路(如a||b中a为1则不计算b)◦ 表达式必须为整型(如int、char),case后必须是常量。> && > ||)

2025-06-03 01:25:51 688

原创 小白初始嵌入式day4

C语言的输入输出操作是通过标准输入输出库(stdio)提供的函数实现的。在使用时需要注意格式控制符与变量类型的匹配,以及输入输出的对齐和精度控制。C语言本身并不直接提供输入输出功能,而是通过标准输入输出库(stdio)提供的函数来实现。• 使用 scanf 输入字符串时,可以使用 %s,但需要注意输入的字符串不能超过变量的存储空间。// 注意前面的空格,用于跳过空白字符。stdio 是C语言的标准输入输出库,提供了多种输入输出函数。// 注意前面的空格,用于跳过空白字符。// 输出宽度为5,右对齐。

2025-05-30 08:58:17 858

原创 小白初识嵌入式day3

• 组合新数:千位(2)*1000 + 百位(4)*100 + 十位(3)*10 + 个位(1)= 2431。• 赋值运算:=,支持连续赋值(a=b=c=1),不同精度赋值会截断或扩展(高精度转低精度可能丢失数据)。• 基础运算:+、-、*、/(整型相除为整除)、%(求余结果符号由左操作数决定)。• 转义字符:'\n'(换行)、'\t'(制表符)等,用于特殊格式控制。1. 数据准备:定义字符变量并初始化(c1='C',c2='h'等)。• 类型特性:本质为整型,可与整数运算,如'3'-'0'=3。

2025-05-29 00:38:41 242

原创 小白初识嵌入式day2

1. 常量:程序运行过程中值不能改变的量,如整型常量123(十进制)、0x123(十六进制)、0123(八进制),浮点型常量1.234、1.234e3等。• 以计算机技术为基础:包含软件(如操作系统:Windows、mac OS、Linux、鸿蒙等)和硬件(如CPU、内存、硬盘等)。2. 数字字符'0'-'9'编码为48-57,大写字母'A'-'Z'为65-90,小写字母'a'-'z'为97-122。1. float:符号位(1位)|指数位(8位)|尾数位(23位)。

2025-05-28 09:02:56 891

原创 小白初识嵌入式day 1

老师说嵌入式系统是“隐藏在设备中的大脑”,而Linux作为嵌入式开发的主流系统,其基础操作是我们必须攻克的第一道关卡。• Ubuntu 18.04系统:我下载了ubuntu64.rar压缩包,这是基于Linux内核的操作系统,未来的开发都将在这个环境中进行。◦ Ubuntu是基于Linux内核的发行版,我使用的是Ubuntu 18.04,内核版本需通过uname -r命令查看。◦ 今日学习的Linux命令:pwd、ls、cd、touch、mkdir、cp、mv、rm等。

2025-05-27 01:23:38 766 1

Main.java

Main.java

2024-04-14

空空如也

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

TA关注的人

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