用模拟器零成本体验MF开发-阿里云开发者社区

开发者社区> 技术小美> 正文

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

简介:
+关注继续查看

目前针对.Net Micro Framework无论是开发GPIO、SPI、I2C,还是串口通信都离不开硬件,前段时间我扩展了官方的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下载模拟器及PPT文档;

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

 

一、模拟器的使用

       1、模拟器下载

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

2、模拟器注册

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

 

 

 


3、模拟器配置

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

 


 

 

4、启动后的模拟器

 

 

 

 


二、应用开发示例

   1、GPIO测试

模拟器中相关GPIO的PIN值如下:

I0~I7    :Pin=10~17

Q9~Q7  :Pin=20~27

完整的测试代码如下:

 


  1. using System;  
  2.  
  3. using Microsoft.SPOT;  
  4.  
  5. using Microsoft.SPOT.Hardware;  
  6.  
  7. using System.Threading;   
  8.  
  9.    
  10.  
  11. namespace GPIOTest  
  12.  
  13. {  
  14.  
  15.     public class Program  
  16.  
  17.     {  
  18.  
  19.         static  OutputPort[] output = new OutputPort[8];  
  20.  
  21.         static InputPort[] input = new InputPort[8];  
  22.  
  23.    
  24.  
  25.         public static void Main()  
  26.  
  27.         {  
  28.  
  29.             //叶帆模拟器GPIO的pin定义  
  30.  
  31.             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 };  
  32.  
  33.             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 };  
  34.  
  35.    
  36.  
  37.             //GPIO  
  38.  
  39.             for (int i = 0; i < 8; i++)  
  40.  
  41.             {  
  42.  
  43.                 input[i] = new InputPort(pin_I[i], false, Port.ResistorMode.PullDown);  
  44.  
  45.                 output[i] = new OutputPort(pin_Q[i], false);  
  46.  
  47.             }  
  48.  
  49.    
  50.  
  51.             int Index = 0;  
  52.  
  53.             while (true)  
  54.  
  55.             {  
  56.  
  57.                 GPIOTest(ref Index);  
  58.  
  59.                 Thread.Sleep(200);  
  60.  
  61.             }  
  62.  
  63.         }  
  64.  
  65.    
  66.  
  67.         //GPIO测试  
  68.  
  69.         public static void GPIOTest(ref int Index)  
  70.  
  71.         {  
  72.  
  73.             output[Index].Write(!output[Index].Read());  
  74.  
  75.             if (++Index > 7) Index = 0;  
  76.  
  77.    
  78.  
  79.             string strPace = "   ";  
  80.  
  81.             Debug.Print("Input : I0  I1  I2  I3  I4  I5  I6  I7");  
  82.  
  83.             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"));  
  84.  
  85.    
  86.  
  87.             Debug.Print("Output: Q0  Q1  Q2  Q3  Q4  Q5  Q6  Q7");  
  88.  
  89.             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"));  
  90.  
  91.         }  
  92.  
  93.     }  
  94.  
  95. }  
  96.  

 


 

测试结果:

 

 

 


  2、SPI测试

模拟器中相关SPI的PIN值如下:

PIN=30

完整的测试代码如下:

 


  1. using System;  
  2.  
  3. using Microsoft.SPOT;  
  4.  
  5. using Microsoft.SPOT.Hardware;  
  6.  
  7. using System.Threading;  
  8.  
  9.    
  10.  
  11. namespace SPITest  
  12.  
  13. {  
  14.  
  15.     public class Program  
  16.  
  17.     {  
  18.  
  19.         static SPI _spi;  
  20.  
  21.         static int QAW = 0;  
  22.  
  23.         public static void Main()  
  24.  
  25.         {  
  26.  
  27.             //SPI的pin定义  
  28.  
  29.             _spi = new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, falsefalse, 4000, SPI.SPI_module.SPI1));  
  30.  
  31.    
  32.  
  33.             while (true)  
  34.  
  35.             {  
  36.  
  37.                 SPITest();  
  38.  
  39.                 Thread.Sleep(200);  
  40.  
  41.             }  
  42.  
  43.         }  
  44.  
  45.    
  46.  
  47.         //读写SPI数据  
  48.  
  49.         private static Int16 SPIReadWrite(Int16 value)  
  50.  
  51.         {  
  52.  
  53.             byte[] bout = new byte[2];  
  54.  
  55.             byte[] bin = new byte[2];  
  56.  
  57.             bout[0] = (byte)(value >> 8);  
  58.  
  59.             bout[1] = (byte)(value & 0xff);  
  60.  
  61.             _spi.WriteRead(bout, bin);  
  62.  
  63.             Int16 aw0 = (Int16)((bin[0] << 8) + bin[1]);  
  64.  
  65.             return aw0;  
  66.  
  67.         }  
  68.  
  69.    
  70.  
  71.         //SPI测试  
  72.  
  73.         public static void SPITest()  
  74.  
  75.         {  
  76.  
  77.             if (QAW++ > 100) QAW = 0;  
  78.  
  79.             Debug.Print("SPI: DI=" + SPIReadWrite((Int16)QAW).ToString() + "   DO=" + QAW.ToString());  
  80.  
  81.         }  
  82.  
  83.     }  
  84.  
  85. }  
  86.  

     测试结果:

    

 

  3、I2C测试

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

