自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OSI七层模型和TCP/IP四层模型

功能:定义电气、机械、过程和功能的规范,以激活、维持和关闭物理链路。4. 传输层 <---------------> 3. 传输层 <------> 传输层。3. 网络层 <---------------> 2. 网络互连层 <------> 网络层。2. 数据链路层 <-------------> 1. 网络接口层 <------> 数据链路层。6. 表示层 <-----------------> (包含应用层、表示层、会话层功能)

2025-10-22 21:16:14 657

原创 malloc/free 内存问题

功能:在堆区分配一块指定大小的连续内存空间,返回指向该空间的指针。原型:void *malloc(size_t size);参数:size 为需要分配的字节数(通常用 sizeof(类型) 计算)。返回值:成功时返回指向分配内存的指针;失败时返回 NULL(需检查返回值)。示例:#include <stdlib.h> // malloc 和 free 的头文件// 分配可以存储 5 个 int 类型的内存空间。

2025-10-21 21:06:45 1025

原创 函数指针 指针函数 数组指针 指针数组 常量指针 指针常量

本质:是一个指针变量,专门用来指向函数。函数在内存中占据一块连续空间,其入口地址(函数名代表的地址)可被指针存储,通过该指针可间接调用函数。定义格式:返回值类型 (*指针变量名)(参数列表);(*与指针名必须用括号括起,否则会被解析为函数声明)示例:// 定义函数指针p,指向返回int、参数为两个int的函数p = add;// 函数名add是地址,赋值给p// 通过指针调用函数,输出5return 0;

2025-10-21 21:04:34 741

原创 gcc编译的过程及每个过程的作用

在 C/C++ 开发中,gcc(GNU Compiler Collection)的编译过程通常分为4 个阶段,从源代码到可执行文件的转换依次经过:预处理(Preprocessing)→ 编译(Compilation)→ 汇(Assembly)→ 链接(Linking)。

2025-10-21 21:02:53 824

原创 C语言中static const extern volatile inline关键字

在 C 语言中,volatile 关键字用于提醒编译器:被修饰的变量可能会被意外修改(如被硬件、中断服务程序等外部因素改变),因此编译器不能对该变量的读写操作进行优化(如缓存到寄存器、重排指令等),必须每次都直接从内存中读取或写入。硬件设备的寄存器(如传感器数据、定时器计数等)的值可能会被硬件自动修改,此时必须用 volatile 修饰,否则编译器可能会优化读取操作(比如只读取一次并缓存到寄存器,忽略后续硬件的修改)。建议而非强制:inline 是对编译器的 “建议”,而非 “命令”。

2025-10-16 20:30:48 1221

原创 IMX6ULL--EPIT,GPT

/禁用 “调试暂停”(CR 寄存器 [1] 位)GPTx_CR寄存器 [1] 位为 “调试暂停使能位(DBG_EN)”,DBG_EN=1 时,当 CPU 进入调试模式(如 JTAG 暂停),GPT 计数器自动暂停;//GPTx_CR寄存器 [8:6] 位为 “时钟源选择位(CLKSRC)”,支持 8 种时钟源,其中001对应 “IPG_CLK”(系统外设总线时钟,默认频率为 22MHz,//GPTx_CR寄存器 [0] 位为 “计数器使能位(EN)”,EN=1 时,GPT 计数器开始向上递增;

2025-09-25 20:42:11 993

原创 嵌入式系统学习Day37(ARM)

在 ARM 架构中,异常向量表(Exception Vector Table) 是一组连续的、地址固定的内存单元,用于集中存放各种异常(如中断、复位、错误等)的 “入口地址” 或 “跳转指令”。ARM 内核(如 Cortex-M 系列、Cortex-A 系列)的架构并非 “纯哈佛” 或 “纯冯.诺伊曼”,而是基于哈佛架构的改进设计,核心原因是 “平衡效率与灵活性”;哈佛架构的核心是 “高实时性、高吞吐量”:通过并行访问提升效率,适合专用计算场景(如 DSP 处理音频 / 视频信号),但硬件成本更高;

2025-09-19 20:29:33 633

原创 嵌入式系统学习Day36(简单的网页制作)

二姐 <rt>(er) (jie)<rt>下载

2025-09-09 20:45:22 527

原创 嵌入式系统学习Day35(sqlite3数据库)

关系型数据库。

2025-09-08 20:13:14 1629

原创 嵌入式系统学习Day34(mqtt协议)

MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。本协议运行在 TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。它有以下特点: 使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。 消息传输不需要知道负载内容。

2025-09-07 16:19:51 970

原创 嵌入式系统学习Day33(运用udp中实现聊天)

2025-09-05 21:56:45 125

原创 嵌入式学习Day32(tcp中的多路IO复用)

