用模拟器零成本体验MF开发

简介:       目前针对.Net Micro Framework无论是开发GPIO、SPI、I2C,还是串口通信都离不开硬件,前段时间我扩展了官方的MF模拟器,可以不用硬件,零成本的体验上述技术开发。

      目前针对.Net Micro Framework无论是开发GPIOSPII2C,还是串口通信都离不开硬件,前段时间我扩展了官方的MF模拟器,可以不用硬件,零成本的体验上述技术开发。

要体验MF开发,必须具备如下条件:

Ø  PC机上已安装VS2005

Ø  http://msdn.microsoft.com/zh-cn/embedded/bb267253(en-us).aspx 下载并安装MF 2.5 SDK

Ø  http://www.sky-walker.com.cn/MFEmulator_SDK.rar文档;

Ø  根据说明,在本机上注册该模拟器;

 

一、模拟器的使用

       1、模拟器下载

http://www.sky-walker.com.cn/MFEmulator_SDK.rar下载模拟器。

2、模拟器注册

压缩包“YFMF模拟器”目录中有一个YFEmulatorReg.exe文件,运行该文件,并选择打开模拟器文件,完成注册。

 

 

 

3、模拟器配置

新建一个MF工程,打开该工程的属性页,在Micro Framework选项中,设定我们扩展的模拟器。

 

 

 

4、启动后的模拟器

 

 

 

二、应用开发示例

   1GPIO测试

模拟器中相关GPIOPIN值如下:

I0~I7    Pin=10~17

Q9~Q7  Pin=20~27

完整的测试代码如下:

 

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

using System.Threading;

 

namespace GPIOTest

{

    public class Program

    {

        static  OutputPort[] output = new OutputPort[8];

        static InputPort[] input = new InputPort[8];

 

        public static void Main()

        {

            //叶帆模拟器GPIOpin定义

            Cpu.Pin[] pin_I = new Cpu.Pin[8] { (Cpu.Pin)10, (Cpu.Pin)11, (Cpu.Pin)12, (Cpu.Pin)13, (Cpu.Pin)14, (Cpu.Pin)15, (Cpu.Pin)16, (Cpu.Pin)17 };

            Cpu.Pin[] pin_Q = new Cpu.Pin[8] { (Cpu.Pin)20, (Cpu.Pin)21, (Cpu.Pin)22, (Cpu.Pin)23, (Cpu.Pin)24, (Cpu.Pin)25, (Cpu.Pin)26, (Cpu.Pin)27 };

 

            //GPIO

            for (int i = 0; i < 8; i++)

            {

                input[i] = new InputPort(pin_I[i], false, Port.ResistorMode.PullDown);

                output[i] = new OutputPort(pin_Q[i], false);

            }

 

            int Index = 0;

            while (true)

            {

                GPIOTest(ref Index);

                Thread.Sleep(200);

            }

        }

 

        //GPIO测试

        public static void GPIOTest(ref int Index)

        {

            output[Index].Write(!output[Index].Read());

            if (++Index > 7) Index = 0;

 

            string strPace = "   ";

            Debug.Print("Input : I0  I1  I2  I3  I4  I5  I6  I7");

            Debug.Print("        "+(input[0].Read() ? "1" : "0") + strPace + (input[1].Read() ? "1" : "0") + strPace + (input[2].Read() ? "1" : "0") + strPace + (input[3].Read() ? "1" : "0") + strPace + (input[4].Read() ? "1" : "0") + strPace + (input[5].Read() ? "1" : "0") + strPace + (input[6].Read() ? "1" : "0") + strPace + (input[7].Read() ? "1" : "0"));

 

            Debug.Print("Output: Q0  Q1  Q2  Q3  Q4  Q5  Q6  Q7");

            Debug.Print("        " + (output[0].Read() ? "1" : "0") + strPace + (output[1].Read() ? "1" : "0") + strPace + (output[2].Read() ? "1" : "0") + strPace + (output[3].Read() ? "1" : "0") + strPace + (output[4].Read() ? "1" : "0") + strPace + (output[5].Read() ? "1" : "0") + strPace + (output[6].Read() ? "1" : "0") + strPace + (output[7].Read() ? "1" : "0"));

        }

    }

}

 

 

 

 

测试结果:

 

 

  2SPI测试

模拟器中相关SPIPIN值如下:

PIN=30

完整的测试代码如下:

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

using System.Threading;

 

namespace SPITest

{

    public class Program

    {

        static SPI _spi;

        static int QAW = 0;

        public static void Main()

        {

            //SPIpin定义

            _spi = new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, false, false, 4000, SPI.SPI_module.SPI1));

 

            while (true)

            {

                SPITest();

                Thread.Sleep(200);

            }

        }

 

        //读写SPI数据

        private static Int16 SPIReadWrite(Int16 value)

        {

            byte[] bout = new byte[2];

            byte[] bin = new byte[2];

            bout[0] = (byte)(value >> 8);

            bout[1] = (byte)(value & 0xff);

            _spi.WriteRead(bout, bin);

            Int16 aw0 = (Int16)((bin[0] << 8) + bin[1]);

            return aw0;

        }

 

        //SPI测试

        public static void SPITest()

        {

            if (QAW++ > 100) QAW = 0;

            Debug.Print("SPI: DI=" + SPIReadWrite((Int16)QAW).ToString() + "   DO=" + QAW.ToString());

        }

    }

}

     测试结果:

    

  3I2C测试

