自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux驱动---系统移植(核心文件及功能、SOC资源、启动方式、烧录方式、启动流程、uboot功能与工作流程)

用户输入回车进入 uboot 系统,可以输入命令与 uboot 交互;3. 管理系统文件(Linux “一切皆文件”,可通过文件操作硬件设备、查看内核信息)用户不输入回车,uboot 会执行 bootcmd。1)初始化I2C、DDR、EMMC、Serial、Net。(外设扩展资源),两类板卡资源职责清晰,共同构成完整硬件平台。1. 提供 shell 命令,实现用户与系统的人机交互;2. 任务管理:调度多进程 / 线程;1. 内存管理:分配与回收系统内存;2. 包含库文件,支撑应用程序运行;

2025-09-22 19:42:59 926

原创 ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用

立即数(Immediate Value)指的是直接嵌入在机器指令中,无需从内存或寄存器读取的常数。它是指令的一部分,能快速参与运算(像加减、比较、赋值等操作),避免了额外的内存访问,从而提升指令执行效率。汇编指令 s 后缀:指在执行指令过程中会更新CPSR寄存器的N、V、C、Z位,几乎所有的汇编指令都可以在指令后面加上 s 后缀。

2025-09-09 20:22:22 1978 2

原创 51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)

串口通信的速率由波特率(Baud Rate)决定,波特率表示单位时间内传输的位数,单位是 bps(比特每秒)。

2025-09-06 18:48:56 1348

原创 51单片机---硬件学习(跑马灯、数码管、外部中断、按键、蜂鸣器)

计算机的核心运算与控制单元,负责执行系统指令、处理数据,是通用计算的 “大脑”。

2025-09-04 20:19:32 1069

原创 Linux应用软件编程--->数据库

将复杂的数据结构简化为二维表格形式,如excel表。大型:Oracle、DB2中型:MySql、SQLServer小型:Sqlite。

2025-08-29 18:19:06 1057

原创 Linux应用软件编程---网络编程(TCP并发服务器构建:[select、poll、epoll特点、epoll方式的实现]

1)使用位图(数组)实现对文件描述符集合的保存,最多允许同时监测1024个文件描述符;2)需要应用和内核层的反复数据(文件描述符集合表)拷贝;3)返回的集合表需要遍历寻找到达的事件;4)只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式)。

2025-08-28 18:26:05 1202

原创 Linux应用软件编程---网络编程(TCP并发服务器构建:[ 多进程、多线程、select ])

单循环服务器:服务端同一时刻只能处理一个客户端的任务(TCP)并发服务器:服务端同一时刻可以处理多个客户端的任务(UDP)

2025-08-27 18:39:30 1670 3

原创 Linux应用软件编程---网络编程(TCP:[ 其他机制、头部标志位、应用示例 ]、 HTTP:[ 万维网、概念、格式、报文、应用示例 ]

TCP 头部可用抓包工具 (wireshark) 来查看。

2025-08-25 19:01:26 1296 1

原创 Linux应用软件编程---网络编程(UDP:[特点、防止丢包、报文头部]、抓包工具:[wireshark]、TCP:[特点、三次握手四次挥手机制、函数接口、粘包问题])

1)面向数据包2)无需建立连接3)尽最大努力交付,不安全、不可靠(数据丢包、乱序)4)可实现一对一、一对多的传输5)机制简单,资源开销小,数据实时性高(VNC、直播)

2025-08-25 01:29:36 993

原创 Linux应用软件编程---网络编程1(目的、网络协议、网络配置、UDP编程流程)

不同主机,进程间通信。

2025-08-22 21:52:06 1649

原创 Linux应用软件编程---多任务(进程间通信机制补充实现内容:信号、共享内存)

信号实现进程间的通知机制、实现进程间的异步通信,又称为“软中断”。异步通信:接收方不知道发送方什么时候发送数据 (不需要一直等待)。

2025-08-19 19:42:17 826

原创 Linux应用软件编程---多任务(线程2、死锁、进程间通信机制(无名管道、有名管道)、memset函数)

线程间同步机制是指让多个线程在执行某个任务时,具有先后顺序的执行。多线程、多进程本质是异步执行。可以使用信号量来实现线程间同步。下图为线程间同步过程。

