自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QT (1) 编写Qt类库来设计上下位机串口通信系统的上位机

前言前一篇文章讲到了利用C#窗体应用程序来设计上位机的界面软件,但是这样的界面软件还不够通用,只能定制化运行,图形界面的代码和上位机初步处理数据的代码耦合性较高。所以这篇文章讲了利用QT Creator将上位机部分的代码编写成QT类库,从而和图形界面解耦合,如果使用不同的软件开发图形界面,都可以使用到这个类库。创建一个QT程序首先我们需要创建一个QT程序来当做这个类库的主窗体,打开Qt C...

2019-08-12 13:05:40 2298 4

原创 Visual C# (1) 使用windows窗体应用程序设计上下位机串口通信系统的上位机界面

前言前一篇文章讲了利用Arduino mega2560来设计上下位机串口通信系统的下位机,这一章则要讲如何设计上位机界面软件,这里我们先选用了VS2013自带的Visual C#。这是微软公司开发的C#编程语言规格之集成开发环境使用者接口,可以帮助开发者快速地设计出一款适合自己的界面软件。创建窗体应用程序首先打开VS2013,选择工具栏中的"文件"->“新建”->“项目”-&g...

2019-08-09 18:15:40 7579 6

原创 Arduino(5) 使用Mega2560设计上下位机串口通信系统的下位机

前言因项目需求,我们要从PC端去控制一些外部设备,比如激光器、光放大器等,这些设备一般使用到的都是低速的串口通信,所以我们需要设计一个上下位机串口通信系统来控制这些设备。这篇文章先讲如何使用Arduino Mega2560开发板来作为下位机控制各个外部设备。上下位机工作原理通常来说,上位机指的是PC端的控制软件,比如可以设置读取参数的界面软件,下位机则是指单片机或者带微处理器的系统,这里我...

2019-08-09 15:26:25 3627

原创 Arduino(4) 编写和使用类库

前言在使用Arduino mega2560作为控制板时,如果需要控制的模块比较多,那么将代码全部都写在一份文档里会显得十分臃肿,不利于后续的代码维护和进一步开发,所以根据不同的模块编写相对应的类库就很重要了。1. 编写类库在Arduino IDE的工具栏里选择“项目”->“加载库”,可以看到很多第三方库,有需求的话可以点击选择加载,就可以在代码区最前面看到 #include <...

2019-08-08 18:29:39 4179

原创 Arduino(3) Mega2560和外部设备SPI通信

前言这篇文章主要讲Arduino串行通信里的SPI通信。SPI(Serial Peripheral Interface,串行外设接口)高速通信接口一般用在于对于数据量要求比较大的设备或者场景里,例如SD卡,网络芯片,而Arduino支持SPI总线,从而可以和一些使用SPI总线的设备通信,一根SPI总线上可以连接多个SPI从设备。SPI设置在一个SPI设备中,通常会有4个引脚。SPI总线有主...

2019-08-08 17:26:24 11462

原创 Arduino(2) Mega2560和外部设备串口通信