在 TCP 网络编程中,多路 IO 复用是一种高效处理多个客户端连接的技术。它允许单个进程同时监控多个文件描述符(包括网络套接字),并在其中任何一个就绪时得到通知,从而避免了传统多线程 / 多进程模型的资源开销。

2025-09-05 21:55:36 212

原创 嵌入式系统学习Day31(多路IO复用)

IO模型1、阻塞IO2、非阻塞IO EAGAIN 忙等待 errno3、信号驱动IOSIGIO 用的相对少(了解)4、并行模型进程,线程5, IO多路复用 select、poll、epoll1、阻塞IO ===》最常用 默认设置2、非阻塞IO ===》在阻塞IO的基础上调整其为不再阻塞等待。在程序执行阶段调整文件的执行方式为非阻塞:===》fcntl(===>动态调整文件的阻塞属性功能:修改指定文件的属性信息。参数:fd 要调整的文件描述符。

2025-09-05 21:52:16 839

原创 嵌入式系统学习Day30(udp)

dest_addr: 必选,表示要发送到的目标主机信息结构体。bind()客户端是可选的,服务器端是比选的。buff本地的数据存储,一般是要发送的数据。flags要发送数据方式,0表示阻塞发送。注意:socket()的参数需要调整。功能:用于UDP协议中向对方发送数据。参数:sockfd本地的套接字id。addrlen:目标地址长度。网络编程之之UDR用户数据报。1、特性:无链接不可靠大数据。返回值:成功发送的数据长度。len要发送的数据长度。2、框架:C/S模式。

2025-09-05 21:44:00 271

原创 嵌入式系统学习Day29(tcp)

【代码】嵌入式系统学习Day29(tcp)

2025-09-05 21:42:03 373

原创 嵌入式系统学习DAY28(网络编程)

数据链路层,负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封装、差错控制等。1、socket 套接字 ==》BSD socket ==》用于网络通信的一组接口函数。物理层,负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。该层描述了通信设备的机械、电气、功能等特性。传输层:管理网络通信两端的数据传输,提供可靠或不可靠的传输服务。2、ip+port 地址+端口===》地址用来识别主机。表示层:为不同主机间的通信提供统一的数据表示形式。

2025-09-05 21:39:06 485

原创 嵌入式系统学习Day27(进程间共享内存)

system v :共享内存信号量集 unixdebainRed hat。1、IPC_PRIVATE 固定的私有键值,其值等于 OxO。参数:pathname 路径+名称===》任意文件,只要不会。key值 ==> 申请 ==》读写 ==》关闭 ==》卸载。功能:通过该函数可以将pathname指定的路径用来以。proj_id 整形的数字,一般用ASCIl码的单字符。proj_id生成唯一的临时键值。一般用于有亲缘关系的进程间使用。key值:===》唯一键值。表示与参数1的运算。

2025-09-05 21:35:15 171

原创 嵌入式系统学习Day26(进程间通信)

3.管道破裂,,读端关闭,写管道。管道破裂:读端关闭,相当于管道堵死了。Read 0:写端关闭,管道剩余数据读完后,再读为空,1,读端存在,一直向管道中去写,超过64k,写会阻塞。写阻塞:写的块,读的慢,写满64K (读存在)2,写端是存在的,读管道,如果管道为空的话,读会阻塞。读堵塞:写的慢,读的快,管道为空 (写存在)无名管道 ===》pipe ==》只能给有亲缘关系进程通信父子进程。有名管道 ===》fifo ==》可以给任意单机进程通信。1、无名管道 ===》管道的特例 ===>pipe函数。

2025-09-05 21:31:17 392

原创 嵌入式系统学习Day25(线程控制)

linux下的线程同步 ===》信号量机制 ===》semaphore.h posix。定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁。互斥机制===》互斥锁 炎 ===》保证临界资源的访问控制。信号量的定义 ===》信号量的初始化 ==》信号量的PV操作。如果sem没有资源(==0),则线程阻塞等待,,一旦有资源。如果sem没有资源(==0),则线程阻塞等待,-旦有资源。如果sem有资源(==1),则申请该资源,程序继续运行。如果sem有资源(==1),则申请该资源,程序继续运行。

2025-09-05 21:28:20 725

原创 嵌入式系统学习Day21(数据结构——双向链表)

增加,删除的操作, 需要tmp 停止待操作节点的前一节点上。查找操作进行了扩展,回调函数(函数指针)。节点=数据 + NEXT +PREV .手撕代码(增加+删除)

2025-08-20 21:32:41 438

原创 嵌入式系统学习Day20(数据结构——单向链表)

为了表示每个数据元素,ai与其直接后继数据元素ai+1之间的逻辑关系,对ai来说,除了存储其本身的信息外,还需要存一个指示器直接后续的信息。把存储元素信息的域叫数据域,把存储直接后继位置的域。简单的来说,就是将原来单链表中最有一个元素的next指针指向第一个元素或头结点,链表就成了一个环,头尾相连,就成了循环链表。线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。这两部分信息组成数据元素ai的存储映像,叫结点(Node);顺序表是一段连续的存储单元。

2025-08-19 21:54:57 860

原创 嵌入式系统学习Day19(数据结构)

算法的特性:输入输出特性(输入可省,输出必须有,数值的改变就可以称为输出),可读性(便于阅读), 可行性(可以用代码执行出来),有穷性(是有限的),确定性(同一个输入会是同一个输出)逻辑关系:集合,线性(1对1,中间位置的值有且仅有一个前驱,一个后继),树(1对多),图(多对多)特征: 支持随机访问 head+5 head[0] O(1)时间复杂度,时间的度量(事前分析法) ,大O 记法。相互之间存在一种或多种特定关系的数据元素的集合。顺序结构(类似于数组):存储空间连续,有序。衡量算法好坏的方法。

2025-08-19 21:50:00 237

原创 嵌入式系统学习Day18(文件编程-系统调用文件IO)

/off_t //long int型。//将FILE *fp 流指针转换为 fd。表示创建文件的权限 --- 只有前面有O_CREAT时,才需要指定。从fd对应文件中读取数据,读count个字节,存放到buf指定的一块空间。>0 //需要考虑参考点是否可以。SEEK_CUR //文件当前位置。SEEK_SET //文件开头。SEEK_END //文件结尾。O_APPEND //追加 ---写。O_CREAT //创建。O_TRUNC //截断。//流指针 <----> 文件描述符。

2025-08-13 19:59:33 1034

原创 嵌入式系统学习Day17(文件编程-库函数调用)

(1) EOF会结束 //读到文件结尾 --- EOF并不存在文件中,只是到达结尾时的标志。3.fgets 会自己在 buffer中最后一个字符的后面 加 '\0' --- 处理成字符串。"hello" --ASCII--->编码格式 存放到计算机。标准输入 --- stdin --- 关联到键盘。标准出错 --- stderr --- 关联到屏幕。到底是出错了,还是到达文件结尾了?标准输出 --- stdout --- 关联到屏幕。fputs输出结束的条件 ---是遇到 '\0'

2025-08-12 23:59:13 630

原创 嵌入式系统学习Day16(C语言中的位运算)

逻辑右移 区别在于看要移动数据是否有符号 ---默认最高位 补0。写程序 --- 控制 --- 寄存器的 -- 二进制位。0000 1000 //8 //右移 相当于除以 2。0011 0101 //0x35 //原来的 a。算术右移 //有符号 --- 最高位 补 符号位。控制二进制 -- 进而控制硬件。^ 异或 相同为假 不同为真。^ 异或 相同为假 不同为真。a>>n //将a向右移动n位。0101 0100 //清零。~ 非 真假相对。与 运算 --- 清零。

2025-08-11 18:37:55 684

原创 嵌入式系统学习Day15(C语言中的结构体与共用体)

/形式1....//1.定义结构体类型//2.定义变量//形式2....}d={初始化};//1.定义结构体类型 //2.定义变量//形式3 ----如果你的结构体类型只用一次struct....}d={初始化};//1.定义结构体类型 //2.定义变量。

2025-08-08 21:12:32 545

原创 嵌入式系统学习Day14(C语言中指针的拓展)

如果要保存的是一个一级指针变量所在空间的的地址那就可以写为:char * *p;//整型变量 对应要开要给4字节空间 有空间 就有地址//p也是变量(一级指针变量) 是变量 就有空间 有空间 就有地址//q也是变量(二级指针变量) 是变量 就有空间 有空间 就有地址//三级指针r //r中放的是 q的地址*r //就相当于是q q中放的就是 p的地址**r //*q 相当于p p中放的是 a 的地址***r //*p 相当于a 就是a中的值 10。

2025-08-07 20:48:27 975

原创 嵌入式系统学习Day13(C语言中数组与指针的结合)

上一篇已经讲过一维整型数组与指针,所以本篇主要讲其余数组与指针的结合应用。

2025-08-06 21:14:44 857

原创 嵌入式系统学习Day12(C语言中的指针)

C 语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。指针变量不同于整型变量和其他类型的变量,它是用来专门存放地址的,必须将它定义为”指针类型”。基类型 * 指针变量名;(1)基类型基类型说明了 通过指针 找到的空间a.多大b.怎么用就是 指针找到的空间上 所存储的 数据类型(2) *只是一个修饰符用来说明现在定义的变量,不是普通变量,而是指针变量(3)指针变量名是个标识符 ,符合标识符命名规则。

2025-08-05 21:00:08 1740

原创 嵌入式系统学习Day11(C语言中的预处理命令)

define 标识符 字符串(1)预处理命令(2)标识符 --- 宏名(3)字符串 --- 宏值#define 宏名 宏值eg:#define 宏名(参数) 宏值eg:相乘。

2025-08-04 20:46:26 286

原创 嵌入式系统学习Day10(C语言中的函数---补充)

/ 限制作用域 --- 限定所修饰的变量,只能作用于本文件,且 别文件无法引用。//a对应数据类型 ---int[10] ---数组类型。//a空间被开在了 --- 静态区 --静态区变量。//static 局部变量 --- 静态区。硬盘 --- 内存 --- 缓存 --- cache -- 寄存器 --- CPU。全局变量/静态变量 --- 从程序运行开始,到程序运行结束 --- 全程序的生命周期。int a[3][4] //二维数组的本质 --- 一维数组的一维数组。

2025-08-04 20:36:48 698

原创 嵌入式系统学习Day9(C语言中的函数)

定义有参函数的一般形式为:类型标识符函数名(形式参数表列)声明部分语句部分函数头:(1)类型标识符 --- int/short/long ...返回值类型 //说明函数返回的结果的数据类型注意:1.返回值结果 和 设计的 类型标识符 可能不一致此时,返回值结果 会被 转换成 类型标识符 指定的类型2.如果返回值类型省略不写默认 int类型3.如果不需要带出返回值void --- 空类型对应的 return 后面不能有值return;

2025-07-31 21:32:38 984

原创 嵌入式系统学习Day8(二维数组)

二维数组定义的一般形式为 类型说明符数组名[常量表达式][常量表达式];注意1.类型说明符 ---数据类型2.第一个[常量表达式] //第一维 -- 行3.第二个[常量表达式] //第二维 -- 列。

2025-07-31 00:31:00 738

原创 嵌入式系统学习Day7(C语言中的一维数组)

类型说明符 数组名 [常量表达式]说明:(1) 数组名的命名规则和变量名相同,遵循标识符命名规则。(2) 在定义数组时,需要指定数组中元素的个数,方括号中的常址表达式用来表示元素的个数,即数组长度。(3) 常数表达式中可以包括常量和符号常量,不能包含变量。(4)类型说明符 :这个数组中要放的是哪一种类型的数据。

2025-07-29 21:18:52 1002

原创 嵌入式系统学习Day6(循环控制)

goto 语句标号;语句标号用标识符表示,它的定名规则与变扯名相同,即由字母、数字和下划线组成, 其第一个字符必须为字母或下划线。不能用整数来作标号。例如: goto label_l;

2025-07-28 22:32:46 340

原创 嵌入式系统学习Day5(流程控制)

表达式 必有结果 有类型C语言中表示真和假:用运算中注意符号优先级顺序,前四种运算符的优先级高于后两种。

2025-07-27 20:46:22 1073

原创 嵌入式系统学习Day4(C语言中的输入与输出)

1. 输入 --->[内存]--->输出2. c语言本身 没有输入输出printf 基于C语言实现的函数3. c函数库标准输入输出库 stdio4.学习 标准输入输出库 提供相关函数。

2025-07-25 21:09:22 2143

原创 嵌入式系统学习Day3(C语言中的运算符与表达式)

字符形式 含义换行,将当前位置移到下一行开头水平制表(跳到下一个Tab位置)退格,将当前位置移到前一列回车,将当前位置移到本行开头换页,将当前位置移到下页开头代表一个反斜杠字符 "\"代表一个单引号(撇号)字符代表一个双引号字符1到3位八进制数所代表的字符1到2位十六进制数所代表的字符。

2025-07-24 20:39:40 998

原创 嵌入式系统学习Day2(C语言中的基本数据类型及存储)

C语言中的数据类型有以下几种(1)整型(2)浮点型//小数(3)字符型//处理现实生活中 符号 文字今天学习的是第一类:基本数据类型以及数据的存储。在学习前要掌握基本进制间的相互转换。

2025-07-23 20:23:30 1120

原创 嵌入式系统学习Day1(Linux基础)

本文介绍了嵌入式系统和Linux基础知识。嵌入式系统是为特定功能优化的专用计算机系统,具有实时性和低功耗特点。Linux由Linus Torvalds于1991年开发,现已成为主流操作系统。文章详细讲解了Linux环境搭建、基础命令(pwd、ls、cd、touch等)、编程流程(vi编写、gcc编译、运行调试)以及vi编辑器操作(复制yy、粘贴p、删除dd等)。通过掌握这些基础知识和实践操作,可以建立Linux使用的基本技能,为深入学习打下坚实基础。

2025-07-22 20:38:01 892 1

空空如也

空空如也

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

TA关注的人

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