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

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

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

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

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

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

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

原创 树莓派搭建kodexplorer
可道云kodexplorer是一款开源私有云系统,类似于owncloud,Dropbox、SkyDrive,seafile等。将可道云kodexplorer搭建在树莓派上,从而在树莓派上存储、管理家庭成员的各种照片,音乐,文档等各种文件,树莓派在家庭局域网中,可以保证上传和下载的速度,还支持在线播放网盘中的视频文件,同时,由于文件全部储存在树莓派中,可以保证数据的安全。这套源码试用于个人网盘,家庭私有云,企业私有云。一,更新树莓派系统sudo apt-get updatesudo apt-get
2020-10-24 16:17:24
863
原创 CMake字符串string命令常见用法示例
CMake 的 命令提供了丰富的字符串操作功能,下面是一些常见用法的示例:2. 字符串大小写转换3. 字符串长度和子字符串4. 字符串拼接和连接5. 字符串比较6. 字符串去除空格7. 正则表达式操作8. 字符串编码转换这些示例展示了 CMake 命令的一些常见用法,实际使用时可以根据需要组合这些操作来处理复杂的字符串任务。
2025-07-25 12:38:29
91
原创 ANSI及其转义序列
ANSI转义序列是用于控制文本终端显示的特殊字符序列,起源于1970年代的终端控制标准。它们以ESC[开头(ESC是ASCII码27的字符),后接参数和指令字母。\033。
2025-07-25 12:26:03
480
原创 CMake message类型区别详解
类型输出流中断流程日志级别典型场景STATUSstdout不中断Info配置进度信息WARNINGstderr不中断Warning非致命问题提醒ERRORstderr跳过当前作用域Error可恢复错误(继续其他部分)SEND_ERRORstderr终止子树Error终止子目录处理stderr终止整个进程Fatal无法继续的致命错误动态可配置可变弃用功能提示。
2025-07-25 10:47:27
423
原创 CMake ARGV变量使用指南
打印所有参数(ARGV 是列表)# 遍历每个参数变量含义作用域ARGV函数/宏的所有传入参数函数/宏内部ARGN超出声明形参的额外参数函数/宏内部ARGVx第x个参数(如${ARGV2}函数/宏内部通过ARGV,你可以灵活处理 CMake 中的可变参数,实现更动态的构建逻辑。
2025-07-24 22:25:56
183
原创 CMake链接器详细输出选项解析
此命令为nuttx目标启用链接器的详细日志输出,是调试复杂链接问题的实用工具,通过PRIVATE确保不影响其他目标。
2025-07-24 17:20:44
213
原创 CMake生成器表达式用法解析
在CMake中,使用了,这是一种在CMake生成构建系统(如Makefile或Ninja文件)时动态求值的特殊语法。
2025-07-23 10:14:49
1000
原创 C语言符号可见性控制与工程实践——深入理解 __attribute__((visibility)) 和 -fvisibility=hidden
在共享库(
2025-07-22 23:06:54
1005
原创 CMake --build 构建命令解析与使用
跨平台抽象层是 CMake 提供的统一接口# 在 Windows 的 MSBuild 中可能等价于 msbuild ALL_BUILD.vcxproj /t:prebuilt隐含工作目录--build .中的表示构建目录(含的目录),而直接使用make/ninja需要手动进入该目录。构建参数传递。
2025-07-21 00:26:51
545
原创 Linux僵尸进程问题及解决方法
僵尸进程(Zombie Process 或 Defunct Process)是指一个已经执行完毕(终止)的子进程,但其在进程表中的退出状态信息(Exit Status)还没有被其父进程读取(通过wait()系统调用)。此时,内核会保留该进程的进程表项(PID、退出状态、资源使用情况统计等基本信息),直到父进程读取这些信息。进程本身已经停止运行,不消耗 CPU 和内存资源(除了保留进程表项的那一点点内核空间)。进程表(Process Table)中仍然保留着它的条目(Entry),状态通常标记为Z(或。
2025-07-21 00:07:19
1020
原创 pthread_detach与pthread_join区别及使用场景
场景示例示例线程类型计算密集型任务后台任务/日志记录是否需要结果需要获取计算结果不关心日志是否成功主线程行为阻塞等待工作线程完成立即继续执行资源回收显式调用 join 回收系统自动回收内存管理主线程负责释放工作线程的内存工作线程必须自己清理所有资源适用场景需要结果汇总的并行计算非关键的后台操作执行顺序主线程等待 → 工作线程完成主线程和工作线程并发执行是否可能阻塞主线程是否。
2025-07-21 00:06:46
1199
原创 chown命令与权限继承解析
场景新建文件/目录的所有者新建文件/目录的所属组未设置setgid创建者(如mi创建者的默认组(通常mi设置setgid后创建者(如mi强制继承父目录组(mi建议sudo chown -R mi:mi /home/mi/ssd # 修改现有内容sudo chmod g+s /home/mi/ssd # 确保未来新建内容继承组。
2025-07-19 10:16:37
138
原创 嵌入式开发中-fno-builtin选项解析
保障代码行为符合预期,尤其在自定义库、严格硬件约束或深度调试场景下必不可少。,编译器可能忽略你的实现,直接生成优化的内存复制指令(如 ARM 的。是嵌入式开发中的关键编译选项,它。假设在裸机嵌入式代码中自定义了。),导致自定义逻辑失效。在嵌入式软件开发中,
2025-07-18 12:37:00
297
原创 Vim复制粘贴位置控制方法
场景推荐命令操作步骤单行快速交换ddpddkP3 键完成多行下移可视模式 +:m '>+1选择后执行命令安装插件后的日常使用[e]e单键交换(需 vim-unimpaired)精确位置交换:m 行号配合行号使用💡专业提示在~/.vimrc添加映射加速操作:" 交换当前行与下一行" 交换当前行与上一行交换后保持光标位置:nnoremap <silent> <leader>d :m .+1<CR>==在 Vim 中处理多行和多列操作非常高效。操作类型选择命令复制命令粘贴命令效果。
2025-07-17 12:03:22
861
原创 GCC属性修饰符__attribute__((unused))用途
场景解决方案抑制未使用变量/参数的警告使用跨编译器兼容结合宏和(void)强转保持代码零警告(尤其严格项目)必须处理未使用警告,此属性是重要工具建议:在需要显式表达“有意不使用”的意图时,优先使用此属性,使代码更清晰且避免警告干扰。
2025-07-15 22:18:12
1083
原创 Python命令行计算2的22次方方法
在Python命令行中,使用运算符计算2^22得到错误结果20的原因是:^。正确的计算方式是使用乘方运算符**或内置函数pow()。
2025-07-15 15:47:23
422
原创 apt-get升级逻辑及解决方法
有可用的更新版本,就只升级它,不要升级其他任何包。命令的正常设计逻辑。这一个包(当它确实有更新时),并且。已经是最新版,它会告诉你无需操作。看到你的问题了,这个行为是。升级其他任何包,你需要使用。
2025-07-10 16:01:18
249
原创 Makefile中info函数使用解析
在 Makefile 中,是,不是终端命令。它用于在 Make 执行过程中输出信息到终端。类似的内置函数还有和。
2025-07-09 14:32:11
334
原创 C++标准库libstdc++与libc++区别
你说得完全正确!libstdc++libc++libc++libstdc++libc++.solibc++.alibstdc++libc++libstdc++libc++libstdc++libc++libcxxlibc++libcxx下次再看到这两个名字,记住std在中间的是 GNU (libstdc++),只有一个c加两个的是 LLVM (libc++) 就不会弄混了!这是一个非常好的问题!libstdc++(GNU)和libc++(LLVM)都是高质量的实现,但它们的。
2025-07-09 09:45:19
640
原创 eSIM中0x9000状态字解析
在 eSIM 的上下文中,0x9000就是“操作成功” 的标准响应。当你看到这个值返回时,意味着你(或你使用的系统/手机)向 eSIM 芯片发送的上一条命令已经被芯片正确无误地执行完毕。
2025-07-08 17:26:01
349
原创 eval命令用法及风险详解
是一个在多种编程语言和脚本环境(如 Shell 脚本、Python、JavaScript、Perl、PHP 等)中都存在的命令或函数。是一个强大的工具,允许你动态执行字符串形式的代码。清晰地对比“动态执行字符串代码”和“非动态执行代码”确实能帮助你更深刻地理解。Shell 只是把这些字符串数据塞进命令的参数位置。务必优先寻找更安全、更清晰的替代方案(如数组、函数、关联数组、,必须对输入进行极其严格的过滤和验证,并充分意识到其潜在危险。所代表的“动态执行字符串代码”的特殊性和风险!的本质和它要解决的问题。
2025-07-06 22:58:44
913
原创 嵌入式开发:主频与晶振详解
所以,PLL 的神奇之处在于:它利用一个稳定的低频参考(晶振),通过闭环反馈控制一个不稳定的高频振荡器(VCO),最终产生一个既高频又稳定的时钟信号,其精度和稳定性归根结底还是来源于那颗小小的晶振。理解了这个闭环反馈控制的思想,就抓住了 PLL 倍频的核心。PLL(锁相环)实现倍频的原理确实很精妙,它并没有“无中生有”地创造频率,而是利用闭环反馈控制和一个。刚开始接触可能会觉得有点抽象,多看手册里的时钟树图,多动手用配置工具尝试修改设置并观察效果,很快就能掌握。上,从而保证输出频率的稳定性和精度。
2025-07-01 15:22:28
928
原创 GitHub Actions配置python flake8和black
在项目根目录创建.flake8[flake8]在$'/(\.git| \.venv| build| dist)/'''
2025-06-30 23:26:00
879
原创 Python代码风格检查工具flake8介绍
flake8是 Python 开发者维护代码可读性、一致性和健壮性的基础工具,能有效减少低级错误,提升团队协作效率。建议在编码流程中强制使用(如通过 Git 钩子或 CI 流水线)。我们之前提到,flake8 是一个代码检查工具(linter),而 black 是一个代码格式化工具(formatter)。它们的功能不同,但目标一致:提高代码质量和一致性。
2025-06-30 10:45:30
422
原创 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
898
原创 嵌入式MTD设备与Flash管理解析
是块 Flash 空间,能读能写(要擦除)就够了,不用管它是 NOR 还是 NAND,是 Winbond 还是 Micron。理解MTD是嵌入式系统中处理Flash存储的关键一步!好的,咱们用大白话和例子来说清楚 MTD 是啥,以及它为啥重要。这里通常挂载 JFFS2 文件系统。它是嵌入式存储管理的核心枢纽。你可以把 MTD 理解为。
2025-06-29 22:40:14
504
原创 XIP (eXecute In Place)
想让 CPU 跑得快,要么用 NOR 直接喂指令,要么把 NAND 的代码先搬到 RAM 这个“高速食堂”再吃!试图在 NAND 上 XIP 会导致 CPU 长时间停滞,性能完全不可接受。这就像 CPU 把 NOR 当作一块慢一点的 RAM 来用。这能节省 RAM 空间,加快启动速度。从存储介质复制到 RAM,而是。
2025-06-29 22:33:34
100
原创 嵌入式开发中.su文件的作用
int确实是 4 字节,但栈使用不仅由局部变量决定。GCC 的栈计算包含额外开销返回地址、帧指针、寄存器保存、对齐填充。在 x86-64 中,栈帧默认按 16 字节对齐。优化级别的影响如果启用优化(如-O2),GCC 可能会减少栈使用(例如省略帧指针)。.su文件中的栈大小是编译器根据 ABI 规则、对齐要求和调试需求综合计算的结果。实际栈使用 = 局部变量 + 编译器额外开销(对齐、寄存器保存等)。x86-64 的 16 字节对齐和调试信息可能会导致栈大小远大于局部变量的理论值。
2025-06-27 16:46:44
442
C语言标准演化:C89、C99与C11的关键变化
2025-02-05
AppleNotificationCenterServiceSpecification.pdf
2021-08-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人