模拟器中相关I2C的地址如下:

地址=100

 

完整的测试代码如下:

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

using System.Threading;

 

namespace I2CTest

{

    public class Program

    {

        //I2C定义                           模拟器I2C地址为100 时钟速度不要设置太小否则会有问题

        static I2CDevice I2CBus = new I2CDevice(new I2CDevice.Configuration(100, 200));

        static int IntI2CNum = 0;

 

        public static void Main()

        {

            while (true)

            {

                I2CTest();

                Thread.Sleep(200);

            }

        }

 

        //I2C测试

        public static void I2CTest()

        {

            if (++IntI2CNum > 10) IntI2CNum = 0;

            //I2C读写

            byte[] bytRData = new byte[8];

            byte[] bytWData = new byte[3];

            bytWData[0] = (byte)IntI2CNum;

            bytWData[1] = (byte)(IntI2CNum * 2);

            bytWData[2] = (byte)(IntI2CNum * 3);

            I2CDevice.I2CTransaction[] i2c = new I2CDevice.I2CTransaction[2];

            i2c[0] = I2CBus.CreateReadTransaction(bytRData);

            i2c[1] = I2CBus.CreateWriteTransaction(bytWData);

            I2CBus.Execute(i2c, 100);   //执行

 

            string strPace = "  ";

            string strInfo = "I2C(Byte0-7):" + bytRData[0].ToString() + strPace + bytRData[1].ToString() + strPace + bytRData[2].ToString() + strPace + bytRData[3].ToString() + strPace + bytRData[4].ToString() + strPace + bytRData[5].ToString() + strPace + bytRData[6].ToString() + strPace + bytRData[7].ToString();

            Debug.Print(strInfo);

        }

 

    }

}

  测试结果:

 

 

4、其它测试

串口、鼠标等等测试,暂略,有兴趣的朋友可以自行测试。

 

三、嵌入式开发资源

    Windows Embedded中文官方网站

     http://www.microsoft.com/china/windows/embedded

    .NET Micro Framework

     http://msdn2.microsoft.com/zh-cn/embedded/bb267253.aspx

    Microsoft Robotics Studio

    http://msdn2.microsoft.com/zh-cn/robotics/default.aspx

    微软嵌入式开发者论坛

     http://forums.microsoft.com/china/default.aspx?ForumGroupID=493&SiteID=15

    微软中国嵌入式开发者博客

     http://blogs.msdn.com/yunxu/

    Mike Hall的博客

     http://msdn2.microsoft.com/zh-cn/embedded/ Aa731228.aspx

    Windows Embedded 专题

      http://we.cnblogs.com/

    叶帆工作室(CSDN

      http://blog.csdn.net/yefanqiu/

    叶帆工作室(博客园)

      http://www.cnblogs.com/yefanqiu

相关文章
|
9月前
|
Android开发 iOS开发 Windows
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
无影ios & Android客户端6.0.0版本发布!移动端触控体验更舒适,用户操作更便捷,一起来看看!
678 0
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
|
API 开发工具 Android开发
加速你的安卓模拟器,让开发更迅速
我看到一篇文章声称:使用英特尔的硬件加速执行管理器(HAXM)驱动可以对安卓模拟器进行加速。这让我很兴奋,所以决定去验证这个说法。这篇博文就是我验证的过程。
279 0
加速你的安卓模拟器,让开发更迅速
|
存储 芯片 内存技术
基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程
基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程
864 0
基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程
|
安全 Java 关系型数据库
产品百科 |零门槛搭建一个 1 对 1 语音聊天 Demo (iOS 版)
您可以阅读本文,快速了解 1 对 1 语音聊天的基本概念和实现方法。
产品百科 |零门槛搭建一个 1 对 1 语音聊天 Demo (iOS 版)
|
缓存 Serverless 对象存储
iOS系统开发提升体验优化方案
随着Flutter等跨端框架的出现,业务开发同学经常需要在Android/IOS上跨端进行业务开发,问题定位等。新的不熟悉的环境的搭建总会遇到各种各样的问题,导致搭建失败,特别是IOS开发环境,是最复杂的,不仅环境搭建繁琐,而且切分支后的打包速度很慢,所以我们设计实现了两个工具,用于优化闲鱼IOS开发体验。
|
弹性计算 IDE 前端开发
软萌小姐姐居家直播,讲解 IDE 插件以及VS Code新版本发布,开发部署提速8倍
软萌小姐姐居家直播——前端新突破,IDE 插件发布 Visual Studio Code 新版本,一键打包部署,开发提速 8 倍
1389 1
软萌小姐姐居家直播,讲解 IDE 插件以及VS Code新版本发布,开发部署提速8倍
|
Kubernetes 小程序 IDE
这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍
今年3月份,在阿里云北京峰会上,阿里巴巴正式发布了“阿里巴巴小程序繁星计划”,截至当前,已经有成千上万的开发者加入这个计划。我们要善于运用工具来最大化地发挥自己的能力,所以,为了更进一步提升小程序开发者的工作效率和开发体验,阿里云提供了免费的小程序开发插件——「Cloud Toolkit」。
1210 0
这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍
|
弹性计算 Java 应用服务中间件
让开发部署提速 8 倍,我参与贡献这款 IDE 插件的全过程
如何像参与开源那样,去参与一款 IDE 插件的设计? 作为一款 IDE 插件的使用者,我是否能决定下一个版本的功能?
3514 0
|
Windows 开发者 开发工具