我的博客
文章平均质量分 61
小米人er
这个作者很懒,什么都没留下…
展开
-
CMake
CMake是一个跨平台的构建工具,它可以帮助开发者管理软件项目的构建过程。原创 2024-10-24 20:13:23 · 571 阅读 · 0 评论 -
CMake变量作用域
在当前作用域设置并同步给父作用域,适合局部需要传递的场景。CACHE:用于全局变量,适合多个子项目共享数据。函数传递:通过函数来封装变量传递的逻辑。没错,只能将变量在 set()调用时的值传递给父作用域,它不会持续同步变量的后续修改。也就是说,当你使用时,只有该行代码执行时,value会传递给父作用域,后续的任何对VAR的修改在子作用域中都不会再自动反映到父作用域中。原创 2024-10-17 22:34:04 · 369 阅读 · 0 评论 -
prebuilts
预构建的资源可以加快开发过程,避免每次都从头构建这些常用的工具和库。例如,不同的编程语言可能需要特定版本的编译器,这些编译器可以预先构建好并放在“prebuilts”目录中,方便在项目中直接使用。这个目录主要用于存放一些预先构建好的工具链、库文件等资源。里面出现工具链相关的内容是很常见的,因为它可能包含针对特定平台或架构的编译器、链接器等开发工具链组件。它的存在有助于提高开发效率,确保开发环境的一致性和稳定性。同时,也方便团队成员共享和管理这些预构建的资源。原创 2024-10-14 19:41:36 · 208 阅读 · 0 评论 -
钩子函数和回调函数
在嵌入式开发中,钩子函数(Hook Function)和回调函数(Callback Function)都是常见的编程模式,虽然它们的用途和机制相似,但在设计理念和应用场景上有所区别。原创 2024-10-08 20:40:39 · 356 阅读 · 0 评论 -
Base64编解码
数据传输数据存储URL 和文件名安全Base64 编码通常会使数据大小增加约 33%。这是因为 Base64 使用 64 个可打印的 ASCII 字符来表示二进制数据,每个 6 位的 Base64 编码单元对应 8 位的原始二进制数据。2825626644/31/3需要注意的是,虽然 Base64 编码会增加数据大小,但在某些特定场景下,为了满足数据传输或存储的要求,这种增加是可以接受的。同时,不同类型的数据在经过 Base64 编码后的大小变化可能会有所不同,但大致都在这个比例左右。原创 2024-10-08 19:19:53 · 818 阅读 · 0 评论 -
Linux Shell Debug
local在 Shell 脚本中用于声明局部变量,它限制了变量的作用范围,使其仅在当前函数中有效。这有助于避免变量冲突、保护全局变量,提升脚本的可读性和维护性。原创 2024-10-08 17:46:50 · 333 阅读 · 0 评论 -
什么是鲁棒性
鲁棒性(Robustness)指的是一个系统或过程在面对不确定性、变化或意外情况下,依然能够正常运行或表现出稳定性能的能力。通俗地说,鲁棒性就是“抗折腾”的能力——无论外界怎么变化,系统都能“扛得住”,不容易出错。鲁棒性关注的是在外界环境或输入发生变化、甚至是出现错误的情况下,系统仍然能够应对或降级处理。特别强调系统对“意外情况”或“干扰”的抗打击能力,而不仅仅是在正常条件下稳定运行。鲁棒性强调的是在面对异常或不理想的情况下,仍然能保持系统或流程的稳定性和可靠性。原创 2024-09-27 20:34:46 · 362 阅读 · 0 评论 -
CMake set_property设置全局变量属性
你通过设置了一个全局属性,用于保存链接脚本的路径。然后,你可以通过获取这个路径,并在目标的链接选项中使用-T选项将该脚本传递给链接器。如果你有其他关于如何在项目中实际应用链接脚本的问题,欢迎继续讨论。原创 2024-09-27 19:53:58 · 398 阅读 · 0 评论 -
CMake生成器表达式
在 CMake 中,函数用于向编译器添加编译选项。你提到的是一个生成器表达式(Generator Expression),它用于在配置和生成时动态地解析不同的选项。原创 2024-09-24 11:10:25 · 428 阅读 · 0 评论 -
Linux查找文件并删除
xargs的主要作用是将标准输入的数据转换为命令行参数,这对于需要批量操作的命令特别有用,避免了手动输入大量参数的麻烦。你提到的命令确实是一个简洁有效的方法,它利用了fd的-x选项,可以直接对查找到的每一个文件执行指定的命令,这样就不需要使用xargs了。原创 2024-09-22 11:31:00 · 984 阅读 · 0 评论 -
Docker镜像和容器
通过以上步骤,你就成功在 Docker 中搭建了一个 Ubuntu 20.04 的环境,并在其中安装了gcc以及运行了uptime命令。这种方法对于快速测试和开发非常有效。当你在 Docker 容器中基于 Ubuntu 20.04 镜像运行并安装了gcc或其他软件包后,这些修改是持久的。也就是说,下次启动同一个容器时,这些安装过的软件包依然会保留。镜像:像是一个模板,静态且不可变。容器:是基于镜像创建的动态实例,带有可写层。原创 2024-09-21 22:58:00 · 1432 阅读 · 0 评论 -
CMake中的PUBLIC、PRIVATE 和 INTERFACE用法
PRIVATE:只对目标自身生效,不传播。PUBLIC:对目标自身和依赖目标都生效。INTERFACE:对目标自身不生效,但传播给依赖目标。原创 2024-09-21 22:14:29 · 569 阅读 · 0 评论 -
clang-format codeformat
这样,你可以达到只影响函数体的效果,而不改变其他部分的格式。语句和其他控制结构的。原创 2024-09-21 20:29:42 · 413 阅读 · 0 评论 -
命令可选参数说明
尖括号< >:用于表示必需提供的参数。你必须在使用命令时替换尖括号内的占位符。方括号[ ]:用于表示可选的参数。你可以选择性地提供或省略方括号内的内容。在命令行或者配置文档中,这些符号帮助你理解哪些参数是强制性的,哪些是可选的。原创 2024-09-19 21:27:59 · 262 阅读 · 0 评论 -
gcc编译选项-Wl
这个参数会指示链接器生成一个包含内存映射信息的文件,该文件可以提供关于程序的各个段(如代码段、数据段等)在内存中的布局信息,以及链接的对象文件和库的详细信息。这对于分析程序的内存使用情况、调试链接问题等非常有帮助。放在命令行中,可能不会被正确地传递给链接器,具体效果取决于编译器的实现和版本。是你想要生成的 MAP 文件的名称,可以根据实际情况进行修改。可以明确地将参数传递给链接器,确保参数被正确处理。,但通常情况下推荐使用。这是一个 shell 重定向操作。在使用 GCC 编译时,原创 2024-09-18 21:50:24 · 369 阅读 · 0 评论 -
vimrc nnoremap配置
是用于创建非递归键盘映射的命令。具体来说,它在普通模式下(Normal mode)将一个按键绑定到某个操作上,并且不会进行递归替换,这样可以避免“按键循环”的情况。是 Vim 编辑器中的一个命令,用于在普通模式(Normal mode)下创建非递归键位映射。会将一个按键绑定到某个操作上,并且不会进行递归替换,这样可以避免“按键循环”的情况。键在普通模式下的功能是将光标移动到当前行的末尾。键也被映射到其他功能上,这个映射不会继续递归下去。这条指令的作用是将普通模式下的。键时,光标会移动到当前行的末尾。原创 2024-09-18 16:00:42 · 174 阅读 · 0 评论 -
Linux whereis和which的区别
环境变量所指定的路径中。如果某个可执行文件不在。所定义的路径中查找。原创 2024-09-16 22:06:07 · 1080 阅读 · 0 评论 -
mac电脑命令行获取电量
都是 macOS 的内置命令行工具,随操作系统一同提供,确保用户可以方便地获取系统状态和电源管理信息。输出中包括电池当前电量百分比(95%)、电池是否在放电(discharging)、以及剩余使用时间(4:02)。这个命令将显示更多与电源相关的信息,比如睡眠模式、屏幕亮度、硬盘休眠等设置。在 macOS 上,有几个命令行工具可以用来获取电量信息,最常用的是。这些工具可以帮助你在命令行中轻松获取电池的状态和电量信息。这个命令会提供包括电池健康状态、循环次数等更详细的信息。你可以直接在终端中运行它们。原创 2024-09-15 17:00:52 · 1441 阅读 · 0 评论 -
下载github patch到本地
首先复制该.patch 文件在 GitHub 上的原始链接(可以通过点击“Raw”按钮后复制浏览器地址栏的链接)。这两种方法都可以将 GitHub 上的.patch 文件下载到本地以供使用。打开命令行终端,切换到你想要保存文件的本地目录。命令(如果系统没有安装。原创 2024-09-12 17:22:44 · 550 阅读 · 0 评论 -
gi清除无用缓存
使用的确会对 Git 仓库的大小产生影响,主要是因为每次重新基于最新的代码进行 rebase,Git 会保存历史提交的变动。即使你的实际代码量不多,Git 依然需要存储所有这些历史变更记录,因此可能会导致仓库的大小逐渐增加。原创 2024-09-11 10:15:47 · 698 阅读 · 0 评论 -
ubuntu搜狗输入法取消切换繁体
【代码】ubuntu搜狗输入法取消切换繁体。原创 2024-09-03 09:59:08 · 333 阅读 · 0 评论 -
python print变量用法
多个变量之间用逗号分隔,打印时会自动以空格分隔开。函数打印完内容后会以换行符结尾。,两个单词之间没有换行。参数将输出打印到文件中。在 Python 中,参数来改变结尾字符。原创 2024-08-27 10:04:43 · 554 阅读 · 0 评论 -
LRU(Least Recently Used,最近最少使用)
LRU算法是一种经典的缓存替换策略,主要用于在缓存满的情况下选择最久未被访问的数据项进行淘汰。它适用于很多具有访问局部性的数据场景,如CPU缓存、数据库缓存、Web浏览器缓存等。虽然简单有效,但在一些特定的访问模式下可能表现不如其他算法,如LFU(Least Frequently Used,最少频繁使用)等。原创 2024-08-18 22:37:17 · 714 阅读 · 0 评论 -
gdb-multiarch
gdb-multiarch 是一个非常有用的工具,它极大地简化了多架构调试的工作。如果您需要在多个不同的硬件平台上进行调试,那么gdb-multiarch无疑是一个值得考虑的选择。想了解更多信息,您可以参考以下资源:如果您还有其他问题,欢迎随时提出。gdb-multiarch,多架构调试,嵌入式系统,跨平台开发,内核调试参考。原创 2024-08-18 17:26:15 · 787 阅读 · 0 评论 -
进程线程协程
协程是一种高效的并发编程模型,适用于I/O密集型任务和需要大量并发连接的场景。与进程和线程相比,协程更加轻量级,但它无法利用多核CPU的并行能力。在实际应用中,选择合适的并发模型需要根据具体的任务特点和系统资源进行权衡。当然,有时用更直白的语言和生活中的比喻来解释协程会更容易理解。原创 2024-07-21 22:49:23 · 567 阅读 · 0 评论 -
shell脚本变量比较
在脚本中,将变量与固定字符串进行比较时,通过在变量和字符串前添加X是一种常见的做法。这种做法可以防止某些可能的错误,特别是当变量未定义或为空时。原创 2024-07-10 09:40:51 · 366 阅读 · 1 评论 -
python argparse模块nargs用法
表示该参数最多接收一个值。如果提供了值,则使用该值;如果没有提供值,则使用默认值或。:表示该参数可以接收零个或多个值,并将这些值作为一个列表。:表示该参数必须接收一个或多个值,并将这些值作为一个列表。:表示该参数必须接收指定数量的值,并将这些值作为一个列表。(默认值):表示该参数只能接收一个值。模块中用来指定参数的数量的属性。原创 2024-07-06 22:35:44 · 1173 阅读 · 0 评论 -
STM32 - 内存分区与OTA
最近搞MCU,发现它与SOC之间存在诸多差异,不能沿用SOC上一些技术理论。本文以STM L4为例,总结了一些STM32 小白入门指南。原创 2024-07-06 15:50:18 · 1526 阅读 · 0 评论 -
Vbus 和 Vbat
Vbus: 主要用于 USB 设备供电,通常为 +5V。Vbat: 主要用于电池供电,提供备用电源或主要电源。了解这两个术语及其用途,可以帮助更好地设计和调试嵌入式系统,确保系统在各种情况下都能可靠运行。Vbus 和 Vbat 都可以为设备供电,但具体应该接哪个电源取决于设备的设计和电源需求。原创 2024-07-04 16:19:31 · 2032 阅读 · 0 评论 -
终端交互提示`quote>`
这样的提示符时,通常表示你正在输入一段多行文本或一个字符串块。这种情况常见于某些编程语言或脚本的交互式解释器中,比如 Python 的交互模式或 SQL 数据库的命令行客户端。这个提示符是为了告诉你,你还在输入同一段多行字符串,还没有结束输入。如果你想结束这个输入,可以输入相应的结束符号,比如三引号。提供更多的背景信息可能会帮助我更准确地回答你的问题。例如,在 Python 交互模式下,如果你输入了一个多行字符串(使用三引号。这样的提示符,表示你可以继续输入更多的行,直到关闭这个多行字符串。原创 2024-07-02 15:32:08 · 320 阅读 · 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 · 1468 阅读 · 0 评论 -
生成和查看预定义宏
总结起来,这个命令的作用是使用 ARM 交叉编译器为指定架构(ARMv7E-M)生成并显示所有预定义的宏,并且过滤出包含 “SYNC” 字符串的宏。这个方法通常用于调试和查看编译器在特定架构下预定义的宏。: 这个选项告诉编译器仅显示预定义的宏而不进行实际的编译。是一个特殊的文件,表示空输入,这样做是为了只查看预定义的宏,而不需要实际的源代码文件。: 这个选项指示编译器只运行预处理步骤,而不进行后续的编译、汇编和链接步骤。: 这个选项指定了目标处理器的架构,这里是 ARMv7E-M 架构。原创 2024-06-29 11:49:21 · 217 阅读 · 0 评论 -
c89、c99、c11
C89:没有__func__预定义标识符。C99:引入了__func__预定义标识符,用于获取当前函数的名称。示例// C99C89/C99:不支持新的预定义宏。C11:引入了新的预定义宏,例如。示例// C11>=201112L#else#endifreturn 0;原创 2024-06-23 22:18:40 · 1210 阅读 · 0 评论 -
cmake、make、makefile、ninga的关系
CMake是一种跨平台的构建系统,它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件,例如Makefile或者Microsoft Visual Studio项目文件,以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本,这些脚本可以在不同的编译器和操作系统上运行。原创 2024-06-16 16:34:33 · 810 阅读 · 0 评论 -
中断里用信号量而不用消息队列
在中断处理中,信号量的使用之所以被推荐,是因为它们操作简单、开销低且提供实时性保障。相比之下,消息队列的复杂性和高开销使得它们不适合在中断上下文中使用。在设计嵌入式系统时,需要仔细考虑这些同步机制的特性,以确保系统能够高效、可靠地运行。原创 2024-06-16 16:22:57 · 382 阅读 · 0 评论 -
map文件分析
通过这些信息,你可以详细了解程序的内存布局、代码和数据的分布情况。这对于调试、优化和分析嵌入式系统至关重要。该符号表列出了每个符号的地址、类型、段名以及在段中的偏移量,帮助你找到特定函数和变量的位置。原创 2024-06-16 15:42:16 · 524 阅读 · 0 评论 -
Makefile `-include`的用法
它们是等效的)前缀用于在包含文件时忽略错误和继续执行。如果指定的文件不存在或无法读取,Make 将不会报错,而是继续执行后续的命令。这种用法通常用于包含一些可选的配置文件或自动生成的依赖文件。例如,在构建系统中,自动生成的依赖文件可能在首次构建时还不存在,此时使用。用于包含另一个文件的内容。如果该文件不存在或者读取失败,Make 命令将会报错并停止执行。则是一种特殊用法,可以更灵活地处理文件包含的情况。,Make 将会忽略该文件的缺失,并继续执行。,Make 会报错并停止。在 Makefile 中,原创 2024-06-10 13:17:59 · 284 阅读 · 0 评论 -
嵌入式必会的几条ARM汇编指令
此处是学习韦老师的视频整理的,视频中也有讲解这6个指令,参考链接:https://www.bilibili.com/video/BV17U4y1K7EL/?这个示例代码从内存读取一个数据,加上一个常数,然后存回内存。之后调用一个子程序,该子程序修改寄存器值并返回主程序。就这几条混个面熟就行。原创 2024-06-10 12:02:58 · 530 阅读 · 0 评论 -
vim常用技巧
x删除当前光标下的单个字符。X删除光标前的单个字符。d用于删除指定范围的文本,通常与其他命令组合使用。这些操作使得 Vim 在处理文本编辑任务时更加灵活和高效。对于 Vim 中的自动命令,有时候需要进一步确保缓冲区操作的具体情况,以实现返回目录浏览界面的效果。" 定义一个命令来关闭缓冲区并返回目录浏览界面command!使用这个命令代替:bd:Bd在 Vim 中打开文件后,使用自定义命令:Bd来关闭缓冲区并返回目录浏览界面。通过这些设置,你应该能够在关闭文件缓冲区后自动返回目录浏览界面。原创 2024-06-06 23:32:01 · 1870 阅读 · 0 评论 -
Linux MMU内存管理单元
TLB是MMU的高速缓存,用于加速虚拟地址到物理地址的映射。TLB表项对应不同的页面,当应用程序提供的有效地址在TLB表项制定的地址范围内时,产生一次TLB命中;如果某个任务试图访问其他任务的内存空间,MMU将自动产生异常,保护其他任务的程序和数据不受破坏。:MMU将内存划分为页面,每个页面的大小通常设定为不会对程序性能造成显著影响的最小程序和代码的长度。:MMU将应用程序提供的虚拟地址映射到实际的物理地址,使得多用户多进程操作系统可以实现每个进程拥有独立的地址空间。原创 2024-06-01 16:00:14 · 264 阅读 · 0 评论