自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python开启Http Server

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

2023-07-09 21:34:23 1955

原创 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 87576 2

原创 Linux进程空间分配

1. Linux中进程空间的分配情况如下:从上图可以看出,进程的空间分配:与进程相关的数据结构(页表、内核栈、task) ---> 物理内存 ---> 内核代码和数据 ---> 用户栈 ---> 共享库的内存映射区 ---> 运行时堆 --->未初始化数据段.bss ---> 已初始化数据段.data ---> 代码段.text2. 进程的堆栈大小:32位Windows,一个进程栈的默认大小是1M,在vs的编译属性可以修改程序运行时进程的栈大小

2020-12-09 15:23:03 669 1

原创 树莓派搭建kodexplorer

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

2020-10-24 16:17:24 716

原创 Wireshark之Lua插件

在ICT(ICT,information and communications technology)人员用于网络分析的兵器库中,wireshark无疑是倚天剑,虽历史悠久,其锋利程度丝毫不减,由于开源,便于用户二次开发,这就使得此剑的颜值、功能都近乎完美。如果能够熟练的使用此剑,对于行走江湖也是百利而无一害。对于当下的主流协议wireshark都有自带解析插件,如IP、ARP、TCP、UDP、HTTP、DHCP等。但是实际应用中,这些协议通常只是我们传输数据过程的载体,有不少软件之间的通信协议都是私有

2020-06-08 21:44:17 2876

原创 gcc编译选项`nostdlib`

具体来说,当你编译一个C程序生成可执行文件时,编译器通常会在你的代码上加上一些被称为启动文件的代码(如crt1.o, crti.o, crtend.o, crtn.o等),这些都是标准库文件。因此,当你使用 -nostdlib 选项时,你需要自己提供所有需要的函数和库,包括启动代码和任何你的程序需要的库函数。在这种情况下,如果程序需要标准库的功能,你需要自己提供相应的实现或者使用其他替代方案。通常情况下,编译 C 代码时会自动链接标准 C 库,以便程序能够使用标准库中提供的函数和功能,比如。

2024-04-23 20:58:10 78

原创 Linux打开html

找到 HTML 文件所在的文件夹,然后双击该文件即可在默认的 Web 浏览器中打开。其中,xdg-open 命令会自动打开默认的 Web 浏览器,并在其中打开指定的 HTML 文件。在 Linux 系统中,您可以使用默认的 Web 浏览器打开 HTML 文件。另外,如果您想在终端中使用命令行启动一个特定的浏览器来打开 HTML 文件,也是可以的。需要注意的是,在终端中打开 HTML 文件时,您需要保证系统中已经安装了相应的浏览器,并且该浏览器在 PATH 环境变量中。

2024-04-23 16:34:01 108

