- 博客(32)
- 收藏
- 关注
原创 C/C++结构体给函数传参
都用于操作结构体的成员变量,区别在于:点操作符是对结构体本身进行操作,而箭头操作符是对结构体的引用进行操作。2.引用传递(传的是地址,修改形参会改变原值)1.值传递(修改形参不改变原值)
2023-11-22 15:04:01
524
原创 yuv图像格式存储方式
(图像相邻像素点的色度都差不多除了边界,舍弃后用相邻的值来填充,因此基本上是看不出来的,不得不说发明这个的真是天才)那么每像素去掉一个u或者v,就是yu_ yv_ yu_ yv_(4:2:2),然后显示的时候填充隔壁的u或者v分量即可。yuv420则是每两排中一排去掉所有u,一排去掉所有v,然后显示时上下相邻填充,最后yuv的采用比例就是4:2:0,即yuv420格式。但和rgb不同的是,yuv支持一些不同的压缩格式!如一个yuv图像的数据帧为:yuv yuv yuv yuv(4:4:4)
2023-11-09 16:00:11
312
原创 c语言之volatile关键字
例如:公共变量volatile int camera_type(表示可见光or红外)是由串口接收的数据来改变的,如果不加volatile,那么串口把它的值改变后,其他程序访问这个变量时可能还是之前的变量(因为存在寄存器里的值没变)导致异常。关于编译器优化:这个坑挺大的,简单说就是:假设要对一个设备进行初始化,此设备的某一个寄存器为0xff800000。编译器就会优化前面的循环,把它等效为把output这个指针赋值为9,省略了对该硬件IO端口反复读的操作。
2023-11-09 15:58:33
145
原创 memcpy()之小端模式
所以拷贝后输出顺序是反着的。而字符串的存储则是正常顺序(1a到4d从左往右依次存放),所以输出也是正常顺序。由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。其原因在于,计算机在存储整形数0x1a2b3c4d时,采用的小端模式,即。例2:如果用来复制整形(多字节数据),输出结果是逆向的。例1:如果用来复制字符串,输出的顺序是正常的。函数返回一个指向dest的指针。
2023-11-04 16:09:26
602
原创 【Modbus通信实验五】Modbus TCP协议 双层网络 以及常见问题
PLC:可编程逻辑控制器(Programmable Logic Controller),专门用于工业自动化领域。它的主要功能是对生产过程进行控制和监控,以实现对工业生产过程的自动化控制。PLC采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。单片机(Microcontrollers,MCU)又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
2023-09-09 22:05:06
1119
原创 【Modbus通信实验四】Modbus RTU协议
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。传统Modbus 是一个请求/应答协议,由于485为单工,1个服务器为主,多个客户机为从,从设备只能应答。Modbus消息桢包括RTU、ASCII、TCP。RTU、ASCII消息桢用于异步串行传输通信。TCP消息桢应用于网络传输通信(本文暂不考虑)。ASCII模式:消息以冒号字符(:对应ASCII码3aH)开始,以回车换行符。
2023-09-03 23:20:04
1270
原创 【Modbus通信实验三】数据切片问题
第一种是在报文前后加上固定的包头包尾,当数据断开时,响应函数分别会收到一个带包头的和一个带包尾的数据,将它们拼在一起即可。但这种方法的问题是,有可能被截断的数据刚好也同时带有包头包尾,因此还需要加一步CRC校验,比较麻烦。真正的原因出在MFC的COMM组件的OnComm响应函数上,即一次发送的报文会被响应两次(检测阈值时先会响应,阈值后面的数据再次响应)。第二种方法比较简便,思路是延迟接收,即OnComm一旦响应后不急着接收数据,而是过一段时间再接收,则可以保证延迟接收的数据是完整的。
2023-08-24 00:44:52
214
原创 【Modbus通信实验二】VC++编写串口调试助手
编写串口调试助手并能在虚拟机中实现虚拟端口通信。m_mscomm_motor为设置的变量名,SetCommPort()传入的变量为端口号需要参考设备管理器中的可用虚拟端口号(COM3或COM5)。
2023-08-17 17:33:29
755
原创 【Modbus通信实验一】查表法实现CRC16校验
循环冗余校验(CRC)是奇偶校验码的改进,又称为多项式编码,其原理为:发送方与接收方约定一个相同的多项式(POLY),如多项式x6+x4+x2+x+1对应的二进制码为1010111,然后将发送报文对改二进制码进行异或运算(即做除法),得到的余数则为CRC校验码,并附带在发送报文之后。字节型算法的一般描述为:本字节的CRC码,等于上一字节CRC码的低8位左移8位,与上一字节CRC右移8位同本字节异或后所得的CRC码异或。1.取上字节的CRC码的低八位,与本字节进行异或,得到下标index。
2023-08-15 01:56:50
6202
原创 MySQL8.0 窗口函数一:排序函数
以下功能仅MySQL 8.0以上版本支持参考:https://help.aliyun.com/document_detail/158532.html?spm=a2c4g.11186623.6.863.4aaa6cb2k9RpeD窗口函数:排序假设一张表存储了学生的成绩,使用order by可以对查询结果进行排序。但如果想获得排序的序号,则需要使用这些函数:row_number(),rank(),dense_rank(),ntile()等等,其特点是都用在SELECT的字段里,输出顺序默认按照序号由
2020-12-23 20:54:26
1321
原创 一个复杂的sql查询案例
有两张表——user_module和user。user为学生表,user_module为学生选课的中间表(module表本题中不涉及,就不展示了),结构如下:题目是:查询1601041班选课人数大于10人的课程,展示出课程编号和该班级的选课人数。题解:第一步:先查询课程的选课人数,并按课程编号展示出来:使用聚合函数GROUP BY语句,可以将结果按照某一字段坍缩,此时便可使用count()来统计该字段的重复次数:SELECT module_id,count(*) FROM user_module
2020-08-21 16:28:24
516
原创 Java:数据精确计算
使用BigDecimal类的方法进行数学计算注意两点:构造方法传参使用字符串,因为直接传递小数的话会被当作Double型浮点数处理,造成精度误差。使用除法时,除了传入被除数外还有两个参数:保留小数点位数以及近似规则(四舍五入、向上取整、向下取整等等)。代码如下:BigDecimal a = new BigDecimal("12.3");//这里要传入字符串,不能传入小数BigDecimal b = new BigDecimal("45.6");System.out.println("a+b
2020-08-13 10:52:22
246
原创 解决finally与return一起出现时的问题
参考:https://www.jianshu.com/p/705faad2c33f总结return语句在执行时会将结果存放在栈顶,程序结束时返回的也就是栈顶的值。finally语句在执行时不会去动用栈顶的数据,因此:顺序上:先finally再return。结果上:return该是什么结果就是什么结果,不会被finally中的操作所影响。...
2020-08-12 11:23:13
188
原创 SpringBoot:Token登录、认证、授权
Session、Cookie、Token的区别网上这部分的资料很多。比如可以参考https://www.cnblogs.com/moyand/p/9047978.html等等。对于一些概念简单归纳一下:由于HTTP都是无状态请求,这些都是为了让服务端“记住”用户而发明出来的方法。为确保用户会话的独立性和安全性,不能使用明文保存用户信息(如userId),而应使用加密后的信息储存。Sessi...
2020-04-26 22:08:42
6642
1
原创 SpringBoot:文件下载、pdf预览、文件压缩
文件下载编写工具类,编辑http响应体格式。其中Content-type为application/octet-stream代表二进制流,为下载文件的格式。详见对照表:https://tool.oschina.net/commons/Utils:public class FileExporter{ public static ResponseEntity<FileSystemR...
2020-04-17 22:42:22
2146
原创 MyBatis:动态SQL(非xml方法)
SQL语句构建器参考MyBatis官方中文文档:https://mybatis.org/mybatis-3/zh/statement-builders.html1.Mapperpackage com.example.mapper;import com.example.config.sql.StudentProvider;import com.example.config.sql.User...
2020-04-17 21:36:35
1130
原创 SpringMVC:线程安全性
线程安全:多个线程访问同一个变量/对象,得到的结果相同,那么是线程安全的。线程不安全:多个线程访问同一个变量/对象,得到的结果不相同,那么是线程不安全的。Spring在创建Bean默认是单例模式。所以Controller、Service、Dao等在创建后只会使用原来的实例。相比之下,Struts2不是单例,request来了就实例化一个Controller,因此是线程安全。而SpringMVC...
2020-02-18 01:32:30
356
原创 Java Regex 小记
正则表达式入门以及参考手册:https://deerchao.cn/tutorials/regex/regex.htm#grouping反斜杠与转义字符在其他语言中,转义字符是 \ ,反斜杠是 \\ 。在 Java 中,转义字符是 \\ ,反斜杠是 \\\\ 。所以,在其他的语言中,一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语...
2020-02-14 21:04:45
240
1
原创 Java:使用位操作实现单表多对多存储
需求:建立Course表(等)与Teacher表的关联分析: 当两个实体之间存在着多对多的映射关系时,往往需要一张中间表来存放。但是,多一张表就会多一个实体类、Mapper、Dao等等,就需要更多的代码去维护。因此我们需要尽量减少数据库的复杂度。在这个例子中,我们就可以避免使用中间表,原因在于:老师的数量有限,(和需求方沟通后确定)不会多于30位老师使用本系统。除了Course外还有诸如...
2020-01-15 17:14:39
404
原创 SpringBoot:简单实现事务回滚
事务回滚当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误。比如:public method() { Dao1.save(1+0); Dao1.save(1-0); //错误 Dao1.save(1/0);//假如这句发生了错误,前面的两个对象会被保存到数据库中 Dao1.save(1*0);}我们希望整个方法中的步骤都不要执...
2020-01-14 14:44:34
899
原创 SpringBoot:文件上传与导入excel
需求:要将一张excel表格的数据批量导入数据库的user表中。Excel:user表结构:实现:分两步1、文件上传SpringMVC中用的是MultipartFile对象作为参数传入。代码: @RequestMapping(value = "test/upload",method = RequestMethod.POST) public void excelToData...
2020-01-10 11:30:09
420
原创 MyBatis:使用Insert添加一行数据后返回自增主键id的值
关于这点不多说了,直接说使用方法:使用@Option注解,返回的仍然是成功添加的记录条数。而想自增主键的值保留在相应实体类下的id属性中。Dao错误用例:@Override public int createTeam(Long num,Integer courseId,Integer maxNum) { Team team = new Team(); ...
2019-12-12 15:08:28
188
原创 MyBatis:使用注解实现多表联查
一个简单的多表联查需求:user表字段:username(主键), name, school, qq等等。。team表字段:leader(主键), members1, members2等等。。然后team表的leader字段与user表的username字段相关联。同时每一个team都只对应一个user(一对一)现在要查询team的信息并同时返回leader所属的user表的信息。实现方...
2019-11-26 16:45:11
979
1
原创 Java爬虫+springboot+微信小程序实践
做了一个Java爬虫小项目,使用了开源的Java爬虫框架WebMagic。官方文档:http://webmagic.io/docs/zh/1.创建springboot工程,pom里导入WebMagic相关依赖:<dependency> <groupId>us.codecraft</groupId> <a...
2019-11-17 22:04:04
1413
原创 Java网络通信实验小记四:Swing聊天软件
Swing聊天软件前面做了Tcp和Udp的基本通信以及文件传输实验,是时候把这些内容整合在一起了。。Swing就不介绍了,需要用到什么api都可以直接查。一、基本聊天功能(服务端作中介,udp实现)软件能够实现Windows主机和一台Linux虚拟机的通信。除此之外还需要一台Linux虚拟机作为服务端起到二者中介的作用。两个客户端与服务器的通信采用无连接的udp协议,服务器收到udp包直接...
2019-09-23 12:03:23
687
原创 Java网络通信实验小记三:IO流与文件传输
IO流与文件传输前面的实验完成了TCP和UDP的通信实验。在TCP通信里我们用到了这样两句代码://通过BufferedReader获取socket套接字的输入流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));//通过PrintWriter获取客socket套接字的...
2019-09-12 20:56:08
326
原创 Java网络通信实验小记二:Socket编程
Socket编程——TCP&UDP一、Socket套接字概述网络上具有唯一标识符的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。通信的两端都有Socket。网络通信其实就是Socket通信。数据在两个Socket之间通过IO流传输。Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己IP和端口号可以把主机当做港口,Socket就是码头,...
2019-09-10 22:18:39
356
原创 Java网络通信实验小记一 :基础知识
基础知识——网络编程三要素1.IPIpv6的简写:(1)各个4位16进制数的段中的高位0允许省略例如:1000:0000:0000:0000:000A:000B:000C:000D,可以缩写成:1000:0:0:0:A:B:C:D。(2)可以在一个IPv6地址中最多使用一次双冒号(::)来取代IPv6地址中紧密相连的多个全0的16进制数的段因此,1000:0:0:0:A:B:C:D还...
2019-09-10 19:15:46
301
原创 关于Ubuntu的一些安装、配置的记录
做了一个学校的java项目,其中涉及到多台Linux间的相互通信。此贴记录一下遇到的坑点。。。一、Linux环境下配置jdk的简便方法方法一:Terminal中输入sudo gedit /etc/profile,在配置文件后加上JAVA_HOME、CLASSPATH的路径并保存,然后使用java -version即可验证。方法二:以上方法我反复操作后都没有成功???很纳闷,所以我直接使用了s...
2019-09-09 21:32:51
137
转载 浅析JdbcTemplate中的BeanPropertyRowMapper
在思考JdbcTemplate在进行query时是怎么讲数据表映射到实体类上的时候,发现了这篇文章:https://blog.youkuaiyun.com/qq_22339269/article/details/82978717以下是正文:我们在使用BeanPropertyRowMapper时,是给query()方法传递一个BeanPropertyRowMapper对象,让JdbcTemplate帮我们...
2019-08-07 10:37:31
1048
1
原创 spring+springMVC配置时发生 org.apache.catalina.core.StandardContext.startInternal Context [] startup fail
spring+springMVC配置时发生 org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors错误在启动Tomcat时没有响应,错误信息如下:严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.c...
2019-07-31 17:46:51
3553
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人