自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 13-Makefile_04

第一个函数调用中,由于“hello_main.c”符合“%.c”的匹配规则(%在Makefile中的类似于*通配符),而且“%”从“hello_main.c”中提取出了“hello_main”字符,把这部分内容放到替换规则“build_dir/%.o”的“%”号中,所以最终的输出为”build_dir/hello_main.o”第二个函数调用中,由于由于“hello_main.xxx”不符合“%.c”的匹配规则,“.xxx”与“.c”对不上,所以不会进行替换,函数直接返回空的内容。注意工程结构如上图。

2024-04-26 15:15:55 240

原创 12-Makefile_03(续)

特殊的变量”$@”,”$<”,可理解为Makefile文件保留的关键字,是系统保留的自动化变量,”$@”代表了目标文件,”$<”代表了第一个依赖文件。即”$@”表示”%.o”,”$<”表示”%.c”。”,即等价于o文件依赖于c文件的默认规则。分支会比较括号内的参数“arg1”和“arg2”的值是否相同,如果相同,则为真,执行分支 1 的内容,否则的话,执行分支 2 的内容,参数 arg1 和 arg2 可以是变量或者是常量。“%”是一个通配符,功能类似“*”,如”%.o”表示所有以”.o”结尾的文件。

2024-04-23 19:20:50 474

原创 11-Makefile_02(续)

接10-Makefile新增的"-I ."是告诉编译器头文件路径在该文件夹。

2024-04-20 15:47:08 573

原创 10-Makefile_01

回顾之前的hello.c程序的编译,过程很简单,但是在项目工程中,势必会有相当多的C文件和H头文件。哪怕只是修改一个文件,也需要重新编译所有的文件,白白浪费了很多开发时间。要解决这个问题,最好的方式就是把工程的编译规则写下来,让编译器自动加载该规则进行编译。解决方法就是使用和Makefile中的语法复杂、晦涩难懂,但是都是为了更好的解决文件依赖问题而存在的。

2024-04-17 15:11:29 738

原创 09-ARM开发板的HelloWorld

如图所示,程序无法正常运行,终端提示ARM开发板在执行x86架构(Intel或AMD)的hello程序时提示格式错误,原因是x86_64和ARM架构的程序不兼容,本质是由于这些CPU使用的指令集不同。前面在Ubuntu系统编译生成了X86_64平台的HelloWorld程序,通过NFS服务器,尝试在开发板上直接运行。交叉编译出来的程序在开发板上提示gblic版本不对应,程序运行不了,除了想到能静态编译想不到其他方法,后面换了。,编译复杂的程序时,可能需要巨大的存储空间以及强大的CPU运算能力加快编译速度。

2024-04-13 10:33:26 340

原创 08-GCC和编译流程

调用库文件*.so中的内容,不同的程序可以共用代码库。所以动态链接生成的程序比较小,占用较少的内存。优点就是占用小,缺点就是如果在一台机器上编译的程序到另一台机器上因为没有对应的库可能执行不了,也就是兼容性问题。静态链接,链接时使用选项“–static”,它在编译阶段就会把所有用到的库打包到自己的可执行程序中。,例如printf 函数的C标准代码库*.so文件存储在Linux系统的某个位置,hello程序执行时。GCC编译工具链是指以GCC编译器为核心的一整套工具,用于把源代码转化成可执行的应用程序。

2024-04-12 16:19:59 520

原创 07-挂载NFS网络文件系统

应用场景中开发主机和开发板需要通过网络互相访问,另外由于NFS文件系统暴露到公网需要处理很多安全问题,为简化操作,只把开发主机和开发板连接到局域网,即都使用网线把它们连接到同一个网段(还没学网络,不知道这个说法对不对,有错希望指出)。至于为什么这样应用,服务器端的硬件相比开发板更加好,有时候开发板的硬件条件不能够编译软件是可以用服务器端来编译,一方面提高开发效率,还有一方面节省开发板的空间。开发主机开启NFS服务后,还需要在开发板安装NFS客户端,让开发板使用NFS服务。

2024-04-09 20:37:14 589

原创 06-编辑器

虽然Ubuntu的图形界面也能通过gedit打开文件,但是用终端打开gedit可以动用更高的权限,在图形界面下默认使用的是用户身份,要修改某些需要管理员权限的文件是无法操作的,只能读不能写。图形界面虽好,但网上教程一般都是用vi或者vim来修改配置文件,因为系统一般自带vi,而且不需要区分系统是否需要使用图形界面。在一般命令模式下,按下键盘的冒号键“ :”,就可以进入命令行模式,继续输入要执行的命令按回车即可执行。以上一般是较常用的命令或快捷键,还有很多操作就不列出来了,以上的命令对日常的编辑足够使用了。

