自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解C语言的函数指针的定义和使用

函数指针的定义   函数指针就是指向代码入口地址的指针,是指向函数的指针变量。所以“函数指针”本身是一个指针变量,并且该指针指向的是函数。C语言在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量之后,就可以用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的声明和...

2019-11-18 15:02:53 540

原创 Qt文件操作 QFile的使用

文件QFile    QFile类提供了一个用于读/写文件的接口,是一个可以用来读/写文本文件、二进制文件和Qt资源的I/O设备。QFile可以单独使用,也可以和QTextStream或者QDataStream一起使用,这样会更方便。一般在构建QFile对象时便指定文件名,当然也可以使用setFileName()在其他任何时间进行设置。无论在哪种操作系统上,文件名路径中的文件分隔符都需要使用‘/...

2019-11-18 13:35:01 4290

原创 C++内联函数(inline)详解

内联函数   函数调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码。在函数体中的代码执行完毕后还要恢复现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。   内联函数是C++为提高程序运行速度所做的一项改进。内联函数的编译代码与其他程序代码“内联”起来了,也就是说,编译器将...

2019-11-12 11:24:16 423

原创 qt事件中的accept()和ignore()函数

在使用Qt编写UI界面时,经常会碰到需要重写 mousePressEvent等之类的函数,这里需要根据不同的情况对事件event进行处理。总结起来如下:accept:接受事件(不往下传递),意味着这次的事件已经被接受,不会再往下传递,不会传递给父类。ignore:忽略事件(会继续往下传递),意味着这次事件不被接受,这个事件会一直往下传递。其他参考https://blog.csdn.n...

2019-11-11 11:41:40 2078 2

原创 C++中带默认参数的函数定义及使用总结

对于带参数列表的函数,必须从右向左添加默认值  对于带参数列表的函数,必须从右向左添加默认值,也就是说,要为某个参数设置默认值,则必须为它右边的所有参数提供默认值。范例:int fun1(int n, int m = 4, int j = 5); //正确int fun2(int n, int m = 6, int j); //错误int fun3(int n = 1, ...

2019-11-08 17:16:28 3560

原创 Qt编译时出现“undefined reference to 'vtable for' ”的问题及解决办法

问题的原因  Qt 通过信号与槽机制来实现通信的功能。当该类派生自QObject并且在头文件中添加Q_OBJECT宏以后,就可以使用信号与槽。当在类的头文件中添加Q_OBJECT以后QtCreator会自动的创建一个 moc_***.cpp文件,用于实现信号与槽通信的代码。但是,有时当我们通过QtCreator创建类的时候,没有通过IDE选项选择其派生自QObject类,而是在后面添加的,则会出...

2019-11-08 08:46:43 944

原创 C++设计模式----单例模式(1)

单例设计模式    单例设计模式是应用最多的一种设计模式,它要求每个类有且只能有一个实例对象。用C++设计一个单例模式的方法如下:一个类只允许创建唯一的对象,构造函数声明为私有;这样就保证了不能随意构造一个对象。将拷构造函数与等号运算符声明为私有,并不提供他们的实现;即禁止对象被拷贝。在类中声明一个静态的全局访问接口(静态成员变量)。声明一个静态的私有实例化指针。创建方式饿汉式...

2019-11-05 22:35:21 77

原创 Verilog数据拼接与拆分

1. Verilog中数据拼接,使用拼接运算符例如:reg [15:0] regA;reg[7:0] regB = 8'd12;reg[7:0] regC = 8'd34;regA <= {regB ,regC }; //把regB和regC拼接成regA。2.Verilog中数据拆分例如:wire[15:0] A; wire[7:0] B; ...

2019-10-28 17:31:04 20279 3

原创 C++抽象类与接口的实现

虚函数形式:virtual 函数原型 = 0;定义:在定义一个表达抽象概念的基类时,有时无法给出某些函数的具体实现方法,就可以将这些函数声明为纯虚函数。特点:无具体实现方法。抽象类定义:声明了纯虚函数的类,都称为抽象类。主要特点:抽象类智能作为基类来派生新类,不能声明抽象类的对象。 但是可以声明指向抽象类的指针变量或引用变量,通过指针或引用,就可以指向并访问派生类对象,进而访问派生类的...

2019-10-11 16:05:41 526

原创 Json的语法介绍

什么是JsonJSON指的是JavaScript对象表示法(JavaScript Object Notation)JSON是轻量级的文本数据交换格式JSON独立于语言JSON具有自我描述性,更易理解文件名扩展是==. json ==JSON使用范围用于编写基于JavaScript应用程序,包括浏览器扩展和网站JSON格式可以用于通过网络连接序列化和传输结构化数据Web服务和...

2019-10-09 15:17:07 686

原创 QMainWindow使用介绍

