自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式36——TCP

backlog:允许等待的尚未被处理的三次握手请求的最大个数。addr:目的地址存放空间首地址 接收方。addrlen:存放IP地址大小空间首地址。address:存放IP地址的空间首地址。sockfd:套接字文件描述符。sockfd:套接字文件描述符。addrlen:IP地址的大小。sockfd:套接字文件描述符。socket:套接字文件描述符。buf:发送数据空间首地址。buf:存放数据空间首地址。len:最大接收数据的长度。sockfd:文件描述符。len:发送数据的长度。

2024-03-08 10:30:02 449

原创 嵌入式——35 UDP编程

收端: socket -> bind -> recvfrom -> close。3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失。addrlen:存放接收到IP地址大小空间的首地址。src_addr:存放IP地址信息的空间首地址。在套接字上绑定一个IP地址和端口号。addrlen:绑定IP地址的长度。addr:绑定IP地址空间首地址。ip.addr == IP地址。sockfd:套接字文件描述符。sockfd:套接字文件描述符。buf:存放数据空间首地址。打开wireshark抓包工具。

2024-03-08 10:28:25 491

原创 嵌入式34——网络与UDP编程

网络层 数据的路由(如何从一个局域网到达另一个局域网) IP地址。domain:使用的协议族 AF_INET (IPv4协议族)dest_addr:目的地址信息存放的空间首地址。子网掩码是1的部分表示IP地址的网络位。子网掩码是0的部分表示IP地址的主机位。表示层 发送的数据是否加密。广播地址:网络位不变,主机位全为1,表示广播地址。应用层 传输的数据。网段号:网络位不变,主机位全为0,表示网段号。

2024-03-08 10:28:17 343

原创 嵌入式33——消息队列、共享内存、信号灯

* semaphore operation */ 具体对信号量的操作(申请:-1 释放:+1)根据pathname和proj_id生成一个key_t类型的key值,将来可以用来创建消息队列、共享内存、信号灯。创建共享内存 -> 映射到共享内存中 -> 共享内存操作 -> 解除映射 -> 删除共享内存。否则传递地址为4k的整数倍。ipcrm -q/-m/-s 消息队列ID/共享内存ID/信号灯ID。成功返回key_t类型的IPC对象的key值。根据key值对象的IPC对象创建一个消息队列。

2024-03-08 10:28:03 881

原创 嵌入式31-32——内容回顾

操作多个字符串时,通过将每个指针指向一个字符串开头,完成对所有字符串的操作,使用指针数组。1.对一维数组数组名&得到数组指针,值不变,类型升级为指向整个数组的指针。定义一个指针变量p,p是指向一个int返回值且有2个int参数的函数的指针。2.对数组指针*,值不变,类型降级为指向数组第一个元素的指针。定义一个数组a,有5个元素,每个元素为int *型,占40个字节空间。定义一个指针变量a,占8个字节空间,指向20个字节空间。*: *p作为右值:获得指针指向空间中的值。操作字符串数组使用指针数组。

2024-03-08 10:27:49 796

原创 嵌入式30-32——媒体播放器

如果定位在音视频文件播放时间内,则跳到对应位置播放。如果音视频文件没有播放,则提示:未播放音视频文件。如果定位位置超过文件播放时间,则提示:定位错误。|8.播放方式 ||3.停止 ||6.快进 ||7.定位 ||9.退出 |4.在一级页面启动下一个功能,能够播放下一个音。5.在一级页面启动上一个功能,能够播放上一个音。|1.查看播放列表 ||4.上一个 |

2024-03-08 10:27:26 359

原创 嵌入式——29进程间的通信

写入数据时,如果管道中没有存满(64k),则直接写入,管道中如果存满,则阻塞等待直到有数据读出,才能继续写入。读取数据时,如果管道中有数据直接读取,管道中没有数据阻塞等待直到有数据写入读出,继续向后执行。读取数据时,如果管道中有数据直接读取,管道中没有数据不阻塞等待直接向下执行。写入数据时,会产生管道破裂错误,导致程序崩溃。打开管道文件 -> 读写管道文件 -> 关闭管道文件。pipefd[0]:读管道文件描述符。pipefd[1]:写管道文件描述符。handler:信号的处理方式。

