- 博客(32)
- 收藏
- 关注
原创 嵌入式学习之系统编程(十三)数据库
大型 中型 小型SQL struct query language(结构化查询语言) 关系型数据库非关系型数据库 如:芒果db(1)开源 C语言开发(运行效率高)(2)代码量少 1万行左右,总大小10M以内(3)绿色软件无需安装(4)文件型数据库,可以移动。(5)数据容量最大 2T。
2025-06-10 19:06:58
939
原创 嵌入式学习之系统编程(八)IPC、管道(有名与无名)和信号通信(6.3)
实际上,在子进程结束的时候,会产生一个SIGCHLD信号,信号描述如下,根据man手册可以知道,子进程结束运行,其父进程会收到SIGCHLD信号,该信号的默认处理动作是忽略。可以,取决于pipe有没有内容,===>read返回值为0 不阻塞。创建有名管道 ==》打开有名管道 ==》读写管道==》关闭管道 ==》卸载有名管道。
2025-06-09 23:33:58
1215
原创 嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
//地址端口,一般建议值大于50000,使用htons(host to net short),进行地址转换(将一个无符号短整型数值转换为网络字节序,即大端模式)///地址IP,使用函数inet_addr(192.168.116.130);PF_UNIX == AF_UNIX ==>单机程序。功能:如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2 指定的接口地址关联, 用于从该接口接受数据。参数:domain 地址族,PF_INET == AF_INET ==>互联网程序。
2025-06-09 14:29:14
935
原创 嵌入式学习之系统编程(十一)网络编程之协议头,测试命令及工具与MQTT协议
目录一、在网络中每一次发送和接收的过程(TCP举例)二、协议头(一)TCP与UDP的首部格式(都是传输层)1、TCP报文段首部格式TCP首部关键字段的意义2、UDP的首部格式UDP首部各字段意义(二)IP数据报 1、组成2、首部各字段的意义3、扩展(三)MAC帧1、MAC帧格式2、首部各字段的意义三、常用网络测试命令及工具1、telnet 注意:如果没有写端口,则默认登录23 号端口。2、netstat 3、ping 命令 4、arp 5、抓包工具 (1)wireshark (2)tcpdump 中间
2025-06-06 17:34:26
1032
原创 嵌入式学习之系统编程(十)网络编程之TCP传输控制协议
TCP 是 TCPIIP 体系中非常复杂的一个协议。下面介绍TCP最主要的特点。(1)TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的TCP连接。这就是说,应用进程之间的通信好像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放连接。(2)每一条 TCP连接只能有两个端点(endpoint),每一条 TCP连接只能是点对点的(一对一)。(3)TCP提供可靠交付的服务。
2025-06-05 18:47:45
1466
原创 嵌入式学习之系统编程(七)线程的控制(互斥与同步)和死锁
(1)pthread_mutex_t :互斥锁类型(2) mutex:互斥锁变量(创建在pcb块中的东西) 也称内核对象(在内核中被定义的)信号量的类型 信号量的变量死锁是指多个进程或线程在竞争资源时,由于互相等待对方释放资源而陷入无限阻塞的状态。(归根结底是逻辑错误导致的)
2025-05-28 17:27:31
797
原创 嵌入式学习之系统编程(六)线程
/ 打印线程中结构体信息。#include <pthread.h> // 包含POSIX线程相关头文件(线程创建、清理等)int main(int argc, char** argv) // 主函数,argc为参数个数,argv为参数数组。int main(int argc, char *argv) // 主函数,argc为参数个数,argv为参数数组。
2025-05-27 19:51:48
978
原创 嵌入式学习之系统编程(五)进程(2)
如果要回收进程退出状态,则用WEXITSTATUS回收。如果一个子进程终止,正在等待的父进程则获得终止状态,获得子进程的状态后,execv,execvp,execve,需要构造一个参数指针数组,然后将数组的地址传入。退出状态,终止的进程会通知父进程,自己使如何终止的。(1)用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分。何情况下,父进程都能使用wait,waitpid获得这个状态,以及资源的回收。4)这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回,如果调用。
2025-05-26 18:17:57
1313
原创 嵌入式培训之系统编程(一)标准IO、文件操作
I: 键盘是标准输入设备 默认输入就是指键盘 /dev/inputO: 显示器是标准输出设备 默认输出就是指显示器一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,加入缓冲区,可以有效减少系统调用的效率,节省系统IO调度资源linux中一切都是文件。文件用来存储数据(数据,指令)
2025-05-20 19:06:25
1697
原创 嵌入式培训之数据结构学习(六)树(二叉树)、哈希表、内核链表
树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集 T1、T2、…、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。注意(1)n>0时根结点是唯一的,不可能存在多个根结点,别和现实中的大树混在一起,现实中的树有很多根须,那是真实的树,数据结构中的树是只能有一个根结点。(2)m>0 时,子树的个数没有限制,但它们一定是互不相交的。
2025-05-19 19:02:40
1204
原创 嵌入式培训之数据结构学习(五)栈与队列
1、栈的定义:注:线性表中的栈在堆区(因为是malloc来的);系统中的栈区存储局部变量、函数形参、函数返回值地址。2、栈顶和栈底:允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。3、:栈又称为后进先出(LastInFirst0ut)的线性表。4、栈示意图:top为栈顶指针5、栈对线性表的插入和删除的位置进行了限制,并没有对元素进出的时间进行限制也就是说,在不是所有元素都进栈的情况下,事先进去的元素也可以出栈,只要保证是。
2025-05-17 14:48:44
1067
原创 嵌入式培训之数据结构学习(三)gdb调试、单向链表练习、顺序表与链表对比
1、gcc -g(调试版本,内含调试信息与源码;2、gdb a.out(调试可执行文件,eg:gdb ./a.out)3、b fun.c:36设置断点,运行到这个位置,程序自动暂停(b :100 默认停在main.c的100行;b fun.c : 36 停在fun.c的36行b 函数名 eg: b InserPosLinkList)4、r运行(出现页面要输入则输入)5、n执行下一步 步过(如果是函数,直接调用结束)s步入自定义函数(系统函数不入)6、使用。
2025-05-14 19:56:41
1089
原创 嵌入式培训之数据结构学习(二)顺序表与单向链表
if (IsFullSeqList(list)) { // 检查是否已满return 1;// 方式1:直接赋值 *data 到当前末尾位置// 方式2:使用memcpy复制数据(适用于结构体中有指针成员的情况,避免浅拷贝)// 元素个数+1return 0;// 成功返回0。
2025-05-13 19:36:57
1741
原创 嵌入式培训之数据结构学习(一)数据结构的基础概念、线性表
1、数据结构:相互之间存在一种或多种特定关系的数据元素的集合。(特定关系有逻辑关系与线性关系)(1)逻辑结构集合,所有数据在同一个集合中,关系平等(数组)线性,数据和数据之间是一对一的关系(数组)树, 一对多图,多对多注:数组属于线性表的一种形式;(2)物理结构(在内存当中的存储关系)顺序存储,数据存放在连续的存储单位中,逻辑关系和物理关系一致;链式存储(链表),数据存放的存储单位是随机或任意的,可以连续也可以不连续 (一般认为不连续)2、数据、 数剧项、数据元素、数据对象。
2025-05-12 19:25:03
945
原创 嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算
形式1:先定义类型,然后定义变量形式2:定义类型的同时定义变量}s;示例:声明结构体的同时定义了两个全局变量(s1,s2)
2025-05-09 23:30:48
889
原创 嵌入式培训之C语言学习(十六)指针(4)指针函数、函数指针、指针的数组、二级指针
1、指针函数:返回值为指针的函数,绝不能返回局部变量的地址(全局变量、静态变量与传进去的指针地址均可返);2、用法:return p;int i = 10;//foo(&i)为i的地址,*foo(&i)为i本身//输出i为100return 0;
2025-05-08 21:09:07
1173
原创 嵌入式培训之C语言学习(十四)指针(2):指针与一维整型数组,快速排序,迭代器,递归
1、指针的强制类型转换2、编写代码检测计算机为小端存储(运行结果为10)还是大端存储(运行结果为0);运行结果为103、符号位扩展:运行结果:FFFF87564、指针的本质是存储的地址,所以在对指针进行算术运算加1时,偏移的字节数取决于指针所指向的数据类型的大小(偏移sizeof(基类型)个字节);注意:一边为指针,一边为整型;地址与地址之间不能求和,但可以求差(如果相减,表示之间相差几个基类型字节,根据正负可以判断谁在前谁在后);必须保证基类型相同。
2025-05-06 23:09:15
486
原创 嵌入式培训之C语言学习(十三)预处理命令与指针(1)
1、形式:#define 标识符 表达内容eg:无脑的文本替换,只换不算(其中PI具有全局作用域注:末尾不加分号否则编译报错(分号也会被无脑替换(语法错误))。2、写宏左右两边尽量加括号避免优先级高低问题;
2025-05-01 00:20:00
1268
原创 嵌入式培训之C语言学习(十二)函数参数(2)与标识符的作用域与可见性
1、形参—二维数组形式+行数(本质就是一堆数组的长度) 实参—数组名+行数2、例题:(1)函数封装打印二维数组;(2)函数封装计算二维数组边框和;(3)二维数组函数封装水平镜像;(4)二维数组水平镜像调用一维数组逆序函数;(5)求二维数组每行的平均值并放入一维数组b[i]中。1、与二维整型数组使用方式相同; 形参—二维数组形式+行数(本质就是一堆数组的长度) 实参—数组名+行数2、例题:(1)函数封装打印二维字符型数组;(2)字符型数组求极大值;(3)逆序输出字符串;(4)选择排序;(5)
2025-04-30 10:30:11
1191
原创 嵌入式培训之C语言学习(十一)函数的递归调用与函数参数
1、直接递归:函数自己调用自己;2、间接递归:在其他函数中调用自己,然后自己再调用其他函数;3、递归是一种特殊的循环(第五种循环)以消耗大量内存空间为代价;4、递归思路:要求问题n,依赖于问题对n-1的解读;5、递归代码实现思路:递推关系;递推结束条件;6、注意事项:为保证栈区不被装满,要找到使循环停下来的条件(栈区空间消耗殆尽(每递归一次要保护现场后要恢复现场)程序崩溃)。7、扩:(笔试题)未定义其他变量不使用三大循环求1~100的和:8、例题:(1)求n的阶乘;
2025-04-28 20:06:14
285
原创 嵌入式培训之C语言学习(十)函数的定义与调用
1、一般形式:类型说明符 函数名(形式参数表列)//函数首部声明部分语句部分}//函数体2、类型说明符(结果类型),可以为所学的任何类型但不能为数组,也可为void(没有要运行返回的结果);函数名符合标识符规则(数字、字母、下划线组成,开头不能为数字,字母区分大小写,不能为关键字);形式参数列表:函数被调用需要提供的额外条件,也可为void型。
2025-04-27 19:51:31
872
原创 嵌入式培训之C语言学习(九)二维数组与二维字符型数组
1、定义形式:类型说明符 数组名[常量表达式1][常量表达式2];常量表达式1为行,常量表达式2为列;2、二维数组:按连续性、有序性、单一性存储在一起的一维数组;为三行四列的二维数组(3*4=12个整型元素)其中数组a只有3个元素(a[0] a[1] a[2]),每个元素为长度为4的一维整型数组;输出结果为48(数组a共占48个字节)4、数组的引用:数组名[下标1][下标2]下标1为元素所处行号,下标2为元素所处列号,行号与列号都是从0开始访问的,超过规定的取值范围会发生越界访问;
2025-04-25 18:22:25
357
原创 嵌入式培训之C语言学习(八)字符型数组及字符串函数
1、字符串的存储具有连续性、有序性和单一性;连续性——数组存放空间是一片连续的内存空间有序性——数组的元素挨个依次存放单一性——数组的元素是同一类型2、字符串数组的定义:char 数组名[元素个数]其中“[]”为类型说明符,仅是说明s为数组,s相当于一个容器,容积要足够大。3、初始化:char s[100] = {"Hello"};其中“{}”也可省略;注未初始化的部分也会被初始化为0;" "也是字符串,叫空字符串。
2025-04-25 09:20:21
637
原创 嵌入式培训之C语言学习(七)数组与排序查找算法
1、定义方式:类型说明符 数组名【常量表达式】;2、一维数组元素的引用表现形式:数组名【下标】,a[i]指数组里具体的值,i为数组下标;数组最前面的为a[0];3、注意事项(1)类型说明符唯独不能是空类型(void);(2)数组名应遵循标识符命名规则;(3)常量表达式为整型常量表达式;(4)“【】”被理解为类型说明符,仅是说明其为数组;
2025-04-23 19:43:08
980
1
原创 嵌入式培训之C语言学习(六)循环控制
1、goto语句为无条件转向语句,一般形式为:goto语句标号;2、用法:与if语句一起构成循环结构;从循环体中跳到循环体外。3、例题:goto语句求1-100的和。
2025-04-22 19:01:07
618
原创 嵌入式培训之C语言学习(五)选择结构程序设计
1、关系运算符及其优先次序如下图所示:2、任何表达式都有数据类型,例:printf(“%lu”,sizeof(4>3));输出结果为4,表示关系表达式为与整型相兼容的类型(int型)。3、C语言逻辑:非零即为真(只有0表示逻辑假),例:i=-3,j=-6;输出结果为0(假),('<'结合方向自左向右),不能用连续方式比较若干表达式。1、3种逻辑运算符(1)&&逻辑与(AND):左右同时为真,表达式结果为真,有一假即为假;(2)||逻辑或(OR):左右有一真即为真,同时为假即为假;
2025-04-21 20:20:50
829
原创 嵌入式培训之C语言学习(四)数据的输入输出
2、函数作用:向终端(或系统隐含指定的输出设备)输出若干个任一类型的数据(putchar只能输出字符,而且只能是一个字符,而printf可以输出多个数据,且为任意类型);2、scanf(“%d%d%d”,&a,&b,&c)该函数的作用是按照a、b、c在内存中的地址将a、b、c的值存进去,(&a,&b,&c必须用,隔开)")输出结果为Hello和W在内存中的地址;1、scanf函数:scanf(格式控制,地址表列),其中地址表列是由若干个地址组成的表列,可以是变量的地址或字符串的首地址;\n",1234);
2025-04-18 20:20:40
632
原创 嵌入式培训之C语言学习(三)转义字符、混合运算、算数运算符
int k = -6;输出t+k 应该为9(t +k 表达式两边数据类型应一致,按照转换规则变量k类型应为unsigned int型,则表达式也应为unsigned int型(无符号整数型))。const关键字:在定义变量i时,前加const修饰,i为只读变量,在程序运行过程中只能初始化不能修改,如:const int i = 100,其与int const i = 100无任何区别。(2)不同运算符要求有不同的运算对象个数,双目运算符需要两个操作数,例:1 + 2 该表达式中1为左操作数,2为右操作数;
2025-04-17 20:14:31
263
原创 嵌入式培训之C语言学习(二)常量、变量及数据类型
unsigned short 占用2字节,取值范围为:0~2^16-1。unsigned long 占用8字节,取值范围为:0~2^64-1。(1)(signed)short 占用2字节,取值范围为:-2^15~2^15-1。signed char占用1字节,取值范围为:-2^7~2^7-1。unsigned char占用1字节,取值范围为:0~2^8-1。(3) long 占用8字节,取值范围为:-2^63~2^63-1。(2) int 占用4字节,取值范围为:-2^31~2^31-1。
2025-04-16 21:22:15
519
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人