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

原创 CMake中add_custom_target和add_custom_command用法详解
使用ALL需要每次构建时自动执行的任务(如代码生成、资源处理)。统一构建入口,简化用户操作(如编译、测试、打包一步完成)。强制某些任务作为构建流程的一部分(例如清理临时文件)。是 CMake 中用于在构建过程中添加自定义命令的工具。它通常用于生成文件或在构建特定目标前后执行操作。其行为和执行时机取决于具体使用场景。主要用法。
2025-04-12 23:07:32
1188

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

原创 CMake构建系统
CMake是一种跨平台的构建系统,它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件,例如Makefile或者Microsoft Visual Studio项目文件,以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本,这些脚本可以在不同的编译器和操作系统上运行。
2024-06-16 16:34:33
986

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

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

原创 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
133062
4

原创 树莓派搭建kodexplorer
可道云kodexplorer是一款开源私有云系统,类似于owncloud,Dropbox、SkyDrive,seafile等。将可道云kodexplorer搭建在树莓派上,从而在树莓派上存储、管理家庭成员的各种照片,音乐,文档等各种文件,树莓派在家庭局域网中,可以保证上传和下载的速度,还支持在线播放网盘中的视频文件,同时,由于文件全部储存在树莓派中,可以保证数据的安全。这套源码试用于个人网盘,家庭私有云,企业私有云。一,更新树莓派系统sudo apt-get updatesudo apt-get
2020-10-24 16:17:24
862
原创 嵌入式开发:主频与晶振详解
所以,PLL 的神奇之处在于:它利用一个稳定的低频参考(晶振),通过闭环反馈控制一个不稳定的高频振荡器(VCO),最终产生一个既高频又稳定的时钟信号,其精度和稳定性归根结底还是来源于那颗小小的晶振。理解了这个闭环反馈控制的思想,就抓住了 PLL 倍频的核心。PLL(锁相环)实现倍频的原理确实很精妙,它并没有“无中生有”地创造频率,而是利用闭环反馈控制和一个。刚开始接触可能会觉得有点抽象,多看手册里的时钟树图,多动手用配置工具尝试修改设置并观察效果,很快就能掌握。上,从而保证输出频率的稳定性和精度。
2025-07-01 15:22:28
866
原创 GitHub Actions配置python flake8和black
在项目根目录创建.flake8[flake8]在$'/(\.git| \.venv| build| dist)/'''
2025-06-30 23:26:00
845
原创 Python代码风格检查工具flake8介绍
flake8是 Python 开发者维护代码可读性、一致性和健壮性的基础工具,能有效减少低级错误,提升团队协作效率。建议在编码流程中强制使用(如通过 Git 钩子或 CI 流水线)。我们之前提到,flake8 是一个代码检查工具(linter),而 black 是一个代码格式化工具(formatter)。它们的功能不同,但目标一致:提高代码质量和一致性。
2025-06-30 10:45:30
377
原创 NAND Flash BCH和FTL
BCH和FTL是NAND Flash管理中的两个关键概念,但它们解决的问题完全不同。✅fill:#333;color:#333;color:#333;fill:none;FTL 映射表动态重映射逻辑扇区 LBA 0x1000物理页 PPN 0x3A42逻辑扇区 LBA 0x1001物理页 PPN 0x8B11✅。
2025-06-29 23:13:53
869
原创 嵌入式MTD设备与Flash管理解析
是块 Flash 空间,能读能写(要擦除)就够了,不用管它是 NOR 还是 NAND,是 Winbond 还是 Micron。理解MTD是嵌入式系统中处理Flash存储的关键一步!好的,咱们用大白话和例子来说清楚 MTD 是啥,以及它为啥重要。这里通常挂载 JFFS2 文件系统。它是嵌入式存储管理的核心枢纽。你可以把 MTD 理解为。
2025-06-29 22:40:14
463
原创 XIP (eXecute In Place)
想让 CPU 跑得快,要么用 NOR 直接喂指令,要么把 NAND 的代码先搬到 RAM 这个“高速食堂”再吃!试图在 NAND 上 XIP 会导致 CPU 长时间停滞,性能完全不可接受。这就像 CPU 把 NOR 当作一块慢一点的 RAM 来用。这能节省 RAM 空间,加快启动速度。从存储介质复制到 RAM,而是。
2025-06-29 22:33:34
38
原创 嵌入式开发中.su文件的作用
int确实是 4 字节,但栈使用不仅由局部变量决定。GCC 的栈计算包含额外开销返回地址、帧指针、寄存器保存、对齐填充。在 x86-64 中,栈帧默认按 16 字节对齐。优化级别的影响如果启用优化(如-O2),GCC 可能会减少栈使用(例如省略帧指针)。.su文件中的栈大小是编译器根据 ABI 规则、对齐要求和调试需求综合计算的结果。实际栈使用 = 局部变量 + 编译器额外开销(对齐、寄存器保存等)。x86-64 的 16 字节对齐和调试信息可能会导致栈大小远大于局部变量的理论值。
2025-06-27 16:46:44
435
原创 USB枚举过程详解
就像新员工入职第一天需要登记信息、领取工牌、配置电脑一样,USB设备也需要向主机“自我介绍”,告诉主机它是什么、能做什么、需要什么资源,主机才能正确使用它。简单说,USB枚举就是USB世界的“设备自我介绍和注册上岗”流程,是USB设备能被主机识别和使用的必经之路。理解这个过程对于开发和调试USB设备至关重要。USB枚举(Enumeration)是USB设备插入主机时,主机和设备之间自动进行的。
2025-06-26 20:52:34
898
原创 Linux size命令详解
size命令在 Linux 中是的一个实用工具。它从文件(通常是 ELF 格式)的头部信息中提取关键内存区域的大小信息,并以简洁的方式呈现出来。textdatabssbssbss运行sizelslslsdec-A使用 System V 风格的更详细的输出格式。它会列出的段(Section),而不仅仅是textdatabss。
2025-06-25 21:22:00
1704
原创 xargs将标准输入(stdin)的数据转换为命令行参数
I何时用xargs:当需要将管道数据转换为命令行参数时(尤其是文件批量操作)。核心价值:解决「命令不支持从 stdin 读取参数」的痛点,实现高效批处理。典型场景:文件批量删除/复制/移动、结合find处理搜索结果、并行任务加速。
2025-06-25 17:30:44
485
原创 正则表达式*用法详解
符号含义必须前置元素示例量词(零次或多次)是a*.*匹配任意长度字符串是.*\*字面字符否\*是一个修饰符,需要“修饰”它前面的元素。直接使用会导致语法错误。
2025-06-25 17:29:08
349
原创 Linux Telephony开发中各组件关系及通信流程
好的,我们来梳理一下在 Linux 移动设备(尤其是早期 Android 和基于 Linux 的移动平台)Telephony 开发中dbusoFonoRILModem之间的关系、通信方式和设计目的。
2025-06-24 19:36:24
1036
原创 Shell参数扩展语法解析
用于提取文件路径的目录部分(去掉最后一个后的文件名)。在您的代码中,它实现了动态修改文件路径,将文件名从build.prop替换为,同时保留原目录结构。
2025-06-22 22:19:00
425
原创 查看shell选项状态命令详解
echo $-是一个在 Unix/Linux shell(如 Bash)中查看当前的命令。它输出一个由字母组成的字符串,每个字母代表一个启用的 shell 选项。
2025-06-22 22:04:17
350
原创 Shell脚本调试与错误处理详解
选项作用默认set -e遇错退出+eset -x打印执行的命令(调试)+xset -u未定义变量报错+u管道中任意失败则整体失败未启用合理组合这些选项(如)可大幅提升脚本的健壮性和可维护性!理解!记住这些参数的关键在于关联场景 + 简单口诀。
2025-06-22 21:57:01
808
原创 Python命令行参数解析全面总结
参数类型选择主要操作对象 → 位置参数配置选项 → 选项参数开关标志 →nargs使用指南可选值 →nargs='?多个值 →nargs='*'(可选) 或nargs='+'(至少一个)固定数量 →nargs=Naction使用场景布尔标志 →store_true收集多个值 →append计数 →count其他提示为所有参数添加help描述为常用选项设置合理的默认值使用type参数进行类型验证使用choices限制有效值范围。
2025-06-22 16:33:49
484
原创 __builtin_bswapxx功能与原理详解
是 GCC 和 Clang 等编译器提供的内置函数(built-in function),用于。TCP/IP 协议早期主要使用 16/32 位字段(如 IP 地址、端口),64 位字段较少见。,开发者无需关注底层指令差异,即可写出高效且可移植的字节序转换代码。某些编译器(如 GCC 12+)实验性支持 128 位反转。,仅在性能关键路径或处理非网络数据时使用编译器内置函数。比手动移位操作更高效,编译器直接生成底层最优指令。在跨平台编程中,更推荐使用这些标准函数(定义在。💡 在现代编译器中,标准库函数如。
2025-06-18 22:20:57
846
原创 pthread_once函数使用场景与原理
使用场景✅ 需要线程安全的一次性初始化(如全局变量、单例、库状态)。✅ 希望避免显式加锁的开销。✅ 延迟初始化资源提升性能。核心优势通过内核/编译器级优化,以最小代价实现线程安全的初始化,是 POSIX 多线程编程中的重要同步原语。
2025-06-18 21:49:19
333
原创 fd查找文件并拷贝
根据您的需求,您希望递归搜索cmake_out目录下任意路径中所有以vela开头的.bin文件,并将它们拷贝到当前目录下的nuttx目录。使用fd。
2025-06-16 22:38:47
329
原创 qmake与CMake区别
特性qmakeCMake本质Qt 项目构建文件生成器跨平台构建系统生成器 (元构建系统)主要领域Qt 项目 (尤其适合简单/纯 Qt 项目)通用 C/C++ 项目 (任何规模、复杂度,强烈推荐用于 Qt 6+)配置文件.pro文件文件核心优势Qt 集成简单,上手快真正的跨平台一致性,功能强大灵活,生态庞大跨平台性较好,但不如 CMake 一致和强大极佳,是其主要设计目标功能范围专注于 Qt 需求,功能相对有限极其丰富,覆盖构建的方方面面依赖管理较弱强大等)学习曲线较平缓较陡峭。
2025-06-16 13:05:23
1228
原创 Python格式化工具推荐
工具适用场景风格决策Black追求极简统一,团队协作首选工具决定autopep8需要渐进式PEP 8合规用户配置yapf需要深度自定义风格用户配置2025年趋势:Black已成为Python社区事实标准,新项目优先推荐使用。大型项目常采用 Black + isort + flake8组合(格式化+导入排序+代码检查)。
2025-06-15 19:31:07
498
原创 嵌入式开发中fmacro-prefix-map选项解析
在嵌入式开发中, 是 GCC 和 Clang 等编译器提供的一个路径映射选项,主要用于在预处理阶段重写宏定义中出现的绝对路径。它的核心目的是解决以下问题:构建可重现性消除编译输出(如 、 文件)中对本地绝对路径的依赖。同一代码在不同机器上编译时,即使路径不同,也能生成相同结果。路径隐私保护避免将开发机器的目录结构暴露在生成的二进制文件中。路径规范化将冗长的绝对路径替换为简短、统一的相对路径或标识符。:需要被替换的原始路径前缀(绝对路径)。:替换后的新路径前缀(可以是相对路径、短路径或占位符)。
2025-06-14 22:08:30
677
原创 Vim鼠标右键复制问题解决方法
在~/.vimrc" 禁用右键的 Vim 菜单首选方法 1(禁用鼠标)直接解决问题。若需保留 Vim 鼠标功能,用方法 3"+y复制)或方法 2Shift+右键终端兼容性:确保终端(如 GNOME Terminal、iTerm2)支持鼠标复制功能。⚠️ 注意:部分终端(如 macOS 默认终端)对鼠标支持有限,建议使用iTerm2或Alacritty等现代终端。
2025-06-11 09:31:01
653
原创 嵌入式开发中TTY与PTY的区别
在嵌入式开发中,理解tty和pty的区别对串口通信、远程登录、Shell 控制等场景至关重要。它们的核心区别在于和。
2025-06-10 11:22:53
746
原创 Linux字符串占用空间统计方法
估算your_file中所有以 null 结尾的可打印字符串在文件中总共占用了多少字节。length来自awk,表示当前行的长度。每行加 1,是因为在二进制中这些字符串是以\0结尾的。total累加所有行的长度 + 1,最后输出这个总字节数。
2025-06-09 16:48:18
403
原创 MSVC在软件开发中的应用与特点
MSVC 是微软为 Windows 平台打造的 C/C++ 开发生态系统,涵盖编译器、调试器、库等全套工具,是 Windows 原生开发的首选。对于跨平台项目,开发者可能选择 Clang 或 MinGW,但 MSVC 在 Windows 性能优化和生态集成上仍具优势。需要配置环境或解决编译问题?可以告诉我你的具体场景,我会提供详细指导!😊。
2025-06-09 14:08:29
503
原创 CMake检测C编译器标志功能
是 CMake 提供的一个函数,。它在编写跨平台的构建脚本时非常有用,因为不同编译器(如 GCC、Clang、MSVC)支持的编译选项可能存在差异。
2025-06-07 19:15:40
843
C语言标准演化:C89、C99与C11的关键变化
2025-02-05
AppleNotificationCenterServiceSpecification.pdf
2021-08-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人