2024-02-29 00:35:21 910

原创 嵌入式28——线程通信

1.pthread_mutex_trylock 替代 pthread_mutex_lock。5.互斥锁只能解决资源竞争的问题,无法同步代码(没有先后执行的顺序关系)多线程操作互斥锁,导致多个线程均无法向下执行的状态称为死锁状态简称为死锁。同一时刻临界资源不能同时执行,只能执行其中一个临界资源代码。CPU最小的一次不能被任务调度打断的操作称为原子操作。attr:互斥锁的属性(默认为NULL)信号量是一种资源,可以被初始化、申请、释放、销毁。mutex:互斥锁空间首地址。mutex:互斥锁空间首地址。

2024-02-27 19:46:22 642

原创 嵌入式27——进程与线程

一个线程异常结束会导致进程异常结束,进程异常结束,该进程内所有线程任务均无法向下执行。线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程。练习:创建三个线程任务,线程打印 线程(TID:XXXX)开始执行。start_routine:线程要执行的函数的入口。进程空间是独立的,没有共享空间,通信实现比较复杂。retval:存放线程结束状态空间的首地址。线程独占栈空间,文本段、数据段和堆区与进程共享。thread:存放线程ID空间首地址。编译时加 -lpthread选项。

2024-02-26 23:59:51 546

原创 嵌入式26——进程

进程的父进程先结束,此时该进程称为孤儿进程,被系统进程收养,进程再结束时,会被系统进程回收进程空间。一个进程在运行时,操作系统会为该进程分配 0 - 4G 虚拟内存空间,分为文本段、数据段、系统数据段。创建一个子进程,新创建的进程称为原来进程的子进程,原来的进程称为新进程的父进程。父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段。进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡。S 睡眠态/可唤醒等待态 if。S 睡眠态/可唤醒等待态。

2024-02-25 18:11:50 889

原创 嵌入式25——Minishell

linux@Ubuntu:当前所在目录] getcwd -> 绝对路径 -> 显示最后一部分内容。编写文档 -> 分析整体软件设计及实现 -> 编写代码 -> 调试代码 -> 答辩。3.根据代码功能,将代码划分成若干个文件,并使用多文件编程来实现代码。流程图:每个模块实现功能的具体步骤及方式。软件框图:各个模块之间的功能及其关系。2.将用户输入命令的时间及其命令写入到日志文件中并纪录。根据需求设计相关技术实现功能。具体每个功能的模块设计。2.能够接收用户的命令?

2024-02-25 18:11:39 346

原创 嵌入式24——IO

2.指定目录下编写Makefile文件或者makefile。$< 第一个依赖的文件。$^ 所有依赖的文件。$@ 要生成的文件。4.调用对应目录下的makefile文件。5.根据文件设定的编译规则来编译代码。要生成的文件:依赖的文件。3.在目录下输入make。

2024-02-21 23:50:20 334

原创 嵌入式23——IO

/ 定义 time_t t 用来存放秒数,不能定义一个time_t *t 流指针 原因:流指针为野指针,它的指向不明确,没有一块空间用来存放秒数 即使将流指针初始为NULL,也不可访问。将pathname对应的文件信息放入statbuf中。通过文件名链接,所有能够看到的连接文件均为软连接文件。pathname:文件路径字符串的首地址。statbuf:存放文件信息空间的首地址。pathname:链接文件的路径。timep:存放秒数空间首地址。tloc:存放秒数空间首地址。读取连接文件本身的内容。

2024-02-20 23:25:35 787

原创 嵌入式22——文件IO与目录IO

