自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式学习笔记DAY36(事务、网页制作、HTTP协议)

name

2025-06-11 19:03:19 725

原创 嵌入式学习笔记DAY35(数据库)

数据库是一个软件,在所提供的功能上它类似于文件,可以把数据存储进去,但是和文件不一样的是,它可以对数据进行管理和操作(例如:增删改查等),一般数据库是配合服务器使用的。2. 工具此处,我们使用的是sqlite3;在PC端,还有mysql,sqlsever等软件;下面是一张表,一行数据就被称为一条记录,一条记录由若干列组成;列在数据库中被称为——字段;能够存储多张表的就称为库;

2025-06-10 20:10:17 835

原创 嵌入式学习笔记DAY33(网络编程——TCP)

答:粘包问题是指在。

2025-06-05 20:20:23 1129

原创 嵌入式学习笔记DAY30(线程的控制:互斥和同步)

semaphore。

2025-05-28 19:11:14 587

原创 嵌入式学习笔记DAY29(线程)

答:多个线程之间可能干同样的事情,也可能干不同的事情,在线程内部会去调用各种函数,涉及到入栈、出栈,可能会触发线程1入栈,线程2去出同一个栈,所以一定要记清楚谁的返回地址是谁——因此,栈必须被独立出来。(多进程编程太“重”了,创造进程/销毁进程,都是需要重新分配/释放内存的,若要频繁的创建销毁,太消耗资源了,随着对效率的要求提升,就需要更好的方式,也就是多线程。在你写好代码的时候,代码的执行并不是由进程负责,而是由线程一条一条执行的。线程的id表示分为内核层和用户层,所以两个是不一样的,有对应关系的。

2025-05-28 00:23:47 1028

原创 嵌入式学习笔记DAY23(树,哈希表)

之前我们一直在谈的是一对一的线性结构,现实中,还存在很多一对多的情况需要处理,一对多的线性结构——树。(3)遍历链表:使用list_for_each或list_for_each_entry宏可以遍历链表中的每个元素。(1)添加节点:使用list_add或list_add_tail函数可以在链表的头部或尾部添加新节点。(3)初始化链表时,可以使用INIT_LIST_HEAD宏,它将链表的next和prev指针都指向。结点的关系:结点的子树的根称为该结点的孩子,相应地,该结点称为孩子的双亲。

2025-05-19 19:35:21 908

原创 嵌入式学习笔记DAY22(栈,队列)

栈(Stack):是只允许在一端进行插入或者删除的线性表(先进后出,后进先出。

2025-05-19 01:29:27 259

原创 嵌入式学习笔记DAY21(双向链表、Makefile)

DST = app //代表最终你想要生成的可执行文件名,后续运行时输入./app即可。它通过定义文件间的依赖关系和编译规则,让开发者只需一个简单的命令(如。:通常是要生成的文件(如可执行文件、库文件)或执行的操作(如。)就能完成复杂的项目编译过程,避免手动输入大量编译命令。存储数据元素,逻辑上相邻的元素在物理地址上也相邻。:生成目标需要执行的 shell 命令,必须以。连接,逻辑上相邻的元素在物理地址上不一定相邻。:生成目标所需的文件或其他目标。

2025-05-15 18:37:25 1050

原创 嵌入式学习笔记DAY20(链表,gdb调试)

1、gcc -g *.c 加上调试选项(eg:gcc -g main.c linklist.c)2、gdb a.out(调试可执行文件,eg:gdb ./a.out)4、b fun.c:36 设置断点,运行到这个位置,程序自动暂停。5、n 执行下一步 步过(如果是函数,直接调用结束)s 步入自定义函数(系统函数不入)3、r 运行(出现页面然后进行输入)6、使用p命令,查看变量或指针等数据。步,此时快指针距离链表尾部还有。7、q命令 退出(y)修改循环条件,让快指针。)和快指针同步移动。

2025-05-14 20:49:57 592

原创 嵌入式学习笔记DAY17(结构体、共用体、枚举、typedef、位运算)

在之前,我们学了很多数据类型int char …等,还学到了同类型元素构成的数组,以及这些数据类型的指针,在一些小应用可以灵活使用,然而,在实际应用中,每一种变量进行一次声明,再结合起来过于麻烦,类如一位学生的信息管理,他可能有,姓名(char),学号(int)成绩(float)等多种数据。如果把这些数据分别单独定义,就会特别松散、复杂,难以规划,因此我们需要把一些相关的变量组合起来,以一个整体形式对对象进行描述,这就是结构体的好处。 (1)先定义结构体类型,再声明变量

2025-05-12 02:14:29 1030

原创 嵌入式学习笔记DAY16(指针函数,函数指针,指针的数组,指针的指针)

只是声明了一个指针变量 s,但未初始化,调用getMemory(s) 时,由于 s 是未初始化的指针,属于野指针,这会导致未定义行为。此时,并不能运行成功,返回 i 的地址,因为 i 具有动态生存期,函数程序结束之后,i 的空间被销毁,即 i 的空间不存在了,相当于成野指针了;并且 getMemory 函数期望接收 char **p 类型参数(即指针的指针),这里传递的是 char * 类型的 s,参数类型不匹配。通过指针的指针,不仅可以访问它指向的指针,还可以访问它指向的指针所指向的数据。

2025-05-09 01:01:20 1028

原创 嵌入式学习笔记DAY15(字符串与指针、数组指针)

补充:为什么a代表的是数组a的首元素地址,而sizeof(a) = 40 ,而不是8呢?答:sizeof是一个编译时操作符,它在编译时计算其操作数的大小,而不是在运行时,因此,sizeof的行为取决于其操作数的类型,而不是其值;此处,a是一个数组名,在sizeof操作符中,数组名不会退化为指针,而是保留其完整的数组类型,因此,sizeof(a)计算的是整个数组的大小。

2025-05-07 21:03:30 835

原创 嵌入式学习笔记DAY14(野指针,数组指针)

此时,*(p+1)是野指针,因为p+1会根据int类型在系统中的字节大小进行地址偏移,但这里的i只是单个变量,在i之后的内存区域不一定能够合法访问,所以为野指针,但对于数组来说,具有单一性、连续性、有序性的特征,可以实现上述操作。

2025-05-06 20:22:50 615

原创 嵌入式学习笔记DAY13(预处理命令,指针)

指针在底层的运算步骤:所以,野指针在第二步偏移之后的那部分内存空间不一定能够存入值!

2025-05-05 21:07:21 775

原创 嵌入式 学习笔记DAY11

a.不定义变量且不适用三大循环 求解1~100的和b. 求n的阶乘c. 求解斐波那契数列的前n项的和d. 汉诺塔。

2025-04-28 20:29:59 243

原创 嵌入式 学习笔记DAY10(函数)

注意:函数的定义≠函数的声明a. 一个C程序由一个或多个程序模块组成。b. C程序的执行是从main函数开始的,是在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行c. 所有函数都是平行的,不允许在函数中嵌套函数。

2025-04-27 20:30:14 549

原创 嵌入式 学习笔记DAY9

类型说明符 数组名[常量表达式][常量表达式]int [3][4] : 表示定义了一个三行四列的数组,一共有12个数据元素。一共占48个字节。这12个元也都有自己的名字。

2025-04-26 18:20:23 380

原创 嵌入式 学习笔记DAY8

定义是用来存放字符数据的数组,字符数组用来对字符进行字符串处理。char c[10];c[0] = '1';c[1] = 'a';字符数组的初始化表示把10个字符分别赋给c[0]~c[9]这10个元素。如果再定义字符数组时不进行初始化,则数组中各元素的值是不可预测的,如果花括号中提供的初值个数(即字符个数)大于数组长度,则会导致越界访问。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')字符串和字符串结束标志。

2025-04-24 20:33:41 789

原创 嵌入式 学习笔记DAY7

类型说明符 数组名[常量表达式];表示定义了一个整型数组,数组名为a,这个数组里面有10个元素。数组的名字 a 代表数组a当中首元素的地址;数组名的命名规则和变量名相同,遵循标识符命名规则;在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度;数组的下标是从0开始的;常量表达式中可以包括常量和符号常量,不能报包含变量;定义数组时,不允许空类型。

2025-04-23 20:28:11 261

原创 嵌入式 学习笔记DAY6

它是这样执行的:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(真)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时,循环结束。b.for循环之后不要再加分号,但如果加了分号,它并不像while循环一样会陷入死循环,因为for语句里面自带使得循环结束的条件。a. for语句中的一般形式中的“表达式1“,可以省略,此时应在for语句之前给循环变量赋初值,但省略时,其后的分号不能省略。b.while的循环体可能一次也不执行,do..while的循环体至少执行一次。

2025-04-22 19:50:46 732

原创 嵌入式 学习笔记DAY5

关系运算”实际上是一种“比较运算”,将两个值进行比较,判断其比较的结果是否符合给定的条件,如果满足给定条件,则该关系表达式的值为真,如果不满足,则为假。说明:a. 前四种关系运算符的优先级相同,后两种也相同。前四种高于后两种b. 关系运算符的优先级低于算数运算符c. 关系运算符的优先级高于赋值运算符用关系运算符将两个表达式连接起来的式子,称关系表达式。关系表达式的值是一个逻辑值,表示”真“或”假“,在c语言中,以”1“代表”真“,以”0“代表”假“。注:非0即为真二、逻辑运算符和逻辑表达式。

2025-04-21 20:27:04 847

原创 嵌入式 学习笔记DAY4

可以理解为形参是重新申请了一块新的空间,然后把实 参的值复制粘贴进去(当然形参的类型要和实参相同),所以形参的改变并不会导致实参 的改变。b.函数被调用时给出的参数包含了实实在在的数据,会被函数传递给形参。

2025-04-21 00:14:46 751

原创 嵌入式 学习笔记DAY3

处理的方式就是(int)a,意思就是把a的值取出来强制转换为int的数据类型,(int)c也是同样的处理,这样操作之后 (int)a + (int)b的结果就为10+13=23。如'a'、'x'、'?除了以上形式的字符产量外,C还允许用一些特殊形式的的字符常量,即以一个字符“\”开头的字符序列,这些字符在屏幕上不能直接显示,在程序中也无法用一个一般形式的字符表示,因此引入了转义字符。关键字const表示不变的,在定义之前加上它,表示i不能被赋值,i就是一个只读变量,也就是说定义后,不能被修改,只能读取。

2025-04-17 21:04:41 950

原创 嵌入式 学习笔记DAY2

数据类型是用来约束数据的解释,通俗来讲,就是数据类型决定了这个变量在程序中所占内存的大小。而变量名是我们的程序对于可解释操作的存储空间的一个别名。C语言中提供了以下一些数据类型,由这些数据类型可以构造出不同的数据结构。

2025-04-17 02:27:31 636

原创 嵌入式 学习笔记 DAY1

1. vi是什么?vi(即visual):文本编辑器,是能够在视频终端上通过移动光标来进行编辑2. 学习vi的理由(1) vi 总是可用的,如果用户面前的系统没有图形界面,此时vi就是必须的。(2) vi 是轻量级的软件,运行速度快。3. 一些简单的vi使用操作(1)启动和退出vi首先可以在终端中建立一个main.c文件,从而输入命令启动vi对文件进行编辑。启动命令如下:点击回车键:vi有两种模式:命令模式和编辑模式(2)模式切换。

2025-04-16 21:06:24 540 1

空空如也

空空如也

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

TA关注的人

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