2024-04-03 15:46:35 1242

原创 05-apt及yum包管理工具

用户需要安装软件时,通过包的形式进行分发,包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档,当用户需要时,可以运行特定的指令来安装。目前大多数类Unix操作系统都提供了异种中心化的机制用来搜索和安装软件,软件开发者先行在固定的硬件平台上将软件编译好然后将软件的所有相关文件打包存放在公开的服务器中。命令中的dpkg(DebianPackager)是Debian专门开发的包管理工具,它可以用来安装、更新和移除软件,安装时它需要使用deb类型的软件包。dpkg只能对已经下载到本地的软件包进行管理。

2024-04-02 20:11:16 973

原创 04-Linux命令行-续

注::IMX6ULL 开发板在使用poweroff命令关机后,需要长按ON/OFF键1~2秒才能正常开机。从上图知,除了能查看Shell命令,还能看到man手册支持9种类型的内容。需要注意的是,如果我们需要查命令等等,需要在对应的章节进行查找。除了–help选项来查看命令,Linux还提供了man命令,可以用来查看Linux系统自带的参考手册。打开说明后,按键盘方向键的“↑”“↓”键可以实现上下切页,按“q”来退出手册。左上角的“PRINTF(1)”中的数字1表示它在man手册中的章节号。

2024-04-01 21:09:37 289

原创 03-Linux命令行-续

有时我们希望把命令执行的结果保存到文件进行分析,这时我们可以使用输出重定向到文件的控制符“>”或“»”,其中“>”会直接用输出覆盖原文件,而“»”则把输出追加到原文件的末尾。ls 命令是list 的简写,在前面就已经频繁使用,它是Linux下最常用的指令,功能为显示指定目录下的内容(文件及子目录),还可以查看文件大小,修改日期等等信息。其中“目录名”就是要创建的目录路径,“-p”选项可以不输入,如果使用了“-p”选项,则当创建的目录名包含的上级目录不存在时,它会自动创建所有不存在的目录。

2024-03-31 10:37:10 927

原创 02-Linux命令行-初

Shell、终端(Terminal)或控制台(Console),严格来说它们不是同样的东西。

2024-03-28 16:42:06 324

原创 01-Linux简介、目录

我们说的Linux系统时,其含义往往指采用Linux内核的操作系统。Linux内核负责控制硬件、管理文件系统、进程管理、网络通讯等等,但是其本身并没有给用户提供必要的工具和应用软件。

2024-03-26 09:12:27 232

原创 C++虚析构函数作用

当基类指针指向派生类对象时,如果基类的析构函数不是虚函数,那么在删除该指针时只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致派生类对象的资源无法正确释放,从而引发内存泄漏和未定义行为。

2024-03-20 14:35:40 132

原创 Java笔记12-25

Stack栈容器,是Vector的一个子类,它实现了一个标准的后进先出的栈(LIFO:Last In Frist Out)

2023-12-25 08:16:26 368

原创 Java笔记12-19

ArrayList底层是用数组实现的存储。在1.7版本中,创建容器默认大小为10,在1.8版本中创建容器大小默认为0,节省了空间,需要添加元素时再扩容为10,后续再添加超过容量时会以原来大约1.5倍扩容。将list_C中与list_D相同的元素删除,删除成功返回true,失败返回false。与并集一致,若list_a为空,则会返回false。方法执行成功返回true,失败返回false。

2023-12-19 07:51:37 384

原创 Java笔记12-16

有序:有序(元素存入集合的顺序和取出的顺序一致)。List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。可重复:List允许加入重复的元素。跟确切地讲,List通常允许满足e1.equals(e2)的元素重复加入容器。查找Object o对象,若查到则返回该元素最后一次出现的位置索引号,若查找不到该元素则返回-1。

2023-12-16 10:49:19 883 1

原创 Java笔记12-8

Collection是单例集合根接口,子接口为List接口和Set接口方法说明增加元素到容器中从容器中移除元素容器中是否包含该元素int size()容器中元素的数量容器是否为空清空容器中所有元素获得迭代器,用于遍历所有元素本容器是否包含c容器中的所有元素将容器c中所有元素增加到本容器移除本容器和容器c中都包含的元素取本容器和容器c中都包含的元素,移除非交集元素转化成Object数组。

2023-12-08 08:38:40 321

原创 Java笔记11-3

泛型主要用于编译阶段,编译后生成的字节码class文件不包含泛型中的类型信息。类型参数在编译后会被替换成Object,运行时虚拟机并不知道泛型。基本类型不能用于泛型这样写法是错误,可以使用对应的包装类;不能通过类型参数创建对象运行时类型参数T会被替换成Object,无法创建T类型的对象,容易引起误解,所以在Java中不支持这种写法。