2025-08-18 19:04:57 822

原创 Linux应用软件编程---多任务(线程)(线程创建、消亡、回收、属性、与进程的区别、线程间通信、函数指针)

线程是操作系统任务调度的最小单位。是一个轻量级的进程,可实现多任务并发。返回值类型 ( *指针名称)(形参表)

2025-08-17 17:08:25 940

原创 Linux应用软件编程---多任务(进程2)(资源回收函数(wait、waitpid)、exec函数族、linux下的命令、const四种位置表示的含义)

说明:指针 p 本身可以被修改,可以指向其他地址,但 p 指向的字符内容 (*p) 不能被修改 (被 const 限定)。判断子进程是否被信号终止 (如被 kill 命令发送信号终止),若被信号终止返回非零 (真),否则返回0 (假)。说明:指针 p 本身是常量,不能被修改,不能指向其他地址,同时 p 指向的字符内容 (*p) 也不能被修改。说明:指针 p 本身是常量,不能被修改,不能指向其他地址,但 p 指向的字符内容 (*p) 可以被修改。含义:修饰普通变量,变量的值不能修改,本身是只读的。

2025-08-15 19:44:07 944

原创 Linux应用软件编程---多任务(进程)(虚拟内存空间、进程的调度、状态、消亡、命令、编程、子进程与父进程)

进程是指:正在运行的程序,其运行过程中需要消耗内存和CPU。

2025-08-14 19:29:46 1061

原创 Linux应用软件编程---UI技术(frambuffer、内存映射、函数封装、打印各类图形)

UI技术:User interface 技术,称为人机交互界面。

2025-08-13 20:51:19 1119

原创 Linux应用软件编程---文件操作3(文件IO及其指令、文件定位函数lseek、文件IO与标准IO的比较、缓冲区)

文件IO(系统调用)是Linux内核专门为应用层提供的文件操作方法。

2025-08-12 19:09:57 1339

原创 Linux应用软件编程---文件操作2(fgets与gets的比较、fread/fwrite、流定位相关接口)

FILE * --->stdin:标准输入流 --->标准输入设备 (eg. 键盘)FILE * --->stdout:标准输出流-->标准输出设备 (eg. 显示屏)FILE * ---> stderr:标准出错流--->标准出错设备 (eg. 显示屏)都是 FILE * 文件流指针型。

2025-08-11 20:36:00 1269

原创 Linux应用软件编程---文件操作1(fopen、fclose、fgetc/fputc、fgets/fputs)

Linux应用软件编程包含五部分:文件操作、多任务、网络编程、构建网络服务器、数据库。文件操作。

2025-08-10 17:12:29 1253

原创 数据结构---二叉树(概念、特点、分类、特性、读取顺序、例题)、gdb调试指令、时间复杂度(概念、大O符号法、分类)

树是 n(n >= 0) 个结点的有限集合。若 n=0 ,为空树。在任意一个中:1)有且仅有一个特定的根结点;2)当 n>1 时,其余结点可分为 m 个互不相交的有限集合T1、T2......Tm,其中每一个集合又是一个树,并且称为子树。

2025-08-08 19:31:56 1250

原创 数据结构---循环队列(补充 应用实例)、哈希表(哈希存储、哈希冲突、解决方法、举例实现)

基本思路:哈希表的每层是一个数组,每个数组元素对应链表的头结点,插入键值对时,先通过哈希函数计算哈希地址,找到对应的链表头结点,若该头结点对应的链表为空,则直接插入键值,若不为空(发生冲突),则将键值对添加到链表的末尾或头部;哈希冲突是指两个不同的关键字(键值)经过哈希函数计算后,得到了相同的哈希地址,使不同的关键字被映射到同一地址,导致多个关键字争夺同一个哈希地址,如果不能妥善处理,会使哈希表的查询、插入效率大幅降低(最坏的情况下可能退化为线性查找)。(4) 链地址法---查找数据函数的封装。

2025-08-07 21:08:16 1154

原创 数据结构---二级指针(应用场景)、内核链表、栈(系统栈、实现方式)、队列(实现方式、应用)