SEEK_CUR 文件当前位置。SEEK_SET 文件开头。SEEK_END 文件末尾。X_OK 检测是否拥有执行权限。R_OK 检测是否拥有读权限。W_OK 检测是否拥有写权限。检测调用函数的程序对文件是否拥有指定权限。F_OK 检测文件是否存在。重新设定文件描述符的偏移量。成功返回包含目录项信息的空间首地址。r: 目录中是否能够查看文件。w: 目录中是否能够新建文件。pathname:文件路径。pathname:文件路径。读到文件末尾返回NULL。

2024-02-19 23:29:45 347

原创 嵌入式21——文件IO

从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中。O_TRUNC 文件存在截断(清0)向fd对应的文件中写入buf指向的count个字节。O_CREAT 文件不存在创建。新生成的文件描述符总是为尚未被使用的最小的非负整数。O_RDONLY 只读。O_WRONLY 只写。O_APPEND 追加。成功返回文件描述符(很小的非负整数)buf:存放数据空间的首地址。打开文件并且获得文件描述符。将fd对应的文件描述符关闭。count:写入的字节数。

2024-02-18 18:10:36 356

原创 嵌入式20——标准IO

从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中。向流中写入nmemb个对象,每个对象size字节大小,在ptr指向的空间中。SEEK_CUR 文件当前位置。将格式化字符串输出到stream指向的流中。SEEK_SET 文件开头。SEEK_END 文件末尾。ptr:存放数据空间的首地址。size:每个数据对象的大小。nmemb:数据对象的个数。nmemb:读取对象的个数。stream:文件流指针。stream:文件流指针。size:读取对象的大小。

2024-02-18 18:10:15 384

原创 嵌入式19——标准IO

fgets会保留从终端接收的\n字符,并在其末尾加入\0。fgets需要给定最多读取的字符个数,没有越界风险。2.gets会去掉从终端接收的\n字符,换成\0字符。1.gets没有给定最多读取字符的个数,有越界风险。1.puts会在字符串末尾多打印一个\n字符。2.fputs不会在末尾多打印\n字符。成功返回读到字符的ASCII码值。成功返回存放字符串空间的首地址。size:最多读取字符的个数。stream:文件流指针。stream:文件流指针。stream:文件流指针。从流中读取下一个字符。

2024-02-18 18:09:54 354

原创 嵌入式18——Linux软件编程与标准IO

4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"练习:一条shell命令,将/usr/include/stdio.h文件后200行中与extern相关的内容记录到file.txt文件中。w 只写 文件不存在创建,文件存在将文件内容清空,只写打开。w+ 写读 文件不存在创建,文件存在将文件内容清空,写读打开。2.在Ubuntu左侧找到"Ubuntu Software"

2024-02-03 21:02:44 928 1

原创 嵌入式17——位运算+预处理

形成 --预处理文件 --源代码文件 gcc -E main.c -o main.i .i 文件 进行 下一步。汇编 //将汇编文件 编译 成 目标文件(机器代码) gcc -c mian.s -o main.o。软件控制硬件 编程 -->CPU-->寄存器(位)--硬件关联 C语言上 位运算。编译: // 编译成汇编文件 gcc -S main.i -o main.s。<> //表示包含的文件,在编译器默认的搜索路径下。

2024-02-03 20:47:42 861 1

原创 嵌入式16——共用体+枚举+链表

/让p指向下一个节点。//让p指向下一个节点。sun, //名字 --- 代表一个值 --- 符号常量。所以枚举类型的变量的值,并不能真正限定在指定的哪些值范围中。共用体用的数据最终存储的 --- 应该是最后一次给到的值。初始化 --- 只能给一个值,默认是给到第一个成员变量的。5.共用体的大小 --是成员变量中最大的那个成员的大小。并且头节点的指针域 为NULL //相当于是尾节点。因为枚举类型 --- 本质上是个整型类型,

2024-02-03 10:25:50 978 1

原创 嵌入式15——指针+结构体

