自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2023-11-25 18:37:21 18815 44

原创 C++提高编程三(vector容器、deque容器)

判断是否为空—

2024-09-07 12:53:20 425

原创 韦东山嵌入式Liunx驱动大全一

假设程序A要访问临界资源,可能会有中断也来访问临界资源,可能会有程序B也来访问临界资源,那么使用spin_lock_irq()来保护临界资源:先禁止中断防止中断来抢,再禁止preempt防止其他进程来抢。当程序被打断时,由于valid为0,减1后结果为-1,返回值为0,则不执行if语句,返回-EBUSY。互斥量mutex结构体,metex中的count值,1表示unlocked,0表示locked,还有一类值“负数”表示“locked,并且可能有其他程序在等待”。

2024-05-22 16:10:22 1033

原创 Linux系统I2C设备驱动框架

注册、分配空间、初始化定位到中,最后一个参数传参出现问题,因为发送消息数量为1,但是ARRAY_SIZE(msg)为2,就可能导致发送消息为空,通讯超时。将传入的参数修改为1,完美解决!按照模块,编译运行应用程序,成功获取传感器数据PCA9685 接收来自 Jetson 设备 I2C 总线的指令,然后驱动 TB6612 芯片按照 PWM 控制信号对两个 TT 电机,透过改变电流大小去调整电机转速与方向,来执行 Jetbot 小车的移动。PCA9685。

2024-05-22 15:47:40 1283

原创 韦东山嵌入式Liunx驱动大全二

MIPI-DPI (Display Pixel Interface) ,Pixel(像素),强调的是操作单个像素,在MPU上的LCD控制器就是这种接口。使用platform_driver注册,在probe函数里分配fb_info、设置fb_info、注册fb_info、硬件相关的设置。ubuntu系统中,通过grep查找(第一个属性的值没找到),第二个属性找到内核的imx6ull.dtsi文件的第1017行,并打开。韦老师的课比较难,第一遍不知道在说什么,但是坚持看完一遍,再来复习,基本上就水到渠成了。

2024-05-08 17:45:51 1195

原创 基于V4L2框架的摄像头从上层应用到驱动底层移植开发

v4l2-utils 是一个包含一系列与 Video4Linux2 (V4L2) 框架相关的实用程序和库的集合。它们的作用是帮助开发者、系统管理员和用户进行 V4L2 设备的管理、测试、配置和诊断。插入USB摄像头,查看摄像头是否生成,注意会生成2个设备,其中一个可以捕获图像。开始视频显示,设备节点是video0 还是video1需要都尝试下,错误的节点会直接报弹窗报错。(1)开发过程中的第一步要先确定硬件是否正常工作,方便进行后续开发。工具,进行视频显示,实现件监控效果。指令,可以查看指令帮助集。

2024-05-08 17:44:53 1660

原创 嵌入式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 2506

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

只读的变量。

2024-04-20 11:31:07 335

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

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

2024-04-20 11:26:42 2425

原创 Linux内核启动过程图解

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

2024-04-19 16:25:19 843 1

原创 SPI总线通信协议

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

2024-04-19 11:17:07 1744

原创 IIC总线通信协议(含底层细节详解)

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

2024-04-18 10:28:41 1921

原创 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 713

原创 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 1753

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

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

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

2024-03-31 17:24:48 1306 1

原创 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 2144

原创 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 7698

原创 韦东山嵌入式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 1378

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

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

2024-03-01 14:04:27 1332

原创 韦东山嵌入式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 1302

原创 韦东山嵌入式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 1193

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

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

2024-02-28 09:36:05 2051

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

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

2024-02-26 09:23:32 1067

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

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

2024-02-26 09:22:34 1303

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

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

2024-01-25 14:17:58 1339

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

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

2024-01-25 14:15:11 2003

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

【Options】->【File type Options】,选择【Auto Indent…】弹出对话框,将【Smart Indent Options】下的两个复选框的√去掉即可。或许你刚开始设置没什么用,用熟练以后你会发现这个功能就是神器!【Options】->【File type Options】,勾选下图所示选项。显示当前文件头顶的后续完整路径,方便查找、跳转、阅读源码的具体路径。

2024-01-04 10:56:53 3355

原创 Ubuntu18.04配置静态ip

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

2024-01-04 10:56:00 1411

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

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

2023-12-30 14:54:19 906

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

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

2023-12-30 11:55:54 967

原创 Source Insight 4.0 破解(修改文件,无需注册码),手把手教学一步到胃

1、初次下载后,30天期限满无法使用。2、首次下载到期卸载后,无法使用**文件替换破解方法**(网上常见方法),注册表删除不干净的情况。点击【File】->【New File】->【找到Source Insight 4.0安装路径】->【点击文件类型为。到期的时间会发生变化,后面也会显示90天到到期,而至于是否永久生效于2030年,需要90 days后才能得知。如果硬盘性能欠佳,搜索时间慢,首先需要进入【此电脑】->【查看】->【勾选隐藏项目】,才能看见。

2023-12-30 11:41:50 10585 18

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

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

2023-12-29 09:50:16 925

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

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

2023-12-29 09:49:34 895

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

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

2023-12-28 11:21:12 978

原创 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 820

原创 Linux系统下的进程地址、内存分区、映射机制

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

2023-12-27 09:49:46 1371

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

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

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

原创 c++案例汇总

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

2023-12-26 22:27:25 532

原创 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 946

空空如也

空空如也

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

TA关注的人

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