自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(376)
  • 资源 (3)
  • 问答 (3)
  • 收藏
  • 关注

原创 python print变量用法

多个变量之间用逗号分隔,打印时会自动以空格分隔开。函数打印完内容后会以换行符结尾。,两个单词之间没有换行。参数将输出打印到文件中。在 Python 中,参数来改变结尾字符。

2024-08-27 10:04:43 1101

原创 Python开启Http Server

用 Python 部署了一个具有 FTP 功能的服务器,电脑在局域网内通过 FTP 下载想要传输的文件。

2023-07-09 21:34:23 3098

翻译 开源代码授权Licence说明

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

2021-04-07 23:46:04 1975

原创 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 127581 3

原创 树莓派搭建kodexplorer

可道云kodexplorer是一款开源私有云系统,类似于owncloud,Dropbox、SkyDrive,seafile等。将可道云kodexplorer搭建在树莓派上,从而在树莓派上存储、管理家庭成员的各种照片,音乐,文档等各种文件,树莓派在家庭局域网中,可以保证上传和下载的速度,还支持在线播放网盘中的视频文件,同时,由于文件全部储存在树莓派中,可以保证数据的安全。这套源码试用于个人网盘,家庭私有云,企业私有云。一,更新树莓派系统sudo apt-get updatesudo apt-get

2020-10-24 16:17:24 840

原创 patch命令在代码管理中的应用

的工具,常用于修复 bug、添加功能或调整代码结构。实际使用时,观察补丁文件中的路径层级和目标代码的位置关系即可快速判断。这是管理第三方依赖时常见的自定义代码行为的方法。库后自动修改其源代码。每个补丁文件对应一个代码变更,通过。,直接关系到补丁能否正确应用到目标文件。在示例中,补丁文件路径是直接相对于。文件会描述两个文件的差异。命令通过一系列补丁文件(此时需要决定是否剥离。

2025-05-02 19:39:09 702

原创 CMake separate_arguments用法详解

是 CMake 中用于将字符串分割成参数列表的命令,适用于处理包含空格的参数或复杂命令行参数。

2025-05-02 17:27:33 343

原创 CMake管理外部依赖的模块

是“轻量级依赖管理”,适合简单集成。是“重型构建工具”,适合完全控制外部项目流程。根据依赖项的性质(是否需要编译、是否需修改代码)和项目需求(是否需要隔离构建环境)选择合适工具。

2025-05-01 23:18:15 1013

原创 C标准库(libc)接口及示例解析

libc(C标准库)是C语言程序的核心运行时库,提供了操作系统底层功能的封装和基础函数。它的“接口”指的是库向开发者暴露的、可直接调用的函数和API。不同操作系统的实现可能不同(如Linux的glibc、macOS的libSystem、Windows的CRT),但核心功能遵循C标准(如C11/C17)。

2025-05-01 20:01:36 468

原创 CMake中强制启用option定义变量的方法

在CMake中,若要在另一个CMake文件中强制启用由。通过上述方法,即可在任意CMake文件中强制启用由。在需要强制启用选项的CMake文件中,使用。调用前),以确保覆盖生效。,覆盖之前的任何值。

2025-05-01 16:01:22 490

原创 CMake解析参数用法示例

