自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最新yolov8环境搭建、推理训练一站式超详细保姆教学

yolov8源码地址往下翻,找到权重文件,点击下载顺便一同放入之前下载的源码里。鼠标右击Project项目空白处,新建python文件,创建一个名为test.py文件,检测pytorch。,选择对应11.x的版本即可,展开后鼠标点击安装包右键(不然会进行一系列邮箱注册繁琐操作)打开PyCharm后,将现有yolov8环境添加到解释器中,右下角点击添加新的解释器。命令弹出对话框后输入命令,查看显卡驱动最高支持的CUDA版本。然后找到源码对应文件,在文件路径处输入cmd,激活之前创建的yolo环境。

2023-11-25 18:37:21 6394 18

原创 Linux开发板配置静态IP

3、此时配置的IP地址只是临时的,当你reboot重启板子上电后,ip地址会消失,因此需要为板子配置静态ip,避免每次上电都要手动配置。4、修改interfaces配置文件,普通用户interfaces文件权限只可读,首先切换到root权限。5、重启网络服务,如果没有network-manager文件,找到该目录下含有network的文件尝试下。文件里添加如下信息,对应于以太网接口配置的网口信息,键盘按Esc,输入:wq 保存退出即可。1、查看网口信息,易知eth0无IP地址。2、首先分配一个IP地址。

2024-04-25 18:52:55 281

原创 c语言关键字解析随笔

只读的变量。

2024-04-20 11:31:07 251

原创 2024蓝桥杯嵌入式模板代码详解

打开工程后,首先点击【System Core】,准备配置RCC和SYS。keil文件里,点击项目名Demo_dzj,添加一个新的组,并改名为bsp。打开项目文件夹,创建名为bsp的文件夹,以后自己编写的代码都存放于此。

2024-04-20 11:26:42 1178

原创 Linux内核启动过程图解

一阶段:内核首先通过找到第一条指令_text的函数入口地址,进入head.S文件并跳转到stext处,保存uboot传入参数、异常级别设置、CPU的初始化,跳转到中,使能MMU、内核重定位、初始化内核任务、设置异常向量表后跳转到(c语言部分)二阶段: 在init/main.c的函数中(对应demsg日志)打印版本信息、体系结构安装、设备树解析、安装命令行参数、系统调用初始化、内存管理初始化、中断时钟定时器初始化、控制台进程信号初始化后跳转到rest_init()三阶段。

2024-04-19 16:25:19 390

原创 SPI总线通讯协议

主设备和从设备都有一个串行移位寄存器,主设备写入一个字节到串行寄存器来发起一次传输,串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。5、发送或接收数据,四线制,一个周期能够接收4位数据,效率提升4倍。CS下降沿是能后,一般等SCLK一个时钟周期,等待其时钟上升沿时。MISO:主设备数据输入,从设备数据输出,从设备发送数据。MOSI:主设备数据输出,从设备数据输入,主设备发送数据。CS:从设备片选信号,由主设备控制,选择需要通信的从设备。

2024-04-19 11:17:07 943

原创 IIC总线通信协议

SCL线的高电平用于传输有效数据,在高电平期间数据被读取或写入。5、

2024-04-18 10:28:41 1135

原创 UART、RS232、RS485通信协议

485接口原理:串口是一种接口标准,规定了接口的电气标准,即物理层的一个标准他们重新定义了电压,阻抗。:不带时钟同步信号SCL线,需要波特率来控制传输速率,双方波特率要一致才能正确传输如UART。串口传输时,首先引脚拉低后,维持波特率输出一位的时间后,开始传输数据,一个字节,从。RS232传输距离有限,最大传输距离标准值为50米,实际上也只能用在15米左右。RS-485最大的通信距离约为1219M,最大传输速率为10Mb/S。进行数据传输,十进制99,0x63转换为0110 0011。最后一位为停止位1。

2024-04-18 10:23:38 291

