- 博客(128)
- 收藏
- 关注
原创 Arduino语法详解_含示例详解
支持一对一答疑的购买网址Arduino 的程序可以划分为三个主要部分:结构、变量(变量与常量)、函数。结构部分一、结构1.1 setup()1.2 loop()二、结构控制2.1 if2.2 if...else2.3 for2.4 switch case2.5 while2.6 do... while2.7 break2.8 continue2.9 return2.10 goto三、扩展语法3.1 ;(分号)3.2 {}(花括号)3.3 //(单行注释)3.4 /* */(多行注释)3.5 #define3
2024-10-28 07:26:51 915
原创 控制Arduino的利器-Windows Remote Arduino
相信很多朋友已经在玩 Arduino了,而且一般都是使用官方的Arduino IDE来写程序控制Arduino硬件。为了能够实现更加方便的控制,微软在Windows IoT计划中推出了Windows Remote Arduino。简单来说,Windows Remote Arduino是一个开源的Windows运行时组件,通过它,我们可以使用蓝牙、USB、WiFi或者是以太网这四种连接方式中的任意一种来控制Arduino硬件。
2024-10-28 07:18:50 1111
原创 rpc项目中的长连接与短连接的思考
类似于http的长连接和短连接的概念,rpc项目中的短连接是指处理完一次rpc请求后就断开连接,长连接是指处理完一次rpc请求后不断开连接,复用连接。http中长连接是指处理完一次http请求和响应之后不断开tcp连接,http短连接是指处理完一次http请求和响应之后断开tcp连接(一般是服务器断开,至于为什么是服务器断开,则又是一篇小文章了hhh)。
2024-10-21 12:34:54 663
原创 RPC入门
RPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC是协议:既然是协议就只是一套规范,那么就需要有人遵循这套规范来进行实现。目前典型的RPC实现包括:Dubbo、Thrift、GRPC、Hetty等。
2024-10-21 11:12:19 1101
原创 QT 随机数生成
/ 在使用qrand()函数产生随机数之前,一般要使用qsrand()函数为其设置初值,如果不设置初值,那么每次运行程序,qrand()都会产生相同的一组随机数。// 而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。// 比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间。// qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。// 新方法(推荐使用)
2024-10-14 08:52:27 429
原创 如何编写自己的Arduino库?
一开始写Arduino 的时候很不习惯,没有main函数,因为好多东西都被隐藏了。一直想搞清楚,以便编写自己的库文件。于是研究一下午,下面是一些总结。
2024-09-24 08:52:23 950
原创 如何编写自己的Arduino库?
一开始写Arduino 的时候很不习惯,没有main函数,因为好多东西都被隐藏了。一直想搞清楚,以便编写自己的库文件。于是研究一下午,下面是一些总结。
2024-09-24 08:38:58 970
原创 Arduino 笔记,开篇
让我们看一下Arduino最基础的小程序Blink,这个程序的地位如同编程语言中的Hello World ,通过这个,我们就能认识到Arduino编程语言的基本结构。当然,Mega2560 已经非常非常强大了,并且不和其他的atmegax8系列特性完全一样,所以程序是不能不修改直接移植的,就算我们使用了相同的扩展板。忘了说,在Arduino的数字13脚连了一个LED,当输出高电平就亮,低电平就灭。当然,福利君不是学霸,福利君很懒,福利君要做的是加速开发流程,所以福利君选择了Arduino。
2024-09-24 08:34:22 1218
原创 通配符SSL证书自动续签自动部署方案
所以想着能不能简化这个流程,在研究的过程中发现了通配符SSL证书,但是各个厂商的SSL通配符SSL证书看了一圈,真的好贵,最便宜的DV SSL证书一年差不多都在1000元左右,维护的项目有很多,每个项目的顶级域名都不一样,每个项目每年都投入1000元,成本太贵了,而且这也只是节省了每个子域名都需要申请SSL证书的麻烦,证书部署的麻烦还是没有解决。这个项目也是从自己的需求逐渐发展起来的,大家使用过程中如果发现任何问题欢迎随时反馈,共同学习,一起进步,愿所有爱编程的小伙伴都能工作顺利,开心赚钱。
2024-09-02 11:21:28 490
原创 基于ROP漏洞挖掘与利用
通常情况下栈溢出可能造成的后果有两种,一类是本地提权另一类则是远程执行任意命令,通常C/C++并没有提供智能化检查用户输入是否合法的功能,同时程序编写人员在编写代码时也很难始终检查栈是否会发生溢出,这就给恶意代码的溢出提供了的条件,利用溢出攻击者可以控制程序的执行流,从而控制程序的执行过程并实施恶意行为,本章内容笔者通过自行编写了一个基于网络的FTP服务器,并特意布置了特定的漏洞,通过本章的学习,读者能够掌握漏洞挖掘的具体流程,及利用方式,让读者能够亲自体会漏洞挖掘与利用的神奇魔法。
2024-09-02 10:52:57 1381
原创 编程就像涂防水,总是要修修补补。
----------------------------------- 先刷了加固剂肯定是没有坏处的呢。第一遍表干不沾手就可以刷第二遍了呢,一般是6-8小时左右,具体看您当地的气温,环境,湿度等等有影响哦~以您那边感受为准呢 不沾手就可以刷第二遍。------------------------------------ 是的呢 不需要湿润屋面哦。对了,如果某些区域没有起砂起皮,但我也先涂加固剂,再涂防水涂料,也可以到吧?另外的问题,加固剂5kg,可以涂25平,但我涂料只能图2平米,这咋办?
2024-08-27 23:44:50 747
原创 Windows线程API —CreateTimerQueueTimer/DeleteTimerQueueTimer的使用
主线程中分别利用CreateTimerQueueTimer开启后台线程调用回调test()和test1(),并在test()调用中结束调用。由于DeleteTimerQueueTimer中CompletionEvent中使用的是。导致线程会等待所有timer线程执行结束,才能返回。而当前执行回调的线程等不到自己结束,陷入死锁。导致test1回调和test使用的是同一线程,而test线程已经死锁,所以test1也无法得到执行。Main()函数中test1回调无法执行!
2024-08-26 15:33:00 831
原创 一个简单的spdlog使用示例
支持一对一答疑的购买地址spdlog是一个开源、跨平台、无依赖、只有头文件的C++11日志库,网上介绍的文章有很多这里就不过多的介绍了,GitHub链接:GitHub - gabime/spdlog: Fast C++ logging library.。先下载spdlog的源码,将源码的include文件夹复制到自己的项目文件夹下:然后在项目属性中包含include目录,如下图所示:一般的项目对日志要求都不高,主要是要求日志线程安全、异步写入文件、每天生成新日志、支持日志回调显示,spdlog稍微配置一下即
2024-08-26 13:18:38 335
原创 C++ STL 非变易查找算法
Find_end 算法函数,用于在一个序列中查找另一个序列中的最后一次出现位置。其中,是迭代器,表示待查找的序列的范围;是迭代器,表示要查找的子序列的范围。调用find_end函数后,将会在区间中查找最后一个与相匹配的子序列,并返回距离区间结束点的最后一个元素的迭代器,如果没有找到匹配的子序列,将返回last1。简单来讲,该算法实现了在一个序列中搜索出最后一个与另一个序列匹配的子序列,如下是一段应用案例。// var1中查找最后一个子序列var2。
2024-08-22 15:03:28 1036
原创 使用C++界面框架ImGUI开发一个简单程序
ImGui 是一个用于C++的用户界面库,跨平台、无依赖,支持OpenGL、DirectX等多种渲染API,是一种即时UI(Immediate Mode User Interface)库,保留模式与即时模式的区别参考保留模式与即时模式。ImGui渲染非常快,但界面上有大量的数据集需要渲染可能会有一些问题,需要使用一些缓存技巧。缓存只是避免数据的更新逻辑耗时太久影响渲染,实际渲染过程不存在瓶颈。
2024-08-22 14:48:12 1083
原创 Qt那点事儿(一)
只见随风飘落的纸面上面摘录了这么一段Qt源代码,在Auto模式下,如果要同步调用,不仅要求sender和receiver是同一线程,而且sender触发的时候,所在的线程也要和receiver一致。有人说是同步的,有人说是异步的,也有人说要看当时你的人品。这时有道友问道,为何在AutoConnection模式下,有时是同步,有时是异步,莫非Auto就是人品代名词。奇迹出现了,居然变成异步调用了。接着他刷刷的又改写了代码,在主线程中生成a,b两个对象,而a对象在新线程(MyTestC创建的)中触发信号。
2024-08-17 15:28:48 960
原创 关于Qt的系统总结
可以看到是这么样的关系,QFrame的子控件QPushButton以及QLineEdit(文本框)在构造的时候指定的父对象就是frame,而布局对象QHBoxLayout指定的父控件对象也是frame,也就是说除了我们在界面上看到的按钮,文本框是frame的子控件以外,我们通过右键生成的布局对象(QtCreator自动生成的,其对象id也是自动生成的),也是frame的子控件,QHBoxLayout通过addWidget函数将frame的所有直接子控件添加到布局中进行布局。信号被signals修饰。
2024-08-17 11:23:34 1191
原创 QT串口通信
这里注意一下,使用串口通信的时候是按字节发送的,所以如果你定义一个char buff[10],而且你想这样定义buff[0] = '255'发送255这个字符给下位机的时候,下位机是接收不完整的,经过测试发现发送大于或等于10的字符是会被截断的,只会留下最后一个字符,比如说发送10字符的时候,下位机很有可能只能接收到0这个字符,当然如果想要完整的发送过去的话可以定义成字符串形式。前言:如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了。
2024-08-17 10:31:33 918
原创 Windows7下安装Visual Studio2019发生错误的解决办法
起初笔者以为是真的是由于网络不稳定或者是笔者在虚拟机中进行实验安装原因导致的问题,后来由于持续的报网络问题无法下载安装,后来只能寄希望于离线安装包了,痛下决心下了将近40个G离线安装包,依旧破了一盆冷水,没能安装成功……的时候,却发生了莫名闹心的事情:(整个过程记录如下,假如你也遇到了同样的困难,希望对您能有所帮助),全程很顺利的完成了Visual Studio2019的安装,没有遇到任何困难。安装两个必要的补丁后,重新运行即可成功进行联网下载安装。,以便更好的开展工作,自己于是在自己的笔记本电脑(
2024-08-12 17:20:50 1032
原创 Qt十多年的开发经验,无私奉献!
增加了很多轮子,同时原有模块拆分的也更细致,估计为了方便拓展个管理。把一些过度封装的东西移除了(比如同样的功能有多个函数),保证了只有一个函数执行该功能。把一些Qt5中兼容Qt4的方法废弃了,必须用Qt5中对应的新的函数。跟随时代脚步,增加了不少新特性以满足日益增长的客户需求。对某些模块和类型及处理进行了革命性的重写,运行效率提高不少。有参数类型的变化,比如 long * 到 qintptr * 等,更加适应后续的拓展以及同时对32 64位不同系统的兼容。
2024-08-11 23:13:06 489
原创 我们访问github,会出现无法访问此网站的情况
打开windows电脑的hosts文件,位置大概在C:\Windows\System32\drivers\etc,每个人根据情况可能不一样。可能会被杀毒软件拦截,提示可能会有域名劫持的风险。如果一直提示,也可以关掉杀毒软件,用完github之后再开启。我们访问github,会出现无法访问此网站的情况,能访问全靠运气和心情,经常出现这样的情况。结果是这样的,记住140.82.112.3这个ip,下面会有用到。抓狂至极,特别是项目特别着急的时候,更是不知所措。点击保存,即可解决访问超时的问题,访问速度杠杠的。
2024-08-09 19:49:52 274
原创 静态链接——编译和链接
对于C语言的代码来说,这个预编译和编译的程序是ccI,对于C++来说,有对应的程序叫做cclplus:Objective-C是cclobj::fortran是f77l;处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。添加行号和文件名标识,比如#2“hello.c”2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号。处理所有条件预编译指令,比如“#if”、“#ifdef'”、“#elif”、“#else”、“#endif'”。
2024-07-16 16:43:41 484
原创 为何要学Linux?
铁子们可能都有感觉,当你的数据量一大起来,用 For 循环去跑,这速度简直能让人急死。所以,老铁们,别看 For 循环简单易用,有时候在处理复杂或者大规模数据时,还是要斟酌一下,看看有没有更合适的工具。接下来,我们将介绍一些这样的替代工具,让你的代码不仅跑得快,而且更加清晰易懂。虽然看起来挺直白,一用就上手,但是,有时候用多了,问题也跟着来了。下面,我们来看看更高级一点的工具,也就是生成器表达式,这也是处理数据时的一把利器。尤其是对于一些初学者或者维护别人代码的铁子们,一大堆的循环层层叠叠,看着就头大。
2024-07-08 08:41:38 358
原创 实时光线追踪(3)Ray Casting
实时光追(Real-time Ray Tracing)往往是综合了 sampling、ray casting、denoising 等各方面的方案,本文主要记录的是 ray casting 这部分,但是术语可能更多仍然称为 ray tracing。
2024-07-05 11:44:23 1177
原创 浅谈OpenCV的多对象匹配透明图像的实现,以及如何匹配半透明控件
通过templateMatch算法,可以得到目标与原图像中等大子图像对应归一化的相关系数,这个归一化的相关系数可以看作是对于的概率(其实不是这样),可以设定一个阈值,把大于这个阈值的坐标都筛选出来。OpenCV的templateMatch中提供了一个可选的参数mask,这个mask是和目标等大的一张图,可以是U8C1也可以是FP32,其中U8C1对于每个点的含义是为0则放弃匹配该点,非0就会匹配,FP32是会将这个点像素在计算相关性时赋予对于的权重。可以用特征匹配的方法,利用这个特性对透明控件进行匹配。
2024-07-05 11:37:35 1024
原创 Vue3从入门到精通(三)
在 Vue3 中,可以使用异步组件来延迟加载组件的代码,从而提高应用的性能和加载速度。组件来保持组件的存活状态,即使组件在组件树中被切换或销毁,它的状态仍然会被保留。在 Vue3 中,可以使用动态组件来根据不同的条件或状态动态地渲染不同的组件。使用异步组件可以提高应用的性能和加载速度,特别是在应用中有大量组件时。在 Vue3 中,插槽(Slots)的使用方式与 Vue2 中基本相同,但有一些细微的差异。Vue3 的生命周期钩子函数可以用于在组件的不同生命周期阶段执行相应的操作。: 在挂载完成之后被调用。
2024-07-05 11:23:12 997
原创 深入剖析C++多态的实现与原理-详解 (辛苦三万字,且看且珍惜!)
在虚函数后面写上=0,这个函数就为纯虚函数.纯虚函数只能写声明,不能写函数体.
2024-06-30 08:52:30 962
原创 驱动开发:配置Visual Studio驱动开发环境
在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境,首先我们需要安装这款功能强大的程序开发工具,在课件内请双击ISO文件并运行内部的安装包,的安装非常的简单,您只需要按照提示全部选择默认参数即可,根据机器配置不同可能需要等待一段时间;
2024-06-30 08:44:32 939
原创 std::future 如何保存多个对象进行同步等待
如果需要等待多个异步操作完成并获取它们各自的结果,可以使用 std::future 的姊妹类 std::shared_future 来实现。因此,可以将多个 std::shared_future 对象保存到一个容器中,然后使用 std::shared_future 的成员函数 wait() 或 get() 等待这些异步操作完成,并获取它们的结果。接下来,可以使用 std::shared_future 的成员函数 wait() 或 get() 等待这些异步操作完成,并获取它们的结果。
2024-06-24 11:27:57 384
原创 C++面试八股文:std::deque用过吗?
的底层容器,让我们比较一下三个容器的差异:(只考虑头插和尾插,因为stack不需要随机插入)二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用。中还有未被元素填充的位置,则将元素填充到数组中,如果此指针指向的。今天的面试分享到这里就结束了,让我们继续期待二师兄的表现吧。从上表中看到,三种容器的插入和是删除的时间复杂度相同。,插入要分情况,如果是头插和尾插,时间复杂度为。会找到头部或尾部的指针,并通过指针找到对应的。二师兄:说实话,很少用,基本没用过。,需要随机插入和删除的时候可以使用。
2024-06-24 11:11:55 331
原创 安全测试前置实践1-白盒&黑盒扫描
本文我们讲述了体验保障的安全质量提升过程。重点讲述黑盒、白盒的扫描过程。首先对漏洞工单进行了分析,确定了漏洞的来源、种类、分布,摸清了漏洞的现阶段情况。然后通过进行安全前置扫描,对工单中的白盒、黑盒问题前置识别。过程中通过开发工具来提升效率,最终形成一套可行的前置开展方案。但需注意:除了解决存量漏洞问题,还需要新增类问题,需要持续不断地建设,需要实现安全测试的常态化运行。并且要利用更多自动化工具,去进行提效。
2024-06-21 09:29:13 1086
原创 零信任介绍
传统的安全方法是在网络边界范围内的环境中开发的,假设对组织网络内的任何人都绝对信任。我们需要一种全新的安全方法,这种方法依赖于对合规性的持续验证,并且无论人们从任何位置以及任何设备访问应用和数据,这种方法都能保护相关应用和数据。零信任背后的策略可以归结为抛弃传统的安全方法(即认为网络边界范围内的所有资源都是值得信任的),改为采用“永不信任,始终验证” 的方法。与传统的安全方法相比,零信任存在动态决策点,用于验证信任并影响对企业应用和数据的访问级别。修复和编排 - 通过自动修复和编排提升安全性和体验。
2024-06-21 09:08:27 318
原创 CMake个人理解和使用
100编程书屋_孔夫子旧书网前言CMake是一个构建工具,通过它可以很容易创建跨平台的项目。通常使用它构建项目要分两步,通过源代码生成工程文件,通过工程文件构建目标产物(可能是动态库,静态库,也可能是可执行程序)。使用CMake的一个主要优势是在多平台或者多人协作的项目中,开发人员可以根据自己的喜好来使选择IDE,不用受其他人工程配置的影响,它有点像跨平台的IDE,通过它配置好相关设置之后,可以在多个平台无缝衔接,提高开发效率。最简单的CMake工程项目搭建一个用CMake来管理的项目,其项目根目录通常
2024-06-20 08:14:29 635
原创 C++面试八股文:什么是左值,什么是右值?
一次移动(当元素特别多时,移动的成本相对于拷贝基本可以忽略不记),一次析构。二师兄:移动构造是通过移动构造函数实现的,当类有资源需要管理时,拷贝构造会把资源复制一份,而移动构造偷走了原对象的资源。这里的确是通过static_cast实现的,讲左值强行转换成右值,用来匹配移动语义而非拷贝。时,为了保证程序的正确性,编译器可能会采用拷贝构造的方式实现移动构造,从而导致效率降低。是左值是和右值是匹配不同的实现,完成返回不同类型引用的目的。当传入的参数t的类型时右值时,由于引用折叠还是右值,此时的。
2024-06-20 07:54:11 612
原创 用Rust手把手编写一个Proxy(代理), 开始动工
注意:客户端和服务端之前可能会存在大数据上传下载的情况,超过百兆数据的上传下载,所以我们为了减少序列化带来的性能损失和保证在低内存能正确运行,不做http的完整解析,仅仅只处理http头信息。这表示该请求为普通的http代理,我们解析完HTTP的头文件信息,得出包含的头信息,如果无法解析完整的地址(域名加端口或者ip加端口),则返回错误,无法处理该http信息。http.rs http及https代理的实现,如果解析失败则返回ProxyError::Continue,并把已经读取的数据带回,以便后续解析。
2024-06-15 08:29:15 871
原创 tonic-Rust grpc初体验
gRPC 是开发中常用的开源高性能远程过程调用(RPC)框架,tonic 是基于 HTTP/2 的 gRPC 实现,专注于高性能、互操作性和灵活性。该库的创建是为了对 async/await 提供一流的支持,并充当用 Rust 编写的生产系统的核心构建块。今天我们聊聊通过使用tonic 调用grpc的的具体过程。
2024-06-15 08:02:21 947
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人