我的博客
文章平均质量分 61
小米人er
这个作者很懒,什么都没留下…
展开
-
CMake生成器表达式
在 CMake 中,函数用于向编译器添加编译选项。你提到的是一个生成器表达式(Generator Expression),它用于在配置和生成时动态地解析不同的选项。原创 2024-09-24 11:10:25 · 151 阅读 · 0 评论 -
Linux查找文件并删除
xargs的主要作用是将标准输入的数据转换为命令行参数,这对于需要批量操作的命令特别有用,避免了手动输入大量参数的麻烦。你提到的命令确实是一个简洁有效的方法,它利用了fd的-x选项,可以直接对查找到的每一个文件执行指定的命令,这样就不需要使用xargs了。原创 2024-09-22 11:31:00 · 856 阅读 · 0 评论 -
Docker镜像和容器
通过以上步骤,你就成功在 Docker 中搭建了一个 Ubuntu 20.04 的环境,并在其中安装了gcc以及运行了uptime命令。这种方法对于快速测试和开发非常有效。当你在 Docker 容器中基于 Ubuntu 20.04 镜像运行并安装了gcc或其他软件包后,这些修改是持久的。也就是说,下次启动同一个容器时,这些安装过的软件包依然会保留。镜像:像是一个模板,静态且不可变。容器:是基于镜像创建的动态实例,带有可写层。原创 2024-09-21 22:58:00 · 1402 阅读 · 0 评论 -
CMake中的PUBLIC、PRIVATE 和 INTERFACE用法
PRIVATE:只对目标自身生效,不传播。PUBLIC:对目标自身和依赖目标都生效。INTERFACE:对目标自身不生效,但传播给依赖目标。原创 2024-09-21 22:14:29 · 532 阅读 · 0 评论 -
clang-format codeformat
这样,你可以达到只影响函数体的效果,而不改变其他部分的格式。语句和其他控制结构的。原创 2024-09-21 20:29:42 · 393 阅读 · 0 评论 -
命令可选参数说明
尖括号< >:用于表示必需提供的参数。你必须在使用命令时替换尖括号内的占位符。方括号[ ]:用于表示可选的参数。你可以选择性地提供或省略方括号内的内容。在命令行或者配置文档中,这些符号帮助你理解哪些参数是强制性的,哪些是可选的。原创 2024-09-19 21:27:59 · 246 阅读 · 0 评论 -
gcc编译选项-Wl
这个参数会指示链接器生成一个包含内存映射信息的文件,该文件可以提供关于程序的各个段(如代码段、数据段等)在内存中的布局信息,以及链接的对象文件和库的详细信息。这对于分析程序的内存使用情况、调试链接问题等非常有帮助。放在命令行中,可能不会被正确地传递给链接器,具体效果取决于编译器的实现和版本。是你想要生成的 MAP 文件的名称,可以根据实际情况进行修改。可以明确地将参数传递给链接器,确保参数被正确处理。,但通常情况下推荐使用。这是一个 shell 重定向操作。在使用 GCC 编译时,原创 2024-09-18 21:50:24 · 283 阅读 · 0 评论 -
vimrc nnoremap配置
是用于创建非递归键盘映射的命令。具体来说,它在普通模式下(Normal mode)将一个按键绑定到某个操作上,并且不会进行递归替换,这样可以避免“按键循环”的情况。是 Vim 编辑器中的一个命令,用于在普通模式(Normal mode)下创建非递归键位映射。会将一个按键绑定到某个操作上,并且不会进行递归替换,这样可以避免“按键循环”的情况。键在普通模式下的功能是将光标移动到当前行的末尾。键也被映射到其他功能上,这个映射不会继续递归下去。这条指令的作用是将普通模式下的。键时,光标会移动到当前行的末尾。原创 2024-09-18 16:00:42 · 144 阅读 · 0 评论 -
Linux whereis和which的区别
环境变量所指定的路径中。如果某个可执行文件不在。所定义的路径中查找。原创 2024-09-16 22:06:07 · 1058 阅读 · 0 评论 -
mac电脑命令行获取电量
都是 macOS 的内置命令行工具,随操作系统一同提供,确保用户可以方便地获取系统状态和电源管理信息。输出中包括电池当前电量百分比(95%)、电池是否在放电(discharging)、以及剩余使用时间(4:02)。这个命令将显示更多与电源相关的信息,比如睡眠模式、屏幕亮度、硬盘休眠等设置。在 macOS 上,有几个命令行工具可以用来获取电量信息,最常用的是。这些工具可以帮助你在命令行中轻松获取电池的状态和电量信息。这个命令会提供包括电池健康状态、循环次数等更详细的信息。你可以直接在终端中运行它们。原创 2024-09-15 17:00:52 · 742 阅读 · 0 评论 -
下载github patch到本地
首先复制该.patch 文件在 GitHub 上的原始链接(可以通过点击“Raw”按钮后复制浏览器地址栏的链接)。这两种方法都可以将 GitHub 上的.patch 文件下载到本地以供使用。打开命令行终端,切换到你想要保存文件的本地目录。命令(如果系统没有安装。原创 2024-09-12 17:22:44 · 439 阅读 · 0 评论 -
gi清除无用缓存
使用的确会对 Git 仓库的大小产生影响,主要是因为每次重新基于最新的代码进行 rebase,Git 会保存历史提交的变动。即使你的实际代码量不多,Git 依然需要存储所有这些历史变更记录,因此可能会导致仓库的大小逐渐增加。原创 2024-09-11 10:15:47 · 589 阅读 · 0 评论 -
python print变量用法
多个变量之间用逗号分隔,打印时会自动以空格分隔开。函数打印完内容后会以换行符结尾。,两个单词之间没有换行。参数将输出打印到文件中。在 Python 中,参数来改变结尾字符。原创 2024-08-27 10:04:43 · 320 阅读 · 0 评论 -
LRU(Least Recently Used,最近最少使用)
LRU算法是一种经典的缓存替换策略,主要用于在缓存满的情况下选择最久未被访问的数据项进行淘汰。它适用于很多具有访问局部性的数据场景,如CPU缓存、数据库缓存、Web浏览器缓存等。虽然简单有效,但在一些特定的访问模式下可能表现不如其他算法,如LFU(Least Frequently Used,最少频繁使用)等。原创 2024-08-18 22:37:17 · 575 阅读 · 0 评论 -
gdb-multiarch
gdb-multiarch 是一个非常有用的工具,它极大地简化了多架构调试的工作。如果您需要在多个不同的硬件平台上进行调试,那么gdb-multiarch无疑是一个值得考虑的选择。想了解更多信息,您可以参考以下资源:如果您还有其他问题,欢迎随时提出。gdb-multiarch,多架构调试,嵌入式系统,跨平台开发,内核调试参考。原创 2024-08-18 17:26:15 · 484 阅读 · 0 评论 -
进程线程协程
协程是一种高效的并发编程模型,适用于I/O密集型任务和需要大量并发连接的场景。与进程和线程相比,协程更加轻量级,但它无法利用多核CPU的并行能力。在实际应用中,选择合适的并发模型需要根据具体的任务特点和系统资源进行权衡。当然,有时用更直白的语言和生活中的比喻来解释协程会更容易理解。原创 2024-07-21 22:49:23 · 528 阅读 · 0 评论 -
shell脚本变量比较
在脚本中,将变量与固定字符串进行比较时,通过在变量和字符串前添加X是一种常见的做法。这种做法可以防止某些可能的错误,特别是当变量未定义或为空时。原创 2024-07-10 09:40:51 · 317 阅读 · 1 评论 -
python argparse模块nargs用法
表示该参数最多接收一个值。如果提供了值,则使用该值;如果没有提供值,则使用默认值或。:表示该参数可以接收零个或多个值,并将这些值作为一个列表。:表示该参数必须接收一个或多个值,并将这些值作为一个列表。:表示该参数必须接收指定数量的值,并将这些值作为一个列表。(默认值):表示该参数只能接收一个值。模块中用来指定参数的数量的属性。原创 2024-07-06 22:35:44 · 974 阅读 · 0 评论 -
STM32 - 内存分区与OTA
最近搞MCU,发现它与SOC之间存在诸多差异,不能沿用SOC上一些技术理论。本文以STM L4为例,总结了一些STM32 小白入门指南。原创 2024-07-06 15:50:18 · 1299 阅读 · 0 评论 -
Vbus 和 Vbat
Vbus: 主要用于 USB 设备供电,通常为 +5V。Vbat: 主要用于电池供电,提供备用电源或主要电源。了解这两个术语及其用途,可以帮助更好地设计和调试嵌入式系统,确保系统在各种情况下都能可靠运行。Vbus 和 Vbat 都可以为设备供电,但具体应该接哪个电源取决于设备的设计和电源需求。原创 2024-07-04 16:19:31 · 1556 阅读 · 0 评论 -
终端交互提示`quote>`
这样的提示符时,通常表示你正在输入一段多行文本或一个字符串块。这种情况常见于某些编程语言或脚本的交互式解释器中,比如 Python 的交互模式或 SQL 数据库的命令行客户端。这个提示符是为了告诉你,你还在输入同一段多行字符串,还没有结束输入。如果你想结束这个输入,可以输入相应的结束符号,比如三引号。提供更多的背景信息可能会帮助我更准确地回答你的问题。例如,在 Python 交互模式下,如果你输入了一个多行字符串(使用三引号。这样的提示符,表示你可以继续输入更多的行,直到关闭这个多行字符串。原创 2024-07-02 15:32:08 · 244 阅读 · 0 评论 -
半导体中名词“wafer”“chip”“die”中文名字和用途
wafer 即为图片所示的晶圆,由纯硅(Si)构成。一片载有Nand Flash晶圆的wafer,wafer首先经过切割,然后测试,将完好的、稳定的、足容量的die取下,封装形成日常所见的Nand Flash芯片(chip)。Wafer上的一个小块,就是一个晶片晶圆体,学名die,封装后就成为一个颗粒。晶粒是组成多晶体的外形不规则的小晶体,而每个晶粒有时又有若干个位向稍有差异的亚晶粒所组成。晶粒的平均直径通常在0.015~0.25mm范围内,而亚晶粒的平均直径通常为0.001mm数量级。原创 2024-07-01 19:55:44 · 1112 阅读 · 0 评论 -
生成和查看预定义宏
总结起来,这个命令的作用是使用 ARM 交叉编译器为指定架构(ARMv7E-M)生成并显示所有预定义的宏,并且过滤出包含 “SYNC” 字符串的宏。这个方法通常用于调试和查看编译器在特定架构下预定义的宏。: 这个选项告诉编译器仅显示预定义的宏而不进行实际的编译。是一个特殊的文件,表示空输入,这样做是为了只查看预定义的宏,而不需要实际的源代码文件。: 这个选项指示编译器只运行预处理步骤,而不进行后续的编译、汇编和链接步骤。: 这个选项指定了目标处理器的架构,这里是 ARMv7E-M 架构。原创 2024-06-29 11:49:21 · 200 阅读 · 0 评论 -
c89、c99、c11
C89:没有__func__预定义标识符。C99:引入了__func__预定义标识符,用于获取当前函数的名称。示例// C99C89/C99:不支持新的预定义宏。C11:引入了新的预定义宏,例如。示例// C11>=201112L#else#endifreturn 0;原创 2024-06-23 22:18:40 · 1016 阅读 · 0 评论 -
cmake、make、makefile、ninga的关系
CMake是一种跨平台的构建系统,它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件,例如Makefile或者Microsoft Visual Studio项目文件,以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本,这些脚本可以在不同的编译器和操作系统上运行。原创 2024-06-16 16:34:33 · 794 阅读 · 0 评论 -
中断里用信号量而不用消息队列
在中断处理中,信号量的使用之所以被推荐,是因为它们操作简单、开销低且提供实时性保障。相比之下,消息队列的复杂性和高开销使得它们不适合在中断上下文中使用。在设计嵌入式系统时,需要仔细考虑这些同步机制的特性,以确保系统能够高效、可靠地运行。原创 2024-06-16 16:22:57 · 354 阅读 · 0 评论 -
map文件分析
通过这些信息,你可以详细了解程序的内存布局、代码和数据的分布情况。这对于调试、优化和分析嵌入式系统至关重要。该符号表列出了每个符号的地址、类型、段名以及在段中的偏移量,帮助你找到特定函数和变量的位置。原创 2024-06-16 15:42:16 · 506 阅读 · 0 评论 -
Makefile `-include`的用法
它们是等效的)前缀用于在包含文件时忽略错误和继续执行。如果指定的文件不存在或无法读取,Make 将不会报错,而是继续执行后续的命令。这种用法通常用于包含一些可选的配置文件或自动生成的依赖文件。例如,在构建系统中,自动生成的依赖文件可能在首次构建时还不存在,此时使用。用于包含另一个文件的内容。如果该文件不存在或者读取失败,Make 命令将会报错并停止执行。则是一种特殊用法,可以更灵活地处理文件包含的情况。,Make 将会忽略该文件的缺失,并继续执行。,Make 会报错并停止。在 Makefile 中,原创 2024-06-10 13:17:59 · 253 阅读 · 0 评论 -
嵌入式必会的几条ARM汇编指令
此处是学习韦老师的视频整理的,视频中也有讲解这6个指令,参考链接:https://www.bilibili.com/video/BV17U4y1K7EL/?这个示例代码从内存读取一个数据,加上一个常数,然后存回内存。之后调用一个子程序,该子程序修改寄存器值并返回主程序。就这几条混个面熟就行。原创 2024-06-10 12:02:58 · 499 阅读 · 0 评论 -
vim常用技巧
x删除当前光标下的单个字符。X删除光标前的单个字符。d用于删除指定范围的文本,通常与其他命令组合使用。这些操作使得 Vim 在处理文本编辑任务时更加灵活和高效。对于 Vim 中的自动命令,有时候需要进一步确保缓冲区操作的具体情况,以实现返回目录浏览界面的效果。" 定义一个命令来关闭缓冲区并返回目录浏览界面command!使用这个命令代替:bd:Bd在 Vim 中打开文件后,使用自定义命令:Bd来关闭缓冲区并返回目录浏览界面。通过这些设置,你应该能够在关闭文件缓冲区后自动返回目录浏览界面。原创 2024-06-06 23:32:01 · 1597 阅读 · 0 评论 -
Linux MMU内存管理单元
TLB是MMU的高速缓存,用于加速虚拟地址到物理地址的映射。TLB表项对应不同的页面,当应用程序提供的有效地址在TLB表项制定的地址范围内时,产生一次TLB命中;如果某个任务试图访问其他任务的内存空间,MMU将自动产生异常,保护其他任务的程序和数据不受破坏。:MMU将内存划分为页面,每个页面的大小通常设定为不会对程序性能造成显著影响的最小程序和代码的长度。:MMU将应用程序提供的虚拟地址映射到实际的物理地址,使得多用户多进程操作系统可以实现每个进程拥有独立的地址空间。原创 2024-06-01 16:00:14 · 258 阅读 · 0 评论 -
GCC __builtin_xxx函数
GCC 提供了一些内置函数,这些函数不是标准 C 或 C++ 函数,而是编译器自带的特殊功能。这些内置函数可以帮助优化代码、检查代码正确性等。开头的函数,这些函数是 GCC 编译器提供的一些内建函数,用于实现一些简单且快捷的功能,同时也可以用来优化编译结果。让我为您介绍一下其中一些常见的。这些标识符是变量,而不是预处理宏,不能用于初始化字符数组或与字符串字面量连接。函数在编写代码时非常有用,可以提高效率并简化操作。原创 2024-06-01 15:42:03 · 395 阅读 · 0 评论 -
内存问题排查工具valgrind
当valgrind启动后,应用 进程实际上在valgrind的虚拟环境中执行,valgrind会将每行代码传递给memcheck工具,memcheck工具再加入自己的调试信息,之后再将合成的代码真正运行。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行 代码,每个函数,每个模块,整个程序产生的指令数。在用valgrind运行您的多线程程序 时,您的宝贵程序的运行情况可能跟不使用valgrind的运行情况千差万别。这也使一款多线程程序监测工具,它提供的监测信息比Helgrind更丰富。原创 2024-06-01 14:34:02 · 948 阅读 · 0 评论 -
git显示提交次数
命令,旨在创建发布公告。它将每个提交按作者分组,并显示每个提交消息的第一行。这是一种快速查看不同作者在项目中的贡献的方式。原创 2024-05-27 17:56:46 · 365 阅读 · 0 评论 -
安卓的签名
在给Android的apk签名的时候,需要用到.pem和.pk8的文件。但是这两种文件不能直接进行签名,需要调用对App签名。具体的使用方法,你可以参考你的开发环境和工具链的官方文档。:这是一种二进制格式,用于存储证书或公钥。它通常用于Java平台,和.pem文件包含的信息基本相同,只是存储格式不同。等信息,主要用于解密。文件格式里面不仅可以存储数字证书,还能存储各种key。:以.pk8为扩展名的文件,应该和PKCS #8是对应的,主要用来保存。:这种文件是一个X.509的数字证书,里面包含了用户的。原创 2024-05-24 21:00:57 · 216 阅读 · 0 评论 -
pthread vs kthread
各自设计用于特定的空间(用户空间或内核空间),在非设计的空间中使用可能会导致一系列问题。因此,最好在相应的空间中使用相应的线程实现。都是线程的实现方式,但它们在Linux系统中有着不同的应用场景和特性。主要用于用户空间的多线程应用,而。主要用于内核空间的任务。可能会导致一些问题。原创 2024-05-18 22:43:58 · 339 阅读 · 0 评论 -
ubuntu在当前路径下打开Terminal
安装完成后,你可能需要重启 Nautilus 或者重新登录你的系统。你可以尝试安装这个新的包。在 Ubuntu 20.04 中,原创 2024-05-15 09:50:02 · 377 阅读 · 0 评论 -
冒烟测试(Smoke Testing)
这个名字的由来是源于硬件测试,当一台新设备接通电源时,如果没有冒烟,那么至少证明电源系统没有问题,设备没有烧毁。同样地,在软件领域,冒烟测试就是在新版本的软件发布后,先运行一些基本的测试,确保软件的主要功能没有明显的问题。冒烟测试(Smoke Testing)是软件测试的一种方法,它涵盖了软件主要功能的基础测试,但并不深入到细节。如果冒烟测试失败,那么构建就被认为是不稳定的,不应该进一步进行更深入的测试。总的来说,冒烟测试是一种有效的方法,可以帮助团队尽早发现并解决软件中的关键问题。原创 2024-05-14 20:39:53 · 276 阅读 · 0 评论 -
加载和启动过程
在使用支持 XIP (执行就地) 的 flash 的系统中,代码可以直接在 flash 中执行,但数据通常仍需要在 RAM 中处理。当你的嵌入式系统上电启动时,CPU 会从一个特定的地址开始执行代码,这个地址通常被称为复位向量(reset vector)。如果你使用的是商业的嵌入式操作系统,那么启动代码可能是二进制形式的,你可能无法直接查看。嵌入式Linux或STM32单片机的程序从上电到执行main函数的过程是一个复杂的过程,涉及到硬件、操作系统和应用程序的交互。段的内容拷贝到 RAM 的相应位置。原创 2024-05-13 16:06:02 · 467 阅读 · 1 评论 -
ubuntu升级git
【代码】ubuntu升级git。原创 2024-05-13 09:52:41 · 470 阅读 · 0 评论