原创 Linux网络编程二(TCP图解三次握手及四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

ESTABLISHED(数据通信态)—发送 FIN—FIN_WAIT_1 --接收 ACK --FIN_WAIT_2(半关闭)—接收对端发送 FIN—FIN_WAIT_2(半关闭)—回发ACK–TIME_WAIT(只有主动关闭连接方,会经历该状态)—等2MSL时长—CLOSE。A收到B的回复后,检查ACK标志位是否为1,以及ack字段的值是否为B的初始序列号加1。客户端收到服务器的FIN后,发送一个带有ACK标志位(这个不是数据,是控制报文),ACK=1,ack 702表示确认收到服务器的连接释放请求。

2024-04-02 15:05:37 1553

原创 Linux网络编程一(协议、TCP协议、UDP、socket编程、TCP服务器端及客户端)

(User Datagram Protocol),IP负责把数据包送到正确的计算机中,UDP负责把数据包送到正确的程序,UDP不提供数据修复和重发的机制,且无法知道数据包是否送达,数据的确实不重要但是快!16位:目的端口号,如:微信端口号是8080,则送入到微信程序中。),它位于网络协议栈的传输层,负责在通信的两个应用程序之间提供可靠的、面向连接的数据传输服务。②注册端口:1024~49151,随意使用,用于松散的绑定一些程序/服务。4、目的IP:32位对应4字节,Ip地址共4字节,每个字段上限255。

2024-04-02 15:03:05 896 2

原创 虚拟机下的Ubuntu系统,NAT网卡连接不上网络的问题

NTA连接无法上网,如果你试过网上所有教程,检测了Windows环境和Ubuntu环境没问题,且无法启动系统服务、ping网络失败、重置虚拟机网络配置器也无效等种种以下所列原因无法解决,ifconfig无法获取网卡地址ifconfig -a能够查看到网卡。

2024-03-31 17:24:48 285

原创 Linux系统下的文件描述符fd详解

ps查看后台进程资源运行情况,切换到proc虚拟文件系统查看进程信息,进入fd目录查看对应文件描述符fd=3指向的就是打开test.c。即:struct task_struct—>struct files_struct *files—>struct fdtable *fdt—>struct file **fd。编译,且运行打开test.c文件,&:表示后台运行,产生一个进程17985,打印文件描述符fd=3。fd.table.fd指向一个数组,数组元素为指针,指针类型为srtuct file *。

2024-03-21 11:23:53 987

原创 Linux环境下的Ubuntu虚拟机安装VScode超详解

但这种方式,每次都要切换到终端,难免比较麻烦,因此需要配置VScode下python的解释器,点最下面的状态栏的【python 3.8.10 64-bit】->【推荐的项目】首先根据界面需要创建文件夹,点击【打开文件夹】->【右上角创建文件夹】->【test】,打开文件夹后,创建test.py,安装python扩展,运行测试。的文件夹,上图已将Python的配置文件复制到Pyhton_code下,并在。VScode打开名为。

2024-03-21 11:22:49 1364

原创 韦东山嵌入式Liunx入门驱动开发五(定时器、中断下半部、mmap)

从button_fasync 指针中,取出 fasync_struct 结构体,从这个结构体的 fa_file 中得到接收方的PID ,然后使用 send_sigio函数发送信号。也可以清除这个位表示阻塞。启动了FASYNC 功能的话,驱动程序的 button_fasync 就被设置了,它指向的 fasync_struct 结构体里含有 filp里含有PID。按键触发中断,进入中断处理函数,若不断发生机械振动,会不断进入中断处理函数更新定时器超时时间,时间到后进入定时器处理函数,打印GPIO端口信息。

2024-03-03 22:49:40 1128

原创 韦东山嵌入式Liunx入门驱动开发四(异常与中断)

在Linux 系统中使用中断,可以使用request_irq函数为某个中断irq注册中断处理函数handler,handler运行中断的上半部分,并且触发软中断或者把工作放入工作队列,使用线程化来处理中断下半部分。这个函数通常用于注册一个中断处理程序,当中断发生时,会调用指定的中断处理函数来处理中断,而线程中断处理函数则会在一个独立的线程中运行,以避免中断处理函数执行时间过长导致系统性能下降。在Linux 中,中断处理程序的执行也可能会影响进程的调度情况,例如通过唤醒等待中的进程,或者改变进程的优先级等。

2024-03-01 14:04:27 1133

原创 韦东山嵌入式Liunx入门驱动开发三(GPIO和Pinctrl子系统的使用)

注意,pin controller和GPIO Controller不是一回事,前者控制的引脚可用于GPIO功能、I2C功能;即先用pin controller把引脚配置为GPIO,再用GPIO Controler把引脚配置为输入或输出。在驱动代码中使用GPIO子系统的标准函数获得GPIO、设置GPIO方向、读取、设置GPIO值。在设备树中指定了GPIO引脚,在驱动代码中使用GPIO子系统的接口函数。要操作GPIO引脚,先把所用引脚配置为GPIO功能,这通过Pinctrl子系统来实现。

