自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【GNU】addr2line

addr2line是 GNU Binutils 工具集中的一个命令行工具,用于将程序中的地址转换为源代码中的文件名和行号。它在调试和问题定位中非常有用,尤其是在处理崩溃或 core dump 时。

2024-11-17 21:28:09 397

原创 【GNU】反汇编工具objdump

objdump是 GNU Binutils 工具集中的一个命令行工具,用于分析和显示目标文件(如二进制文件、目标文件、静态库和可执行文件)的详细信息。它是开发调试、优化和逆向工程的利器。

2024-11-17 13:16:33 718

原创 【GNU】gcc -g编译选项 -g0 -g1 -g2 -g3 -gdwarf

GCC 的 -g 选项用于在编译时生成,这些信息会嵌入到生成的目标文件或可执行文件中,主要目的是为了支持调试器(如 gdb)对程序的调试工作。当你在编译代码时使用-g选项,GCC 会将额外的调试信息嵌入到生成的可执行文件或目标文件中。调试信息存储在符号表中,不会影响程序的实际执行逻辑。生成的调试信息可以被调试器(例如gdb使用-g选项时,GCC 不会对程序进行优化,确保调试时的代码行为和源代码的逻辑一致。如果需要同时优化代码并生成调试信息,可以结合使用-O选项(例如-g -O2。

2024-11-16 12:17:39 1167

原创 【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os

GCC 提供的-O系列选项用于优化代码。这些选项可以控制编译器对代码进行优化的程度和类型,从而提高代码的性能、减小代码体积或优化其他特性。

2024-11-16 12:16:08 1022

原创 【Linux】fessk()详细解析

fseek()是 C 语言标准库中的一个非常重要的文件操作函数,用于在打开的文件中。通过fseek(),可以在文件的任意位置读取或写入数据。它是随机访问文件的基础,与顺序读取相比,可以提高对文件操作的灵活性。fseek()FILEfopen()offsetwhencewhenceSEEK_SETSEEK_CURSEEK_ENDfseek()offsetoffsetwhenceoffsetoffsetoffsetwhencewhenceSEEK_SET:将文件指针设置为相对于文件开头的offset位置。

2024-10-24 22:40:32 1016

原创 【单片机】深入剖析USART与UART的区别

如果你的系统中不需要高精度的时钟同步,且通信速率要求不高,UART将是一个更简单且更实用的选择。如果你的应用需要更高的传输速率,并且系统能够支持时钟信号的额外硬件成本,那么USART的同步模式将为你提供更高效、更精确的数据传输。

2024-10-24 22:27:04 2479

原创 【Linux】ls -l|grep ^-|wc -l 统计当前目录下当前文件个数

命令是用于统计当前目录下的个数的一个组合命令。

2024-10-24 22:17:12 1002

原创 【Linux】统计当前目录及其所有子目录下的所有文件的个数 find . -type f -name “*.txt“ | wc -l

递归查找所有普通文件递归查找特定类型的文件**仅统计当前目录中的文件(不递归)

2024-10-24 22:17:05 723

原创 【Linux】wc命令详细解析

wc是 Linux 中的一个常用命令,它的全称是 “word count”(字数统计),用于计算文件中的和或。wc可以处理一个或多个文件,也可以通过管道接收其他命令的输出作为输入。

2024-10-20 19:42:36 1121

原创 【C语言】二维数组:定义与传参

【代码】【C语言】二维数组:定义与传参。

2024-10-20 19:37:28 292

原创 【Linux】dd命令常用的使用场景

【代码】【Linux】dd命令常用的使用场景。

2024-10-13 20:39:49 1009

原创 【Linux】dd命令

dd命令是 UNIX 和类 UNIX 系统(如 Linux)中的一个非常强大的工具,专用于复制和转换文件。它特别适合操作原始设备,如磁盘、分区和 USB 驱动器等,能够以块为单位读取和写入数据,并支持数据转换,例如字节交换、大写转换、ASCII 与 EBCDIC 编码转换等。

2024-10-01 19:32:29 1923

原创 【FATFS】f_lseek函数详细解析

是 FatFs 文件系统库中的一个函数,用于移动文件指针到指定的位置。这个函数的主要作用是调整文件对象的读写位置,可以用于在文件中随机访问数据。,可以实现类似于文件跳转、追加写操作等功能。

2024-10-01 19:31:30 1246

原创 【Shell】if表达式

Shell 提供了丰富的文件测试选项来检测文件或目录的存在、类型及权限等。可以简化条件的书写并避免一些常见的错误。语法中可以使用字符串模式匹配,例如使用通配符或正则表达式。Shell 支持多个条件组合在一起进行判断,例如使用。命令中可以使用经典的 C 风格比较运算符,如。语句进行模式匹配,它在处理多种情况时非常有用。用于进行算术运算,常用于数值计算和逻辑判断。语句,shell 脚本中还可以使用。

2024-09-29 22:15:09 1106

原创 【FATFS】f_readdir函数详细解析

是 FatFs 文件系统库中用于读取目录条目的函数,它的作用是从一个打开的目录中逐个读取文件或子目录的条目信息。通过这个函数,可以遍历目录中的所有文件和子目录,通常用于列出目录内容。

2024-09-29 22:14:14 748

原创 【单片机】单片机map表详细解析

所以下载程序到FLASH/ROM时,空间大小为:程序运行的时,RAMRW Data:包含有初始值的全局和静态变量。因为这些初始值必须在程序启动时恢复,因此它们的初始值需要存储在 ROM 中,以便启动时能将这些初始值复制到 RAM 中。ZI Data:包含未初始化的全局和静态变量。由于它们的初始值始终是零,启动时只需清零 RAM 中相应的内存区域,因此它们的初始值不需要存储在 ROM 中。

2024-09-28 20:52:12 1282

原创 【C语言】__attribute__((packed))与#pragma pack

在 C 语言中,是指编译器会根据不同的数据类型自动调整它们在内存中的位置,确保它们按照特定的字节边界存储。这种做法可以让处理器更高效地读取和存储数据。举个例子,像int这样的 4 字节数据通常会被对齐到 4 字节的边界上。如果前面有一个较小的数据类型,比如 1 字节的char,编译器可能会在它后面插入一些,让接下来的int保持在 4 字节边界上。虽然这样可以加快处理器的访问速度,但同时也会增加结构体的总大小,浪费一些内存。

2024-09-28 17:18:41 569

原创 【FATFS】f_write函数详细解析

函数用于将数据写入到已经打开的文件中。

2024-09-17 11:40:36 1274

原创 【C语言】__attribute__((constructor)) 和 __attribute__((destructor))详细解析

标记的函数在main()函数之前执行,适合用于程序初始化。可以通过设置优先级,控制多个初始化函数的执行顺序,优先级数值越小,函数执行得越早。:标记的函数在main()函数之后、程序终止时执行,适合用于清理资源。同样可以通过设置优先级,控制多个清理函数的执行顺序,优先级数值越小,函数执行得越早。

2024-09-17 11:40:08 1425

原创 【Linux】Image、zImage与uImage的区别

zImage是一种经过压缩的 Linux 内核镜像格式,它通过gzip压缩内核代码和数据,使文件大小大大减小。zImage也称为 “compressed kernel image”,在加载时会自解压缩到内存中然后执行。uImage是 U-Boot 引导加载程序专用的内核镜像格式。它是在zImage或Image的基础上加上一个 U-Boot 头部信息(U-Boot Header),使 U-Boot 能够识别并加载内核镜像。

2024-09-16 11:20:46 1792

原创 【Linux】uImage头部信息详细解析

【代码】【Linux】uImage头部信息详细解析。

2024-09-16 11:19:03 1841

原创 【FATFS】f_read函数详细解析

函数用于从打开的文件中读取数据,将读取到的数据存储在提供的缓冲区中。

2024-09-15 12:51:36 1232

原创 【Shell】getopt、set

【Shell】getopt

2024-09-15 12:51:15 923

原创 【FATFS】f_mount函数详细解析

【FATFS】f_mount

2024-09-14 23:51:58 1609

原创 【FATFS】FATFS简介及下载

ff.c: FatFs 模块的核心实现ff.c是 FatFs 文件系统模块的核心源文件,负责处理与 FAT 文件系统相关的所有具体操作。文件和目录的创建、打开、关闭、读取、写入、删除等操作:例如函数f_open()f_read()f_write()f_close()等实现了文件系统的基本文件操作。文件系统管理功能:包括f_mkdir()(创建目录)、f_rename()(重命名文件/目录)和f_unlink()(删除文件/目录),这些函数处理文件系统中对象的创建、重命名和删除。文件指针管理:如。

2024-09-14 23:08:44 1917

原创 【Shell】在shell脚本中$的使用方法

变量引用$var表示引用变量。命令替换$()或`command`。位置参数$0$1$#$@$*。特殊变量$$等。花括号操作:用于字符串操作、默认值、替换等。

2024-09-08 16:42:21 1732

原创 【单片机】详细解析完全重映射和部分重映射

单片机中的每个引脚通常都有多个功能,不仅仅是作为普通的输入或输出,还可以与某些外设(如定时器、串口、SPI、I2C等)关联。默认情况下,这些外设功能通常固定绑定到特定的GPIO引脚。但是,在某些情况下,默认的引脚配置可能不适合实际电路设计或项目需求,因此需要将外设功能重新映射到其他GPIO引脚,这就是GPIO重映射。单片机内部有一个或,通过设置该寄存器,可以改变外设功能与GPIO引脚之间的关联。通过特定的寄存器位,开发者可以选择某个外设功能是否重映射,以及重映射到哪个引脚。

2024-09-08 16:20:57 1338

原创 【gcc】gcc编译参数-fPIC、-fPIE、-pie

动态库的编译:使用-fPIC来生成位置无关的目标文件,以便构建动态库(.so文件)。这是标准的做法,保证库可以在不同的进程地址空间中正确加载和运行。可执行文件的编译如果不使用-pie选项来链接,生成的可执行文件不需要位置无关性,可以选择-fPIC-fPIE或者不使用任何这两个选项。如果使用-pie选项来链接,必须使用-fPIC或-fPIE编译目标文件,这样才能生成位置无关的可执行文件(PIE)。-fPIE的价值:虽然-fPIE可以被-fPIC覆盖,但在生成位置无关的可执行文件时,-fPIE。

2024-08-25 15:45:17 2357

原创 【Linux】动态库的制作与链接

首先,你需要编写包含你想要打包成动态库的函数或类的源代码。在编写程序时,你可以链接并使用这个动态库。在文件末尾添加一行,将动态库路径添加到。将生成的动态库文件(如。要使更改立即生效,可以运行以下命令。)拷贝到系统默认的动态库路径,如。文件,添加动态库所在的路径。一个完整的动态库文件名如。将动态库所在的目录添加到。

2024-08-25 15:15:18 1567

原创 【Linux】Linux下默认的include,include的默认搜索路径

目录中的头文件主要用于嵌入式平台或者特定硬件架构,定义了与特定机器相关的接口和实现。:这些头文件与 Linux 内核的视频子系统相关,定义了图形和显示设备的接口,包括 framebuffer 驱动程序等。目录中的头文件包含了大量的内核接口、数据结构和宏定义,用于编写与内核交互的代码,如驱动程序、内核模块等。:这些头文件与内核的跟踪和调试子系统相关,定义了跟踪点、事件和跟踪控制接口,用于内核性能分析和调试。目录中的头文件是与架构相关的接口定义,提供了特定处理器架构的低级接口和汇编相关的宏或函数。

2024-08-18 18:07:37 1699

原创 【Linux】详细解析Linux内核链表

LIST_POISON1 和 LIST_POISON2 是 Linux 内核用来标记已删除链表节点的特殊值。这是内核开发者采用的一种巧妙的防御性编程技术,有助于编写更安全、更健壮的内核代码。list_entry 利用了 C 语言的一个特性:结构体成员的偏移量是固定的。它计算出 struct list_head 成员在整个结构体中的偏移,然后从这个 list_head 指针反推出整个结构体的起始地址。在上面的函数原型中,有这两行代码,他们的含义是什么呢。

2024-08-18 17:39:39 1594

原创 【Linux】Linux shell 脚本 之 getopt

getopt是一个用于解析命令行选项的工具,常用于编写需要处理多个命令行参数的脚本。它支持短选项(如-v)和长选项(如--version),并能处理带有参数的选项。getopt是 GNU 库中的一个标准工具,大多数 Unix 和 Linux 系统上都提供了它的实现。

2024-08-06 23:44:41 585

原创 【Linux】统一设备模型(kobject、kset、kobj_type)

在之前学习设备驱动的时候,即字符设备驱动的注册与注销这篇文章的时候,在cdev_alloc()和cdev_init()中均出现了kobject_init()这个函数,在当时并不清楚是什么东西,因为当时在乎的是把设备驱动这个框架给学会,在昨天看到文章的时候,又想起来还有这么一个东西没有去搞懂,于是稍微学习了一下,做一个笔记在此。

2023-08-03 01:15:00 807

原创 【C语言】strcpy与strncpy存在的问题

strcpy的拷贝是把含有 '\0' 结束符的字符串复制到另一个地址空间,所有如果目标地址的地址空间不够大的话,就会导致缓存区溢出的问题。2、在复制完成后在最后一位加上 '\0'1、在复制前将目标地址清'0'

2023-07-31 01:00:00 450

原创 【Linux】mmap与ioremap

4、如果要操作设备的物理地址,有两种办法,一种是使用ioreamap(),然后用户调用read,write,ioctrl系统调用去访问那块物理地址,这里涉及到了。2、ioreamap()使用在内核里,将设备所在的物理地址映射到内核虚拟地址上,以后访问那个物理地址直接操作映射的虚拟地址就好。3、mmap()用在用户空间,将将设备所在的物理地址映射到用户虚拟地址上,以后访问那个物理地址直接操作映射的虚拟地址就好。,一次是用户空间到内核空间的拷贝,一次是内核空间到物理地址的拷贝;1、两者都是内存映射的函数。

2023-07-22 10:11:51 2018

原创 【小知识】深入理解阻塞与非阻塞、同步与异步

阻塞与非阻塞、同步与异步,这几个概念虽然每次看都能看的懂,但是过一段时间又会忘掉,所以系统的整理一下他们的区别,也方便自己后面忘掉的时候快速记忆,虽然网上有很多的说明这些概念的帖子,但是每次去找到能让自己明白的帖子也是一件不容易的事。

2023-07-18 23:06:27 255

原创 【C语言】strtok()函数使用详解

头文件:#include 功能:分解字符串为一组字符串参数:@s:需要拆分的字符串,在之前strtok记住的分隔符的位置开始,查找下一个标记@delim:定义用作分隔符的字符集合返回值:成功返回分隔符之前字符串的首地址,失败返回NULL注意:strtok会被操作的字符串。

2023-07-17 22:06:53 646 1

原创 【C语言】sscanf()的详细使用方法

从这个例子中可以看到,必须要第一个开始是a-z或者A-Z才可以取到。前面使用数字修饰词表示这个字符串缓冲区的最大长度,防止缓存区溢出。从这个例子中可以看出,必须要第一个开始是1-9才可以跳过。@argument:存储解析出来的数据。头文件:#inlucde @format:字符串的格式。@buffer:存储的数据。读取到任意A-Z的字符就停止读入。读取所有1-9的字符。跳过a-z数据不读入。

2023-07-12 21:15:17 2539 2

原创 【Linux】Linux内核内存分配函数kmalloc()、kzalloc()、vmalloc()与__get_free_page()

作为内存管理的基本单位,尽管处理器的最小寻址单位通常为字(或者为字节),但是MMU(内存管理单元)通常以页为单位进行处理。从虚拟内存的角度看,页就是最小单位。等类似函数,申请的内存位于DMA和常规区域的映射区,而且在。申请内存的过程中可以睡眠,因此不能用于中断上下文中。标志来申请内存,若不存在空闲页,直接返回。标志申请内存时,若暂时不能满足,则进程会。等待页,即会引起阻塞,因此。

2023-07-08 12:00:29 1023

原创 【Linux】基于IO多路复用的TCP、UDP

基于IO多路复用的TCP、UDP

2023-05-22 19:56:40 224

空空如也

空空如也

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

TA关注的人

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