- 博客(124)
- 收藏
- 关注
原创 vscode配置
界面左上角选择"文件->首选项->设置",进入设置界面,选择"文本编辑器->Rulers->在setting.json中编辑",或者直接所搜rulers。
2024-11-28 01:00:48
477
原创 yolov8.1超简单环境搭建、标注、训练、转onnx、转输出维度
(最新的yolo8改用默认GPU版的onnxruntime,要安装一下下面的库,否则ONNX转换会有警告)gitub镜像下载地址:https://hub.nuaa.cf/shouxieai/infer。
2024-07-25 23:59:33
393
原创 yolo-seg模型后处理
对于YOLOv5-seg模型,其输出与此类似但也有所不同。请注意,这里给出的是YOLOv8-seg模型的输出格式,如果问题中指的是其他版本的YOLOv-seg模型(如YOLOv5-seg),那么输出格式可能会有所不同。另外,值得注意的是,为了从模型的输出中获取有意义的结果,通常需要进行一系列的后处理步骤,包括置信度阈值处理、非极大值抑制(NMS)以及掩膜数据的处理和应用等。为了处理YOLOv8-seg模型输出的掩膜(mask)数据,你需要首先理解输出的结构,并从中提取出相应的掩膜信息。
2024-07-05 00:13:54
1391
原创 优秀的C++项目代码目录结构
对于已编译好的库,使用find_library()查找并链接位于external_libs/中的库文件。当需要链接已编译好的库时,项目主CMakeLists.txt应能根据当前使用的工具链找到对应的库文件进行链接。这样的项目结构能够有效地管理不同工具链编译的库,无论是源码编译还是使用预编译库,都能确保项目在切换工具链时能够顺利构建。一个优秀的C++项目代码目录,涉及到使用不同工具链编译的库时,应确保库的管理和编译过程与项目主体代码的构建相协调,同时考虑到不同库可能存在的平台依赖和版本差异。
2024-04-15 20:45:26
1619
原创 线程安全的unordered_map
使用 C++11 标准库中的 std::shared_mutex 实现读写锁来保护 std::unordered_map,允许多个线程同时读取 unordered_map,但只允许一个线程写入 unordered_map,可以提高并发性能。std::unordered_map 是 C++ 标准库中的哈希表实现的关联数组,它本身不是线程安全的,多个线程同时访问和修改同一个 unordered_map 可能会导致数据竞争和未定义行为。
2023-07-03 21:09:30
3177
原创 EIP之数据发送
在 OpENer 中,可以使用 BringupNetwork 函数初始化设备的网络接口,如果设备的网络配置是动态获取的,则可以启动 DHCP 客户端获取网络配置信息。如果连接状态为已建立,并且连接是消费者连接或服务器端连接,则检查连接的不活动监视器是否已经超时,如果超时,则关闭连接,并调用连接超时函数来通知应用程序连接已经关闭。如果连接状态为已建立,并且连接是生产者连接,则检查生产抑制计时器是否已经过期,如果过期,则将计时器重置,并允许连接发送数据。如果连接状态为已建立,则检查连接是否需要发送数据。
2023-06-17 19:19:16
2216
2
原创 交叉编译--build、--host、--target、--prefix
./configure --build=编译平台 --host=运行平台 --target=目标平台 [各种编译参数]查看--build=编译平台 --host=运行平台 --target=目标平台参数
2023-05-12 20:59:49
2465
原创 bmp图片处理
一般的bmp图像都是24位,也就是真彩。每8位为一字节,24位也就是使用三字节来存储每一个像素的信息,三个字节对应存放r,g,b三原色的数据,每个字节的存贮范围都是0-255。那么以此类推,32位图即每像素存储r,g,b,a(Alpha通道,存储透明度)四种数据。8位图就是只有灰度这一种信息,还有二值图,它只有两种颜色,黑或者白。行字节数 = 位图宽 + ((4 - (位图宽 * 像素点位数 / 8)%4))%4。bmp图片每一行都是4的倍数,不足添加无效位。
2022-11-04 21:16:58
1305
原创 0.96OLED显示屏C51_IIC例程
iic总线只有两根双向信号线,一根是数据线SDA,一根是时钟线SCLiic总线是通过上拉电阻接正电源。当总线空闲时,两根线均为高电平当连接到总线的任一器件输出低电平,都将使总线的信号拉低,即各器件的SDA和SCL到是线“与”关系。
2022-09-17 10:59:34
3201
1
原创 Linux多线程基础总结
1. 线程参数传递2. 线程分离3. 线程资源的回收4. 线程清理函数5. 线程取消6. 线程与信号7. 线程安全8. 线程同步9. 条件变量10. 信号量11. 生产者消费者模型12. 保证多线程程序的稳定性
2022-08-28 11:00:58
959
1
原创 Linux 定时器使用
Linux 下可以使用 alarm 函数或 setitimer 函数设置一个定时器。alarm 的定时器是以 秒计时的,setitime 的定时器可以精确到 微秒alarm 可以在进程中设置一个定时器,当定时器指定的时间到时,它向进程发送SIGALRM信号。可以设置忽略或者不捕获此信号,如果采用默认方式其动作是终止调用该alarm函数的进程。seconds:指定秒数成功:如果调用此alarm() 前,进程已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0失败:-1示例:二、setitim
2022-07-05 19:56:47
1951
原创 libevent库bufferevent事件实现socket通信
bufferevent 事件开发框架服务器端:创建event_base :event_base_new()创建监听服务器, 设置其监听回调函数,当有客户端成功连接时,这个回调函数会被调用 :evconnlistener_new_bind()监听服务器回调函数 listener_cb() 内部 添加bufferevent事件 实现通信 :bufferevent_socket_new()bufferevent事件的 read、write、event 事件设置回调函数:bufferevent_setc
2022-07-04 20:41:25
935
原创 libevent库event事件使用
libevent 框架:1.创建event_base 2.创建事件event3.将事件添加到base上4.循环监听事件满足5.释放event、event_base
2022-07-04 13:16:48
517
原创 epoll实现多路IO转接
epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。目前epell是linux大规模并发网络程序中的热门首选模型。epoll除了提供select/poll那种IO事件的电平触
2022-07-01 18:03:49
564
原创 select多路IO复用
select多路IO复用的应用场景:优点:缺点:nfds:监听的所有文件描述符中,最大文件描述符+1readfds: 读文件描述符监听集合。 传入、传出参数writefds: 写文件描述符监听集合。 传入、传出参数 (不常用) NULLexceptfds: 常文件描述符监听集合 传入、传出参数 NULLtimeout: 设置监听超时时长 (NULL: 阻塞监听)(0: 非阻塞监听,轮询)返回值:> 0: 所有监听集合(3个)中, 满足对应事件的总数。0: 没有满足监听条件的文件描述符-
2022-06-30 19:58:23
344
原创 socket网络编程封装错误处理函数
对socket相关函数进行封装加入出错打印和退出功能,并封装了读写n个字节和读一行的函数,以提高代码可读性和开发效率cs_dev.hc/s_dev.cdemo利用socket错误处理函数进行客户端和服务端的开发。server.c 将接收到的客户端字符串信息转成大写并发送回客户端client.c......
2022-06-28 18:23:56
263
转载 gdb调试
GDB调试 运行命令 :运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令;:执行程序至主函数的起始位置,即在函数的第一行语句处停止执行(该行代码尚未执行);:继续执行,到下一个断点处(或运行结束);:单步跟踪程序,当遇到函数调用时,也不进入函数体;此命令同的主要区别是,遇到用户自定义的函数,将进入到函数中运行,而则直接调用函数,不会进入到函数体内;:单步调试如果有函数调用,则进入函数;与命令不同,不进入调用的函数;:可以运行程序直到退出循环体;:运行至某行,不仅仅用来跳出循环;:
2022-06-03 22:04:15
214
原创 ulimit -c unlimited设置失败与无法生成core文件
无法运行ulimit -c unlimited,或无法生成core文件。bash: ulimit: core file size: cannot modify limit: Operation not permittedsudo: ulimit: command not found
2022-06-01 21:14:11
6635
1
原创 QT定时器之QTimer类加QTime类制作秒表
一、QTime时间类QTime类提供时钟时间函数。QTime对象包含一个时钟时间,即从午夜开始的小时、分钟、秒和毫秒数。它可以从系统时钟中读取当前时间,并测量运行时间的跨度。它提供了比较时间和通过添加若干毫秒来操作时间的函数。QTime使用24小时时钟格式;它没有上午/下午的概念1. 头文件#include <QTime>2. QTime QTime::addMSecs(int ms) const返回一个QTime对象,该对象的时间比该对象的时间晚ms毫秒(如果ms为负,则早ms
2022-05-28 23:38:12
5134
5
原创 QT网络编程TCP/UDP开发流程 制作网络调试助手
一、开发基础知识1、QT的网络编程: TCP和UDPTCP编程需要用到俩个类: QTcpServer 和 QTcpSocketQTcpSocket类提供了一个TCP套接字QTcpSocket是QAbstractSocket的一个子类,它允许您建立TCP连接和传输数据流注意:TCP套接字不能在QIODevice::Unbuffered模式下打开。QTcpServer类提供一个基于tcp的服务器2. 这个类可以接收传入的TCP连接。您可以指定端口或让QTcpServer自动选择一个端口。你可以
2022-05-22 09:13:07
5331
原创 shell编程基本语法、grep命令、find命令、sed命令、awk命令、C语言正则表达式函数
目录标题一、执行脚本二、基本语法1. 变量2. 代换3. 转义字符4. 引号5. 条件测试三、if语句一、执行脚本执行脚本四种方式:1. chmod +x shell.sh ./shell.sh2. /bin/bash shell.sh以上两种方式都是新建一个子shell,执行cd指令,改变的是子shell的pwd,不影响交互式shell的pwd3. source shell.sh4. . shell.shsource和 . 都是shell的内建命令,该方式启动脚本
2022-04-16 16:52:19
2527
原创 配置vscode远程免密登入Linux服务器
一、Windows端操作1. 生成私钥和公钥cmd终端输入:ssh-keygen -t rsa -b 40962. 配置config打开vscode远程管理器进行免密登入配置,如下图例操作:打开Configure进入到公钥路径,将公钥文件拷贝到Linux服务器的 ~/.ssh 目录下二、Linux服务端操作1. 将公钥文件内容到authorized_keys文件中cd ~/.sshcat id_rsa.pub >> authorized_keys注:如果~/.s
2022-04-05 21:48:49
2111
原创 信号量实现生产者消费者模型
一、信号量信号量是进化版的互斥锁,由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住,这样虽然达到了多线程操作共享数据正确性的目的,却无形中导致线程的并发性下降。线程从并行执行,变成了串行执行。与直接使用单进程无异。而信号量是相对折中的一种处理方式,既能保证同步,数据不混乱又能提高线程的并发。二、主要应用函数sem_t sem; 定义信号量int sem_init(sem_t *sem, int pshared, unsi
2022-03-28 15:52:02
1243
原创 Linux线程之读写锁
一、读写锁读写锁与互斥锁类似,但读写锁允许更高的并行性,其特性为:读共享,写独占,写锁优先级最高二、读写锁特性读写锁是写模式加锁时,解锁前,所有对该锁加锁的线程都会被阻塞读写锁是读模式加锁时,如果线程以读模式对其加锁已经成功,其他线程试图以写模式加锁的线程将阻塞,以读模式加锁的线程不受影响;如果当前同时有试图读模式加锁和写模式加锁的线程,优先满足写模式加锁,读锁、写锁并行阻塞三、主要函数原型读写锁初始化定义读写锁: pthread_rwlock_t rwptr;函数原型: in
2022-03-25 11:22:47
1468
原创 makefile 基础规则
目录标题一、makefile用意二、 makefile规则2.1 命名与使用2.2 一个规则2.3 两个函数2.4 三个自动变量三、使用一、makefile用意一个大工程文件是成百上千的,一个个文件的去编译可想而知效率极其低下,使用Makefile实现自动编译,并且可避免已编译文件再次编译,大大的提升了软件的开发速度。二、 makefile规则2.1 命名与使用名字为Makefile 或 makefile使用指令:make2.2 一个规则编写规则: 目标:依赖条件(一个 tab 缩进)命
2022-03-06 19:22:55
3266
2
原创 git 配置beyondCompare
vi ~/.gitconfig添加[diff] tool = bc3[difftool]prompt = false path = E:/APP/beyondCompare/Beyond/BComp.exe[difftool "bc3"]cmd = "\"E:/APP/beyondCompare/Beyond/BComp.exe\" \"$LOCAL\" \"$REMOTE\""[merge] tool = bc3[mergetool]prompt = falsekeepBack
2022-01-27 12:57:49
764
原创 Linux文件编程会改变光标的函数
会改变光标位置的函数:read()、write()、fwrite()、fread()lseek()、rewind()fprintf()、fscanf()需要注意的是使用fprintf()、scanf()的读写问题与printf()、scanf()类似(非指定地址下)遇到空格结束当前占位符的输入,且空格被忽略char* a = "hello world";printf("%s\n", a);输出结果: hello worldFILE* fp;char* a = "hello wo
2021-11-02 19:46:18
216
原创 关键字static与extern
一、static 关键字作用static 最主要功能是隐藏(修饰变量和函数),其次因为 static 变量存放在静态存储区,具备持久性和默认值为 0隐藏作用:可以在不同的文件中定义同名变量和同名函数。储存方式:仅对于变量来说,保持变量持久,程序退出才被销毁,静态数据区的变量会在程序刚刚运行时就完成初始化,也是唯一一次初始化;储存在静态数据区,静态存储区只有两种变量(全局变量和 static 静态变量)。默认初始化为 0,和全局变量一样的属性二、extern 关键字作用声明外部变量函
2021-10-05 18:33:31
213
原创 区分声明与定义
一、声明告诉编译器,这个名字已经匹配到一块内存上了,下面的代码用到变量或对象是在别的地方定义的例如:extern int i;告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名或对象名例如:void fun(int i);二、定义定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名注意变量定义指定地址后或系统自动分配地址后,变量的地址就不能再改变了三、区别变量可以多次声明但是只能定义一次定义创建了对象并为
2021-10-05 17:59:46
104
原创 安卓WebView显示一个网页
一、添加WebView组件<WebView android:id="@+id/web1" android:layout_width="match_parent" android:layout_height="match_parent" />二、添加网络方式一:在 Androidmanifest.xml/Permissions 添加Uses Permission选择网络方式二:直接在Androidmanifest.x
2021-09-27 22:12:19
263
原创 安卓客户端接收信息并显示
客户端接收到信息的是byte类型数据,handleMessage(Message msg) 中的形参msg存在的数据类型只有int型和Bundle类型,所以需要对接收到的byte类型数据转换成Bundle类型传递给handleMessage(Message msg),然后将Bundle类型数据转换成字符串进行显示源码:package com.example;import java.io.IOException;import java.io.InputStream;import java.i
2021-09-25 21:21:55
438
原创 安卓之修改组件程序
一、注意事项UI线程中使用sleep()会导致页面停止刷新,需要使用则创建新的线程使用非UI线程不允许更改组件的程序,会导致程序崩掉,只有UI线程才被允许二、读秒器我们通过读秒器来暴露一些问题实现效果:当按下开始按键每隔一秒显示加一,加到102.1 UI线程使用sleep()我们可以看到按下按键后,10秒内页面没有任何刷新,直到10秒后才刷新页面,显示0秒变成10秒,原因正是UI线程使用sleep()会导致页面停止刷新package com.example;import a
2021-09-24 22:41:53
206
原创 安卓程序添加socket客户端
直接在按键的响应方法中添加socket客户端注意的是socket服务端和客户端都不允许放在主线程下运行,所以创建新的线程单独运行 //Socket客户端 public void send(){ try { @SuppressWarnings("resource") Socket client = new Socket("192.168.43.135", 8080); OutputStream out = client.getOutputStream(); String
2021-09-23 22:29:35
269
原创 Java之Socket服务端、客户端
一、服务端1.1 单一连接package com.demo;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class Test { public static void main(String[] args) { int len = 0; byte[] data = new byte[120];
2021-09-23 21:45:11
719
原创 安卓页面跳转传参
一、方式一通过putExtra() 传递参数目标页面获取传递来的参数,通过getStringExtra() 等方法获取,注意的是要通过getIntent() 获取当前页面的Intent对象,get到的才是传递来的参数,不能新new一个Intent对象二、方式二...
2021-09-22 21:06:27
347
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人