1、在被调函数中,想要修改主调函数中的指针变量,需要传递该指针变量的地址,形参用二级指针接收。2、指针数组的数组名是一个二级指针,指针数组的数组名作为参数传递时,可用二级指针接收。指针数组:保存多个指针的数组。数组名:数组首元素的地址。

2025-08-06 22:19:32 1277

原创 数据结构---Makefile 文件(格式、文件变量、调用、伪目标)、gcc编译的四个步骤、双向链表(概念、作用、应用)

目录一、Makefile 文件1、Makefile 语法2、Makefile 中的变量 1)自定义变量(无数据类型) 2)系统变量3、gcc 编译的四个步骤4、调用执行 Makefile5、通配符(%)6、时间戳二、双向链表1、概念2、作用 1)双向遍历 2)高效插入/删除3、应用 1)函数封装 2)头文件(声明) 3)在主函数中书写格式 Makefile 用来管理代码的编译和链接。 用法规则(格式) 例如: 对于

2025-08-05 21:17:39 1119

原创 数据结构---配置网络步骤、单向链表额外应用

点击菜单栏的“ 编辑 ”--->“ 虚拟网络编辑器 ”--->“ 更改设置 ”--->" VMnet0 "--->“ 桥接 ”--->桥接到PC正在上网的网卡上--->“ 应用 ”--->“ 确定 ”;点击菜单栏的“虚拟机”--->“ 设置 ”--->“ 网络适配器 ”--->“ 桥接模式 ”--->“ 确定 ”;valgrind:GNU提供的内存探测工具,用来监测内存错误和内存泄漏。内存泄漏:申请的空间使用完时,没有及时释放,造成内存泄漏。”,可以查看有无内存泄漏。

2025-08-04 22:07:26 611

原创 数据结构---概念、数据与数据之间的关系(逻辑结构、物理结构)、基本功能、数据结构内容、单向链表(概念、对象、应用)

数据类型被用来组织和存储数据。程序设计 = 数据结构 + 算法。

2025-08-02 19:25:03 1333

原创 C语言---位运算符的分类与用法(按位与&、按位或 |、按位异或^、按位取反~、左移<<、右移>>)

对 0xAA 和 0xEF 进行按位与操作 (0xFF:1111 1111;0xEF:1110 1111),结果为 0xEF(1110 1111)对 0xAA 和 0x48 进行按位或操作 (0xAA:1010 1010;0x48:0100 1000),结果为 0xEA(1110 1010)对 0x0A 和 0x0D 进行异或操作 (0x0A:0000 1010;0x0D:0000 0111),结果为 0x07(0000 0111)使用规则:是 1 取0,是 0 取1。使用规则:在末尾补0。

2025-08-01 20:01:01 1154

原创 C语言---结构体(格式、用法、嵌套、初始化)、共用体、枚举类型、typedef类型

a. 在末行花括号( } )与分号(;)中间写入所需变量的个数及名称,此时变量为全局变量,存放在静态区;b. 在主函数中输入创建数据类型名,在其后输入变量名来定义变量,此时变量为局部变量,存放在栈区。例如:注意:在主函数 main 中,成员类型与 struct 中的成员类型一致。“ . ”为结构体成员运算符,是一级运算符,自左至右。例如:使用创建的 struct Student 数据类型定义变量 s ,定义类型成员内容,完成。

2025-07-31 22:06:18 1160

原创 C语言---内存空间相关函数(malloc函数、free函数、realloc函数、calloc函数)、函数指针、指针的指针

