自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 步进电机驱动学习-1

步距角:即步进电机走一步,其所转的角度。细分模式:在通过驱动芯片来驱动步进电机时,通常会有一个寄存器用于我们设置具体的细分模式,如上述提到的1-2相驱动方式就是8细分,在驱动芯片中往往支持1/2/4/8/16/...../256细分,如上所说,细分模式就是将步进电机的一个整步分为n个微步去走,这样使得我们能够更加精准地控制电机的位置,这在一些高精度要求的场景下非常有用。以图1为例,A+/A-为一组线圈,B+/B-两个为一组线圈,步进电机会给线圈依次通电,从而使产生的磁场不断变化,从而使得转子转动。

2024-07-08 00:14:13 365

原创 记录一个SPI通信中主机无法正确读回的问题

通过波形图可以看到,MISO是正常被从机拉低了的,说明片选信号正常,并且从0机接受到了主机读的信号,此时对写入-读回数据进行更改,多次尝试后发现,当读回数据按二进制形式,存在0在前,1在后的情况时,此时0为低电平,而当应该输出1时,MISO无法正常被主机拉高,例如:假设预期读回值为 1101 0101,那么实际读回值就会变成1100 0000。主机的MISO正常配置为上拉输入。

2024-07-07 23:25:46 123

原创 信号发送对象和槽函数执行对象在不同的线程中时,有时会出现明明没有发送信号,但是槽函数却自己执行了,并且没有其他地方调用槽函数

然后我在调试的过程中发现了一个非常奇怪的现象,当线程A中的信号停止发送后,线程B中的槽函数还在不停的执行,由于我是在前任的基础上编写的,所以一开始以为前任写了槽函数执行失败会重新执行这样的机制,找了半天没找到,由于本人对Qt库不太熟悉,甚至一度怀疑是QThread 的问题。可以想象为一个循环队列,线程A将信号放到循环队列中,而线程B将队列中的信号按照先后顺序不断执行,直到执行完毕。此串口工具中存在线程A和线程B,在线程A中发送了信号,线程B中执行槽函数,信号绑定方式为。

2024-04-23 16:41:55 168

原创 如何修改ubuntu默认shell为bash或者dash

首先通过 ls -la /bin/sh 命令查看当前为 bash 还是 dash。随后执行 sudo dpkg-reconfigure dash 命令进行切换。切换之后再次通过 ls -la /bin/sh 命令可查看是否切换成功。

2024-02-26 15:33:55 1218 1

转载 Qt自定义类继承QObject类后显示“undefined reference vtable for xxx“