原创 在Linux中,按上下左右键为什么变成^[[A^[[B^[[C^[[D

在Linux中,当你按下键盘上的箭头键时,通常会发送相应的转义序列给终端。这些转义序列告诉终端程序如何解释按键的含义。这样的字符,而不是实际的按键响应,这通常是因为终端程序无法正确解释接收到的转义序列。可能的原因包括终端设置不正确、终端类型不匹配或者终端程序本身存在问题。终端程序收到这些序列后,会将其解释为相应的动作,比如移动光标或者执行其他的终端操作。表示Escape字符,也就是ASCII码值为27的字符。实际上是转义字符(Escape Character)的表示,通常以。表示光标上移的命令。

2024-04-23 09:57:53 112

原创 Linux coredump原理

Linux CoreDump 生成原理剖析gdb调试coredump(原理篇)一文读懂 | coredump文件是如何生成的Crash/coredump 原理与实例

2024-04-13 23:54:19 114

原创 Linux gdb调试原理

原来gdb的底层调试原理这么简单gdb的工作原理一文带你看透 GDB 的 实现原理 – ptrace真香Ptrace 详解

2024-04-13 23:47:32 109

原创 kmalloc vs vmalloc

的主要区别在于对内存连续性的要求以及适用场景。如果你需要分配小块且物理内存要求连续的内存,可以使用。是两种不同的内存分配函数,它们用于在内核空间中分配内存,但它们有着不同的用途和特性。如果你需要分配大块的虚拟内存,而不关心物理内存的连续性,则可以使用。在 Linux 内核中,

2024-04-13 23:38:14 154

原创 Linux内存管理单元

它的主要原理是通过硬件和操作系统的结合,提供了一种虚拟内存系统,使得程序可以访问比物理内存更大的地址空间,并且在程序之间提供了一定程度的隔离和保护。虚拟内存管理:MMU通过将逻辑地址转换为物理地址,允许操作系统将内存中的数据分割成多个页(通常是4KB或更大),并且按需将这些页加载到物理内存中或从物理内存中卸载,从而实现了虚拟内存管理。总的来说,MMU是操作系统中的关键组件之一,它通过将逻辑地址映射到物理地址,并提供虚拟内存管理和访问控制,使得操作系统能够更有效地管理内存,提高系统的安全性和性能。

2024-04-13 23:35:51 188

原创 select、poll、epoll

select, poll 和 epoll 都是用于 I/O 多路复用的机制,允许一个进程监视多个文件描述符的状态变化。

2024-04-13 22:39:11 418

原创 零拷贝和mmap

一文读懂零拷贝技术一文读懂 mmap 原理

2024-04-13 17:53:10 81

原创 valgrind和asan

Valgrind的核心组件之一是Memcheck,它是一个用于检测内存错误的工具。因此,在使用Valgrind进行内存调试和性能分析时,需要确保机器环境有足够的内存,并考虑到可能的性能影响。总的来说,Valgrind通过创建虚拟环境、跟踪内存块、记录状态和使用特定机制来检测和分析内存错误和性能问题,为开发人员提供了强大的工具来确保程序的正确性和性能。综上所述,ASan通过内存情况追踪、内存访问保护、编译器插桩和运行时库等技术手段,实现对内存错误的检测和定位,从而帮助开发人员提高程序的稳定性和安全性。

2024-04-05 23:30:13 823

原创 进程调度策略

NuttX支持三种策略:调度策略又称调度算法,根据系统的资源分配策略所规定的资源分配算法。总的来说,Linux 的进程调度策略更加灵活和通用,适用于各种不同的场景,而RTOS 则更专注于提供可预测的实时性能,以满足实时嵌入式系统的需求。在这种策略中,每个任务都被分配一个固定的优先级,高优先级的任务始终优先于低优先级的任务执行。:Linux 内核是一个完全抢占式的内核,这意味着任何时候都可以抢占当前正在执行的进程,以便更高优先级的进程能够立即执行。:RTOS 的主要设计目标之一是提供可预测的实时性能。

2024-04-01 23:19:37 855

原创 为什么 Linux 不是实时操作系统

然而,通过一些实时扩展和优化技术,如PREEMPT-RT和Xenomai等,可以在一定程度上提高Linux的实时性能,使其在某些对实时性要求不那么严格的应用场景中更具竞争力。这个过程需要一定的时间,而在RTOS中,进程切换几乎是无延时的。由于Linux内核并非专为实时任务设计,因此这种调度策略在面对实时任务时可能会出现问题,无法保证实时任务的及时响应。Linux 不是实时操作系统的主要原因是其设计目标与实时操作系统的需求不完全一致,导致 Linux 内核在处理实时任务时无法提供严格的时间保证和确定性。

2024-04-01 00:20:05 462

原创 CPU Cache

特别是在多核或多处理器系统中,volatile关键字并不能防止CPU缓存中的数据不一致性问题,因为不同的CPU核心可能有各自的缓存,而volatile只能保证与内存的交互。一般来说,CPU缓存的大小越大,其性能越好,因为更多的数据和指令可以被缓存,从而减少了对主存储器的访问。在嵌入式开发中,"cache"通常指的是处理器内部的缓存,特别是指的是CPU缓存。此时,这个内存区域中的数据将被加载到CPU的缓存中,并且在接下来的访问中,访问这个内存区域的数据将从缓存中获取,而不是直接从主存中读取。

2024-03-31 09:31:06 930

原创 信号量或互斥锁

当其他线程释放了锁或增加了信号量的计数值时,系统会从等待队列中选择一个等待的线程唤醒它,使其继续执行。一旦有其他线程释放了锁或增加了信号量的计数值,操作系统会从等待队列中选择一个等待的线程唤醒它,并将其状态从阻塞状态改变为就绪状态,使其可以继续执行。:在等待队列中的线程会等待其他线程释放锁或增加信号量的计数值。时,如果锁或信号量当前不可用,该线程会被阻塞,并加入到等待该锁或信号量的等待队列中。总的来说,等待队列的管理和线程的唤醒是由操作系统或线程库来完成的,这样可以确保线程的阻塞和唤醒操作是高效而正确的。

2024-03-26 09:49:36 471

原创 stm32启动文件里面的__main和主函数main()

但由于__main函数除了调用main()以外在前后还有初始化堆栈和库函数、调用exit()的操作,而我这里直接把__main函数替换成自己想要运行的函数则不包含那些操作,换句话说启动文件前面设置的堆和栈大小都白设置了,库里面有的值如果有设置的也白设置了,现在都成了默认的值,还有exit()里面有啥特别的用处也不了解,等于把一个本来该有但未知用途的模块删了,这肯定是不行的。__rt_entry()该函数先初始化堆栈和库函数,然后即调用主函数main(),从而进入用户程序。二、修改主函数名称的方法。

2024-03-24 21:19:34 518

原创 Linux ld链接器

需要注意的是,修改链接脚本和内存布局是一个复杂的过程,需要对链接器和目标平台有深入的理解。需要注意的是,这些方法通常需要对编译器,链接器,汇编语言和操作系统有深入的理解。:在运行时,你可以使用操作系统的内存管理功能(如 mmap,VirtualAlloc 等)来动态地分配和控制地址空间。是 GNU 的链接器,它是 gcc 工具链的一部分,通常会随着 gcc 一起安装在你的系统中。如果你想要修改默认的内存布局,你可以编写自己的链接脚本,并在链接时使用。如果你想使用自定义的链接脚本,你需要在。

2024-03-23 18:52:01 403

原创 fix --nanopb_out: protoc-gen-nanopb: Plugin failed with status code 1.

这个错误是由于你的 protobuf 版本过高,而你的生成的代码需要一个较低版本的 protobuf。如果以上方法都不能解决你的问题,你可能需要使用。版本 >= 3.19.0 来重新生成你的代码。

2024-03-23 14:42:06 412

原创 Linux使用strlcpy

如果你的系统中没有安装libbsd库,你可能需要先安装这个库。函数通常在libbsd库中。因此,你需要在编译命令中加上。头文件,但是在链接过程中还需要链接到包含。在Linux系统中,

2024-03-20 16:32:40 141

原创 解决ChatGPT发送消息没有反应

今天照常使用ChatGPT来帮忙码代码,结果发现发出去的消息完全没有反应,即不给我处理,也没有抱任何的错误,按浏览器刷新,看起来很正常,可以查看历史对话,但是再次尝试还是一样的没反应。打开浏览器的无痕模式打开,打开一个新的窗口,然后进入ChatGPT,以Chrome浏览器为例,如下图,点击右上角的三个点,点击“打开新的无痕式窗口”,然后进入ChatGPT。开始还以为是账号被封了,但是经过研究分析,发现出现这个问题的原因,应该是点击了登录后顶部的弹窗邀请,[加入alpha测试]了,并且选择了中文语言。

2024-03-09 18:36:32 2011

原创 #ifndef 和 #pragma once的区别

受 C/C++ 语言标准的支持,不受编译器的任何限制,可以避免名字冲突,移植性好,但如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。因此,选择使用哪种方式主要取决于你的具体需求和环境。的代码更简洁,避免了宏名冲突,提高了编译效率,但它的兼容性可能不够好,因为并不是所有的编译器都支持它。不能保证多个文件的拷贝不会被重复包含,但这种错误更容易发现,且。大大提高了编译效率。

2024-03-04 20:19:50 121

原创 Linux包管理dpkg、apt和snap

都是Ubuntu系统中用于软件管理的工具,但它们在功能和使用上有一些区别。是用户最常接触的包管理工具,用于大多数软件的安装和管理。则在一些特定情况下用于安装独立的、可移植的应用程序。

2024-03-01 17:03:10 381

原创 学习pybind11:Hello World例子

这里的CMakeLists.txt中,通过加载pybind11目录,会把pybind11/tools/pybind11Tools.cmake中的pybind11_add_module()函数引入。你编译出来的python库,其实就是一个.so结尾的动态库,也就是python里的一个module。首先要明白pybind11是干啥的,对于一个C/C++库,可以用pybind11封装它的接口为Python接口,这样得到一个python库,就可以把功能强大的库丢给使用python的boys & girls使用了~

2024-02-26 20:20:44 302

原创 cmake build

请注意,这些命令和选项的确切使用方式可能会因CMake版本和项目结构而有所不同。在实际使用中,你可能需要根据项目的具体情况进行适当的调整。因此,这个命令的目的是在当前目录中查找 CMakeLists.txt 文件,并将构建系统文件生成到一个名为。这是使用 CMake 的命令行工具来配置项目的命令。的子目录中,为后续的编译过程做准备。

2024-02-26 19:13:29 450

原创 ubuntu 查询流量使用

这个命令会显示一个实时更新的列表,列出了每个进程的发送和接收流量。你可以通过这个列表来找出在最近24小时内使用流量最多的应用。命令来查看每个进程的网络流量使用情况。这个工具可以显示每个进程的实时网络流量,从而可以找出使用流量最多的应用。统计的是从系统启动开始的流量数据,如果在这7天内有过系统重启,那么重启前的流量数据将不会被包含在内。另外,如果你有多个网络接口,你可能需要指定你想要监视的接口,比如。请注意,这个命令需要root权限才能运行,所以在命令前面加上。命令来查看过去7天的网络流量使用情况。

2024-02-22 09:52:08 924

原创 1.5v的电池电压低于多少v等于没电

例如,如果你有一个5000mAh的电池,它供电的设备功率是0.75W,电压是5V,那么理论上这个电池可以供电33.33小时。如果电池的容量是5000mAh,那么它可以提供5000mA(即5A)的电流供1小时使用,或者提供0.15A的电流供5000mAh/0.15A=33333mAh/A=33.33小时使用。这个计算假设电池的电压在整个使用过程中都保持不变,但实际上电池的电压会随着电量的消耗而逐渐下降,所以这只是一个理论上的估计。这个计算是基于功率(P)和电流(I)之间的关系,以及电池的容量(C)。

2024-02-19 18:54:23 1557

原创 英伟达(NVIDIA)和CUDA

虽然CUDA有开源的部分,例如CUDA Toolkit中的某些库和工具可能是开源的,但它也依赖于NVIDIA专有的API和闭源的软件/驱动程序。CUDA是英伟达推出的一种重要的并行计算架构和编程模型,它使得开发者能够更加高效地利用英伟达的GPU进行通用计算,加速各种计算密集型任务。尽管两者在业务上有一定的交集,比如微软的一些产品可能会使用英伟达的图形处理技术,或者英伟达可能会为微软的操作系统或游戏平台提供优化支持,但它们仍然是两家独立的公司,有着各自的发展战略和业务重点。

2024-02-16 22:59:42 1309 1

原创 系统调用的概念

在嵌入式开发、操作系统开发以及一般的系统编程中,系统调用是一个核心概念。它允许用户空间程序请求内核执行某些操作,如打开文件、读写数据、创建进程等。这些操作通常需要特殊的权限或访问硬件资源,因此不能直接在用户模式下执行。

2024-02-16 22:30:05 901

原创 上下文切换(context switch)

上下文切换(context switch)是操作系统在处理多任务时的一个核心概念。它指的是操作系统在切换执行不同的进程或线程时,需要保存当前任务的执行上下文(包括CPU寄存器的状态、程序计数器、堆栈指针等),并恢复下一个任务的执行上下文。这个过程需要CPU的参与,因为CPU是执行指令和处理数据的核心。上下文切换通常涉及以下几个步骤:中断或调度决策:上下文切换通常是由中断(如时钟中断)或调度器的决策触发的。当中断发生时,CPU会暂停当前任务的执行,并跳转到中断处理程序。调度器则负责决定哪个任务应该在下

2024-02-16 22:12:38 395

原创 ChatGPT和LLM

从技术上来说,ChatGPT是一个基于Transformer网络结构的文本生成模型,它采用了强大的预训练模型,并通过对历史对话记录的学习,可以生成类似人类对话的自然语言表达。首先,LLM是一个更为抽象的概念,它包含了各种自然语言处理任务中使用的各种深度学习模型结构。LLM是指可以处理大规模自然语言数据的语言模型,它通常由大量的参数(十亿或更多)的神经网络组成,并使用无监督或半监督学习对大量样本进行训练。ChatGPT就是基于这种大型语言模型的一种应用,它利用LLM的能力来生成类似人类对话的自然语言表达。

2024-02-16 20:56:48 867

原创 RISC-V和ARM

ARM 是一种专有的指令集架构,众多使用ARM架构的厂商,只能根据自身需求,调整产品频率和功耗,不得改变原有设计。ARM架构和RISC-V架构都源自1980年代的精简指令计算机RISC,两者最大的不同就在于其推崇的大道至简的技术风格和彻底开放的模式。而ARM是一种专有的指令集架构,使用ARM架构的厂商,只能根据自身需求,调整产品频率和功耗,不得改变原有设计。总的来说,虽然大部分的编程工作都可以在不同的处理器架构上进行,但是在进行底层编程时,理解处理器架构的差异是非常重要的。而ARM有超过1000条指令⁶。

2024-02-15 22:29:05 918 1

原创 Gcc多版本安装和切换

安装 gcc13 和 g++13(ubuntu22.04)安装 gcc9 和 g++9(ubuntu18.04)输入需要作为默认编辑器的gcc版本的编号 1-3。注:最后那个数字代表优先级,默认选优先级高的,添加本地source。

2024-02-05 16:17:35 313

原创 I2S、I2C、SPI和UART的区别

在嵌入式系统中,I2S(Inter-IC Sound)、I2C(Inter-Integrated Circuit)、SPI(Serial Peripheral Interface)和UART(Universal Asynchronous Receiver-Transmitter)是常见的通信协议,用于连接不同的设备和传输数据。选择正确的协议取决于应用的数据传输需求和硬件设备的兼容性。在选择使用这些协议时,需要考虑应用的要求、数据传输速率、距离、功耗等因素。当选择通信协议时,要考虑应用的特定需求。

2024-02-01 23:03:51 730

原创 grep查找过滤

请注意,这种方法并不总是绝对可靠,因为进程的命令行参数可能包含 “corp” 或 “vscode”,而不仅仅是进程的路径。这个正则表达式的意思是匹配以 "), " 结尾的行,后面可以有任意数量的空白字符。这个正则表达式的目标是匹配以 "), " 结尾并且后面紧跟着零个或一个回车符的行。如果你只想匹配以 “),” 结尾并且后面紧跟着回车换行符的行,你可以使用以下。来过滤进程,并且希望不包含包含 “vscode” 路径的进程,你可以使用。请根据你的具体情况调整正则表达式,确保排除你想要忽略的路径。

2024-01-27 18:09:10 255

原创 真随机数和伪随机数

在实际应用中,许多情况下伪随机数足够满足需求,因为它们更容易生成且成本较低。真随机数的生成通常需要特殊的硬件设备或物理过程,并且相对较慢。因此,选择使用真随机数还是伪随机数通常取决于应用的具体需求和性能要求。真随机数和伪随机数是两种不同类型的随机数生成方法,其主要区别在于随机性的来源和生成过程。

2024-01-27 18:02:17 553

原创 硬编码和软编码

"硬编码"和"软编码"是在软件开发和编程中常用的两个术语,它们涉及到如何处理和组织代码中的常量或配置。这样,通过修改配置文件或在运行时传递参数,就可以更灵活地调整超时时间,而不需要修改源代码。举个例子,考虑一个程序中的超时时间。

2024-01-27 18:01:24 229

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关注的人

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