2024-03-01 14:04:07 1019

原创 韦东山嵌入式Liunx入门驱动开发二(设备树、按键驱动)

一个节点的compatile 属性 ,它的值是4者之一:“simple-bus”, “simple-mfd”, “isa”, “arm,amba-bus”, 那么它的子节点(需含compatile 属性)也可以转换为 platform_device。(3) APP得到poll/select 函数的返回结果后,如果确认是有数据的,则再调用read函数,这会导致驱动中的read函数被调用,这时驱动程序中含有数据,会直接返回数据。一个单板启动时,uboot 先运行,它的作用是启动内核。

2024-02-28 09:36:46 740

原创 韦东山嵌入式Liunx入门驱动开发一(Hello 驱动编程、GPIO基础知识、LED驱动、总线设备驱动模型)

对于硬件资源,用结构体来表示;对于硬件的操作,用结构体表示。在内核中有一个虚拟的总线,它有2个链表结构,左边是设备Dev链表,右边是驱动Drv链表。左边的设备链表和右边的驱动链表会进行一一比较(通过platform_match函数),若匹配成功,就会调用中的probe函数。如何进行匹配?(2) platform_device结构体(3) platform_driver结构体总线设备驱动编写程序步骤(1) 分配、设置、注册结构体,在里面定义所用资源,指定设备名字。

2024-02-28 09:36:05 1056

原创 韦东山嵌入式Liunx入门应用开发三(含课后作业、代码详解)

当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL 变为高电平,其他设备就可以继续使用I2C总线了。SMBus 为系统和电源管理这样的任务提供了一条控制总线,使用 SMBus 的系统,设备之间发送和接收消息都是通过 SMBus ,而不是使用单独的控制线,这样可以节省设备的管脚数。数据传输,当主设备发送完8位以后,第9位为ACK应答信号,此时主设备不驱动三极管,而要发应答信号时,从设备驱动三极管,即当A=1;SMBus 是基于I2C协议的,SMBus 要求更严格,SMBus是I2C协议的子集。

2024-02-26 09:23:32 836

原创 韦东山嵌入式Liunx入门应用开发二(含课后作业、代码详解)

输入设备:常见的有键盘、鼠标、遥控杆、书写板、触摸屏等。用户通过这些输入设备与 Linux 系统进行数据交换。输入系统:Linux系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架。框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的API去使用设备。是Linux操作系统的一个输入设备,代表了计算机上的第一个物理输入设备,通常是键盘、鼠标、触摸屏。所有输入设备都被视为文件,以便于使用文件I/O操作来读写或写入输入设备的数据。

2024-02-26 09:22:34 1083

原创 韦东山嵌入式Liunx入门应用开发一(含课后作业、代码详解)

系统调用可以将用户空间的虚拟内存地址与文件进行映射绑定,操作系统可以将一个文件的内容映射到进程的地址空间中,对映射后的虚拟内存地址采用指针的方式读写操作这一段内存就如同对文件进行读写操作一样。我们只需要移植这个字体引擎,调用对应的API 接口,提供字体文件,就可以让freetype 库帮我们取出关键点、实现闭合曲线,填充颜色,达到显示矢量字体的目的。传统的读写文件方式中,对于修改文件内容的步骤:①把文件内容读入到内存中 ②修改内存中的内容 ③把内存的数据写入到文件中。在Linux系统中,一切皆文件。

2024-01-25 14:17:58 980

原创 韦东山嵌入式Liunx入门笔记一

如上述所示,连接好后。首先上电,拨下电源接口附近的开关,看见红灯亮,开机即可。(博主一开始没按,导致一直出错,哈哈哈哈哈)使用MobaXterm软件打开串口,在串口看到“”时(看不见就一直回车刷新,有可能被屏幕数据覆盖了),输入root 并回车即可,如。

2024-01-25 14:15:11 1048

原创 Source Insight 4.0的超实用的常规设置小技巧

Options】->】File type Options】,选择】Auto Indent…】弹出对话框,将】Smart Indent Options】下的两个复选框的√去掉即可。

2024-01-04 10:56:53 605

原创 Ubuntu18.04配置静态ip

运行报错,大多数情况都是层次不对、格式不对、没有空格、名称没写对,请仔细检查。配置完退出后,执行netplan apply,没问题即配置完成。首先查看网卡名、ip地址、网关,找到对应的网卡名并记录其地址。每个人的系统参数不同,仔细对照自己的来修改。

