自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 c_cpp_properties.json等三个文件解释

不建议太小白的人看啊在 Visual Studio Code 中使用 C 语言进行编程时,通常会看到一些特定的配置文件。这些文件是用来帮助你配置开发环境、调试程序等就是这三个文件首先是c_cpp_properties.json:这是 Visual Studio Code 配置 C/C++ 开发环境的文件。它包含了关于代码的编译器设置、包含路径、定义和其他与编译相关的信息。例如,指定了头文件的路径,defines可以用于定义编译时的宏。

2025-03-13 00:33:15 466

原创 rk3588部署deepseek

111我的方法肯定有很多漏洞,但是我其他手段要么加载不出来,要么网络超时,呜呜呜,大伙如果有别的好方法,请求各位指导我,不甚感激!上述是结果,和我一样就行(我期间加了一些依赖,但是这些依赖您可以通过ai解决的)然后,我们通过docker使用客户端(ctrl+d就可以退出来啦~)我的输出如下(当然,1.5b的大模型,咱不指望他多么厉害)我们使用docker代替安装(要下东西的,等待一下~)

2025-03-07 02:01:54 170

原创 C语言--枚举

表示“红色”,这样可读性和维护性不高,也就是所谓的“今天上帝和我知道,明天只有上帝知道”)枚举是C语言中简化整数管理的工具,特别适合表示。,避免直接使用“魔法数字”(比如直接用。合理使用可以显著提升代码质量。枚举是一种自定义的数据类型,它把一组。:不同枚举类型的成员可以有相同值。

2025-02-24 13:02:46 386

原创 raWARNING: Retrying (Retry(total=3,connect=None, read=None巴拉巴拉的报错

最近总有人问我这种报错。就这种黄黄的,基本就是。

2025-02-22 15:05:06 277

原创 ioctl函数讲解

每个设备驱动会。

2025-02-22 14:58:45 1243

原创 锁机制讲解

死锁指的是一组进程或者线程因为争夺资源而导致互相等待无法继续执行的状态,通常是因为某些条件同时满足,导致进程无法继续推进导致的。为了确保数据的正确性,操作系统提供了多种锁机制(Locking Mechanisms),用于。锁的类型很多,不同的场景适用于不同的锁。这时,P1和P2都在等待对方释放资源,形成了一个死锁。我在win上跑了一下,效果就是偶尔是100000,偶尔是其他随机值。P1获得了资源R1,并且正在等待资源R2。P2获得了资源R2,并且正在等待资源R1。:如果锁被占用过久,会浪费 CPU 资源。

2025-02-18 10:01:29 668

原创 现代多核 CPU 的变化

这对操作系统内核的进程管理、同步机制以及调度策略都带来了新的挑战和优化方案。机制,在不同进程之间切换,从而实现多任务并发。随着 CPU 技术的发展,现代计算机普遍采用。:即使有写操作,读线程仍然可以继续读取旧数据。的场景,例如 Linux 内核的。:读操作几乎无锁,避免了锁争用。时代,系统的所有进程都是。,但也带来了并发访问的挑战。由于多个 CPU 核心可以。现代CPU都具备多个。,实现真正的并行计算。

2025-02-17 13:50:33 489

原创 特权级(Ring)机制讲解

特权级(Privilege Level)是现代CPU架构中用于管理不同执行环境权限的一种机制,主要用于。了解特权级机制的核心目的是为了更好地理解内核的安全性、系统调用过程以及底层CPU的权限管理。注意:在大多数现代操作系统(如Linux、Windows),实际上只使用。CPU切换到Ring 0,跳转到内核定义的系统调用处理函数。用户态进程不能直接进入内核态,必须借助。内核处理完请求后,返回用户态继续执行。来区分不同级别的权限,其中。大多数现代CPU使用。

2025-02-17 13:28:46 757

原创 Unix内核的进程管理模式

这里可以类比为银行:普通客户只能在营业大厅(用户态)办理常规业务,通过柜台(系统调用)与银行职员(内核态)进行互动。银行职员持有万能钥匙,能够进入金库(内核),执行高级操作(如资源分配和硬件访问)硬件设备发出中断信号时,内核会处理中断。中断处理是异步触发的,常见的有时钟中断(调度器触发进程切换)、键盘中断(读取按键数据)等。当一个进程执行时,另一个进程可能因中断、系统调用或异常而被暂停。系统调用是程序主动请求服务的机制,通常是同步触发。示例:用户态程序通过系统调用请求退出。

2025-02-17 10:59:20 544

原创 C++学习:类和对象(三)

构造函数(Constructor)是在创建对象时自动调用的特殊成员函数,用于初始化对象的成员变量。构造函数的名称与类名相同,没有返回类型封装(Encapsulation)是将数据和操作数据的方法绑定在一起,保护对象的内部状态不被外部直接访问和修改。它是面向对象编程的基本特性之一static友元是被类授予访问其私有和保护成员权限的函数或类。使用friend关键字声明在一个类的定义中定义另一个类,称为内部类或嵌套类没有被命名的临时对象,通常在表达式中创建,使用完后立即销毁。

2024-10-31 22:59:07 1188

原创 梯度下降算法

梯度下降(Gradient Descent)是一种一阶优化算法,用于在参数空间中找到使目标函数取得最小值的参数。其核心思想是:沿着目标函数梯度的反方向(即下降最快的方向),以一定的步长更新参数,直到达到最小值。

2024-10-31 22:03:01 1086

原创 C++学习:类和对象(二)

在C++中,每个类都有一些特殊的成员函数,如果程序员没有显式地声明,编译器会自动为类生成这些函数,这些函数称为默认成员函数构造函数(Constructor)是在创建对象时自动调用的特殊成员函数,用于初始化对象的成员变量。构造函数的名称与类名相同析构函数(Destructor)是在对象生命周期结束时自动调用的特殊成员函数,用于释放对象占用的资源(如内存、文件等)。析构函数的名称是在类名前加上符号拷贝构造函数(Copy Constructor)是使用同类的另一个对象来初始化新对象时调用的构造函数。

2024-10-29 00:44:21 1301

原创 C++学习:类和对象(一)

面向过程编程(Procedural Programming)是一种以过程(或函数)为中心的编程范式。程序被视为一系列按顺序执行的步骤,主要通过函数对数据进行操作执行顺序明确:程序按照代码书写的顺序执行侧重算法:重视具体的操作步骤和实现流程代码重用性低:相似的功能需要重复编写代码计算数组元素的平均值i < SIZE;++i) {cout

2024-10-28 23:56:45 2045

原创 C++学习:入门篇

关键字是C++语言保留的单词,它们具有特殊的含义,不能用作标识符(如变量名、函数名等)命名空间(namespace)用于组织代码,避免命名冲突。C++标准库中的所有函数和类都被定义在std(standard)命名空间中。当我们使用标准库的功能时,需要指定命名空间缺省参数(默认参数)是在函数声明中为参数提供默认值。当调用函数时,如果未提供该参数的值,则使用默认值返回类型 函数名(参数类型 参数名 = 默认值, ...);默认参数必须从右向左依次声明,即先声明有默认值的参数"

2024-10-28 00:39:27 512

原创 信号与系统学习:周期信号的频谱

对于周期为 T 的信号 x(t),其傅里叶级数的复指数形式为: ​​​​​​​ ​​​​​​​ 其中:考虑一个周期为 T 的矩形脉冲信号 x(t),在每个周期内,脉冲宽度为 τ(τ

2024-10-24 23:07:17 3570

原创 信号与系统学习:傅里叶级数

傅里叶级数是一种数学。

2024-10-24 21:29:10 3221

原创 Linux:文件IO

的核心思想是让进程在执行 I/O 操作时不必等待操作完成,从而可以并发执行其他任务。通常的同步 I/O 操作是阻塞式的,也就是当一个 I/O 请求发出后,进程会被挂起,直到请求完成。的主要功能是将文件或设备映射到进程的虚拟地址空间,从而能够像访问内存一样对文件进行读写操作。系统调用的重复数据拷贝,极大地提高了文件 I/O 的效率。,并赋予该文件的拥有者读写权限,这里的S_IRUSR。函数用于打开文件并返回文件描述符,它的原型如下。在 Linux 中,文件 I/O 的核心概念是。:表示文件所有者具有写权限。

2024-10-24 00:52:07 1110

原创 C数据结构:树(比较详细)

红黑树是一种自平衡的二叉搜索树(BST),它的主要目标是通过一些规则来确保树的高度保持相对较低,这样查找、插入和删除操作的效率会更高。树的平衡性越好,操作的时间复杂度就越接近 O(log⁡n),其中 n 是树的节点数。

2024-10-23 00:25:31 1336

原创 深度学习:Matplotlib篇

Matplotlib 是一个广泛使用的 2D 绘图库,它可以用来在 Python 中创建各种静态、动态和交互式的图表。无论是科学计算、数据可视化,还是深度学习模型的训练与评估,Matplotlib 都能提供强大的图形展示功能。在深度学习领域,Matplotlib 通常用于可视化训练过程中的损失函数、准确率曲线以及各种训练结果。

2024-10-22 21:08:12 1071

原创 CMake学习(一)

CMake 是一个开源的跨平台自动化构建系统,用于管理软件项目的构建流程。它可以跨平台使用,不依赖于特定的编译器,并且支持多层目录、多个应用程序以及多个函数库的构建管理。CMake 的核心功能是通过配置文件自动生成不同平台的构建文件,简化项目的编译和构建过程注意:CMake 并不是直接的构建工具,而是生成构建系统的工具。CMake 可以生成不同平台、编译器和工具链的构建系统文件,而这些文件再用于编译项目。

2024-10-20 16:35:38 512

原创 opencl学习(一):并行计算概述

在计算机领域,并行性描述了将一个复杂问题分解为多个能够同时处理的子问题的能力。为了实现并行计算,我们需要在物理上能够支持并行处理的硬件设备。典型例子是多核CPU,每个核心都能同时执行算术或逻辑运算任务并行:将问题分解为多个可以同时执行的任务,任务之间彼此独立数据并行:在同一个任务中,各个部分的数据可以同时执行,多个处理单元并行处理数据的不同片段。

2024-10-20 15:49:33 1260

原创 C语言:文件操作

程序文件源程序文件:包含代码的文件,扩展名通常为.c目标文件:由编译器将源代码编译生成的中间文件,扩展名通常为.obj(在Windows系统上)(linux的我之前写过来着)可执行文件:由链接器生成的最终可以直接运行的文件,扩展名为.exe数据文件数据文件是存储数据的文件,数据可以是程序运行时产生的或需要读入程序中的。它们的内容可以是文本、数字、二进制数据等文件名文件路径:指定文件所在的目录位置(如文件名主干:文件的主要名称部分(如myfile文件后缀:文件的类型标识(如.txt.bin。

2024-10-17 22:37:27 836

原创 Linux驱动:关于bootloard的学习(二)

编译工具链:编译工具链是帮助你编译代码的一组工具,最常见的是gcc编译器、binutils工具集和 C 标准库(例如 glibc 或 uClibc-ng)宿主编译工具链:你在开发电脑上使用的工具链,通常用于为 x86 系统编译代码,被称为宿主工具链(host toolchain)。宿主系统是你实际操作的开发机器。交叉编译工具链:因为嵌入式系统的处理器架构与宿主系统不同,你需要一个能够在宿主系统上运行但生成目标系统代码的工具链。

2024-10-17 21:23:45 1101

原创 Linux驱动:关于bootloard的学习(一)

Buildroot 是一个用于嵌入式系统的 Linux 系统构建工具,简化并自动化了构建整个嵌入式 Linux 系统的过程,主要通过交叉编译实现。这意味着它可以生成交叉编译工具链、根文件系统、Linux 内核镜像以及目标设备的引导加载程序。根据需要,Buildroot 还支持灵活选择,仅生成其中某些组件,例如只构建根文件系统或使用现有的交叉编译工具链。对嵌入式系统开发有用。

2024-10-17 01:45:57 578

原创 Linux驱动:第一个app和驱动实验

交叉编译是指在一种计算机架构上编译出可以在另一种架构上运行的可执行程序。通常情况下,我们在 PC(x86 架构)上开发代码,而开发板(如 ARM 架构)则需要运行适配它架构的代码。因此,我们不能直接在 PC 上编译出能在 ARM 开发板上运行的程序,需要使用交叉编译工具链。

2024-10-16 17:53:01 841

原创 深度学习:pandas篇

可以与 Matplotlib 和 Seaborn 集成(后出文讲解,这个知道他是可视化工具就可以啦),实现数据的可视化。特征工程非常重要(以后写),Pandas 可以快速进行数据转换和特征创建。数据归一化和标准化是常见的预处理步骤,以保证模型收敛速度更快,效果更好。和聚合函数可以帮助我们对数据进行分组和汇总,简化数据分析的工作。类似 Excel 的数据透视表功能,可以用于复杂的多维数据分析。可以对 DataFrame 中的列进行重命名,或去除重复的行。是一维的,类似于列表或数组;是二维的,类似于电子表格。

2024-10-16 17:03:41 524

原创 C数据结构:栈和队列

栈是一种 后进先出(LIFO, Last In First Out) 的数据结构。栈中只允许在栈顶进行插入和删除操作,是一种特殊的线性表,其只允许再固定的一端进行插入或者删除元素操作。进行数据插入和删除操作的一段称之为栈顶,另一端称之为栈底应用场景:压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶出栈:栈的删除操作叫做出栈,出数据也在栈顶栈可以通过 数组 或 链表 来实现,相对而言数组的结构更好。因为数组在尾上插入数据的代价较小数组实现代码:栈可以通过静态数组实现。数组的大小通常是预先定义的,栈的操作

2024-10-16 00:28:37 871

原创 高数:罗尔、拉格朗日、柯西中值定理(含matlab代码)

以防你不会使用matlab!!先教一下!三大中值定理!

2024-10-15 22:58:44 1393 3

原创 Linux驱动:关于环境变量的学习

Linux 环境变量是一些存储在操作系统中的键值对,它们为运行中的进程提供配置信息。环境变量常用于指示操作系统如何寻找可执行文件、指定用户目录等。所有进程都可以通过这些变量访问系统中的配置信息。常见的环境变量有PATHHOMEUSER你这么理解也行:环境变量可以理解为系统用来“记住”一些重要信息的小标签,它们存储了操作系统和程序所需要的配置。比如,有的变量告诉系统“我要从哪里找程序”,有的变量告诉系统“当前用户的家(Home)在哪”。这些变量就像系统的小助理,帮助它记住各种事情$HOME。

2024-10-15 16:03:25 563

原创 深度学习:numpy篇

NumPy (Numerical Python) 是 Python 科学计算库,它提供了对多维数组的支持,拥有高效的数组计算、矩阵运算等功能。对于深度学习来说,NumPy 是处理数据、实现前向传播、计算损失和梯度等操作的重要工具。

2024-10-15 15:29:47 1009

原创 C数据结构:顺序表和链表(多代码)

链表的内存管理是动态的,每插入一个新元素时,链表会动态申请新的内存,不需要一次性分配大量空间,内存利用更加灵活。与顺序表不同,链表中的数据元素在内存中并不是连续存储的。:链表在插入和删除元素时效率较高,尤其是在已知要插入或删除的位置的情况下,只需要调整指针即可,无需移动其他节点的数据。:由于顺序表的数据存储在连续的内存地址中,元素之间的存储位置是连续的,因此可以通过数组的下标直接访问任意位置的元素。的方式,即每当需要存储新的数据时,才申请新的内存空间,链表的内存使用量随存储元素数量的变化而动态调整。

2024-10-15 13:05:40 994

原创 Linux驱动:关于进程这个概念(我觉得很详细)

是进程内的一个执行流,线程之间共享同一进程的地址空间(包括代码段、数据段和堆)。,因为在信号处理上下文中调用非异步信号安全的函数可能会产生未定义的行为,信号处理函数应尽量简单,避免使用复杂或非异步信号安全的操作。列显示的是进程的当前状态,显示的是一些状态码,状态码是一个字符或字符组合,用来表示进程的当前情况。是一个数据类型,用于存储进程ID。在进程状态里面,已经列出了常见的状态,现在进一步解释 Linux 下更详细的状态。-----------------日常分割线------------------

2024-10-14 23:04:13 962

原创 C语言代码篇:动态管理的联系人簿(有点难)

这个程序涵盖了 C 语言中许多重要的知识点,包括指针、函数指针、动态内存分配、结构体与指针的结合等,是一个很好的练习项目。可以根据自己的需求来更改噢。

2024-10-14 21:43:28 249

原创 C语言:指针篇(较全面)

1.定义简单来说,指针是一个存储了内存地址的变量。内存中的每一个字节都有一个独特的编号,叫做地址。通过指针,我们可以定位到特定的内存位置,并读取或修改该内存位置的数据。你可以把指针想象成一本书的页码,通过页码找到特定内容。2.指针变量:指针变量是存储某个变量地址的变量。例如,int *p就是一个指向整型变量的指针,它存储的内容是某个整型变量的地址我们也可以通过&(取地址符)取出变量的内存起始地址,把地址存放到一个变量里面而这个变量就是指针变量int a = 1;

2024-10-14 18:07:31 1435

原创 linux驱动:NFS协议,TFTP服务

NFS(Network File System)是一种跨网络访问文件的协议。NFS 采用了 Client-Server 架构,客户端和服务器之间通过RPC(远程过程调用)协议进行通信。RPC 是基于 TCP/IP 协议的应用层协议,它简化了命令和数据的传输。

2024-10-13 18:04:17 755

原创 Linux驱动:简单讲一下gcc/g++、dfb和make/makefile

本文仅作为学习,如果有错误欢迎指正,有雷同算我抄他,我认错如果涉及侵权立马删除小白的话可以跟着操作一下,就当熟悉了,有错误请告诉我,我及时改正。

2024-10-13 16:32:54 914

原创 Linux驱动:基本工具的使用

软件包和包管理器的管理就相当于app和应用商店,不过包管理器不仅仅是用来安装软件包,还可以进行软件包的升级、卸载以及依赖关系的自动管理等。韦东山老师使用的是Ubuntu系统,其打包格式为.deb,所以我们一般使用apt-get 或者apt工具进行包管理,至于dpkg的话,是在其之上增加了自动化功能的工具,apt它能够自动处理依赖关系,所以一般直接用apt了,更加便捷。打开系统设置,打开软件和更新,点击Ubuntu软件,可以看到那个“下载自”就是APT工具的安装源。这是一个窗口式编辑器,注意!

2024-10-13 06:11:57 681

原创 Linux驱动:关于Linux权限的概念(我觉得很全面)

本文仅作为学习,如果有错误欢迎指正,有雷同算我抄他,我认错如果涉及侵权立马删除全文近4000字。

2024-10-13 03:16:04 1440

原创 Linux驱动:我环境配置遇到的一些难点 韦东山老师的imx6ull

BSP(Board Support Package)是板级支持包的简称,它是介于主板硬件和操作系统之间的一层系统软件,是操作系统的一部分,主要目的是为了支持操作系统,使之能够更好地运行于硬件主板。该命令是:使用位于上级目录中的repo工具,根据指定的Gitee上manifest仓库的URL和分支,以及特定的manifest文件,来初始化本地repo客户端的工作目录,并跳过repo工具的完整性检查。桥接是指依据OSI网络模型的链路层的地址,对网络数据包进行转发的过程,工作在OSI的第二层。

2024-10-13 01:37:18 894

原创 linux驱动:Linux基本知识

本文作于学习Linux驱动的前置知识,了解基本指令以及其的用法比较详细了我Linux驱动使用的是韦东山老师的imx6ull-mini开发板 如有任何侵权嫌疑,请联系,立马删除首先介绍一下打开linux终端的快捷键吧(因为韦老师的是Ubuntu的镜像,他自带了图形化界面,有些同学可能不会开启终端):Ctrl+Atl+T就可以打开终端了欢迎各位大佬补充说明,欢迎指错。

2024-10-12 23:59:26 817

空空如也

空空如也

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

TA关注的人

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