- 博客(610)
- 资源 (3)
- 问答 (3)
- 收藏
- 关注
原创 Python argparse 参数解析用法详解
argparse 是 Python 标准库中用于解析命令行参数的模块,它使得编写用户友好的命令行界面变得简单。位置参数是指在命令行中必须按特定顺序提供的参数,它们不依赖于或--前缀来识别,而是通过它们在命令行中的位置来识别。位置参数:通过位置识别,必须提供,顺序固定help:针对单个参数的说明epilog:整个程序的补充说明,显示在帮助信息末尾可以混合顺序:argparse 通常能正确处理可选参数在前的情况潜在风险:当可选参数需要值时,可能会与位置参数混淆最佳实践位置参数在前,可选参数在后。
2025-11-30 23:59:30
510
原创 Python相对导入用法详解
Python的import系统非常强大和灵活,正确使用它对于编写可维护的代码至关重要。优先使用绝对导入,它们更清晰明确遵循PEP8导入顺序,提高代码可读性避免循环导入,它们会导致难以调试的问题使用合适的错误处理,特别是对于可选依赖了解模块搜索路径,这在部署时很重要掌握这些导入技巧将帮助你构建更加模块化、可维护和Pythonic的代码库。
2025-10-28 00:19:19
777
原创 CMake中add_custom_target和add_custom_command用法详解
使用ALL需要每次构建时自动执行的任务(如代码生成、资源处理)。统一构建入口,简化用户操作(如编译、测试、打包一步完成)。强制某些任务作为构建流程的一部分(例如清理临时文件)。是 CMake 中用于在构建过程中添加自定义命令的工具。它通常用于生成文件或在构建特定目标前后执行操作。其行为和执行时机取决于具体使用场景。主要用法理解和**使用**当需要生成文件或添加构建步骤到现有目标时,它集成到CMake的依赖系统中**使用**当需要创建可单独执行的命名目标时,它提供手动调用的入口点结合使用。
2025-04-12 23:07:32
1569
原创 python argparse模块nargs用法
表示该参数最多接收一个值。如果提供了值,则使用该值;如果没有提供值,则使用默认值或。:表示该参数可以接收零个或多个值,并将这些值作为一个列表。:表示该参数必须接收一个或多个值,并将这些值作为一个列表。:表示该参数必须接收指定数量的值,并将这些值作为一个列表。(默认值):表示该参数只能接收一个值。模块中用来指定参数的数量的属性。
2024-07-06 22:35:44
2659
原创 Python开启Http Server
用 Python 部署了一个具有 FTP 功能的服务器,电脑在局域网内通过 FTP 下载想要传输的文件。
2023-07-09 21:34:23
3546
翻译 开源代码授权Licence说明
BSD开源协议BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。不可以用开源代码的作者/机构名字和
2021-04-07 23:46:04
2267
原创 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
145375
4
原创 pkill -15 monkey命令及信号15解释
向所有名为 “monkey” 的进程发送信号 15(SIGTERM),请求它们。简单来说,这个命令是让 “monkey” 进程。
2026-01-07 20:26:17
232
原创 嵌入式ARM中REE与TEE的解释
特性核心目标提供丰富的功能和应用提供最高的安全性和隔离性运行的操作系统Linux, Android, RTOS等OP-TEE, Trusty, SierraTEE等TEE OS运行的应用普通客户应用 (CA可信应用 (TA安全性低,易受攻击高,硬件级隔离功能复杂度高,功能全面低,功能专注(安全相关)硬件基础基于ARM TrustZone技术的非安全态基于ARM TrustZone技术的安全态类比房子的客厅(大家都能进,功能多,但不够私密)房子的保险库。
2026-01-07 10:42:28
474
原创 ARM栈展开原理解析
栈展开是从当前执行点开始,逐级回溯函数调用链的过程。它回答了一个关键问题:“我是如何执行到这里的?ARM栈展开的核心机制是通过帧指针链将各个栈帧连接成链表,配合返回地址信息,使得调试器和异常处理器能够重建完整的函数调用链。理解这一机制对于深入掌握系统调试、性能分析和异常处理至关重要。FP建立结构LR指导返回,两者分工明确栈展开是异常处理、调试和分析的基础编译器优化会影响展开方式,需合理配置编译选项掌握栈展开原理有助于编写更健壮、易调试的程序通过本文的解析,希望你对ARM栈展开有了清晰的理解。
2026-01-05 17:25:37
956
原创 嵌入式协程概念与应用详解
在嵌入式系统中,协程是一种在资源受限环境下,用于简化异步事件处理、提高代码模块化和可读性的轻量级多任务技术。它通常以库的形式(如Protothreads)存在,你通过调用其API来编写协作式的任务逻辑。它是介于“裸机状态机”和“RTOS多线程”之间一个非常优雅的折中方案,在IoT设备、传感器节点、低功耗设备中应用广泛。
2026-01-02 00:15:38
817
原创 Linux下的posix_spawn接口使用场景及与fork区别
模式fork() 不加 exec目的创建运行相同代码的进程创建运行不同程序的进程创建运行不同程序的进程内存使用复制整个地址空间复制地址空间,但立即替换通常不复制或部分复制典型场景1. 并行计算2. 服务器prefork3. 守护进程1. 执行外部命令2. 程序加载器3. Shell1. 性能敏感2. 多线程环境3. 嵌入式系统灵活性高(可完全控制子进程)中(exec前可做有限设置)低(通过属性预定义)安全性可能有问题(继承所有状态)较好(可清理环境)好(可精细控制继承)
2025-12-30 23:17:29
1010
原创 Makefile设置DEBUG宏定义方法总结
在Makefile中设置代码里的宏定义(如DEBUG)有几种常见方式:2. 通过Makefile变量控制3. 通过命令行参数传递使用方式:4. 定义不同配置模式5. 完整示例6. 在C代码中使用宏定义使用建议推荐方式:使用命令行参数控制(方式3),灵活性最好项目管理:对复杂项目,使用配置模式(方式4)更清晰宏命名:使用大写字母和下划线,如默认值:为重要宏提供合理的默认值文档说明:在Makefile头部注释中说明各选项的含义这样设置后,在代码中就可以使用等预处理指令来包
2025-12-25 23:29:24
169
原创 Asan结果解析
=251327==:进程ID:检测到堆缓冲区溢出:错误发生的内存地址:程序计数器(Program Counter)地址,指向出错的代码位置:基指针(Base Pointer):栈指针(Stack Pointer):进行了4字节(int大小)的写入操作:写入的目标地址thread T0:在T0线程中发生错误摘要:堆缓冲区溢出,发生在a.c的第14行main函数中第14-34行:影子字节信息AddressSanitizer通过"影子内存"机制检测内存错误。
2025-12-23 17:11:40
28
原创 ASAN_OPTIONS for AddressSanitizer (ASan)
是运行时配置的环境变量,它控制着 ASan 检测器在程序运行时的各种行为。
2025-12-23 14:40:13
42
原创 Kasan vs Asan
特性ASANKASAN差异影响插桩时机编译时一次性全量插桩编译时插桩,但可分层配置KASAN更适应复杂内核环境灵活性低,全有或全无高,可模块化、分层配置KASAN可在生产环境使用运行时调整有限,通过环境变量丰富,sysfs、启动参数KASAN支持动态调优错误恢复终止进程可能继续运行(配置决定)内核需要更高可用性硬件利用支持(如ARM MTE)更深度支持(多种模式)KASAN与硬件结合更紧密特性ASANKASAN插桩时机编译时全量插桩,固定不变编译时插桩,但可配置灵活性。
2025-12-22 21:39:52
39
原创 嵌入式开发中的编译器插桩与库实现
特性编译器插桩插桩后的库实现角色“规则制定者”和“自动工人”“功能提供者”工作阶段编译期链接期、运行期主要行为插入对特定桩函数的调用指令实现被调用的桩函数的具体逻辑输出包含了“空洞”(桩调用)的目标文件填补“空洞”的具体函数库控制方由编译器选项(或源码属性)控制由开发者完全自主编写。
2025-12-22 20:22:44
38
原创 NuttX SVC系统调用机制深度解析
是NuttX系统调用的核心数据库文件18,定义了所有可以通过SVC从用户空间调用的系统接口19。read在中定义31NuttX的SVC系统操作类型Flat模式Protected模式Kernel模式直接调用SVC调用SVC调用read/write直接调用SVC调用SVC调用直接调用直接调用直接调用任务切换SVC调用SVC调用SVC调用信号处理SVC调用SVC调用SVC调用。
2025-12-20 23:13:59
176
原创 ARMv8-M架构IPSR寄存器读取函数解析
这是一个用于 ARMv8-M 架构 的 C 语言内联汇编函数,用于读取 IPSR(中断程序状态寄存器) 的值。:内联函数,编译器会将函数体直接插入调用处,避免函数调用开销:返回32位无符号整数:获取IPSR寄存器值的函数2. 内联汇编部分3. 汇编指令详解:Move from System Register,从系统寄存器读取到通用寄存器:引用第一个操作数(变量):要读取的系统寄存器4. 操作数约束:输出操作数:破坏描述(clobber)在ARMv8-M架构中,IPSR(I
2025-12-17 20:49:46
612
原创 Linux快速查看文件末尾字节方法
读取文件的最后 100 个字节,并将这些字节输出到标准输出(stdout)。这个组合命令特别适合需要查看文件尾部十六进制格式的场景,结合了。这个命令由三部分组成,通过管道。
2025-12-10 17:03:06
274
原创 Python库路径查找方法总结
在Python中,获取当前执行脚本的绝对路径有几种常见方法。这样你就能轻松找到任何已安装Python库的物理位置了。这样就能确保获取到执行脚本的准确位置了!
2025-12-10 09:38:23
301
原创 Python subprocess.run 优势及使用场景
总结:subprocess.run() 提供了更安全、更灵活、功能更丰富的方式来执行外部命令,是现代 Python 程序的推荐选择,而 os.system() 应仅用于向后兼容或极其简单的场景。而 os.system() 总是通过 shell 执行,如果命令中包含用户输入,可能会有安全风险。只是简单地执行命令,返回的是退出状态码,而且输出直接到标准输出(无法直接捕获)。· 用 os.system():极简单的情况,不关心输出,兼容性要求高。更精细的控制:可以控制输入、输出、错误流的重定向,以及环境变量等。
2025-12-09 22:58:13
460
原创 Python中shutil.copy2的优势与应用场景
使用而不是copy()copy2()保留了文件的时间戳和其他元数据这在很多场景下非常重要(备份、同步、审计等)性能差异通常可以忽略不计遵循了"最小意外原则" - 用户期望拷贝包含时间戳除非你有特殊原因不需要保留元数据,否则推荐始终使用。你说得对!确实有很多方式可以拷贝文件,但shutil是最Pythonic的选择。为什么选择shutil而不是其他方式?
2025-12-09 16:27:25
1134
原创 GDB中-ix和-ex命令参数的作用
参数全称功能描述执行顺序-x从文件执行命令(批处理模式)第5步-ex执行单个命令第6步-ix从文件初始化第3步-iex初始化时执行单个命令第4步GDB的-x-ex-ix-iex参数提供了灵活的方式来控制调试会话的初始化过程。执行顺序:记住.gdbinit→-ix→-iex→-x→-ex的顺序链使用场景-ix:加载复杂的初始化配置-iex:执行简单的初始化命令-ex:执行具体的调试操作-x:运行批处理脚本最佳实践将通用设置放在~/.gdbinit将项目特定设置放在项目。
2025-12-04 19:09:42
699
原创 GDB中source命令与Python文件执行机制
super()是调用父类方法的方式在构造函数中,必须调用来确保父类正确初始化对于GDB命令,不调用父类构造函数意味着命令不会注册到GDB系统中super()是Python面向对象编程的基础,确保继承链的正确执行简单记忆:只要你的类继承了另一个类,并且在子类中定义了__init__方法,那么第一件事通常就是调用。
2025-12-04 14:57:04
869
原创 Python类定义与实例初始化详解
代码复用模块化和组织性多态性2. 类的执行时机类定义时的执行顺序3. __init__方法详解__init__的作用为什么需要__init____init__的执行阶段实际应用示例4. 总结要点概念说明执行时机类定义创建类的蓝图模块加载时或遇到class语句时__init__方法实例初始化方法创建实例时自动调用类属性属于类的变量类定义时创建实例属性属于实例的变量__init__中或实例方法中创建关键点:
2025-12-04 11:52:18
1032
原创 启用ccache加速CMake编译
使得所有编译命令都通过ccache执行。检查是否启用了ccache配置选项。显示找到的ccache程序路径。这是核心语句:设置全局属性。
2025-12-04 11:09:20
268
原创 Python字符串连接方法详解
它接收一个可迭代对象(通常是列表、元组)· 对象中的每个元素必须是字符串类型。· join() 是字符串的方法。· 分隔符会被插入到每个元素之间。连接数字(需要先转为字符串)· 方法前面的字符串是分隔符。
2025-12-04 00:49:17
307
原创 Python字符串分割方法详解
返回列表: 总是返回一个列表,即使没有找到分隔符可以指定分割次数:处理连续分隔符:常见应用场景注意陷阱替代方法如果你只想分割扩展名,可以考虑:要点总结: 把字符串按点号拆分成多个部分,返回列表。如果点号不存在,返回包含原字符串的单元素列表。
2025-12-03 21:33:40
412
原创 Python元组与列表的区别详解
元组是不可变的,用于存储不应该改变的数据列表是可变的,用于存储需要动态修改的数据选择哪种类型主要取决于是否需要修改数据理解这个区别对于编写高效、安全的 Python 代码非常重要!
2025-12-03 15:16:59
392
原创 Python环境配置:.pythonrc与PYTHONPATH详解
特性.pythonrcPYTHONPATH用途交互式环境初始化模块搜索路径扩展生效时机Python 交互式启动时任何 Python 程序运行时内容Python 代码目录路径列表设置方式环境变量 PYTHONSTARTUP环境变量 PYTHONPATH。
2025-11-30 23:34:25
169
C语言标准演化:C89、C99与C11的关键变化
2025-02-05
AppleNotificationCenterServiceSpecification.pdf
2021-08-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