2023-11-03 20:02:57 29

原创 Java学习笔记11-1

上限限定表示通配符的类型是T类以及T类的子类或者T接口以及T接口的子接口。该方法同样适用于与泛型的上限限定。”表示类型通配符,用于代替具体的类型。只能在“”中使用。可以解决当具体类型不确定的问题。在泛型方法中,泛型也可以定义可变参数类型。

2023-11-01 12:34:31 42 1

原创 Java笔记10-30

类型参数可以有多个,用逗号隔开,例:<K,V>。定义时,类型参数一般放到返回值前面。调用泛型方法时,不需要像泛型类那样告诉编译器是什么类型,编译器可以自动推断出类型来。

2023-10-30 12:57:02 37 1

原创 Java笔记10-28

泛型标记对应单词说明EElement在容器中使用,表示容器中的元素TType表示普通的Java类KKey表示键,例如:Map中的键KeyVValue表示值NNumber表示数值类型?表示不确定的JAVA类型。

2023-10-28 10:40:21 29 1

原创 Java学习笔记10-26

整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。缓存原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。注:一月是0,二月是1,以此类推。

2023-10-26 08:42:11 24

原创 Java学习笔记10-11

如果try语句块出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。代码中可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。Exception类是所有异常类的父类,通常Java的异常可分为:RuntimeException(运行时异常),CheckedException(已检查异常)抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象交给JRE。不管是否发生了异常,都必须要执行。

2023-10-11 09:51:19 27 1

原创 图书馆管理系统

非图形界面使用了Linux内核链表的部分。将文件数据读出到链表进行操作。构成文件:main.c, module.c, module.h, kernel_list.h(Linux内核链表), book.txt(存放图书数据)注:部分操作无法做到检测任意错误输入。如果不是通过程序提供的退出操作,其他退出操作都不能将链表中已经修改好的数据保存进文件。文件中至少要存有一本书的数据。文件中图书的数据格式(单个数据占一行):12(图书索引号)水浒传(图书名)图书馆b区(馆藏地址)小说(类别)10

2023-10-07 16:54:51 82 1

原创 Java学习笔记9-24

除了用new关键字类产生数组以外,还可以直接在定义的数组的同时就为数组元素分配空间并赋值。数组也是对象,它的元素相当于对象的属性,每个元素也按照属性的方式被默认初始化。for-each 专门用于读取数组或容器中所有的元素,即数组进行遍历。如果数组并不是有序的,必须在调用二分法查找方法前使用排序使其有序。事实上,java中排序算法的底层也依赖Comparable接口。Java中多维数组的声明和初始化应按从低维到高维的顺序进行。length:要复制的数组元素的数量。多维数组可以看成以数组为元素的数组。

2023-09-24 12:44:22 33 1

原创 Java学习笔记9-13

属性:用于定义该类或该类对象包含的数据或者说静态特征初始化:定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化接口就是规范,定义的是一组规则。接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束。接口和实现类不是父子关系,是实现规则的关系。

2023-09-17 09:41:41 29 1

原创 Java学习笔记9-12

(外部类里使用非静态内部类和平时使用其他类没什么不同)

2023-09-13 16:51:41 27 1

原创 C++学习笔记9-1

C++允许在声明变量时省略关键字struct。

2023-09-12 08:06:22 37 1

原创 Java笔记9-5

编程中封装的具体优点:关于protected的两个细节:

2023-09-07 14:34:07 28

原创 Java笔记9-2

除了继承,“组合”也能实现代码的复用。“组合”核心是“将父类对象作为子类的属性”。子类重写父类的方法,可以用自身行为替换父类行为。重写是实现多态的必要条件。修饰变量:被它修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。修饰类:修饰的类不能被继承。比如:Math、String等。修饰方法:该方法不可被子类重写。

2023-09-05 07:41:22 62 1

原创 Java笔记8-30

学习笔记

2023-08-30 17:57:25 22

原创 Java笔记8-25

if、while等等里的条件语句判断最终结果只能为布尔类型(Boolean),与运算符(&)在C、C++是按位运算,而在Java中不仅是按位运算,还是逻辑运算符,只是相比与短路与(&&)少了逻辑短路现象。不像C、C++非零即真。

2023-08-26 09:33:28 32

原创 Web前端笔记(部分2)

笔记

2022-11-04 19:33:41 215 1

原创 Web前端笔记(部分1)

前端笔记

2022-10-28 18:41:53 1699

原创 Web前端学习笔记

Web前端学习

2022-10-16 07:27:24 3199 1

空空如也

空空如也

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

TA关注的人

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