2024-01-04 10:56:00 960

原创 C++提高编程二(STL、Vector容器初识、string字符串)

/vector容器中存放自定义数据类型public:int m_Age;//创建一个Person类的数组容器//创建对象,并调用有参构造函数//向容器中添加数据//遍历容器中的数据it!= v.end();it++){//cout

2023-12-30 14:54:19 848

原创 C++提高编程一(函数模板、类模板)

普通类中的成员函数一开始就可以创建,类模板中成员函数在调用时才去创建。T — 通用的数据类型,名称可以替换,通常为大写字母。建立一个通用类,类中的成员 数据类型可以不具体制定,用一个。1、如果函数模板和普通函数都可以调用,优先调用普通函数。基于b站黑马c++视频做的笔记,仅供参考和复习!2、函数模板 用自动类型推导,不可以发生隐式类型转换。4、如果函数模板可以产生更好的匹配,优先调用函数模板。3、函数模板 用显示指定类型,可以发生隐式类型转换。3、函数模板可以发生函数重载。

2023-12-30 11:55:54 902

原创 C++核心编程四(继承、多态、virtual关键字、文件操作)

例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同。程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化。多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。3、当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,2、抽象类的子类 必须要重写父类中的纯虚函数,否则也属于抽象类。在多态中,通常父类中虚函数的实现是毫无意义的,主要都是。基于b站黑马c++视频做的笔记,仅供参考和复习!

2023-12-29 09:50:16 890

原创 C++核心编程三(初始化列表、静态成员、this指针、成员函数与变量、友元、运算符重载)

运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。在成员函数后面加const,修饰的是this指向以及指针指向的值都也不可以修改。C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针。this指针的本质 是指针常量 指针的指向是不可以修改的。友元的目的就是让一个函数或者类 访问另一个类中私有成员。基于b站黑马c++视频做的笔记,仅供参考和复习!在C++中,类内的成员变量和成员函数分开存储,this指针指向被调用的成员函数所属的对象。

2023-12-29 09:49:34 817

原创 C++核心编程二(类和对象、封装、访问权限、成员属性、构造函数、析构函数、拷贝构造函数、深拷贝与浅拷贝)

代码时,编译器会进行浅拷贝操作,此时p1、p2的指针都指向同一块内存,在执行析构代码时,由于先进后出原则,会导致p2的析构函数先执行,此时堆区数据内存会被释放,后面p1又会再执行依次重复释放内存,但是p2已经释放了,因此为非法操作。私有权限 private 成员 类内可以访问 类外不可以访问 儿子可以不访问父亲的私有内容。个文件,即circle.h、circle.c、point.h、point.c、main.c。③构造函数可以有参数,可以发生重载 ④创建对象的时候,构造函数会自动调用,

2023-12-28 11:21:12 920

原创 C++核心编程一(内存分区、new、引用详解、函数进阶)

*的浅显理解(可能有误,欢迎指正):因为test02()返回值是引用,可能有这么一步,即int &temp = a,返回的是temp这个别名。即存在的关系是一共有3个变量,a是原名,test02()返回值是a的一个别名,ref2也是a的另一个别名。先将x的值取出来,存放入一个临时变量,再给x+1,最后返回临时变量(将亡值所以是右值),++x是左值对x自增后马上返回其本身。易知,const修饰的是ref,即ref为常量,所以指针指向不能发生改变,但是指向的int类型的内存中的值可以改变。

2023-12-28 11:20:45 776

原创 Linux系统内核下的内存映射机制

4G指的是可用范围为4G,不一定能占满,所以能映射到的物理内存实际上很少,只是让进程误以为自己独占4G内存。其次,第二部分以table的值为4索引找到页表里对应的页表4项的内容,项的内容保存的是实际的物理块号4的,找到对应的物理块起始地址0x1000 4000。最后,第三部分通过offset的偏移量256和页表3里面的页表项4的地址相加来找到最终物理地址0x1000 4256,完成内存映射。,所以不同进程里的相同虚拟地址,如0x1234所映射的物理地址是不相同的。在32位操作系统中,程序员首先给出的是。

2023-12-27 09:49:46 999

原创 C++入门编程四(指针、结构体、const修饰指针(深度理解))