1 QMainWindow简介Qt中的顶层窗口称为MainWindow,属于类QMainWindow,通过子类化QMainWindow可以创建一个应用程序的窗口。MainWindow的结构分为五个部分:菜单栏(Menu Bar)、工具栏(Toolbars)、停靠窗口(Dock Widgets)、状态栏(Status Bar)和中央窗口(Central Widget)。可以用下面的图形表示:...

2019-09-27 15:02:57 1771

原创 FPGA中的端口使用记录

1. 输入端口可以有wire/reg类型驱动,但输出端口只能是wire类型。2. 关键字inout可以声明一个双向端口,inout端口不能声明为reg类型,只能是wire类型。3. 使用 inout 类型数据,使用方法举例:inout data_inout;input data_in;reg data_out_reg; reg data_in_reg;reg link_data;...

2019-09-10 09:11:06 728

原创 运动控制加减速算法(一)

加减速算法是运动控制中的关键技术之一,也是实现高速、高效率的关键因素之一。在工业生产中,一方面要求加工的过程平滑、稳定,柔性冲击小;另一方面需要响应时间快,反应迅速,各个工作环节可以在很短的时间内到达预定的期望值,缩短动作时间,提高效率。在保证控制精度的前提下来提高加工效率,实现加工速度的运动平滑稳定,并使运动速度具有较高的柔性,是目前工业加工中一直要解决的关键问题。当前运动控制系统中常用的加减速...

2019-08-10 22:08:47 13723 2

原创 AGV SLAM地图表示

地图表示的具体方式受到多种因素的影响,包括观测信息、实际环境、使用目的以及表示和创建的复杂度等。栅格表示法栅格表示法是地图表示的经典办法,在众多实际机器人系统中被普遍采样。其主要思路是通过离散化的栅格来近似连续的地图空间,进而达到简化描绘的目标。在基于栅格的地图表示中,地图被划分为大小相等的栅格,每个栅格对应真实环境的一个区域。栅格状态分为两种:空闲(free)和占据(Occupied),分别...

2019-08-08 10:49:23 2616

原创 轮椅的两轮差速转向控制策略(智能轮椅)

目前在公司这边做一个智能轮椅的项目。希望通过手柄实现轮椅的加减速和转向控制。在网上找了一篇文献,文献上提供了一种控制思路,供大家参考(修改了原文献上一些错误的地方)。手柄信号说明目前轮椅上使用的速度转向二维摇杆输出与位置成线性比例的二维电压信号,将这两个信号作为车速和转角的指令集合。用户前/后推动可以连续调节轮椅的车速,左/右推动可以连续控制轮椅的转角。通过操作手柄信号处理算法把一个二维信号转...

2019-08-05 15:36:38 13315

原创 同构处理器和异构处理器的区别

多核处理器 由于半导体工艺的极限限制,继续制造高性能的单核处理器将不再现实,并且随之带来的功耗与散热问题也没有解决方案。在这种情况下,越来越多的半导体厂商倾向于制造功耗更低、性能均衡的多核处理器以提高处理器的综合性能。按照内核架构是否相同,可以分为同构多核与异构多核。同构多核 同构多核常见于通用的多核处理器架构,如Intel、AMD推出的多核处理器等。同构多核的每个处理器核心的结构...

2019-07-30 10:25:53 15318

原创 CAN总线基础知识汇总

1. CAN总线信号使用查分电压传送,不用接地,两条信号线称为“CAN_H”和“CAN_L”,静态时均为2.5V左右,此时的状态表示为逻辑“1”,也可以叫做“隐性”;显性时,通常电压值为:CAN_H=3.5V,CAN_L=1.5V。2. 可连接的单元总数理论上是没有限制的。3. CAN总线的数据帧结构4. 多主控制:在总线空闲时,所有单元都可以发送消息(多主控制)。万一有两个以上单元要同时...

2019-07-24 10:58:05 2721

原创 推荐的C语言注释风格

规则一般情况下,源程序有效注释量必须在20%以上。说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、间接。说明性文件(比如头文件.h、.inc文件、.def文件、编译说明文件.cfg等)头部应该进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。...

2019-07-15 18:29:48 935

原创 Qt编译报错:The kit Desktop Qt has configuration issues which might be the root cause for this problem.