size 是新开空间的大小,计算方式为 “n*sizeof(数据类型)” ,n 为所需元素个数。其中 n 为该空间的元素个数;将原空间的内容复制到新空间的同时,将原空间释放。为防止野指针的出现,调用该函数的方式为:(参数部分自己填入)编写排序函数,并在最后的主函数中,选择排序方式(pow2:以平方大小排序;先申请10个整型大小的空间来存放 “1,2,3,4,5,6,7,8,9,10”,再对空间进行扩容操作,存放1到20的整数。(3) 程序代码中的申请空间与销毁成对出现,遵循 "有借有还,再借不难" 原则。

2025-07-30 20:44:47 1149

原创 C语言---万能指针(void *)、查找子串(strncmp函数的应用)多维数组(一维数组指针、二维数组指针)、返回指针值函数、关键字(const)

二维数组指针也称为指向二维数组的指针或数组指针,其作为函数参数传递的媒介,形参是指向一维数组的指针,是一种特殊的指针类型,用于指向二维数组的整体或其行、元素,实现灵活的数组访问和传递。printf("%d\n", *( (int *)(p + 3) - 5) ),对于三行四列的二维数组a[3][4],该输出指向 a[1][3] 中的值。万能指针可以用来接收任何数据类型的指针,当多个函数的运行程序段一致,但函数形参类型不一致时,可用万能指针结合强制类型转换符进行合并。用字符指针指向字符串中的字符。

2025-07-29 20:13:16 825

原创 指针的加法(与整型)、空指针(导致程序不能运行)、指针替代数组下标、迭代器(不使用循环时的一种遍历方法)、运用指针进行函数编写、字符型指针(字符数据类型的指针变量)

例如字符指针 p 指向字符数组 s[100],是将 s 的首元素地址给 指针 p。对指针 P 可以做 P+n 的加法运算(n为整型),得到的结构仍为地址,但不是表面上的加 n ,而是在原来的地址值基础上加上了 sizeof(基类型)*n 个字节。指针与指针之间不能做加法运算,可以求差,但必须是同基类型,表示二者之间差了几个基类型,只针的求差运算可以用来判断哪个指针在前。迭代器是程序设计中用于遍历容器(如数组、列表、集合等)中的元素的对象,提供一致的遍历接口,完成要求不使用循环时所采用的方法。

2025-07-28 19:48:43 713

原创 预处理命令(宏定义、文件包含、条件编译)、指针

宏定义是用宏名替换一个字符串或几个参数,只做傻瓜式的无脑替换,不做正确性检查,不可在行末加分号。一般对宏名后的字符串加上括号,避免表达式的优先级导致结果错误。编译时可输入“ gcc -E -omain.i main.c ” 来进入预处理命令,并不进行编译链接,其中 main.i 是生成的文件,可进入查看预处理命令;main.c 为文件名。一般形式:#define 标识符 字符串用一个指定的标识符来代表一个字符串,标识符即为宏名,一般用大写字母表示。

2025-07-28 00:35:24 862 2

原创 二维数组函数的创建、标识符(作用域和可见性)、变量的生存期、局部变量存储类别(static、auto、register、extern)、终端分屏的实现操作

1、static 变量:局部静态变量,使函数中的局部变量的值在函数调用结束后不消失而保留原值,所占的存储单元不会销毁,在下一次调用该函数时,该变量的值为上一次结束时的值,即修饰变量的生存期,可以将变量的动态生存期转为静态生存期,并有局部作用域。(2) 在没有包含关系的两个不同作用域中定义的同名标识符,互不影响,例如上图 add 中的 a 和 main 函数中的 a 互不影响;(2) 全局作用域:是指花括号以外的内容,全部变量在全局作用域中,全局变量不初始化时,默认为0,在内存中存储在静态区(全局区)中。

2025-07-25 21:05:55 1051

原创 C语言---函数传参、栈、内存的区域划分、函数的递归调用、数组传参

assert(条件):若条件为假则为断言失败语句,后续代码不执行。函数的定义不可以嵌套,但函数的调用可以。提高函数的可读性是建立函数的目的之一。

2025-07-24 19:55:47 1151 1

原创 二维数组(一般形式、引用形式、存储特性、存放格式)、函数(定义与调用的一般形式、形参实参返回值)

类型说明符 数组名[常量表达式][常量表达式] ”。(常数表达式1表示行数,常数表达式2表示列数)在C语言中,函数是程序的基本组成单元,用于封装一段独立的、可复用的逻辑。一个C程序可由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。(2) 一个源程序文件, 一个C程序可由一个主函数和若干个其他函数构成,函数之间不存在包含关系。无参函数定义的一般形式是将“ 形式参数列表 ” 空着,但括号不能省略。说明:类型说明符:可以是除数组以外的任何数据类型( 包含void类型 )。

2025-07-23 20:04:01 1227

原创 二分查找法、字符数组及字符数组函数(puts函数、fgets函数、strlen函数、strcpy函数、strcat函数、strcmp函数)

今天进行二分查找法、字符数组及字符数组相关函数的学习( 包含puts函数、fgets函数、strlen函数、strcpy函数、strcat函数、strcmp函数 )。

2025-07-22 19:26:14 849

原创 一维数组(定义与引用)、排序(选择排序、冒泡排序、插入排序)

(1) 一维数组的定义方式为:“ 类型说明符 数组名[ 常量表达式 ] ”,其中,类型说明符可以是除void以外的任何数据类型,数组名的要求与标识符一致,常量表达式使一次性定义该类型变量的个数,要求是正整形非零常量。要引用数组中的某个数使,采用“ a[ i ] ”,i是将数组中的数据从0排序的所需数据的位置,例如需要引用数组a的第三个数,则输入“ a[ 2 ] ”。例如:将数组中的数从小到大排序,将合适的数存放,不合适的数后移,直至算法结束。数组中的数在内存空间中占的空间的字节是一样大的。

2025-07-21 20:56:33 529

原创 循环控制的学习、循环语句(goto语句、while语句、do... ...while语句、for语句)、跳出语句(break语句、continue语句)

表达式2 : 表达式3 ),该运算符是三目运算符,先计算表达式1的值,如表达式1的结果为真,执行表达式2,反之执行表达式。goto语句格式为:“ goto 语句标号:”,可以无条件的直接跳转到该函数下的语句标号处,语句标号即为标识符,只能由字母、下划线和数字组成,且开头不能是数字。先执行一次性指定的循环体语句,然后判别表达式,当表达式的值为非零时,返回重新执行循环体语句,直到表达式的值等于0为止,此时循环结束。(1)break语句:用来从循环体内跳出循环体,即提前结束循环,接着执行下面的语句。

