Windows Embedded Blog from China

  • 14, .Net Micro Framework研究—带I2C总线的模拟器

           作者: 刘洪峰

    I2C以前没有怎么接触过,所以做它的模拟功能,只能靠着感觉走,有不妥之处,还望方家指正。做出了spi相关的模拟功能,做I2C相对也就不难了,只不过用户操作I2C总线读写数据的时候要稍微麻烦一点。

    测试程序运行界面:
     
    模拟器中的I2C总线的相关代码如下:
         public class I2CComponent : I2cDevice
        {
            public byte[] bytData = new byte[8];
            protected override void DeviceRead(byte[] data)
            {
                try
                {
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i < bytData.Length) data[i] = bytData[i];
                    }
               }
                catch { }
                base.DeviceRead(data);
            }
            protected override void DeviceWrite(byte[] data)
            {
                try
                {
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i < bytData.Length) bytData[i] = data[i];
                    }
                }
                catch { }
                base.DeviceWrite(data);
            }
            protected override void DeviceBeginTransaction()
            {
                base.DeviceBeginTransaction();
            }
            protected override void DeviceEndTransaction()
            {
                base.DeviceEndTransaction();
            }
        }
    测试代码如下(还是在原来程序的基础上进行扩充):
        static SPI _spi;
        public static void Main()
        {
            OutputPort[] output = new OutputPort[8];
            InputPort[] input = new InputPort[8]; 
           
            //叶帆模拟器GPIO的pin定义
            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 };
     
            //SPI的pin定义
            _spi=new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, false, false, 4000, SPI.SPI_module.SPI1));
     
            //I2C定义                           模拟器I2C地址为100 时钟速度不要设置太小否则会有问题
            I2CDevice I2CBus = new I2CDevice(new I2CDevice.Configuration(100, 200));
     
            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 intNum = 0;
            while (true)
            {
                output[intNum].Write(!output[intNum].Read());
                Debug.Print("I   : "+input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString()+ " " + input[5].Read().ToString() + " " + input[6].Read().ToString() + " " + input[7].Read().ToString());
                Debug.Print("AD : "+ReadWriteAD((Int16)intNum).ToString() + " " + intNum.ToString());
                //---------------------------------------
     
                //I2C读写
                byte[] bytRData = new byte[8];
                byte[] bytWData = new byte[3];
                bytWData[0] = (byte)intNum;
                bytWData[1] = (byte)(intNum * 2);
                bytWData[2] = (byte)(intNum * 3);
                I2CDevice.I2CTransaction[] i2c = new I2CDevice.I2CTransaction[2];
                i2c[0]=I2CBus.CreateReadTransaction(bytRData);
                i2c[1] = I2CBus.CreateWriteTransaction(bytWData);
                I2CBus.Execute(i2c, 100);   //执行
     
                Debug.Print("I2C : " + bytRData[0].ToString() + " " + bytRData[1].ToString() + " " + bytRData[2].ToString() + " " + bytRData[3].ToString() + " " + bytRData[4].ToString() + " " + bytRData[5].ToString() + " " + bytRData[6].ToString() + " " + bytRData[7].ToString());
     
                //---------------------------------------
                if (++intNum > 7) intNum = 0;
                Thread.Sleep(800);
            }
        }
        public static Int16 ReadWriteAD(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;
        }

          好了,模拟器的工作暂时告一个段落,有时间把该模拟器完善一下,给感兴趣的网友共享,这样就不用购买硬件就可以测试一些有意思的代码和功能了(一个测试板卡要好几百美元呢!)。

  • 13,.Net Micro Framework研究—带AD的模拟器

           作者: 刘洪峰

     

    继昨天的研究,希望再接再厉把AD模入模出在模拟器上也实现出来,本以为挺简单,其实AD相关功能,与GPIO不同,在模拟器中前者通过GpioPort实现,后者通过SpiDevice实现。幸好有Temperature(温度采集)示例可以参考,否则一时真无法下手。不知道为什么,很简单的代码他们总写的很复杂,让你很难看懂,幸好有以前的相关的经验做底子,用了大半天的时间模入模出都搞定了。
    下面就是模拟器中的AD输入输出的相关代码。
        public class SpiADComponent : SpiDevice
        {
            public Int16 AW0 = 0;
            public Int16 QW0 = 0;
            protected override byte[] Write(byte[] data)
            {
                //------------
                try
                {
                    QW0 = (Int16)((data[0] << 8) + data[1]);
                }
                catch { }
                //------------
                byte[] bytes = new byte[2];
                bytes[0] = (byte)(AW0 >> 8);
                bytes[1] = (byte)(AW0 & 0xff);
                return bytes;
            }
        }
     注:由于受西门子PLC200的影响比较大,所以把模拟量入和出,定义为AW0和QW0,并且用两个字节的整数表示,根据需要可以进行折算。
    我们把昨天的GPIO代码稍加改进,把AD部分测试代码添加进去,代码如下:
    static SPI _spi;
        public static void Main()
        {
            OutputPort[] output = new OutputPort[8];
            InputPort[] input = new InputPort[8]; 
           
            //叶帆模拟器GPIO的pin定义
            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 };
     
            //SPI的pin定义
            _spi=new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, false, false, 4000, SPI.SPI_module.SPI1));
     
            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 intNum = 0;
            while (true)
            {
                output[intNum].Write(!output[intNum].Read());
                Debug.Print(input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString()+ " " + input[5].Read().ToString() + " " + input[6].Read().ToString() + " " + input[7].Read().ToString());
                Debug.Print(ReadWriteAD((Int16)intNum).ToString() + " " + intNum.ToString());
                if (++intNum > 7) intNum = 0;
                Thread.Sleep(1000);
            }
        }
        public static Int16 ReadWriteAD(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;
        }
     } 
    运行后的界面如下:
    从上图可以看出,模拟器已经和测试程序进行交互了,即可以设置AW0的值,也可以获取QW0的值。
     
    我又把模拟器改进了一下,可以支持多种IO模拟功能,目前已经完成了GPIO和AD,I2C应该也不难,但是Serial(串口)估计有问题,因为模拟器支持库没有相关函数。
     
  • 12, .Net Micro Framework研究—带IO的模拟器

           作者: 刘洪峰

     

    原打算用MF开发一个类似Windows桌面的程序(因为发现MF居然支持渐进色,可以绘很炫的界面),由于目前的模拟器仅支持5个键,所以在做类Windows开始菜单的时候犯了难,4个方向键和一个OK键,没有一个适合做开始菜单键的。记得Digi的模拟器至少支持9个键,既然他能做,理论上我也可以。一阵研究后还真有了成效,在五个键的基础上我又添加了两个键,一个是菜单键(对应PC键盘可以是Windows键或空格键),一个是返回键(对应PC键盘上的ESC键),也就是说我原来做得模拟器上的那两个键终于起作用了。
    添加完这两个键后,突然灵机一动,以前我苦苦不能做的IO模拟功能,应该也可以做了,做Windows界面的心没有了,转为一心研究IO模拟器了,功夫不负有心人,几个小时后便大功能告成了。把以前Digi开发的IO测试程序稍加调整一下就可以试了(需要重新设置一下Pin)。运行界面如下:
    测试代码如下:
    public class DigiTest
    {
        public static void Main()
        {
            //Digi
            //Cpu.Pin[] pin = new Cpu.Pin[5] { (Cpu.Pin)0, (Cpu.Pin)1, (Cpu.Pin)2, (Cpu.Pin)5, (Cpu.Pin)6 };
            OutputPort[] output = new OutputPort[8];
            InputPort[] input = new InputPort[8]; 
           
            //叶帆模拟器GPIO的pin定义
            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 };
            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 intNum = 0;
            while (true)
            {
                output[intNum].Write(!output[intNum].Read());
                Debug.Print(input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString()+ " " + input[5].Read().ToString() + " " + input[6].Read().ToString() + " " + input[7].Read().ToString());
                Thread.Sleep(1000);
                if (++intNum > 7) intNum = 0;
            }
        }
    }
          运行后,效果果然不错,改变输入,则调试信息中出现对应的变化(通过这个也深刻理解了new InputPort(pin_I[i], false, Port.ResistorMode.PullDown)中的上拉和下拉的含义),同时程序中改变输出,则对应的输出灯也在同步亮灭。
    细心的读者会发现,我的模拟器可以让InputPort和OutputPort的实例同时运行,原因就是他们的Pin值不同,而Digi的I/O共用了0、1、2、5、6(天知道他们为什么要这样?)。
    以后在测试相关的IO应用,不必接上硬件了,直接用模拟器就可以了。不知道模拟器是否支持串口模拟(映射PC机物理串口),以后有时间研究一下。不过我想TCP/IP一定会有问题,一是MF目前的TCP/IP都不完善,第二模拟器目前也不可能支持虚拟网卡(类似PPC模拟器或虚拟机)。
    目前模拟器支持8路数字量入,8路数字量出,模拟量以后有机会在加入。
    [注:目前微软官方的模拟器仅支持LCD和5个按键功能,其它的都不支持]
  • 11,.Net Micro Framework研究—Tinyfnt字体研究

           作者: 刘洪峰

     

    目前.Net Micro Framework系统仅支持Tinyfnt字体文件,官方仅提供两种字库:NinaB.tinyfnt,small.tinyfnt。用我后来做的程序打开这两种字体,发现它们仅支持如下100字符:
    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€°■▪
    如果要显示汉字,并且设置大小、粗细等等参数,必须要用专门的转换工具把windows中的ttf字体转换为Tinyfnt字体。
    这部分内容可以参见我以前写的文章《.Net Micro Framework研究—中文显示》:http://blog.csdn.net/yefanqiu/archive/2007/11/01/1862300.aspx
    其实上篇文章有点问题,其实 AddFontToProcess C:\Windows\Fonts\Miramo.ttf 指令可以不用,真正起作用的是SelectFont命令中的FN参数。此外SelectFont命令中的UN参数是无效的,加这个参数和不加这个参数,转换后的Tinyfnf字体文件二进制数据完全相同。
    我对我以前的字体转换工具又进行了改进,一是重新调整了界面,二是支持多语言(目前支持英文和简体中文两种)。
    下面是软件截图:
    由于官方不公开Tinyfnt字体的结构文件,自己只好从现成的二进制文件进行分析了,下面是我对Tinyfnt文件定义的一个结构体,其主要的参数如下:
            private class MFFont
            {
                public UInt16 uSize;            //数据长度 +27=文件总长度  
                public byte bytHeight;          //字体高度
                public UInt16 uGroupNum;        //字体组个数
                public UInt16 uFontNum;         //字体个数
                public UInt16[] uFontStart;     //起始字符1
                public UInt16[] uFontEnd;       //结束字符1
        } 
    通过这个结构体,你就可以还原出这个字库中包含的文字内容和字体高度了,不过很可惜,通过我目前的解析,还是无法从字体文件中获知原始字体文件的名称(如是宋体还是黑体等等?),是否粗体?斜体?等等参数。
    除此之外剩下的字库内容想必就是字体的点阵结构了,具体的内容我没有多加验证,有机会我再和大家一一探讨。
  • 6,革新2410D开发板试用手记(六)

     

    作者:马宁

    上篇文章:

    http://www.cnblogs.com/aawolf/archive/2008/06/23/1228203.html

     

    下载Image的过程与Digi开发板类似,在Image编译成功后,我们打开Platform BuilderTarget菜单,选择Connectivity Options

     

    我们可以使用CE Device作为下载的Target Device,为了之后的部署方便,我们还是创建一个革新的Device,作为下载目标设备。在Target Device Connectivity Options对话框中,我们选择Add Device,在New target device name中填写“Gexin2410D”:

    然后选择Kernel Service MapDownloadTransport都选择以太网:“Ethernet”。点击Download后的Settings按钮。

    点击Settings按钮后,Ethernet Download Settings对话框会弹出。等待Eboot发送BOOTME的消息后,我们会在Active target devices中看到新的开发板名称出现。如果Eboot已经开始发送BOOTME的消息,而这边接收不到时,我们应该首先查看PC机和开发板的IP地址设置,看是否处于同一个网段内,子网掩码是否正确。

    在设置完成后,我们点击OK返回Target Device Connectivity Options对话框。点击Apply,然后Close该对话框,大家记得一定要Apply,我第一次因为忘记了所以造成Download不成功。

    返回到IDE环境后,选择Target菜单中的Attach Device项,启动下载Image的操作。

    如果网络连接正常,我们会看到Download下载对话框的出现。下载的速度与Eboot和网卡驱动相关。因为我们编译的是Debug版本,Windows CE 6.0Debug版大概在50M左右,所以下载需要4分钟左右的时间。

    下载完成后,等待一段时间,如果正常运行,我们会看到LCD屏显示我们OS Design的界面:

    我们能在OS Design的桌面上看到Windows Embedded CE 6.0 R2的版本号。这样的话,我们的Windows CE 6.0 R2平台在革新2410D的开发板上了。(完)

     

    预告:稍后我们还将有如何在CE 6.0 R2上开发.NET CF 3.5程序的文章,不过前提条件是我把程序调通……如果想看的兄弟,就替我祈祷一下吧,我RP值一直不高……

  • 5,革新2410D开发板试用手记(五)

     

    作者:马宁 

    设置Boot-loader

    上篇文章:

    http://www.cnblogs.com/aawolf/archive/2008/06/05/1214281.html

     

    编译成功后,我们就要将NK.bin文件下载到开发板上了。下载镜像文件需要boot-loaderEBoot的支持,与Digi开发板相同,革新开发板也将boot-loaderEboot烧写到了NAND Flash中,我们只需要通过超级终端来完成boot-loader的设置和Eboot的启动即可。

    首先,需要将我们的开发板和PC机通过串口线连接起来,确定你连接的是哪个串口。然后打开超级终端(Vista下是没有超级终端的,我们的解决方法是从XP底下拷一个过来),创建新的连接,选择COM口,然后设置波特率为:115200,剩下的按下图设置即可:

    设置完成后,我们就可以打开开发板的电源,超级终端上应该有相应的输出,如下图:

     

    如果我们不理它,开发板会启动NAND Flash上的操作系统,这个是由SW1开关来决定的。为了进入boot-loader的菜单,我们要在5秒内按空格键,会进入菜单的选择列表中。

    如果没有设置IP地址,我们要设置IP地址、子网掩码和MAC地址,这些在革新开发板附带的文档中都有详细说明,我们在这里略提即可。这些内容是和革新开发板具体相关的,每个板子都有自己的控制方式,所以要区别对待不同的开发板。

    设置完成后,我们直接按D键,进入Eboot的下载状态即可。Eboot会向网段内广播BOOTME的消息,供Platform Builder来接收。

    下面我们回到Platform Builder中……

  • 3'革新2410D开发板试用手记(三)

    上篇文章:
      http://www.cnblogs.com/aawolf/archive/2008/05/30/1210738.html


    创建平台

    Windows CE 6.0 R2的开发平台基于Visual Studio 2005。打开Visual Studio 2005后,创建新工程,在Platform Builder选项中选择创建新的OS Design,启动平台定制的向导。我们忽略向导的欢迎界面,第二个界面为选择BSP的界面:

    之前安装了DigiBSP,在我们部署了革新2410DBSP之后,我们发现在列表中多了一项“GX2410D:ARMV4I”的选项,这就是革新2410D开发板的BSP选项。我们选择这项后,继续Next

    接下来选择设计模板,革新的开发人员建议我们使用“PDA Device”,本着“听人劝吃饱饭”的原则,我们选择这项,因为是对开发板的测试,其他模板可以今后测试。Next

    然后选择Mobile Handheld模板,这一项是移动手持设备,相对而言显示屏比较小,比较适合便携,说白了就是PDA。而Enterprise Web Pad是类似Tablet PC的东东。Next

    接下来选择应用程序,我们添加了Windows MessengerWindows Media Audio/MP3。之后可以添加音频文件,然后就可以播放了。考虑到编译时间问题,我们去掉了.NET CF 2.0的选项。Next

    在网络连接的配置中,我们去掉BluetoothIrDA,添加上图的时候才发现,802.11的选项没有去掉,其实也应该去掉的。其余保持原设置即可。Next

    OK,终于走完了向导,看起来比当初Digi的向导要简单好多。下面我们进入IDE开发环境。噢,记得,最后还有一个安全警告:


     

    下篇文章:

    http://www.cnblogs.com/aawolf/archive/2008/06/05/1214281.html

  • 4'革新2410D开发板试用手记(四)

    作者:马宁 

     

    添加Catalog Item

    上篇文章:

    http://www.cnblogs.com/aawolf/archive/2008/06/03/1212696.html

     

    在完成向导之后,我们不再演示Bib,DatReg文件编辑器的使用,而是直接进入添加Catalog Item的编辑。需要指出的是,我第一次做的时候是直接编译了OS Design,结果产生了错误,如下:

    这个错误告诉我们BSP中缺少ohci2.dll的组件。经过确认这是革新BSP中的一个小BUG,后续版本的BSP中应该已经修改了这个BUG。但是,我们的BSP仍旧有这个问题,我们听从了革新的解决办法,添加USB鼠标的驱动:

                              

    我首先添加的还是游戏,在Core OS – CEBASE – Games下,添加FreecellSolitaire两个游戏。然后我们要添加USB Mouse的驱动。说实话,我也不知道驱动的具体位置,在Catalog Items View顶端的搜索框中,写入Mouse,然后会找到USB HID Mouse的驱动,我们可以选择添加USB键盘和USB鼠标的驱动,也可以直接添加USB鼠标的驱动。如上图。

    OK,做完这一步后,我们可以重新编译OS Design。在十几分钟后(这个依赖于你机器的性能),我们就可以正常编译成功了。

  • Windows Embedded Standard CTP发布!

    在国际儿童节,接到了Windows Embedded Standard产品组施老师的邮件。当然,她不是祝我节日快乐(失败啊,今年连5.4都是最后一年了,还敢到6.1添乱?),而是告诉我Windows Embedded StandardCTP(社区预览版)发布了。

    Windows Embedded Standard,原名Windows XP Embedded,籍贯:华盛顿州雷德蒙市……需要说明的是,这次Windows Embedded Standard只是CTP版本的发布,大家先拿来玩玩就好了,正式RTM可能还有一段时间,尝尝鲜就好。这次Windows Embedded Standard中包括了SilverlightIE 7Windows Media Player 11Remote Desktop Protocol 6.1.NET Framework 3.0Wi-Fi Protected Access 2等组件。实在是软件开发、居家旅行、杀人越货之必备良药……

    只需要在下列地址中,使用Live ID做一个简单的注册,下载项目中选择Windows Embedded StandardISO文件即可。下载地址:

    https://connect.microsoft.com/windowsembedded

    另外,在美国时间的63日,还有一个Windows Embedded Standard的在线发布会,大家有兴趣也可以去听一下:

    Windows Embedded Standard Launch Event

    Windows Embedded产品组的BLOG是:

    http://blogs.msdn.com/embedded/default.aspx

     

    稍后有更多关于Windows Embedded Standard的最新消息,我将为您做后续报道。

  • Windows Embedded从入门到精通6月预告

    经历了九个月的时间,“Windows Embedded从入门到精通”系列课程终于到了收官阶段。

    尽管很俗套,还是要感谢参与了这个系列课程的所有讲师,没有他们认真而执着的工作,就不会有如此高质量的课程系列。在做这个系列课程之前,我们对于Windows Embedded的讲师资源几乎一无所知,于是我们从MVP开始,然后到微软内部的技术专家,再到大学老师、公司内的技术专家,慢慢的开始有了Windows Embedded的讲师列表。

    很多讲师之前都没接触过Webcast的形式,但是都无一例外地为我们留下了精彩的技术演讲,一方面是他们精湛的技术,另一方面是他们诚恳的态度。我不知道他们在背后下了多少功夫,但我知道,每个讲师都是在自己的休息时间,将自己开发检验的点滴积累起来,给大家呈现出精彩的一个小时。特别感谢的是程胜辅老师,特地因为Webcast的事情推迟了自己的日程安排;还有施卫娟老师,在深夜的时候,隔着半个地球,和我们分享她的宝贵经验。

    当然,讲师和我们的努力并没有白费,得到了积极的认可和正面的评价。截至到五月份,“Windows Embedded从入门到精通”系列课程的平均分是8.23,而超过8.5以上的课程有四次,而且几乎所有的课程都有8.0以上的成绩。很多视频网站和开发者网站对于这个系列的课程也都进行了转载。

    我们的目的只有一个:让Windows Embedded开发更容易,让Windows Embedded开发者不再孤单。

    明年的计划还在制订中,不过可以肯定的是,Windows Embedded开发系列的Webcast只是一个开始,更精彩的还在后边。

     

    最后还是来介绍一下六月份的两位讲师,作为收官之作,我们选择的都是老熟人,之前课程中Windows Embedded CEXP Embedded产品的最高分讲师。黄文中老师,将剥茧抽丝地分析Windows CE的核心——OAL开发;而雷志刚老师,将为大家带来对于XP Embedded实际开发中可能会遇到的一些问题,比如不同外壳、不同启动画面等。

     

    Windows CE 6.0的内核介绍及OAL开发

    2008620 星期五上午10:00

    http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032380482&EventCategory=4&culture=en-US&CountryCode=US

     

    讲座内容:
    CE6
    的新内核是微软针对下一代移动嵌入式应用而重新开发的,主要满足并发任务越来越多,内存使用越来越大的需要。本讲座介绍CE6的内核架构,及与内核直接相关的OAL的开发。

     

    课程讲师:
    黄文中 Windows Embedded MVP(微软最有价值专家)

    黄文中先生,北京大学理学硕士,微软嵌入式系统培训讲师(Embedded Training Instructor),微软嵌入式系统最有价值专家(MVP For Windows Embedded),微软系统工程师(MCSE)在嵌入式操作系统定制、驱动开发及应用集成方面有很深的造诣。

     

    技术等级:
    Level 300

     

     

    实现特殊要求的XPE操作系统

    2008625 星期三下午14:30

    http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032380494&EventCategory=4&culture=en-US&CountryCode=US

     

    讲座内容:

    由于Windows XP Embedded是基于组件构建的嵌入式操作系统,所以我们可以通过开发工具轻松的实现具有各类特殊功能的XPE操作系统。例如具有不同外壳、不同启动画面及不同登陆模式的操作系统。本次课程将介绍如何实现具有特殊功能要求的XP Embedded操作系统。

     

    课程讲师:

    雷志刚 MSDN特邀讲师

    雷志刚,19783月生于陕西,毕业于西北大学数学系。毕业后长期从事计算机软件开发,系统集成,嵌入式开发,工业自动化控制,网络通讯开发等各类计算机软硬件开发工作,积累了丰富的开发经验和项目经验。自2005年致力于基于Windows CEWindows Embedded企业解决方案的架构及开发以来,完成了针对各类嵌入式设备、机顶盒、工控机、HIM的嵌入式操作系统开发,积累了丰富的XPE开发经验和基于X86架构的硬件设计经验。在嵌入式领域发表了多篇关于XPE操作系统开发的相关技术文章。

     

    技术等级:

    Level 200

     

  • 2,革新2410D开发板试用手记(二)

     

     

    作者:马宁

     
     
     
    上一篇文章:
    http://www.cnblogs.com/aawolf/archive/2008/05/29/1209854.html

    导入BSP

    革新2410D开发板附带了电源、串口线、直连网线、方口USB线,以及烧写Boot-loader所用的JTGA和并口线。为了能够正常使用,我们需要首先将开发环境配置好,Windows CE 6.0开发环境的具体配置,请参考《Windows Embedded CE 6.0开发初体验》

    http://www.cnblogs.com/aawolf/archive/2007/12/01/979449.html

    我们需要将串口线连接到URAT1接口(COM1接口),在革新2419D开发板上,COM1是用来输出Windows CE调试信息的;然后将SW1开关切换到左边(靠近LCD屏排线的一侧),因为Windows CE要使用SMC卡作为存储介质。设置完成后,连接LCD屏、电源线、串口线和网线后,我们的开发环境就基本就绪了。

    在开发板的附带CD中包括了革新2410D开发板的BSP,为革新2410D定制系统前,必须先将BSP导入到Windows CE 6.0 R2的开发环境中。有些厂家制作的安装包来部署BSP,而革新的部署相对简单。

    在附带光盘的BSP目录下,找到2410D.rar文件,解压。Windows CE 6.0 R2 BSP文件都被保存到C:\WINCE600\PLATFORM下,所以,我们将解压之后的BSP目录拷贝到C:\WINCE600\PLATFORM下即可。

    这样,BSP的导入就完成了,我们就可以进入Platform Builder,来开发一个Windows CE的平台了。

  • 革新2410D开发板试用手记(一)

     

    作者:马宁

     

    开发板介绍

    首先,感谢北京革新科技的沙经理提供了Gexin2410D开发板给我们提供测试。我们这次拿到的2410D开发板提供了LCD触摸屏和Windows CE 6.0BSP。稍后,我们会使用Windows CE 6.0 R2的开发环境来定制一个CE 6.0 R2的系统。

    关于Windows Embedded 6.0 R2的详细信息,请参考:

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

    关于Windows Embedded 6.0平台定制的体验文章,请参考:

    http://www.cnblogs.com/aawolf/archive/2007/11/23/970341.html

    关于革新开发板的详细内容,请参考:

    http://www.gexin.com.cn/


    GX-ARM9-2410D
    型开发板集成了系统的大量资源,是国内可扩展性最强的开发板。它不需要任何外部电路也可以独立使用,是学习开发的好平台;而且,可以方便地作为嵌入式主板嵌入式到用户设备中去,是设计、开发嵌入式设备的最佳选择。

    核心板硬件参数:
    ● CPUS3C2410 ARM920T 内核主频200MS3C2440 ARM920T 内核主频400M
    ● SDRAM
    16M×32bit 64M PC100);
    接口:200PIN SODIMM接口;

    主板硬件参数:
    ● Flash
    4M Intel线性FLASH,可通过SMC卡扩展非线性Flash(系统支持两种启动方式,通过拨动开关,可以设置系统从Intel FLASH或者从外接的SMC卡启动)。
    ● 1
    10M/100M自适应网卡(DM9000);
    使用嵌入式音频芯片,多种输出输入方式,开关灵活选择,主板自带双声道扬声器。
    ● USB
    接口(USB1.1)2USB Host1USB Host/Device
    串行接口:3RS232接口;
    ● JTAG
    接口:可接ARM仿真器;
    ● SMC
    接口:系统支持直接从SMC卡启动
    ● SD
    卡接口:支持SD卡或MMC
    液晶屏:可选配3.5TFT 240×320真彩液晶屏
    多功能扩展模块接口:通过IDC接口扩展出了16位总线、液晶屏、触摸屏、串口等通信接口。针对各高等院校电子信息、计算机、自动化、测控等专业需求,可方便地扩展各个专用模块。
    ● 4
    个按键;
    ● 4
    个发光LED
    ● CPU
    内部集成RTC,通过主板上的3V锂电池提供掉电保护;
    电源:外接5V/2A直流电源;

     
     

    下一篇文章“导入BSP

    http://www.cnblogs.com/aawolf/archive/2008/05/30/1210738.html

  • 工控项目开发框架介绍

           作者: 刘洪峰

    原文地址:http://blog.csdn.net/yefanqiu/archive/2008/04/23/2319050.aspx 

     

     

    结合公司多年各系统平台开发维护的经验,逐步确立了统一各系统平台的思想,在平台建立完善的基础上进行系统的二次开发。

    目前焦炉四大机车系统、烧结配水系统、隧道广告系统已实现平台统一(如下图)。

    一、        开发框架组件结构

      

    *       IOServer :一个后台管理程序和很多驱动共同组成,属于数据采集部分,通过它可以和不同PLC、智能仪表、远程PC机上的程序和本机程序等软硬件进行数据交互。

    *       系统核心组件:联系前台和后台的枢纽程序,包括以下几个组件:IO数据访问(Swl.ocx),SQL数据库访问(SwDB.ocx),报表打印预览(Swp.ocx),图表曲线(TeeChart5.ocx),数据表格(Vsflex7L.ocx)。

    *       系统项目框架,是系统前台界面和相应数据报表处理程序的管理平台。包括主界面程序(JRSystem.exe),数据初始化(BKInit.exe),数据编辑(DWParam.exe),密码修改(SetPassword.exe),系统信息显示(SystemInfo.exe);

     

    二、        IOServer

            基于PC上的后台驱动平台已经成熟,该程序从2005214日开始开发,距今已有多年,目前四车、配水、隧道广告都采用该后台(系统在现场一致运行正常)。

          

    关于IOServer的详细介绍,请参见我其它时间写的文章。

    http://blog.csdn.net/yefanqiu/archive/2005/10/05/495547.aspx

    http://blog.csdn.net/yefanqiu/archive/2006/05/02/705356.aspx

    http://blog.csdn.net/yefanqiu/archive/2006/05/23/751451.aspx

    http://blog.csdn.net/yefanqiu/archive/2006/05/27/757327.aspx

     

    三、        系统核心组件

    *       IO数据访问(Swl.ocx),通过变量名称,可以很方便的读写后台数据(可以是多个程序共同访问IO数据)。通过这个组件,后台数据访问的细节便被封装,前台界面可以不关心后台工作方式,而直接获取自己想要的数据。

    *       SQL数据库访问(SwDB.ocx),该组件最早来源于老版本的焦炉四大机车系统的SQL控件(在2004年开发),后升级改进而成。通过该组件可以很方便的访问SQL数据库。

    *       报表打印预览(Swp.ocx),也是来源于焦炉四车系统的报表部分,经过再封装和改进(比如可以判断打印机是否在线等等),通过该组件可以实现表格数据所见即所打的打印功能。

    *       图表曲线(TeeChart5.ocx),数据表格(Vsflex7L.ocx)都是第三方公司著名的组件,一个实现图表显示,一个实现数据表格处理。

     

    四、        系统项目框架

    该系统框架为各系统平台提供统一风格的操作界面:标题头,操作按钮,操作菜单等等。此外负责后台程序、前台程序的加载和前台界面的切换。

    具体的工艺相关的部分,通过金日SDK开发包提供的样例程序进行开发(用VB开发,借助系统核心组件与IO数据进行交互),其它部分仅通过配置文件定制即可(如界面的颜色,按钮的多少,菜单选项的多少都可以定制)。

    此外提供各系统通用的组件程序,如:参数初始化,参数修改,密码修改,信息查看程序等等。

    五、        小结

    通过采用成熟的开发框架,一是大大减少了开发时间,二是后期在软件方面的维护成本几乎为零。为了使开发平台更加通用化,后期我们又开发了组态软件(目前为嵌入式版本,可在我的blog查看相关文章),这样对于一般项目,其开发时间又近乎为零了。

    牛顿为什么伟大,他说是因为他站在巨人肩膀上的缘故。我们没有资格站在巨人肩上,但我们站在我们自己搭的草台之上,也许也能比天生的巨人看的更远。

  • Windows Embedded从入门到精通5月预告

    Windows Embedded CE 6.0 R2开发初体验(Level 200)

    2008521 星期三下午14:30

    http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378266&EventCategory=4&culture=en-US&CountryCode=US

     

    讲座内容:
    本次课程我们使用Digi的开发板来介绍Windows Embedded CE 6.0 R2的平台定制开发流程,包括平台定制向导、Bib文件、注册表文件、dat文件定制和调试过程。

     

    课程讲师:
    马宁 Windows Mobile MVP(微软最有价值专家)
    微软Windows Mobile MVP,致力于基于Windows CEWindows Mobile企业解决方案的架构及开发。个人作品饕餮元年曾获得2004年微软移动开发挑战赛商业应用三等奖。

     

    技术等级:
    Level 200

     

     

    Windows CE6.0的流驱动——I/O驱动

    2008527 星期三下午14:30

    http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378272&EventCategory=4&culture=en-US&CountryCode=US

     

    讲座内容:

    驱动的移植是嵌入式开发中的一个重要环节,我们这节课将以一个具体的I/O驱动为例,向大家介绍驱动的移植过程。

     

    课程讲师:

    刘立明 MSDN特邀讲师

    嵌入式Windows CE资深讲师, 兼亿道技术部经理,从事嵌入式技术开发5 年以上。2004 年开始专业从事 Windows CE 技术开发从 Windows CE 4.2 Windows CE 5.0 到,Windows Embedded CE 6.02006 年,获推荐参加 Microsoft 全球 Windows CE6.0 讲师培训,经微软考核认证,获得TTT资深讲师资格。

     

    技术等级:

    Level 200

     

  • SPARK Your Embedded Development Project with eBox-4300 Windows Embedded CE 6.0 R2 Jump Start Kit

    El Monte, California – 2008年4月15日 – ICOP 昭营科技公司,是微软嵌入式金牌
    合作伙伴,此次发行的eBox-4300 Windows Embedded CE 6.0 R2 Jump Start 套件可以帮助
    开发人员学习和使用Windows Embedded CE 6.0 开发环境。这套低成本的快速开发套件
    不仅包含了所有必需的组件,还提供了step-by-step 开发指南,以手把手的方式引导您学习
    如何定制Windows Embedded CE 6.0 R2 操作系统。软件开发人员可利用现有的Visual
    Studio 2005编程技巧研发新的Windows Embedded CE 6.0解决方案。
    eBox-4300 Windows Embedded CE 6.0 R2 Jump Start套件包含以下组件:
    · eBox-4300是一台嵌入式系统内置500MHz VIA CPU处理器的微型电脑,板载512M DDR2内存,集成了VGA,集成声卡,10/100网卡,2个串口, 3个2.0 USB口,PS/2键盘/鼠标,24位GPIO和256M 带引导系统的IDE 闪盘。

    · 全套正版Microsoft Windows Embedded CE 6.0 R2 Platform Builder定制工具。
    · 全套正版Microsoft Visual Studio 2005 Professional开发工具。
    · 内含Step-by-step开发指南引导您使用Platform Builder 工具定制Windows
    Embedded CE 6.0 image档,设置开发环境变量和开发Visual Studio 2005应用程序。
    · BSP 包,SDK 开发环境包和预装一个Windows Embedded CE 6.0 image档
    · RJ-45网络交叉线和串口交叉互连线。此线是eBox-4300和Windows Embedded CE
    6.0 Platform Builder开发平台的传输与调试的连接线。
    内置500MHz微处理器,512M DDR2内存,Box-4300是一款非常稳定产品,可应用
    于要求支持多媒体的快速微处理器领域。集成了USB 2.0 Host 接口,网卡,声卡,和视频
    接口(支持可达1920x1440的分辨率)。

     PR_eBox4300_SPARK_Jumpstart_Kit_中文.pdf
    PR_eBox2300SX_SPARK_Jumpstart_Kit_中文.pdf


© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker