- 博客(348)
- 资源 (3)
- 问答 (3)
- 收藏
- 关注

原创 fd and rg
命令的现代替代品,具有更简单的语法、默认忽略隐藏文件和。适合日常快速文件搜索,复杂场景仍需。参数才能搜索到,但此处是要排除它,无需此参数。)是一个快速、用户友好的文件搜索工具,作为。) 是一个强大的命令行搜索工具,比传统的。的场景,同时保持高效和简洁。支持通过环境变量或配置文件(如。,可以创建一个自定义忽略文件(如。的搜索范围,避免在特定目录(如。)时,若想忽略特定目录(如。参数指定通配符模式,排除。会忽略所有忽略规则(包括。通过上述方法,可以灵活控制。
2025-01-14 20:31:38
187

原创 clang和gcc的区别
Clang 是一个由 LLVM 项目开发的 C/C++/Objective-C 编译器前端,其目的是提供一个现代化、模块化、高性能的编译器替代 GCC。
2024-12-04 20:56:37
1842

原创 fzf切换目录和打开文件
Ctrl+T:插入文件路径,适合查找并操作文件。Alt+C:切换目录,适合快速导航目录结构。两者都基于模糊搜索,提高了操作效率,分别适合文件和目录的相关任务。fzf模块查找。
2024-11-22 10:02:14
487

原创 python print变量用法
多个变量之间用逗号分隔,打印时会自动以空格分隔开。函数打印完内容后会以换行符结尾。,两个单词之间没有换行。参数将输出打印到文件中。在 Python 中,参数来改变结尾字符。
2024-08-27 10:04:43
1062

原创 嵌入式必会的几条ARM汇编指令
此处是学习韦老师的视频整理的,视频中也有讲解这6个指令,参考链接:https://www.bilibili.com/video/BV17U4y1K7EL/?这个示例代码从内存读取一个数据,加上一个常数,然后存回内存。之后调用一个子程序,该子程序修改寄存器值并返回主程序。就这几条混个面熟就行。
2024-06-10 12:02:58
631

原创 Python开启Http Server
用 Python 部署了一个具有 FTP 功能的服务器,电脑在局域网内通过 FTP 下载想要传输的文件。
2023-07-09 21:34:23
3044

翻译 开源代码授权Licence说明
BSD开源协议BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。不可以用开源代码的作者/机构名字和
2021-04-07 23:46:04
1939

原创 git生成patch和打patch
在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情。使用方法(直接给一些examples):1.生成patch1.1 git diff > xxx.patch#只想 patch Test.java 文件git diff Test.java > test.patch# 把所有的修改文件打成 patchgit diff > test.patch1.2.git format-patch$ git format-pa
2021-03-16 00:40:36
124736
3

原创 树莓派搭建kodexplorer
可道云kodexplorer是一款开源私有云系统,类似于owncloud,Dropbox、SkyDrive,seafile等。将可道云kodexplorer搭建在树莓派上,从而在树莓派上存储、管理家庭成员的各种照片,音乐,文档等各种文件,树莓派在家庭局域网中,可以保证上传和下载的速度,还支持在线播放网盘中的视频文件,同时,由于文件全部储存在树莓派中,可以保证数据的安全。这套源码试用于个人网盘,家庭私有云,企业私有云。一,更新树莓派系统sudo apt-get updatesudo apt-get
2020-10-24 16:17:24
831
原创 python logging模块
以下是 Python 中 模块的基础使用示例和配置说明:进阶配置版(同时输出到控制台和文件)关键配置说明:日志级别(从低到高):常用配置方式:推荐格式元素:最佳实践:根据需求选择适合的配置方式,复杂项目推荐使用进阶配置实现更精细的控制。你提到的 是日志记录中非常重要的一个格式字段,它的值来源于 logger 的名称。具体来说:默认情况:自定义 logger:此时 会显示 或当前模块的 (如 )实际应用场景场景1:直接使用模块函数(root logger)场景2:使用
2025-04-05 14:45:23
12
原创 正则表达式和通配符
(Regular Expression)和通配符(Glob Pattern)是两种不同的模式匹配语法,虽然看起来相似(都使用。(如文件内容、字符串),功能强大且灵活,支持复杂逻辑(如分组、回溯、量词)。等符号),但它们的用途、规则和场景完全不同。默认用正则表达式,通配符需转义或通过其他参数实现。掌握两者的区别可以避免混淆,根据场景选择合适工具!),语法简单,主要用于文件操作。、Shell 的文件扩展(如。不保证中间字符的精确控制。、编程语言中的正则库。
2025-04-01 12:02:37
970
原创 嵌入式libc
(C标准库)的接口是预定义的函数集合,为开发者提供了底层硬件操作的抽象层。这些接口封装了常见任务(如内存管理、字符串操作、文件I/O等),使代码可移植且高效。),并注意硬件适配。开发者常需自定义底层驱动(如串口替代标准输出)或避免动态内存分配以确保可靠性。在没有OS的裸机系统中,文件操作接口可能无效,需替换为Flash读写等硬件驱动。接口是嵌入式开发的基础工具,但需根据资源限制选择合适的库(如。的理解需要结合其实现变体和应用场景。,去除非必要功能(如多线程、复杂文件系统)。,改用静态数组或内存池避免碎片。
2025-03-29 22:59:14
779
原创 Git回退文件到指定提交
此时文件已恢复到目标提交的版本,提交变更以保存这次回退操作。查看提交历史,找到你要回退到的目标提交的哈希值(例如。命令将某个文件回退到指定提交的版本。两种方法均可实现需求,选择你熟悉的命令即可。替换为你的目标提交哈希,
2025-03-27 15:56:53
486
原创 栈实现队列算法解析
我现在得用C语言写一个用栈实现队列的算法题。首先,我得先回忆一下队列和栈的特性。队列是先进先出(FIFO)的,而栈是后进先出(LIFO)的。所以,用栈来模拟队列的话,可能需要两个栈来配合,一个用来处理入队操作,另一个处理出队操作。那具体怎么实现呢?比如,假设有两个栈,一个输入栈s1,一个输出栈s2。当有元素入队的时候,就直接压入s1。当需要出队的时候,如果s2为空,就把s1里的所有元素依次弹出并压入s2,这样s2的栈顶元素就是队列的第一个元素,弹出即可。如果s2不为空,就直接弹出s2的栈顶。
2025-03-26 09:34:29
695
原创 Linux fority source和__builtin_xxx
启用 Fortify Source:通过条件编译和宏定义,替换标准库函数(如memcpystrcpy等)。安全检查:在编译时和运行时插入缓冲区大小检查,防止内存安全问题。兼容性处理:根据编译器版本和优化等级调整实现方式。典型应用场景是 Linux 内核或安全敏感项目,用于增强代码的安全性。这个宏的作用是为原始函数创建一个别名,使得在替换标准库函数(如memcpystrcpy等)时,仍能保留对原始函数的调用入口。这是 Fortify Source 实现安全检查的关键机制。__typeof__
2025-03-24 23:46:09
639
原创 yaffs
YAFFS通过日志式追加写、OOB元数据管理、动态垃圾回收和强健的崩溃恢复机制,高效应对NAND闪存的物理限制,广泛应用于嵌入式系统(如Linux设备),在资源受限环境下兼顾性能与可靠性。其设计思想深刻影响了后续闪存文件系统的发展。1. 写入(Write)和读取(Read)操作按页(Page)操作YAFFS的读写操作以页(Page)为最小单位。每个页通常为512字节(YAFFS1)或2KB(YAFFS2),具体大小取决于NAND闪存的规格。写入时:YAFFS采用追加写入(Append-Only)
2025-03-22 00:32:50
731
原创 Linux GDB print pretty
创建Python脚本(如'theme_id', ...)"在GDB中加载脚本:(gdb) source my_printers.py之后打印config时会自动应用自定义格式。开启漂亮打印直接解引用打印若类型不明确,强制转换注意:若字段值异常(如大整数、重复的魔数),需检查程序逻辑确认内存是否正确初始化,避免悬垂指针或内存越界问题。
2025-03-17 14:21:14
951
原创 Linux mount和SSD分区
挂载的本质是将存储设备的文件系统链接到 Linux 文件系统树的某个目录文件系统的元数据被正确初始化。用户可以通过目录路径安全访问文件。操作系统能够统一管理所有存储设备。如果不挂载,设备仅作为一个“未激活”的块设备存在,无法以文件系统的方式被访问。用户问的是为什么插入SSD后,系统在/dev目录下生成的是sdb1这样的设备文件,以及sdb1是什么的缩写。我需要解释清楚Linux中块设备命名的规则,还有sdb1各部分代表的意义。首先,用户可能已经知道设备文件在/dev下,但不太清楚命名规则。
2025-03-16 23:48:57
1282
原创 Linux losetup循环设备
(类似于硬盘或分区)。通过循环设备,你可以将一个文件当作一个磁盘分区来使用,并对其中的文件系统进行挂载和访问。你说得对,我确实没有详细解释**循环设备(loop device)**的概念。循环设备是 Linux 内核提供的一种虚拟设备,它的作用是将一个。设备关联,并以只读模式访问。
2025-03-10 18:06:14
867
原创 envsetup和python venv
了解!虽然你已熟悉基本用法,但我们可以更,结合嵌入式开发中可能的用例来深入探讨venv的作用。venv(虚拟环境)的核心是numpy 1.19numpy 1.21aptpytest直接全局安装会导致版本冲突,用venv在 Linux 系统中,许多系统工具(如aptansible)依赖系统自带的 Python。若全局安装第三方库(如requests)可能导致依赖冲突,甚至破坏系统工具。通过venv假设你编写了一个若你的工具需要兼容 Python 3.8 和 3.10,可通过venv假设你正在开发一个。
2025-03-09 15:32:14
440
原创 嵌入式nandless设计
Nandless” 设计通过移除NAND闪存,优化了系统的复杂度、成本和可靠性,但需要权衡存储容量和软件实现方式。作为开发者,需关注启动流程、存储管理和硬件限制,确保软件适配无NAND的架构。这一概念通常出现在嵌入式设备、微控制器(MCU)或特定硬件平台的开发场景中。NAND闪存常用于存储大量数据(如固件、操作系统、用户数据等),特点是容量大、成本低,但存在。(如FTL,Flash Translation Layer)的问题。在软件架构或嵌入式系统设计中,“nandless” 指的是。
2025-03-08 10:44:27
179
原创 Unix Domain Socket和eventfd
需要跨主机通信本地高性能IPC轻量级事件通知→ eventfd混合场景→ UDS + eventfd + epoll组合在 Linux 开发中,是一种特殊的进程间通信(IPC)机制,与和eventfd有显著区别。1. Socket Pair 是什么?定义:通过系统调用创建的一对已连接的匿名 Unix Domain Socket。特点无需绑定文件路径:直接创建一对已连接的 socket,没有文件系统路径。双向通信:两个 socket 可以互相读写(类似全双工管道)。
2025-03-02 14:08:54
877
原创 ARM MTE
MTE 通过硬件级内存标签显著提升安全性,适合对安全敏感或长期维护的项目。使用时需确保工具链和操作系统支持,性能开销较低,但需权衡兼容性限制。对于新项目或安全关键型代码(如加密模块、内核组件),强烈建议尝试集成。显著提升了 DSP 和机器学习性能,是边缘 AI 和实时控制场景的理想选择。是一项旨在提升内存安全性的硬件级技术,主要用于检测常见的内存安全问题(如缓冲区溢出、释放后使用等)。架构的处理器,专为机器学习(ML)和数字信号处理(DSP)优化,引入了。架构,是 Arm 针对微控制器(MCU)设计的。
2025-02-28 20:51:46
931
原创 CMake strings替换字符
makefile里的subset是什么语法,参考使用示例CFLAGS += $(subst ", $(CONFIG_LV_OPTLEVEL))好的,用户现在问的是Makefile中的subst语法,并给出了一个示例:CFLAGS += $(subst ", $(CONFIG_LV_OPTLEVEL))。我需要先理解subst函数的作用以及用户提供的示例的具体用途。
2025-02-26 10:05:22
663
原创 ARM Cortex-M处理器中的MSP和PSP
在ARM Cortex-M系列处理器中,MSP(主堆栈指针)和PSP(进程堆栈指针)是两种不同的堆栈指针,主要用于实现堆栈隔离和提升系统可靠性。通过合理使用MSP和PSP,可以显著提升嵌入式系统的稳定性和可维护性,尤其是在资源受限且要求高可靠性的场景中。不用直接操作MSP/PSP,就当它们不存在,除非你要解决某些“玄学”崩溃问题。必须掌握MSP/PSP,这是实现多任务、中断、内存隔离的核心机制。,取决于你的角色、开发场景和系统复杂度。(图中:在Keil调试器中查看寄存器的MSP和PSP值)
2025-02-25 11:12:44
1440
原创 ARM指令集
ARM指令集(ARM Instruction Set)是ARM架构处理器(如:Cortex系列)的核心组成部分,它定义了处理器如何执行各种操作。此外,ARM指令集还包含了控制流指令,如跳转指令、分支指令等,用于程序的流程控制。指令集中也包含了条件执行的功能,即某些指令只有在特定条件下才会执行,这样可以减少不必要的指令执行,进一步提高性能。ARM指令集的基础操作包括算术运算(如加法、减法、乘法)、逻辑运算(如与、或、异或)和数据传送(如加载和存储数据)。它被广泛应用于从手机、平板电脑到嵌入式设备的各种领域。
2025-02-23 20:29:31
76
原创 Always on domain
AON(Always-On Domain)是嵌入式系统中一个低功耗但始终保持工作的电源域,主要用于维持基本功能,如 RTC 计时、外部事件检测、低功耗唤醒等。它在低功耗系统(如 IoT、可穿戴设备、智能手机等)中至关重要,可以有效延长设备的电池寿命。当 AON GPIO 检测到按键按下,或者 AON RTC 触发定时器超时,它就会发出唤醒信号,使整个芯片恢复正常工作。指的是芯片或微控制器(MCU)中一个特殊的电源域或功能模块,它即使在系统进入低功耗模式时仍然保持运行。
2025-02-23 16:03:11
327
原创 LTO优化详解
LTO 是嵌入式开发中优化代码体积和性能的有效手段,尤其适合资源受限的场景。但需权衡编译时间(LTO 会增加链接时间)和潜在的调试复杂性(优化后代码可能与源码差异较大)。通常建议结合-Os和 LTO 以达到最佳 Size 优化效果。如果我想优化bin文件的size,我需要打开lto吗?好的,用户之前已经询问过LTO优化在嵌入式开发中的作用,现在他问是否需要开启LTO来优化bin文件的体积。我需要先回顾之前的对话,确保回答一致。用户可能是在实际项目中遇到了体积过大的问题,想知道LTO是否有效。
2025-02-22 22:06:11
1033
原创 嵌入式0xDEADBEEF
0xDEADBEEF是一个在嵌入式开发中广泛使用的特殊值,主要用于调试和错误检测。它的独特性和易识别性使其成为开发者标记异常或未初始化内存的理想选择。
2025-02-19 22:04:17
641
原创 ARM TCM(itcm和dtcm)
ITCM:用于存储指令,提升代码执行速度。DTCM:用于存储数据,提升数据访问速度。TCM:通过减少访问延迟和总线竞争,提升系统整体性能。通过以上解释,你应该对ITCM和DTCM有了基本的理解。它们在嵌入式系统中用于优化性能,尤其适用于实时和高性能场景。ITCM、DTCM和SRAM之间有密切的关系,尤其是在嵌入式系统中。为了帮助你更好地理解它们之间的关系,我将从SRAM的基本概念出发,逐步解释它们之间的联系。
2025-02-19 11:28:59
927
原创 CMake 编译工具
工具链文件:推荐使用工具链文件来管理编译器设置。命令行指定:可以直接在命令行中指定编译器,但不推荐用于复杂项目。检查设置:配置完成后,检查编译器是否正确设置。通过这些步骤,你可以轻松地在 CMake 中设置编译器。在 CMake 中,默认的编译器取决于系统的环境变量(如PATH)和 CMake 的默认行为。
2025-02-17 21:08:48
1523
原创 CMake policy策略
这段代码的作用是启用并设置CMP0048和CMP0077策略为“NEW”行为,以确保项目在不同CMake版本下行为一致。机制用于解决CMake版本升级带来的行为变化问题,这些问题是由CMake开发者引入的,目的是改进功能或修复问题。通过显式设置策略,开发者可以更好地控制项目的构建行为。当然可以!以下是对上述10个CMake策略的详细说明和具体示例,帮助你更好地理解它们的作用和使用场景。通过以上示例,你可以清楚地看到每个策略的作用及其在不同行为下的表现。根据项目需求,选择合适的策略并设置为NEW。
2025-02-17 19:52:30
274
原创 CMake ALIAS
简化复杂目标名称:让代码更简洁。提升可读性:使代码更易理解。条件编译:简化条件逻辑。跨平台兼容性:统一引用不同平台的目标。通过这些示例,你可以看到别名在CMake中的实际应用及其带来的便利。这段代码是 CMake 中的一个常见用法,用于为目标MyLib创建一个带有命名空间(namespace)的别名。下面我将详细解释这段代码的含义,以及为什么使用两个冒号。:为目标MyLib创建一个带有命名空间的别名。双冒号:表示命名空间,用于明确目标的来源,避免命名冲突,并符合现代 CMake 的最佳实践。
2025-02-17 19:14:26
536
原创 CMake configure_file
是一个非常实用的 CMake 命令,特别适合在构建过程中生成配置文件或头文件。通过定义变量并使用,你可以轻松地将模板文件中的占位符替换为实际的值,从而生成所需的文件。当然可以!的用法不仅限于简单的变量替换,它还可以结合 CMake 的其他功能实现更高级的用法。# 定义变量# 指定输出路径# 使用 configure_file 生成文件生成的config.h文件会被放到目录中。是一个非常强大的工具,可以用于生成各种类型的文件(如头文件、脚本文件、配置文件等)。
2025-02-17 17:19:13
726
原创 Python进制转换
是两个常用的函数,分别用于处理整数和进制转换。本文将详细介绍它们的功能、区别以及如何结合使用。的用法,你可以轻松处理各种进制转换问题!希望这篇文章对你有帮助,欢迎在评论区讨论!可以结合使用,实现进制之间的灵活转换。函数用于将其他类型的数据(如字符串、浮点数等)转换为。假设我们需要将十六进制字符串。在 Python 中,
2025-02-16 22:50:44
396
原创 C语言时间相关宏定义
在C语言中,预处理器提供了一些与时间相关的宏定义,用于在编译时获取日期、时间等信息。除了和__DATE____DATE__当前编译日期的字符串,格式为(例如__TIME__当前编译时间的字符串,格式为"hh:mm:ss"(例如"14:30:00"当前源文件的最后修改日期和时间,格式为(例如__FILE__当前源文件的文件名(字符串)。__LINE__当前代码行的行号(整数)。__func__(C99 标准引入)当前函数的名称(字符串)。__STDC__
2025-02-08 09:54:18
510
原创 芯片AON和NC
AON(Always-On Domain)是嵌入式系统中一个低功耗但始终保持工作的电源域,主要用于维持基本功能,如 RTC 计时、外部事件检测、低功耗唤醒等。当 AON GPIO 检测到按键按下,或者 AON RTC 触发定时器超时,它就会发出唤醒信号,使整个芯片恢复正常工作。AON是嵌入式系统中一个始终保持供电的独立电源域,即使在设备进入低功耗模式(如睡眠或关机状态)时,AON区域仍持续运行。指的是芯片或微控制器(MCU)中一个特殊的电源域或功能模块,它即使在系统进入低功耗模式时仍然保持运行。
2025-02-07 20:53:28
343
C语言标准演化:C89、C99与C11的关键变化
2025-02-05
AppleNotificationCenterServiceSpecification.pdf
2021-08-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人