地址=100

 

完整的测试代码如下:


  1. using System;  
  2.  
  3. using Microsoft.SPOT;  
  4.  
  5. using Microsoft.SPOT.Hardware;  
  6.  
  7. using System.Threading;  
  8.  
  9.    
  10.  
  11. namespace I2CTest  
  12.  
  13. {  
  14.  
  15.     public class Program  
  16.  
  17.     {  
  18.  
  19.         //I2C定义                           模拟器I2C地址为100 时钟速度不要设置太小否则会有问题  
  20.  
  21.         static I2CDevice I2CBus = new I2CDevice(new I2CDevice.Configuration(100, 200));  
  22.  
  23.         static int IntI2CNum = 0;  
  24.  
  25.    
  26.  
  27.         public static void Main()  
  28.  
  29.         {  
  30.  
  31.             while (true)  
  32.  
  33.             {  
  34.  
  35.                 I2CTest();  
  36.  
  37.                 Thread.Sleep(200);  
  38.  
  39.             }  
  40.  
  41.         }  
  42.  
  43.    
  44.  
  45.         //I2C测试  
  46.  
  47.         public static void I2CTest()  
  48.  
  49.         {  
  50.  
  51.             if (++IntI2CNum > 10) IntI2CNum = 0;  
  52.  
  53.             //I2C读写  
  54.  
  55.             byte[] bytRData = new byte[8];  
  56.  
  57.             byte[] bytWData = new byte[3];  
  58.  
  59.             bytWData[0] = (byte)IntI2CNum;  
  60.  
  61.             bytWData[1] = (byte)(IntI2CNum * 2);  
  62.  
  63.             bytWData[2] = (byte)(IntI2CNum * 3);  
  64.  
  65.             I2CDevice.I2CTransaction[] i2c = new I2CDevice.I2CTransaction[2];  
  66.  
  67.             i2c[0] = I2CBus.CreateReadTransaction(bytRData);  
  68.  
  69.             i2c[1] = I2CBus.CreateWriteTransaction(bytWData);  
  70.  
  71.             I2CBus.Execute(i2c, 100);   //执行  
  72.  
  73.    
  74.  
  75.             string strPace = "  ";  
  76.  
  77.             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();  
  78.  
  79.             Debug.Print(strInfo);  
  80.  
  81.         }  
  82.  
  83.    
  84.  
  85.     }  
  86.  
  87. }  
  88.  

  测试结果:

 

 

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/

•    叶帆工作室(51CTO)http://blog.51cto.com/yfsoft/321280

http://yfsoft.blog.51cto.com

•    叶帆工作室(博客园)

      http://www.cnblogs.com/yefanqiu

 








本文转自yefanqiu51CTO博客,原文链接:,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
VS2015开发Android,自带模拟器无法调试、加载程序,算是坑吗
VS2015出来后,确定变化很大,什么android、ios的,不在话下。对于我这样传统型的人,也第一时间试用了一下(vs2003->vs2008->vs2012->vs2015)。以前用eclipse开发过android小程序,现在想试试vs ide怎么样。
456 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8522 0
HaaS100开发调试系列 之 如何使用J-Link仿真器调试代码
今年阿里云官方推出的HaaS100开发板引起了嵌入式开发者的极大关注,阿里云IOT部门提供的开发者7*24小时咨询答疑服务,也受到了广大开发人员的欢迎。
75 0
IVORY – 轻量、灵活、功能强大的前端开发框架
  Bootstrap 和 Foundation 是目前使用最广发的前端开发框架,不过有的时候我们需要的是一个更轻量的方案,IVORY 也许就是你需要的。IVORY 基于12列的响应式网格布局,包含表格,按钮,表格,分页,拨动开关,工具提示,手风琴,选项卡等网站中常用的组件和样式。
754 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10359 0
JS轻应用热更新 - 无需连线轻松进行嵌入式设备开发调试
不同于传统嵌入式开发流程,轻应用的JavaScript应用在PC端开发完成后,无需编译、链接、固件烧录等繁琐步骤,用户可直接使用命令行工具动态推送最新的应用到指定设备,这个过程我们称之为应用热更新。
85 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
12203 0
+关注
6906
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载