语法 struct 类型名称 {成员列表};//1 创建学生数据类型 结构体定义//自定义数据类型,一些类型数据集合组成的一个类型//语法 struct 类型名称 {成员列表}//姓名int age;//年龄int score;//分数}s3;//顺便创建结构体变量名//2 通过学生类型创建具体学生 三种赋值方式//结构体变量创建时struct关键字可以省略Student s1;//结构体变量命名为s1//成员赋值s1.name = "张三";

2023-12-27 09:48:59 1138 1

原创 c++案例汇总

设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员。学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值。最终打印出老师数据以及老师所带的学生数据。设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄。通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序,最终打印排序后的结果。

2023-12-26 22:27:25 394

原创 C++入门编程二(各类运算符、if、switch、while、for循环等语句)

从1开始数到数字100, 如果数字个位含有7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。系统随机生成一个1到100之间的数字,玩家进行猜测,如果猜错,提示玩家数字过大或过小,如果猜对恭喜玩家胜利,并且退出游戏。水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身,例如:1^3 + 5^3+ 3^3 = 153。如果表达式1的值为真,执行表达式2,并返回表达式2的结果;如果表达式1的值为假,执行表达式3,并返回表达式3的结果。

2023-12-26 10:25:36 862

原创 C++入门编程三(数组、冒泡排序、函数)

作用:将一段经常使用的代码封装起来,减少重复代码一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。函数定义里小括号内称为形参,函数调用时传入的参数称为实参。函数的定义返回值类型 函数名 参数列表函数体语句return 表达式//num1 num2并没用真实数据,其为形参return sum;int b = 20;//a b为实参//c接收的是add函数的返回值sunm 即 c = sum;

2023-12-26 10:24:24 929

原创 Word-表格法对齐公式(手把手教学,公式格式从此不再愁)

选项,将表格全部选中,点击右上角【公式】,选择【将所选内容保存到公式库中】,名称输入表格法,点击【确认】即可。7)最后,点击【公式】,上方就会出现表格法的版式。以后编写公式直接点击即可编写,自动对齐。1)鼠标点击【插入】—>【表格】,选择3×1列的表格。,进入公式编辑器中,输入任意字母,如:A,点击。5)表格全选,鼠标右击,选择【无框线】。容纳更长更大的公式**,右边一定要留出。2)鼠标置于中间表格,快捷键输入。3)第三列表格输入**(1-1)

2023-12-25 21:28:29 749

原创 C++入门编程一(基本框架代码、宏定义、标识符、数据类型)

/#define 宏名 替换文本7//#define 宏名 替换文本 # define Day 7“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“Day”为所定义的宏名。“替换文本”可以是常数、表达式、格式串等。在预处理工作过程中,代码中所有出现的“宏名”,都会被“替换文本”替换。这个替换的过程被称为**“宏代换”或“宏展开”**。

2023-12-25 21:26:33 982

原创 Git的基本命令操作超详细解析教程

本地仓库:是指 Git 存储项目历史记录的地方,它保存了项目的每一次提交,每个提交都包含了一个快照和提交信息。首先在main创建main1、2、3分别提交三次,在dev分支中创建dev1、dev2分别提交二次,然后在main中创建main4、main5提交二次。再新创建一个文件file2.txt,进行提交文件时,只提交暂存区的file1.txt, ,-m参数:提交信息。,即查看当前目录下的文件(包括带.的隐藏文件),-a参数:显示隐藏文件。删除的文件需要提交到版本库中,这样版本库中的文件才能被删除。

2023-12-01 16:16:17 1386

原创 Python基础学习快速入门

字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。python直接赋值,不需要定义变量类型。集合是一个无序的不重复元素序列。print**直接进行输出。元组是不能修改的列表,用。

2023-12-01 16:14:06 616

原创 c语言内存管理

5、分配效率不同:计算机在底层提供寄存器存放栈的地址,压栈出栈有专门的指令;堆由c函数库提供,需要有一定的算法去寻找申请足够大的地址空间。1、管理方式不同:堆的申请malloc()与释放free()由程序员来完成,栈由系统编译器自动分配。3、栈在内存中连续分配,不会产生碎片。堆的频繁申请可能造成内存空间的不连续性,产生大量碎片。通常程序访问的是虚拟内存,虚拟内存映射到物理内存的一小部分。4、增长方式不同:栈向内存地址减小的方向增长,堆则相反。1、指针没有指向一块合法的内存,3、指针分配的内存太小。

2023-11-25 18:38:42 451

空空如也

空空如也

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

TA关注的人

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