在简单的示例中,宏的变量作用域规则(直接修改父作用域)可以让代码更简洁,不需要额外处理变量传递。但实际项目中,**函数(function)**通常是更安全的选择,因为它能隔离作用域,避免变量污染。是 CMake 中用于解析函数或宏参数的工具,特别适合处理带有选项(函数不会意外覆盖父作用域的变量(例如,如果父作用域中已经有一个。在函数中的行为需要更谨慎的作用域处理,而宏的行为更“直接”。的函数,目的是封装一个通用的参数解析工具。变量,宏可能会直接修改它,而函数不会)。,同时说明为何在之前的回答中选择了宏。

2025-04-30 23:32:48 1111

原创 Git分支重命名与推送参数解析

M-Mmastermaster-Mmainmaster-u-ugit pushgit pull-u-M-u你提到的这个问题非常重要,且涉及潜在的数据风险。mastermastermastermastermastergit reflog当你执行mastermastermainmastermastermainmastermastermastergit reflogmastermastermastermastermain-M只修改分支名,不影响内容?❌ 错误!它会直接删除旧分支,用当前分支覆盖。

2025-04-27 00:09:58 998

原创 CMake打印GCC和G++版本方法

是的,不管是什么编译器,CMAKE_C_COMPILER_VERSION和CMAKE_CXX_COMPILER_VERSION应该都代表对应的版本号,不管编译器是GCC、Clang还是MSVC。比如,在CMake的文档里,变量部分可能提到这些变量。假设是的,那变量名应该是CMAKE_C_COMPILER_VERSION和CMAKE_CXX_COMPILER_VERSION。另外,除了版本变量,可能还想输出编译器的路径,可以用CMAKE_C_COMPILER和CMAKE_CXX_COMPILER变量。

2025-04-26 12:44:41 507

原创 CMake ctest

修改// 测试加法// 测试减法return 0;核心步骤在中注册测试 (add_test通过ctest命令运行测试。关键选项-j(并行)、-R(过滤)、(重试失败)。扩展性:支持自定义测试逻辑和第三方框架。现在可以尝试在自己的项目中添加测试,体验自动化测试的便利性!好的!和add_test()是 CMake 中测试功能的核心命令,下面我会详细解释它们的用法,并结合具体示例说明。:必须调用,通常在的顶层。add_test():注册测试,核心是定义NAME和COMMAND。

2025-04-25 19:43:00 1007

原创 CMake execute_process用法详解

是 CMake 中的一个命令,用于在(即运行cmake命令时)执行外部进程。它与或不同,后者是在构建阶段(如make或ninja)执行命令。通常用于获取系统信息、生成代码或处理依赖项。

2025-04-21 23:18:52 798

原创 脚本中**通配符用法解析

场景起始路径示例.gitignore项目根目录Shell 相对路径当前工作目录Shell 绝对路径系统根目录Pythonpathlib取决于Path()起点如果仍有疑问,可以告诉我你的具体使用场景(如命令行、脚本、.gitignore等),我可以给出针对性示例!

2025-04-20 16:03:28 754

原创 C99 inline函数编译错误解析

/ 头文件(.h)inline void f() { /* 内联定义 */ }// 某个源文件(.c)// 声明外部符号void f() { /* 外部定义 */ }适用场景:函数需跨多个文件使用。对于你的简单示例,最佳解决方法是添加static修饰符,即改为。这明确限定了函数作用域,避免链接问题,且符合C99标准。当开启优化时,GCC自动内联函数;未优化时,生成静态本地符号,确保链接器能找到定义。好的!我试着用更简单的方式重新梳理这个问题的核心逻辑。基本概念→问题现场分析→解决方案原理。

2025-04-20 15:34:21 678

原创 MacOS iTerm2终端快捷键

打开即时回放,按Esc退出。即时回放可以记录终端输出的状态,让你“穿越时间”查看终端内容。默认每个会话最多储存4MB的内容,可以在设置中更改。,iterm2 将自动列出剪切板的历史记录。如果需要将剪切板的历史记录保存到磁盘,在。可以呼出粘贴历史,支持模糊检索。还可以设置将粘贴历史保存在磁盘上。iterm2 有 2 种好用的选中即复制模式。2.1 窗口面板管理:一个窗口分割。2.2 新建Tab标签页。2.3 多个窗口操作。2.4.1 粘贴历史。2.4.2 即时回放。

2025-04-19 23:31:43 251

原创 strscpy_pad与strscpy区别及使用场景

安全地复制字符串,检查目标缓冲区大小,避免溢出。:内核中安全复制字符串,设计更高效且适合内核需求。

2025-04-17 15:34:00 1178

原创 Gcc Options for Debugging

选项用于在编译时生成更详细的调试信息,特别是包含宏定义的相关信息,以便在调试过程中能够查看和展开宏。,可以显著提升复杂代码的调试效率,尤其是在处理宏和预处理逻辑时。

2025-04-17 12:34:50 348

原创 嵌入式开发中的inline与inline_function区别

(或类似名称)通常用于优化代码执行效率,但它们的来源和用法有所不同。它在嵌入式开发中常见于对性能或代码行为有严格要求的场景。在嵌入式软件开发中,

2025-04-16 10:03:32 1008

原创 Android envsetup与Python venv使用指南

,用于初始化 Android 源码编译所需的工具链、环境变量和快捷命令。是 Python 自带的虚拟环境工具,用于创建独立的 Python 环境,隔离不同项目的依赖,避免全局安装包的版本冲突。通过合理使用这两个工具,你可以高效管理 Android 系统级开发环境和 Python 项目依赖环境,避免环境冲突问题。是两种完全不同的环境配置工具,分别服务于不同的开发场景。是的,它是 Android 源码编译的专用工具,普通 App 开发无需使用。是 Android 源码开发中的环境配置脚本(

2025-04-13 22:41:34 892

原创 CMake set_source_files_properties用法详解

是 CMake 中用于为特定源文件设置属性的命令,可以控制编译选项、文件类型、依赖生成等。,但需注意头文件一般不参与编译(除非显式包含在中)。

2025-04-13 22:23:02 412

原创 CMake中set_property接口及属性作用详解

在 CMake 中,是一个用于设置的核心命令。属性是 CMake 中用于控制构建过程的核心机制之一,可以理解为与特定对象(如目标、目录、源文件等)关联的键值对,用于存储配置信息或影响构建行为。

2025-04-13 00:14:09 571

原创 CMake中add_custom_command用法详解

是 CMake 中用于在构建过程中添加自定义命令的工具。它通常用于生成文件或在构建特定目标前后执行操作。其行为和执行时机取决于具体使用场景。

2025-04-12 23:47:24 447

原创 CMake中add_custom_target用法详解

使用ALL需要每次构建时自动执行的任务(如代码生成、资源处理)。统一构建入口,简化用户操作(如编译、测试、打包一步完成)。强制某些任务作为构建流程的一部分(例如清理临时文件)。

2025-04-12 23:07:32 1058

原创 ANSI C 和 C89/C90

ANSI C 就是 C89/C90,是 C 语言的第一个标准化版本。在嵌入式开发中,C89 因其稳定性和广泛支持,仍是常见的选择,尤其是对老旧硬件或严格兼容性要求的场景。1. ANSI C 和 C89/C90 的关系核心结论本质是同一标准,区别仅在于发布机构和时间:ANSI C:由美国国家标准协会(ANSI)于1989 年正式批准,因此得名。C89:通常指 ANSI 在 1989 年完成的标准草案(ANSI X3.159-1989),强调时间节点。C90:ISO 于。

2025-04-11 20:25:24 1172

原创 SPDX-License-Identifier

避免不同项目使用不同的许可证名称(如 “MIT License” 和 “Expat License” 实际是同一协议),统一用 SPDX 的短标识符(如。SPDX 是 Linux 基金会支持的一个开放标准,旨在统一软件许可证和版权信息的格式,方便自动化工具识别和处理。自动化工具(如许可证扫描工具、代码托管平台)能快速识别代码的许可条款,帮助企业和开发者管理合规性,降低法律风险。,可以直接标明代码遵循的许可证(如 MIT、GPL-3.0 等),无需冗长的版权声明文本。在源代码文件或项目根目录中,通过添加。

2025-04-11 12:38:45 374

原创 CMake macro

CMake的macro通过代码展开影响当前作用域,类似C宏的文本替换,但参数处理更安全。与function相比,宏省去了作用域隔离,适合需要直接修改调用者环境的场景,但需谨慎避免命名冲突和意外副作用。

2025-04-11 12:33:50 484

原创 CMake参数add_link_options(-Wl,--entry=Reset_Handler)

Wl:将后续参数传递给链接器。:强制链接器使用作为程序入口。核心作用:确保嵌入式系统复位后正确执行初始化代码,而非直接跳转到main。首先,用户提到的是CMake中的一个命令,用于向链接器添加选项。而链接器选项在嵌入式开发中尤其重要,特别是在处理启动代码和中断向量表时。接下来,用户提供的参数是。这里有两个部分,用逗号分隔。我记得在GCC工具链中,-Wl选项用于将后面的参数传递给链接器。所以-Wl后面的部分会被分解成链接器的参数。第一个参数是。这里的--entry。

2025-04-11 11:12:44 525

原创 GCC attribute deprecated

嵌入式开发中的实际意义代码维护在长期维护的嵌入式项目中(如汽车ECU、工业控制器),通过弃用标记可以平滑过渡到新实现,避免突然破坏现有代码。减少硬件耦合当硬件更新时,通过标记旧版驱动代码,引导开发者适配新硬件。编译时检查配合-Werror编译选项,可以将警告转为错误,强制升级代码。注意事项编译器支持:需确保编译器支持此特性(如 GCC、Clang、ARM CC 等)。文档补充:弃用标记应配合代码注释或文档说明替代方案。静态分析工具:可与 CI/CD 流程结合,检测弃用API的使用。

2025-04-10 16:23:25 483

原创 PDFtk

【代码】PDFtk。

2025-04-09 21:42:27 247

原创 gcc -Wno-cpp

Wno-cpp是用来关闭编译期间对#warning#error指令产生的警告信息,让编译器“少说点话”。你想要保留提醒就不要加这个选项,想要“安静一点”就加上它~这个cpp其实是的缩写,也就是 “C 预处理器”。在 C/C++ 编译流程中,预处理(preprocessing)是编译的第一个阶段。#include头文件包含#define宏定义条件编译(#if#ifdef#else#endif还有我们刚才说的#warning和#error等等这些都是在正式编译前进行的。所以-Wcpp(或。

2025-04-09 14:57:12 519

原创 嵌入式rodata段

比如在某些架构中,访问Flash中的数据可能需要通过特定的指令,或者速度较慢,这时候如果频繁访问的数据可能需要考虑放在RAM中。还有,像配置参数,比如设备ID、默认设置等,如果这些参数在运行时不需要改变,放在rodata段可以防止被意外覆盖,同时节省RAM。再比如,数学用到的查找表,比如正弦波表,如果不需要修改,放在rodata段既安全又节省内存。另外,可能还有性能方面的考虑。只读的数据段可能在程序启动时就被加载到内存的某个固定位置,不需要在运行时进行写操作,这样可能会提高访问速度,或者减少内存的碎片化。

2025-04-06 22:48:57 639

原创 python logging模块

以下是 Python 中 模块的基础使用示例和配置说明:进阶配置版(同时输出到控制台和文件)关键配置说明:日志级别(从低到高):常用配置方式:推荐格式元素:最佳实践:根据需求选择适合的配置方式,复杂项目推荐使用进阶配置实现更精细的控制。你提到的 是日志记录中非常重要的一个格式字段,它的值来源于 logger 的名称。具体来说:默认情况:自定义 logger:此时 会显示 或当前模块的 (如 )实际应用场景场景1:直接使用模块函数(root logger)场景2:使用

2025-04-05 14:45:23 56

原创 正则表达式和通配符

(Regular Expression)和通配符(Glob Pattern)是两种不同的模式匹配语法,虽然看起来相似(都使用。(如文件内容、字符串),功能强大且灵活,支持复杂逻辑(如分组、回溯、量词)。等符号),但它们的用途、规则和场景完全不同。默认用正则表达式,通配符需转义或通过其他参数实现。掌握两者的区别可以避免混淆,根据场景选择合适工具!),语法简单,主要用于文件操作。、Shell 的文件扩展(如。不保证中间字符的精确控制。、编程语言中的正则库。

2025-04-01 12:02:37 1096

原创 嵌入式libc

(C标准库)的接口是预定义的函数集合,为开发者提供了底层硬件操作的抽象层。这些接口封装了常见任务(如内存管理、字符串操作、文件I/O等),使代码可移植且高效。),并注意硬件适配。开发者常需自定义底层驱动(如串口替代标准输出)或避免动态内存分配以确保可靠性。在没有OS的裸机系统中,文件操作接口可能无效,需替换为Flash读写等硬件驱动。接口是嵌入式开发的基础工具,但需根据资源限制选择合适的库(如。的理解需要结合其实现变体和应用场景。,去除非必要功能(如多线程、复杂文件系统)。,改用静态数组或内存池避免碎片。

2025-03-29 22:59:14 799

原创 Git回退文件到指定提交

此时文件已恢复到目标提交的版本,提交变更以保存这次回退操作。查看提交历史,找到你要回退到的目标提交的哈希值(例如。命令将某个文件回退到指定提交的版本。两种方法均可实现需求,选择你熟悉的命令即可。替换为你的目标提交哈希,

2025-03-27 15:56:53 950

原创 栈实现队列算法解析

我现在得用C语言写一个用栈实现队列的算法题。首先,我得先回忆一下队列和栈的特性。队列是先进先出(FIFO)的,而栈是后进先出(LIFO)的。所以,用栈来模拟队列的话,可能需要两个栈来配合,一个用来处理入队操作,另一个处理出队操作。那具体怎么实现呢?比如,假设有两个栈,一个输入栈s1,一个输出栈s2。当有元素入队的时候,就直接压入s1。当需要出队的时候,如果s2为空,就把s1里的所有元素依次弹出并压入s2,这样s2的栈顶元素就是队列的第一个元素,弹出即可。如果s2不为空,就直接弹出s2的栈顶。

2025-03-26 09:34:29 711

原创 Linux fority source和__builtin_xxx

启用 Fortify Source:通过条件编译和宏定义,替换标准库函数(如memcpystrcpy等)。安全检查:在编译时和运行时插入缓冲区大小检查,防止内存安全问题。兼容性处理:根据编译器版本和优化等级调整实现方式。典型应用场景是 Linux 内核或安全敏感项目,用于增强代码的安全性。这个宏的作用是为原始函数创建一个别名,使得在替换标准库函数(如memcpystrcpy等)时,仍能保留对原始函数的调用入口。这是 Fortify Source 实现安全检查的关键机制。__typeof__

2025-03-24 23:46:09 652

C语言标准演化:C89、C99与C11的关键变化

内容概要:本文介绍了C语言的发展历程及其不同版本(C89、C99 和 C11)之间的主要区别,详细解释了每个新标准引入的功能和改进,以及对程序员的影响。同时对比了C和C++的区别,并探讨了后者面向对象编程的概念。具体讲解了类、构造函数和析构函数的应用实例。文中特别提及了C11的新特性,如内存对齐控制、泛型宏、线程支持等,还展示了矩阵操作的具体例子以说明封装、继承和多态性的应用。 适用人群:熟悉C/C++语法的基础编程人员;希望深入了解C语言各标准差异的专业开发者。 使用场景及目标:为有经验但可能不了解最新标准化进展的技术人员提供全面指南;帮助初学者掌握从过程化到面向对象思维方式转变所需的知识;展示现代C程序如何利用最新的语言特性进行高效安全的设计。 其他说明:文档还附带了一个简单的矩阵类示例代码,用于演示一些重要的OOP概念和技术点。这有助于读者直观地理解和练习相关知识点。

2025-02-05

AppleNotificationCenterServiceSpecification.pdf

Apple Notification Center Service Specification

2021-08-28

The Apple Media Service.pdf

The Apple Media Service for BLE

2021-08-28

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除