由于str传给p的是地址传递,所以此时p的地址值能返回给str,可实现被调修改主调,即str中的值为p返回来的地址值,实现字符串“hello”拷贝给str。p此时的值是str处的地址值,在被调函数中,p=(char*)malloc(num)在堆区开空间,获得一个新的具体的地址,再进行*p运算。p此时的值是NULL,在被调函数中,p=(char*)malloc(num)在堆区开空间,获得一个具体的地址。但由于str传给p的仅仅只是值传递,所以此时p的地址值不能返回给str,即str中的值仍然为NULL。

2024-02-01 10:35:57 1081 1

原创 嵌入式14——指针

/&a[0]--对应的数据类型 int(*)[4] //数组类型 (一维整型数组类型)//返回值类型 --- 指针类型 --- 指针的函数 --指针函数。//数组类型的指针 --- 数组指针。//*(p+1) 代表的类型int[4] 此时相当于是 int[4]的数组名。//a --代表的值 -- 首元素的地址 -- a[0]//a --数组名 --代表类型 int [3][4]指针函数 -- 指针的函数 --- 返回值为指针类型 的函数。函数指针 -- 函数的指针 --- 函数类型的 指针。

2024-01-31 12:59:34 996

原创 嵌入式13——指针

(p+i) <=> int型的变量 <=> a[i] <=>p[i]<=> *(a + i)}//const char *s --在函数里面 不能通过*s修改到外面的数据。//&s[0] --->char * //地址类型。//(是不能通过*p)//野指针 --- 随机值 ---被当做了地址。//s数组名 --- 代表 数组首元素的地址。//s[0] --->类型 char型。b.指针 --- 数据类型 ---指针类型 //类型。a.指针 --- 地址 ---内存单元编号 //值。

2024-01-30 09:02:57 896 1

原创 嵌入式12——函数+指针

/如果想在当前文件使用别的文件中的 全局变量 ,//表示 此时这个a 不是在当前文件中定义的 ,&b ---得到了一块 存放着 float类型数据的 空间的地址。//基类型 表示 指针变量 指向的目标的 数据类型。//相当于,把别的文件中的变量作用域扩展到当前文件。* --- 表示此时定义的变量 是一个指针类型的变量。//如果要用,请到别的文件中寻找。b有一块内存空间 -- 放的是float类型的数据。&b --- > 地址值的类型 -->float *//表示定义了一个指针类型的变量。

2024-01-28 17:05:47 854

原创 嵌入式11——函数

b.不一致时,以函数定义时,”返回值的类型”为准。a.一般与 返回的结果类型一致。c.匹配顺序 //从右向左。c.不写,默认识别为int。递归概念 --- 自己调用自己。返回值的类型 函数名(形参)d.打印100以内的素数。return 表达式;形参:(本质是变量)

2024-01-26 23:24:18 327 1

原创 嵌入式10——函数

栈 --- 数据结构 --先进后出 (FILO) //First In Last out。准备两个数据 --- 形式参数要能接收两个数据 ---本身其实就是变量。(4).函数体 --- 完成函数具体功能的代码。函数体 //--实现函数具体功能代码。(2).函数名 --- 一般和函数功能对应。准备数据 --> 处理数据 --->输出结果。(3).形式参数 --- 函数接收数据的入口。特殊的嵌套调用 --- 递归 (自己调用自己)输入数据 -->处理数据 --->带出结果。

2024-01-25 23:47:25 940

原创 嵌入式09——数组

/c语言中二维数组的本质 -------- 一维。1.C语言中,不存在真正的二维数组,只有一维数组。字符串比较的规则与其他语言中的规则相同,int a[3][4];2.二维数组本质,是一维数组的一维数组。//a数据类型 int[3][4]

2024-01-24 22:32:58 320 1

原创 嵌入式08——数组

/本质存储时候,是按照 字符数组的形式存储。//指的是 '\0' 前面有效字符的 个数。//h e l l o'\0 ' //5就是字符串的长度。1.字符串 -- 更关注的是字符串整体,而不是单个字符。"english" //字符串 常量。'\0' 对于字符串来说,叫结束标志。"hello" //字符串长度。

2024-01-23 23:44:26 330 1

原创 嵌入式07——数组