Qt在编译时报错Cannot find file: F:\TESTCODE\Qt\控件\battery\battery.pro.15:10:03: 进程"D:\Qt\Qt5.13.0\5.13.0\msvc2017\bin\qmake.exe"退出,退出代码 2 。Error while building/deploying project battery (kit: Desktop Qt ...

2019-07-15 15:15:36 13397 2

原创 AGV及两轮差动机器人调速和转弯

AGV及两轮差动机器人底盘的运动分析两轮驱动机器人底盘是由驱动电机提供动力源,通过控制两个驱动电机的速度,从而实现机器人的前进、后退、转向与停止。要实现机器人按照要求完成预定的轨迹,需要准确的控制电机的力矩输出。...

2019-07-04 13:47:18 4045

原创 PID控制算法学习与实现总结(二)位置式PID控制算法

PID算法数字化在上一节中讨论了连续PID控制的原理,但是计算机没有办法直接处理连续信号,只能根据采样时刻对连续信号进行采样,将采样之后的信号送给计算机处理。  按模拟PID控制算法,以一系列的采样时刻点,以矩形法数值积分近似代替积分,以一阶后向差分近似代替微分,即  t≈kT(k=0,1,2,⋅⋅⋅)t≈ kT (k=0,1,2,···)t≈kT(k=0,1,2,⋅⋅⋅) ...

2019-06-12 17:58:10 2881

原创 PID控制算法学习与实现总结(一)

前言在实际工程中,应用最为广泛的调节器控制器规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。据统计,目前工业控制器中约有90%是PID控制器。  当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其他技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这...

2019-06-06 16:13:59 3831

原创 Qt编译报错:undefined reference to '_imp__ZN8QPrinterC1ENs_11'

Qt5的工程编译报错:undefined reference to ‘_imp__ZN8QPrinterC1ENs_11’原因:Qt5中将所有打印的相关类都放到了Qt Print Support模块中。解决办法:在.pro文件中添加下面语句QT += printsupport...

2019-06-04 16:49:10 2852

原创 Ubuntu编译使用实时内核补丁(RT-PREEMPT kernel)并测试(亲测OK)

简介RT-Preempt patch 是在Linux社区kernel的基础上,加上相关的补丁,以使得Linux满足实时性的需求。项目主页见:https://rt.wiki.kernel.org/index.php/Main_Page下面的是编译和使用RT linux内核的流程,这里使用的Linux内核版本是4.4.0。运行环境使用的VMware虚拟机,上面安装的Ubuntu16.04 6...

2019-06-04 15:01:52 6087 1

原创 编译内核时报错:scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h: No such file or directory

在make zImage时,报错:scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h: No such file or directory解决办法:sudo apt-get install libssl-dev

2019-05-30 16:38:17 1080

原创 fatal error: curses.h: No such file or directory

在Ubuntu系统下面,编译新的Linux内核时,使用make menuconfig命令来配置内核时,发现会报错误。scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: No such file or directory解决办法:执行命令:sudo apt-get install libncurses5-dev...

2019-05-30 16:23:17 1048

原创 如何判断Linux系统是32位还是64位

如何判断Linux是32位还是64位方法一:getconf LONG_BIT在终端输入 getconf LONG_BIT命令。如果是32位机器,则结果为32[root@localhost ~]# getconf LONG_BIT32如果是64位机器,则结果为64[root@localhost ~]# getconf LONG_BIT64方法二: uname -a...

2019-05-29 09:05:50 290

转载 CSDN怎么转载别人的博客(详细)

参考博客原址 http://blog.csdn.net/bolu1234/article/details/51867099转载CSDN博客步骤:1、CSDN博客页面右键,点击【检查】 2、点击检查后,页面右侧出现html代码,如下图 ...

2019-05-28 14:05:48 81

原创 class_create()和device_create自动创建设备文件结点

在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_create创建对应的设备。早期写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了...

2019-05-26 12:04:59 686

原创 开发板上rmmod卸载驱动的时候,常见的错误总结

1出现 rmmod:chdir(xxx): No such file or directory原因:在/lib/module目录下没有内核版本的目录解决办法:在开发板上执行: mkdir -p /lib/module/ ‘uname -r’2 出现 rmmod:module ‘xxxx’ not found这个错误是由于/lib/modules/xxx (xxx是内核版本号)下没有驱动....

2019-05-26 11:22:58 1754

原创 驱动中使用class_devie_create()报错的原因

1自动创建设备节点在早期写字符类的设备驱动,没有自动创建设备节点,因为只使用了register_chrdev()函数,知识注册了这个设备。然后再系统启动后,就要自己创建设备节点mknod,这样虽然是可行的,但是比较麻烦。于是想在__init函数里面,自动创建设备节点。2 创建设备节点函数创建设备节点使用了两个函数 class_create()和class_device_create()。在_...

2019-05-26 11:05:45 320

原创 ARM开发板设置静态IP地址,重启有效

1. 修改 /etc/init.d/rcS文件。在 ifconfig lo 127.0.0.1 下面添加一行 ifconfig eth0 192.168.0.10 netmask 255.255.255.0 up

2019-05-26 09:54:21 2318

原创 Linux设备驱动编写(一)

Linux设备驱动编写(一)什么是驱动程序经典的驱动程序 HelloworldMakefile文件如下什么是驱动程序内核是操作系统基本的部分,而操作系统是不能够直接操作硬件的,这样我们就需要设备驱动程序作为操作系统和硬件设备间的粘合剂,负责上下两边的沟通。驱动负责将操作系统的请求传输,转化为特定物理设备控制器能够理解的命令。经典的驱动程序 Helloworld/2nd_module/1st...

2019-05-21 21:40:39 434

空空如也

空空如也

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

TA关注的人

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