2025-07-19 19:20:09 1732

原创 关系运算符(优先级、表达式截断)、if语句、switch语句

还要注意,不可以将关系表达式写为“ -4 < i < j ”,他会自左至右依次运算,将前面的逻辑判断结果带入后续的比较中,在该式中会将“ -4 < i ”的逻辑结果 1 或 0 和 j 作比较。(2)对于scanf函数,对于浮点型数据类型,只能定义宽度,不能定义小数点后的位数,例如:“%sf”是可行的,而“%4.2f”结果出现错误。逻辑是正确的,所以运行结果为“ 1 ”,若改为 “ i > j ”,逻辑是错误的,运行结果为“ 0 ”。运用逻辑与(&&)运算符的情况下,当左操作数为假时,右操作数不执行;

2025-07-18 20:41:57 1072

原创 C程序结构、字符数据输入输出函数(putchar函数和getchar函数)、格式输入输出函数(printf函数和scanf函数)、格式字符的种类与用法

(1)printf 函数:格式输出函数,向终端输出若干个任意类型的数据(putchar 只能输出字符,且只能是一个字符,而printf 可以输出多个数据,且为任意类型)。(1)putchar 函数:向终端输出一个字符,一般形式为:putchar(c),c 可以是整型变量或字符型变量,输出结果为整型(int)。(2)scanf 函数:格式输入函数,向终端输入若干个任意类型的数据,其一般格式为:scanf(格式控制,地址表列),即 scanf(“%5d:占五个宽度,即长数据只取5个宽度,5可改为其他数字。

2025-07-17 20:33:06 973

原创 转义字符(分类及其作用)、运算符的使用(包括其运算先后顺序)、数值型数据类型的混合运算(包含长短数据类型间的相互转换、数据类型运算时的隐式转换)

本文系统总结了C语言编程中的核心知识点:1)常见转义字符的功能及使用示例(如\n、\t、\b等);2)运算符优先级规则和特殊运算符(%求余、赋值、自增等)的使用要点;3)随机数生成函数random()和srandom()的调用方法;4)数据类型混合运算的隐式转换规则及显式类型转换方法。通过具体示例演示了不同类型数据间的转换机制(如整型浮点型互转、长短数据类型转换等),并解释了左值/右值、const修饰符等概念。这些基础知识的掌握为深入C语言学习奠定了重要基础。

2025-07-16 20:10:45 711

空空如也

空空如也

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

TA关注的人

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