• 【物联网智能网关10】构建.NET MF平台下的流式驱动模型


    无论是做linux下的驱动开发,还是Windows CE平台下的驱动开发,对流式驱动模型一定非常熟悉。在此架构下,把所有的硬件设备都看成文件,和设备的交互其实就是读写文件,也就是数据流动。这样开发驱动不仅简单实用,并且用户也用一致的接口访问硬件,大大降低了学习代价。但是在.NET Micro Framework平台下,却没有提供这样的驱动开发接口,用户如果想在应用层操作硬件,必须要做一个专门的接口库(Interop),如果有n个设备,对应的驱动接口库文件也必须n个,如果一个应用程序和n个设备通信,那就必须引用n个库了。另外如果库接口有更改,那么上层和底层代码还必须重新编译才能使用。

    正是基于流式驱动的一些优点和Interop驱动接口开发的繁杂,所以我在.NET Micro Framework系统上构建了一套流式驱动架构。尤为值得一提的是,在流式驱动架构的基础上,还实现了的用户可以在MDK IDE环境下,采用C++开发流式驱动(参见相关文章《.NET Micro Framework动态调用C/C++底层代码》)。

    流式驱动应用层的C#接口代码如下:

    public sealed class GeneralStream
    
        {
    
            publicGeneralStream();
    
            public event GeneralStreamEventHandlerNotice;
    
            public int Close();
    
            public int IOControl(intcode);
    
            public int IOControl(intcode, int parameter);
    
            public int IOControl(intcode, byte[] inBuffer, intinCount, byte[] outBuffer, int outCount);
    
            public int Open(stringname);
    
            public int Open(string name,int config);
    
            public int Open(string name,string config);
    
            public int Read(byte[]buffer, int offset, intcount);
    
            public int Write(byte[]buffer, int offset, intcount);
    
        }

    以上接口其实和WinCE平台下的流式接口非常类似了,但是比较有特色的是,还提供了一个事件通知接口,这样就为各种硬件驱动开发提供了更灵活的支持。有了这个流式接口,一般情况下,为上层C#语言提供专有的硬件底层功能,就不需要再编写接口相关的代码了,直接写相关的C/C++代码,然后编译链接即可。 

    当前已经基于流式驱动接口,实现了10个设备和功能模块的驱动,下面先简单介绍一下,后续将详细写文章一一介绍。

    序号

    名称

    说明

    备注

    000

    UserDriver

    用户流式驱动开发接口

    MDK下的C++开发

    001

    Watchdog

    看门狗驱动

    002

    Ultrasonic

    超声波模块驱动

    测距

    003

    DHT11

    温湿度模块驱动

    004

    GPIO

    GPIO特殊功能驱动

    比如可以配置开漏

    005

    Counter

    高速计数器

    006

    ADIS16227

    ADIS16227模块驱动

    基于特殊的SPI接口

    007

    MAX7219

    MAX71219芯片驱动

    LED和点阵控制

    008

    PCD8544

    Norkia5110显示模块驱动

    009

    LCD1602

    LCD1602模块驱动

       在开发ADIS16227、Norkia5110和LCD1602模块驱动的过程中,深切感受到,给用户留一个C++驱动开发接口非常重要,因为这类驱动,上层应用一是没有现成的接口,二是直接用C#是不能实现的,所以必须底层移植,如果没有现成用户接口,就必须依赖厂商了,这很大层度上限制了用户的开发的主动性和灵活性,还有对产品及项目的把控性。

       关于这部分内容,我在用户流式驱动开发接口(UserDriver)的文章中会详细介绍。

     -----------------------------------------------------------

    MF简介:http://blog.csdn.net/yefanqiu/article/details/5711770

    MF资料:http://www.sky-walker.com.cn/News.asp?Id=25

  • 相关阅读:
    SqL读取XML、解析XML、SqL将XML转换DataTable、SqL将XML转换表
    C#DataTable复制、C#DataTable列复制、C#DataTable字段复制
    Dev、GridControl的模糊查询
    C#两个时间相减
    C# % 和 /
    C#时间、日期 的操作
    linux文件操作
    shell ftp上传下载文件
    POM详细配置
    maven 本地setting.xml配置
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/2699763.html
Copyright © 2020-2023  润新知