/部分初始化--依次给到数组元素 ,没有给值的元素,默认初始化为0。//{} //表示初始化 --初始化器。//a所代表的类型为int[10] //数组类型。代表的值 --数组首元素的地址 // &a[0]//a所代表的类型 int[10]//a数组名 标识符。a[i]<=>i[a] // 意思一样。

2024-01-22 23:09:27 317

原创 嵌入式06——流程控制

+i) //一定范围。直到,"表达式"为假,while结束,程序继续往下。循环语句中(while ,do-while,for)在工作中,goto //禁用 goto //慎用。"表达式"为假,while结束,程序继续往下。}while(表达式);while() //后面不要写 分号。for 循环结束,程序继续往下。"语句"执行完,继续判断"表达式"do-while() //结束条件。假,while结束,程序继续往下。循环体 //重复被执行到的代码。真,继续 执行"循环体语句",

2024-01-21 20:48:08 340 1

原创 嵌入式05——流程控制

真 执行 "语句n" 语句n 执行完,表示if语句结束,程序继续往下。真 执行 "语句3" 语句3 执行完,表示if语句结束,程序继续往下。真 执行 "语句2" 语句2 执行完,表示if语句结束,程序继续往下。真 执行 "语句1" 语句1 执行完,表示if语句结束,程序继续往下。--- 通过运算 --- 给构造出判断的条件。语句执行完,表示if语句结束,程序继续往下。语句1 执行完,表示if语句结束,程序继续往下。语句2 执行完,表示if语句结束,程序继续往下。

2024-01-19 20:19:32 814 1

原创 嵌入式04-输入输出

/ 一个空白符 --匹配任意多个空白符。输入---->计算机 ---->输出。占了一个位置,将输入的数据,转换位 占位符 指定的格式,放到 地址列表对应的一块内存空间上。//%X 将输入的数据 转换为 十六进制 格式 输出 ,但是对应的a b c d e f 都是大写。占了一个位置,最终输出效果,将 输出列表中对应的参数,以占位符指定的格式输出。%c 以 字符的 格式 输出 //将对应的ASCII码值的 字符形式输出。%c 以 字符的 格式 输出 //将对应的ASCII码值的 字符形式输出。

2024-01-18 19:10:10 855

原创 嵌入式03——数据类型 运算符 与 表达式

算术运算 + - * / % 取余 ++ --左值 (lvalue -- locationable) //可定位的 ---能不能被定位到。lvalue (left value) //左值 --- 能放在 = 左边的这些量。//a 只读变量 ---只能读 不能修改。i++ //先用(表达式的结果) 后加 i。++i //先加i,后用 (表达式的结果)2. ++,--运算数 必须是左值 (变量)1+2 //所有的表达式都是有结果的(值)

2024-01-17 23:30:07 790

原创 嵌入式02——数据类型 运算符 与 表达式

十六进制 <=> 二进制:1位十六进制数 对应 4位 二进制数。八进制 <=> 二进制:1位八进制数 对应 3位 二进制数。int a = 10;//初始化 开空间的同时给了值。//先开空间 后给值。高位数据 存储在 高地址处。低位数据 存储在 低地址处。0x123 //十六进制。BCD码 8 4 2 1。值不能被改变的量 --常量。123 //十进制。0123 //八进制。十进制转二进制 :除2取余法。值能被改变的量 --变量。变量名起名: //标识符。1.数字,字母,下划线。

2024-01-16 22:54:13 344

原创 嵌入式01------命令学习

dir1本身不存在,相当于改名字。cp dir1 dir2 -r 目录操作需要加上 -r选项 表示递归操作。mv 123.txt dir1 将123.txt 移动到 dir1下面。rm dir1 -r 目录需要-r 表示递归删除。ls -l 目录名(或文件名) 查看目录下文件属性信息(或某个文件的属性信息)mv 123.txt 456.txt 改名字 --重命名。

2024-01-15 20:00:55 351

空空如也

空空如也

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

TA关注的人

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