前言Arduino开发板因为搭载的I/O资源较少,所以通常会采用串行通信方式。其中Arduino硬件集成了串口、IIC、SPI三种常见的通信方式,可以与具有相应通信接口的各种设备通信。这一章先介绍一下串口通信。参考:CSDN博客 【STM32】串口通信基本原理(超基础、详细版)—— Yngz_Miao硬件串口通信串口也被称为UART(Universal Asynchronous Rece...

2019-07-10 16:02:53 17546 1

原创 Arduino(1) 软件安装和初步使用

前言项目需要开始做上下位机的通信程序,下位机用的控制板就是Arduino,型号是mega2560,它提供了四组UARTs通信接口,也支持SPI和I2C通信。参考书籍:Arduino程序设计基础(第2版)——陈吕州Arduino权威指南(第2版)——Michael Margolis(美)软件安装首先去arduino官网下载安装包,根据操作系统选择不同的版本,这里我用的时最新的Ardu...

2019-07-10 10:32:33 16119

原创 驱动程序(13) 将Windriver编写的程序制成DLL供其他程序调用

制作动态链接库(DLL)之前的操作里,我通常是将写好的程序生成exe文件,运行来看结果如何;但是实际中往往驱动程序需要被上层软件调用,比如我现在利用windriver来完成DMA传输后,传输好的数据需要提供给上层软件继续使用,这时候将我们写好的程序做成DLL就会方便很多。1. 改变主程序的配置类型第一步我们需要改变主程序的配置类型,选择主程序的“项目->配置属性->常规->...

2019-05-21 11:27:05 1772 9

原创 驱动程序(12) Windriver下访问虚拟设备内存资源的方法

前言在驱动程序(10)里曾经讲过有一种方法,可以把电脑端的一部分内存保留下来制成类似于虚拟设备,只提供给windriver使用,从而作为DMA传输的目的地址。现在讲一下当DMA传输完成之后,如何去访问这块内存资源。实际上,我们就可以将这部分内存资源看成挂载在了虚拟设备上,可以通过访问真实外部设备一样去访问虚拟设备。虚拟设备制作#define ReservedMemBase 0x42f0000...

2019-01-16 15:35:52 1589 5

原创 驱动程序(11) Windriver下读写外部设备BAR内存资源的方法

前言在利用windriver生成外部设备的驱动程序的时候,我们往往需要去访问外部设备上的内存资源,windriver提供了几种API接口(以下都以32位来介绍),只需要提供一些参数就可以访问到外部设备的内存资源了。WDC_WriteAddr32/WDC_ReadAddr32这两个API函数的定义如下:hDev:被访问的外部设备的句柄dwAddrSpace:外部设备上的某个地址空间段,也就...

2019-01-16 14:32:42 2284

原创 驱动程序(10) Windriver实现DMA传输时分配超大内存Buffer的办法

前言利用windriver做DMA传输的时候,尤其是将数据从板卡传输到PC端时,往往需要分配内存buffer。windriver给了两种方法,Contiguous buffer模式(WDC_DNAContigBufLock)和Scatter/Gather(WDC_DMASGBufLock)模式。PC内存比较小的情况下可以使用Scatter/Gather模式,分配到的内存buffer就是每页固定、...

2018-12-24 15:06:09 4410 14

原创 驱动程序(9) 利用Windriver修改代码实现DMA传输定制功能的驱动程序

前言前一篇文章讲到了利用windriver来生成一个对应使用的板卡的驱动程序,并且有相对应的INF文件给板卡安装上。这个生成的驱动程序代码包含了基本的访问板卡的功能,甚至可以实现DMA传输等功能(需要你的板卡支持DMA操作),但是这个驱动程序是基于交互式的,将程序编译生成exe文件运行后,还需要操作者输入访问的寄存器偏移地址或者数据等,没法做到自动执行。所以,我们在得到这份驱动代码后,基于这个框...

2018-12-21 15:13:53 4448 9

原创 驱动程序(8) Windriver初步使用和快速生成驱动程序代码

Windriver简介之前使用微软WDF框架下的WDK开发Windows驱动程序,使用起来调试速度太慢了,同时需要对内核态驱动程序有一定了解,就转到使用Windriver来开发驱动程序。就我个人而言,这款软件最大好处就在于它屏蔽了内核态下驱动程序的细节,所有的开发工作都建立在用户态下,你不必担心因为某些操作导致电脑蓝屏死机(当然有些特殊操作同样会蓝屏);开发代码也像写C语言一样,调试起来非常方...

2018-12-17 11:34:33 3763 7

原创 驱动程序(7) WDF下DMA传输的驱动程序代码详细说明之应用程序

这一篇主要说明应用程序怎么去和驱动程序通信的,包括识别打开驱动程序,传递数据到驱动程序,同时接收驱动程序返回的数据。application.c首先是应用程序的创建,WDF里利用模板生成驱动程序时时不带有应用程序的源文件的,需要我们自己手动生成,其实就是和创建一个C语言文件一样。找到驱动程序的解决方案,右键选择‘添加’-&amp;amp;amp;gt;‘新建项目’-&amp;amp;amp;gt;‘测试’-&amp;amp;amp;gt;‘Applications...

2018-12-14 15:01:29 1323 1

原创 驱动程序(6) WDF下DMA传输的驱动程序代码详细说明之queue.c

这一篇主要讲queue.c里对于消息请求队列的处理,涉及到了和应用程序的通信,同时为了以后的项目需求,也加入了DMA传输和传输完成后的MSI中断处理。queue.c/*++Module Name: queue.cAbstract:This file contains the queue entry points and callbacks.And it includes DeviceIoC...

2018-12-14 15:01:12 2257 7

原创 驱动程序(5) WDF下DMA传输的驱动程序代码详细说明之device.c

这一篇文章说明了在device.c文件里,驱动程序怎样枚举设备,然后获得设备资源,并将其显示出来供开发者使用。device.c/*++Module Name: device.c - Device handling events for example driver.Abstract: This file contains the device entry points and callba...

2018-12-14 15:00:51 2095 10

原创 驱动程序(4) WDF下DMA传输的驱动程序代码详细说明之driver.c

从这一篇开始介绍几个比较重要的源文件和应用程序,并且会对其中一些关键代码进行说明。这些代码流程都是本人亲身测试可行的,但是由于当时调试时杂七杂八的东西加的太多,现在看起来有的地方的代码风马牛不相及,如果完全照搬的话可能行不通的,还是需要各位读者自行理解然后加以改进的。当然如果有问题也欢迎各位读者指出更正,谢谢!driver.c/*++Module Name: driver.cAbstrac...

2018-12-14 14:54:03 2615 1

原创 驱动程序(3) WDF下DMA传输的驱动程序代码详细说明之头文件

之前提到根据KMDF模板生成的程序里主要有5个头文件和3个源文件,接下来的几篇文章则会对这些文件详细说明,一个驱动程序是怎样写成的。这一篇主要说明几个头文件。1. device.h/*++Module Name: device.hAbstract: This file contains the device definitions.Environment: Kernel-mode ...

2018-12-14 14:53:45 1617

原创 驱动程序(2) Win10+VS2017驱动程序在双机通信下的内核态调试

上一篇内容里已经讲到了如何搭建双机通信,这也是为内核态下的调试做准备。众所周知,KMDF驱动程序主要分为两个部分的代码,一个是包含DriverEntry、DeviceAdd和一些对于触发事件的回调函数,下面我会统一称为驱动程序;另一部分则是从用户态上发出一些IO指令请求,需要驱动程序来做出应答,通常使用的是CreteFile或者IoDeviceControl这些函数,这部分我叫它应用程序。 无论...

2018-09-07 10:47:28 1304 2

原创 驱动程序(1) win10下Visual Studio 2017的安装以及双机调试搭建

前言:毕业上班以来,现在这个项目比较缺一个做windows下驱动程序开发的,所以本人就顶上来了。之前没有接触过,完全萌新,全靠一本武安河编著的《Windows设备驱动程序WDF开发》和各路网上大神们的博客。现在把这段时间来的一些经历和体会写下来,如有错误还请各位请点,轻喷 QAQwin10下Visual Studio安装 本人用的是windows10教育版,首先去微软官网下载VS Comm...

2018-09-07 10:27:26 5515 3

空空如也

空空如也

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

TA关注的人

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