当通过Qt这个IDE创建新类中添加QObject头文件和Q_OBJECT后,Qt会生成相应的“moc_XXX.cpp”文件,用于信号槽的通信实现。但是若在创建类时没有通过Qt添加QObject头文件和Q_OBJECT,Qt无法生成相应的“moc_XXX.cpp”文件,此时就会报错:undefined reference to `vtable for XXX',如上面例子。原文链接:https://blog.csdn.net/TanChengkai/article/details/102466498。

2023-08-01 19:28:30 484 1

原创 关于右值引用

在c++中有左值和右值的概念。通常来说,能够出现在 ”=“ 左边的,有名称的,可以寻址的我们称之为左值,不能出现在 ”=“ 左边的,没有名称的值我们称之为右值。int a=5;//a是一个int型变量,是左值//5是一个右值//c是一个左值, ”hello world“是一个右值int func() //非引用的返回值都是右值return 0;int a=5;int &b=a;//定义一个a的引用(需要注意的是,引用必须在定义时初始化)

2023-07-17 16:21:19 135 1

原创 开发板通过网线与pc机连接并访问网络

2:如果你是第一次设置,单击确定的时候应该会弹出一个ip地址,那么将你的开发板中的路由地址更改为此地址,并将开发板ip地址更改为此网段下的一个地址。如果没有弹出ip地址的话,可以试试192.168.137.1这个地址,大概率是这个(我的第二次设置没弹出,就是这个地址,我看别人也是这个地址),同样的,把开发板路由地址改为此地址,ip地址改为该网段下的地址(比如:192.168.137.2).然后重启开发板应该就能联网了。1:首先将WLAN属性中的共享勾上,并在家庭连接中选择以太网(开发板网线插入的网口)

2023-05-08 11:50:49 1126

原创 linux通过桥接模式连接开发板后改回nat模式连不上网

之前因为做实验要用电脑连接开发板,没有选择将开发板连接到路由器上,而是直接将开发板通过网线连接到电脑,并设置了虚拟机的联网方式为桥接模式。因为一直是桥接到开发板的,所以之前一直连不上网是正常的,但是今天要用apt-get命令,改回nat模式还是不能联网,晚上查了很多资料也不行。因为之前要连接开发板,所以设置了静态ip,和网关,但是后来我忘了我改了这个配置,所以一直以为是虚拟机设置出错了。vi打开下图所示文件:目录在左下角,不同版本的ubuntu文件路径可能不一样。将他改回自动获取就可以了。

2023-04-24 10:57:33 390

原创 设计模式之装饰模式与继承对比

(1)装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态决定“贴上”一个需要的“装饰”,或者除掉一个不需要的“装饰”。继承关系则不同,继承关系是静态的,它在系统运行前就决定了。(2)通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。个人感觉就是:当有大量的功能可以选配时,继承实现会导致代码过于臃肿,而使用装饰模式的话,当某个实例选配过多时则会导致创建过多对象,导致差错困难等一系列问题。装饰模式的缺点由

2023-03-22 14:08:47 287

原创 linux下信号屏蔽字集深入了解

首先我们应当明确:并非所有的信号都可以忽略或者捕捉:SIGSTOP 和 SIGKILL 是不可忽略或捕捉的,也在本文讨论范围之外! 信号想要抵达进程pcb需要穿过两道大门,分别是未决信号集和屏蔽字信号集,穿过这两道大门,信号才能到达进程PCB,随后,当进程进入内核态时便会发现并处理该信号(时间片的轮转,系统函数的调用,异常等都会导致进程进入内核态,所以不必担心信号不会被进程发现,即使没有系统函数的调用和异常,时间片也会到达,这与线程的pthread_cancel()不同,

2022-11-21 22:07:55 299

原创 关于常量指针和指向常量的指针在传参时的部分细节

因为 const char * 是指向常量的指针,意味着该指针的指向可以改变,但是指向的地址块的数据不可改变,而如果经由char * 传入函数的话,是有可能改变指向地址块的数据的,这与指向常量的指针的限定符冲突!这与上一条略有不同,虽然是临时变量,但是其内存储的地址是跟原指针一样的,对临时变量做的操作对原指针没有影响,就像你传入了一个整型变量进函数,不管你函数里面做了什么操作,函数外面的整型变量是没有任何改变的,虽然对原指针没有影响,但是却真真切切的改变了指向的地址块里的数据,所以与本条指针的限定符冲突!

2022-09-26 15:49:15 681 2

原创 关于c++程序运行时出现访问权限冲突的一个BUG

访问权限冲突的错误。

2022-08-21 17:18:22 621

原创 vs2019连接MySql数据库

如果你安装的mysql是32位的,那么此项目也应该 运行在32位环境,64位同理。到此数据库就连接成功了。另外,我这里的库文件为静态库,此处注意平台位数应与项目位数以及MySQL位数相同。

2022-08-08 18:12:49 2426

原创 vs2019如何编译并使用静态库和动态库 c++

静态库浪费内存空间:多个程序依赖同一个静态库的时候,多个应用程序同时运行,需要往内存里面拷贝多份静态库。静态库更新部署比较麻烦;静态库是链接到可执行文件中的,如果静态库更新,需要重新编译可执行文件,并推给用户,全量更新消耗流量和时间动态库,多个程序依赖同一个动态库的时候,多个应用程序同时运行,只需要往内存里面拷贝一份动态库就可以了。 动态库更新的时候,只需要重新编译动态库,退给用户,可执行文件不需要重新编译,增量更新节省流量和时间。首先创建一个静态库项目:然后在pch.h中声明函数 在cpp文件中定义函数

2022-07-13 09:26:06 2803 1

原创 对链表循环赋值的时候保存的值总是最后一个

因为要从数据库读取数据,因为很多情况下数据都不止有一条,所以准备用一个List来存放数据,直接上代码:开始我就是这样写的,但是执行的时候发现循环中验证值是正确的,但是最后得到的链表中的值却都是最后一个。通过观察发现可能造成的原因是每次循环执行 FriendInfo f 语句的时候分配的内存空间一直是同一块儿,所以这个循环操作实际是在不停地对同一块儿内存空间赋值,所以在链表中存储的一直是同一块内存空间的地址。改正措施:第一种:将Friend Info f改为Friend Info *f=ne

2022-07-11 10:20:08 329

原创 单例模式-懒汉式-饿汉式-c++

饿汉式即在程序直接就会创建一个实例对象,他不是取决于你用不用他,而是本来就有的,上代码一看就明白: 可以看到在类内声明了一个静态的类对象(类内声明,类外定义)。其实开始我有点疑惑:类内可以声明本类对象?这难道不是使用了不完整的类型吗?但是仔细想一下就会发现,静态成员以及函数是不占用类空间的。但是普通成员不行,因为普通成员函数并不是类外定义,占用类空间。由于构造函数,拷贝构造等都被私有化,所以类外只能通过公共接口GetInstance()来获取唯一的一个实例。从代码可以看出,在你获取它之前,这个实例对象

2022-07-10 10:12:49 72

原创 记录一下我在用Qt连接Mysql时遇到的问题

Qt通过ODBC连接MySQL数据库

2022-07-08 13:40:21 430

xv6操作系统实验环境的搭建

改文档可配合下面连接中提到的xv6最新源码使用,该文档中的方法是基于bochs模拟机的,而链接中的是基于qemu模拟机的,亲测二者都可行!

2022-08-23

空空如也

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

TA关注的人

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