<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>风与水的天堂</title><link>http://www.rtoslab.net/</link><description>much's  BLOG</description><generator>RainbowSoft Studio Z-Blog 1.8 Spirit Build 80722</generator><language>zh-CN</language><copyright>Copyright 2008 RTosLab.Net. Some Rights Reserved.豫ICP备09027498号var lainframe;</copyright><pubDate>Tue, 09 Mar 2010 17:49:31 +0800</pubDate><item><title>FLTK编程模型&amp;lt;转&amp;gt;</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2010/03/201039172417_2888.html</link><pubDate>Tue, 09 Mar 2010 17:24:17 +0800</pubDate><guid>http://www.rtoslab.net/2010/03/201039172417_2888.html</guid><description><![CDATA[<p><img height="1" width="10" alt="" src="http://www.ibm.com/i/c.gif" /></p><p>本文为转帖，来源于：http://www.ibm.com/developerworks/cn/linux/l-fltk/</p><p>&nbsp;</p><p>级别： 初级</p><p><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#author">左锦</a> (<a href="mailto:zuo170@163.com?subject=FLTK%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B&amp;cc=">zuo170@163.com</a>)南沙资讯科技园</p><p>2003 年  5 月  10 日</p><blockquote>FLTK(Fast Light Tool Kit 发音为fulltick) 是一种使用C++开发的GUI工具包，它可以应用于Unix,Linux,MS-Windows95/98/NT/2000和MacOS操作系统平台，相 对于其它的许多图形接口开发工具包（如MFC、GTK、QT等），它具有体积很小、速度比较快，且有着更好的移植性。</blockquote><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->  <!--END RESERVED FOR FUTURE USE INCLUDE FILES--><p><a href="http://www.fltk.org/">FLTK</a>(Fast Light Tool Kit 发音为fulltick) 是一种使用C++开发的GUI工具包，它可以应用于Unix，Linux，MS-Windows95/98/NT/2000和MacOS操作系统平台，相 对于其它的许多图形接口开发工具包（如MFC、GTK、QT等），它具有体积很小、速度比较快，且有着更好的移植性。本文就FLTK编程的一些基本方法进 行介绍。</p><p><a name="N1003F"><span class="atitle">FLTK功能简介</span></a></p><p>1.	提供丰富的跨平台的GUI构件(Widget)。有按钮，菜单，窗口等，近六十个。</p><p>2.	支持OpenGL，提供Fl_GL_Window，支持OpenGL相关的操作。</p><p>3.	提供界面设计工具FLUID，非常方便进行界面的设计。</p><p>4.	良好的跨平台移植性。</p><p>5.	支持多种C++编译器，Gcc，BC，VC等等。</p><p>6.	灵活性。FLTK本身可以定制，以满足不同的需要。这使得FLTK在嵌入式开发上有着极大的竞争力，这正是我要推荐使用FLTK的原因。</p><p>本文就FLTK编程的一些基本方法进行介绍。</p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N1005A"><span class="atitle">安装</span></a></p><p>安 装FLTK很简单，我们只需要下载它的源文件，解压缩到目录下，在Linux下我们只需要输入make，编译完成然后make install就头文件安装到/usr/include/FL目录下。库文件就在/usr/lib下，也可以自己编译之后把这些文件复制到这些目录，或者 不需要复制，只在编译连接的时候指定路径。</p><p>在window下可以使用VC，BC打开相应目录下的工程文件编译即可。</p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N10066"><span class="atitle">FLTK构件简介</span></a></p><p>FLTK作为GUI开发包，包含了常用的图形用户接口需要的一些构件，视觉表现非常丰富，如下两图所示：</p><p><img height="333" border="0" width="553" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image002.jpg" /></p><p><img height="415" border="0" width="553" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image004.jpg" /></p><p><b>常用按钮构件</b></p><table border="1" width="80%">    <tbody>        <tr>            <td>按钮名称</td>            <td>头文件</td>            <td>按钮名称</td>            <td>头文件</td>        </tr>        <tr>            <td>Fl_Button</td>            <td>Fl_Button.H</td>            <td>Fl_Check_Button</td>            <td>Fl_Check_Button.H</td>        </tr>        <tr>            <td>Fl_Light_Button</td>            <td>Fl_Light_Button.H</td>            <td>Fl_Repeat_Button</td>            <td>Fl_Repeat_Button.H</td>        </tr>        <tr>            <td>Fl_Return_Button</td>            <td>Fl_Return_Button.H</td>            <td>Fl_Round_Button</td>            <td>Fl_Round_Button.H</td>        </tr>    </tbody></table><p>对于具有Fl_Check_Button、Fl_Loght_Button和Fl_Round_Button当状态为off时value() =0 ，On时value()返回1。</p><p>处理按钮时间可以使用回调(callback)函数,参见后面的事件处理。</p><p><b>文本处理构件</b></p><table border="1" width="80%">    <tbody>        <tr>            <td>构件名称</td>            <td>头文件</td>            <td>构件名称</td>            <td>头文件</td>        </tr>        <tr>            <td>Fl_Input</td>            <td>Fl_Input.H</td>            <td>Fl_Output</td>            <td>Fl_Output.H</td>        </tr>        <tr>            <td>Fl_Multiline_Input</td>            <td>Fl_Multiline_Input.H</td>            <td>Fl_Multiline_output</td>            <td>Fl_Multiline_output.H</td>        </tr>    </tbody></table><p>设置和取得文本内容使用value();</p><p>如：</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">(new  Fl_Input(x,y,width,height,&quot;Label&quot;))-&gt;value(&quot;Hello World!&quot;);</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><b>其他构件</b></p><p>参见FLTK.org的         <a href="http://www.fltk.org/documentation.php">文档</a>说明。</p><p>这些构件是使用C++开发的，具有完善的继承关系，下面是构件继承关系图</p><p><img height="478" border="0" width="319" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image005.jpg" /></p><p><img height="413" border="0" width="307" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image006.jpg" /></p><p>构件使用例子－HelloWorld</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">#include &lt;FL/Fl.H&gt;#include &lt;FL/Fl_Window.H&gt;#include &lt;FL/Fl_Box.H&gt;int  main (int argc, char *argv[]){    Fl_Window  *window;    Fl_Box  *box;window  =  new  Fl_Window (300, 180);window-&gt; label(&quot;HelloWorld!&quot;);   //添加window的标题    box  =  new Fl_Box (20, 40, 260, 100, &quot;Hello World!&quot;);    box-&gt;box (FL_UP_BOX);    box-&gt;labelsize (36);    box-&gt;labelfont (FL_BOLD+FL_ITALIC);  //设置字体box-&gt;labeltype (FL_SHADOW_LABEL);  //设置label的类型/***************************************************************进入FLTK的事件循环处理过程***************************************************************/    window-&gt;end ();    window-&gt;show (argc, argv);    return  Fl::run();}</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p>在window下程序编译运行后如图所示：[使用VC6编译优化后大小为116K]</p><p><img height="205" border="0" width="306" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image007.jpg" /></p><p>Linux下图片[编译未优化大小358K]</p><p><img height="206" border="0" width="312" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image008.png" /></p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N10163"><span class="atitle">FLTK事件处理</span></a></p><p>对于一般构件的如按钮，菜单等常用事件的处理一般可以使用回调函数实现，回调函数的原型是：</p><pre>void  XXX_callback( Fl_Widget *w,void *data ){//添加自己处理的内容}</pre><p>使用F1_Widget-&gt;callback( XXX_callback,data) 注册回调函数</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">/***************************************************************按钮事件例子***************************************************************/#include &lt;FL/Fl.H&gt;#include &lt;FL/Fl_Window.H&gt;#include &lt;FL/Fl_Button.H&gt;#include &lt;FL/Fl_ask.H&gt;void Btn01_cb(Fl_Widget *w,void *data){ ((Fl_Button *)w)-&gt;label((char *)data);fl_alert(&quot;Hello&quot;); }int main(int argc, char **argv) { char *buff =&quot;Hello&quot;; Fl_Window* w = new Fl_Window(272, 144); Fl_Button* Btn01 = new Fl_Button(85, 50, 105, 25, &quot;&amp;Test callback&quot;); Btn01-&gt;shortcut(FL_ALT+'t');               //定义按钮的快捷键 Btn01-&gt;callback((Fl_Callback*)Btn01_cb,buff); //调用处理函数 buff作为参数  w-&gt;end(); w-&gt;show(argc, argv);  return Fl::run();}</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p>编译运行程序，鼠标点击按钮，按钮标签会发生改变，并且会弹出提示框。</p><p>通常的callback是当构件的value改变时调用，可以使用when()改变为其他事件发生调用回调函数，主要事件有以下事件</p><table border="1" width="80%">    <tbody>        <tr>            <td>事件</td>            <td>说明</td>        </tr>        <tr>            <td>FL_WHEN_NERVER</td>            <td>从不调用回调函数</td>        </tr>        <tr>            <td>FL_WHEN_CHANGED</td>            <td>当构件值改变时调用</td>        </tr>        <tr>            <td>FL_WHEN_RELEASE</td>            <td>当释放按键或者鼠标并且构件值改变</td>        </tr>        <tr>            <td>FL_WHEN_RELEASE_ALWAYS</td>            <td>当释放按键或者鼠标，即使构件值没有改变</td>        </tr>        <tr>            <td>FL_WHEN_ENTER_KEY</td>            <td>按下Enter键并且构件值改变</td>        </tr>        <tr>            <td>FL_WHEN_ENTER_KEY_ALWAYS</td>            <td>按下Enter键，即使构件值没有改变</td>        </tr>    </tbody></table><p>通过使用F1_Widget-&gt;when(FL_WHEN_XXXX)来改变回调事件。</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">#include &lt;FL/Fl.H&gt;#include &lt;FL/Fl_Window.H&gt;#include &lt;FL/Fl_Button.H&gt;#include &lt;FL/Fl_ask.H&gt;void Btn01_cb(Fl_Widget *w, void *data){  fl_alert(&quot;Hello&quot;); }int main(int argc, char **argv) { char *buff = &quot;Hello&quot;; Fl_Window* w = new Fl_Window(272, 144); Fl_Button* Btn01 = new Fl_Button(85, 50, 105, 25, &quot;&amp;Test callback&quot;); Btn01-&gt;shortcut(FL_ALT + 't'); Btn01-&gt;callback((Fl_Callback*) Btn01_cb, buff); Btn01-&gt;when(FL_WHEN_RELEASE_ALWAYS); w-&gt;end(); w-&gt;show(argc,  argv);  return Fl::run();}</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p>编译运行程序，在按钮上按下鼠标左键，移动到按钮外，松开鼠标按键，仍然会弹出对话框，对比上面的两程序，看看有什么不同。</p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N101CA"><span class="atitle">FLTK消息处理</span></a></p><p>在FLTK中是通过Fl_Widegt::handle(),虚拟函数来处理系统的消息。我们可以查看Fltk的源代码来分析系统是怎样处理一些系统消息的，如按钮的消息处理</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">/*******************************************************Fl_Button中处理消息的代码，省略了具体的处理代码*******************************************************/int Fl_Button::handle(int event) {switch (event) {case FL_ENTER:case FL_LEAVE:     return 1;case FL_PUSH:         &hellip;&hellip;case FL_DRAG:        &hellip;&hellip;case FL_RELEASE:     &hellip;&hellip;case FL_SHORTCUT:   &hellip;&hellip;case FL_FOCUS :       &hellip;&hellip;case FL_UNFOCUS :    &hellip;&hellip;case FL_KEYBOARD :  &hellip;&hellip;default:return 0;}}</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p>可以看出了，系统的一些消息，都是在构件的handle()中进行处理的。</p><p>系统的主要消息有以下</p><table border="1" width="80%">    <tbody>        <tr>            <td>鼠标事件消息</td>            <td>焦点事件消息</td>        </tr>        <tr>            <td>FL_PUSH</td>            <td>FL_ENTER</td>        </tr>        <tr>            <td>FL_DRAG</td>            <td>FL_LEAVE</td>        </tr>        <tr>            <td>FL_RELEASE</td>            <td>FL_FOCUS</td>        </tr>        <tr>            <td>FL_MOVE</td>            <td>FL_UNFOCUS</td>        </tr>        <tr>            <td>键盘事件消息</td>            <td>剪贴板事件消息</td>        </tr>        <tr>            <td>FL_KEYBOARD</td>            <td>FL_PASTE</td>        </tr>        <tr>            <td>FL_SHORTCUT</td>            <td>FL_SELECTIONCLEAR</td>        </tr>        <tr>            <td>　</td>            <td>构件事件消息</td>        </tr>        <tr>            <td>FL_DEACTIVATE</td>            <td>FL_ACTIVE</td>        </tr>        <tr>            <td>FL_HIDE</td>            <td>FL_SHOW</td>        </tr>    </tbody></table><p>通过重载handle函数我们可扩充标准构件，下面是一个鼠标移动到上面就改变颜色的按钮的实现源代码。</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">#include &lt;FL/Fl.H&gt;#include &lt;FL/Fl_Window.H&gt;#include &lt;FL/Fl_Button.H&gt;#include &lt;FL/fl_ask.H&gt; class EnterButton : public Fl_Button {  int handle(int e) {  switch (e)   {      case  FL_ENTER:              color(FL_GREEN);              labelsize(18); redraw();               return 1;      case   FL_LEAVE:             color(FL_GRAY);             labelsize(18); redraw();              return 1;       default:            return Fl_Button::handle(e);         }}public:  EnterButton(int  x,  int y,  int w, int  h, const char  *l )                         : Fl_Button(x,y,w,h,l) {   }};static void  cb(Fl_Widget* s,  void *data){  fl_alert( &quot;Hello World!&quot; );}int main(int argc, char **argv) {      Fl_Window* w  =  new  Fl_Window(130, 50);      EnterButton *eBtn  =  new  EnterButton(25,50,120,25,&quot;HelloWorld&quot;);      eBtn-&gt;callback((Fl_Callback*)cb);      w-&gt;end();      w-&gt;show(argc, argv);      return Fl::run();}</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p>运行显示效果如图:</p><p><img height="50" border="0" width="130" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image010.jpg" />         <img height="50" border="0" width="130" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image011.jpg" /></p><p>Linux下演示[截屏时鼠标没有取到]</p><p><img height="76" border="0" width="142" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image013.jpg" />         <img height="74" border="0" width="134" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image015.jpg" /></p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N10278"><span class="atitle">FLUID简介</span></a></p><p>FLUID （FLTK UserInteface Designer）是FLTK进行程序界面设计的有力工具，如同GTK界面开发工具Glade一样。</p><p>它包含在FLTK源代码中，需要自己编译成可执行文件。在Window平台可以使用VC/BC编译成可执行文件。启动和设计时界面如图所示：</p><p><img height="342" border="0" width="517" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image017.jpg" /></p><p><img height="351" border="0" width="529" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image019.jpg" /></p><p>Fluid 非常容易使用，首先是新建,输入文件名，后点Bin 窗口的Function 图标，建立main主函数[清空name就可以]，然后可以选择window 图标，建立窗口，然后拖放其他构件，可以在双击构件设置构件的属性【如下图】，在GUI属性页中设置标签和快捷键，位置大小，图片，提示，对齐方式等，在 style中设置它的显示风格等，在C++中设置名字，书写它的回调函数等。</p><p><img height="418" border="0" width="391" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image020.jpg" /></p><p>设计好界面后，我们可以把这些转换为C++源代码，选菜单File中的write Code即可，使用编辑器可以打开与工程同名的源文件和头文件，怎么做，不再赘述。</p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N102AE"><span class="atitle">OpenGL编程</span></a></p><p>在FLTK中很容易使用OpenGL进行图形编程的，我们只需要使用它的Fl_Gl_Window构件，重新定义一个派生于Fl_Gl_Window的类，重载draw()和handle()就可以。所需要的代码和步骤如下：</p><p><b>包含以下头文件</b></p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">#include &lt;FL/Fl.H&gt;#include &lt;FL/gl.h&gt;#include &lt;FL/Fl_Gl_Window.H&gt;</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><b>定义一个子类，如下代码所示</b></p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">class MYGLWindow : public Fl_Gl_Window{	void draw(); //作图操作    void handle( int ); //消息事件处理	public : 		MYGLWindow(int x,int y,int w,int h,const char *L) : Fl_Gl_Window(x,y,w,h,L){};<!-- code sample is too wide -->};</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><b>实现draw()事件</b></p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">void MYGLWindow::draw() //作图{	if ( ! valid() )		{          //设置viewport窗口大小等等 例如        /********************************************** valid(1);        glLoadIdentity();        glViewport(0,0,w(),h());        ***********************************************/		}	   //添加使用OPENGL作图操作 	  /* &hellip;&hellip;..*/};</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><b>事件处理实现</b></p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td class="code-outline">            <pre class="displaycode">void MYGLWindow::handle( int event) //事件处理{  switch (event) {  case FL_PUSH :  //操作等                return 1;    case &hellip;&hellip;.}}</pre>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><b>注意</b></p><p>1.	编译时需要包含openGL32的库文件，名字在不同的平台名字稍微不同。</p><p>2.	使用&lt;FL/gl.h&gt;代替&lt;GL/gl.h&gt;头文件，不要使用后者的头文件。</p><p>例子程序比较长，附在参考中。运行显示，弹出菜单后如图所示：</p><p><img height="288" border="0" width="288" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image022.jpg" /></p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N102FA"><span class="atitle">VC中使用FLTK</span></a></p><p>在Vc中无法直接使用FLTK，需要下载FLTK的源文件编译之后再进行一些简单的设置，设置步骤如下：</p><p>1.	打开Project-&gt;Settings-&gt;Link, 添加以下库文件:         <br />wsock32.lib opengl32.lib glu32.lib fltk.lib fltkgl.lib          <br />[fltk.lib fltkgl.lib 需要自己编译FLTK源文件生成,直接打开源文件下的visualc目录下的工程文件就可以编译]</p><p>2.	在Project-&gt;Settings-&gt;Link的PROJECT OPTIONS中 添加 /nodefaultlib:&quot;LIBCD&quot;，如果你要生成release版本的那么是 /nodefaultlib:&quot;LIBC&quot;</p><p>3.	在Tools-&gt;Options-&gt;Directories, 选择 include files  添加路径如         <br />C:\Program Files\fltk   [对照自己的修改]</p><p>4.	在Tools-&gt;Options-&gt;Directories, 选择 library files 设定为如下所示         <br />C:\Program Files\fltk\lib [对照自己的修改]</p><p>5.	Project-&gt;Settings-&gt;C/C++ 中的category 选择 C++ Language</p><p>6.	在Project-&gt;Settings-&gt;C/C++,的PROJECT OPTIONS添加:         <br />/I &quot;c:\program files\fltk&quot;  [对照修改]，此处不修改也可以编译</p><p>&nbsp;</p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td><img height="1" width="100%" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" /><br />            <img height="6" border="0" width="8" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>    </tbody></table><table cellspacing="0" cellpadding="0" align="right" class="no-print">    <tbody>        <tr align="right">            <td><img height="4" width="100%" src="http://www.ibm.com/i/c.gif" alt="" /><br />            <table cellspacing="0" cellpadding="0" border="0">                <tbody>                    <tr>                        <td valign="middle"><img height="16" border="0" width="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" /></td>                        <td valign="top" align="right"><a href="http://www.ibm.com/developerworks/cn/linux/l-fltk/#main" class="fbox"><b>回页首</b></a></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table><p>&nbsp;</p><p><a name="N1031F"><span class="atitle">KDevelop中使用FLTK</span></a></p><p>作为跨平台的一种轻量级的GUI Tools，在Linux下得到更为广泛的使用，所以我们使用Linux下的最常用的Kdevelop也能很方便使用它。下面简述需要注意的配置步骤：</p><p>1.	我们建立C++工程后，需要修改的配置都在菜单[项目]--&gt;[选项]'[连接器选项]中修改</p><p>2.	在[库]中选定 X11和Xext，根据自己的需要还需要选定 math等库</p><p>3.	在[附加库]那里输入 -L/usr/X11R6/lib -lfltk</p><p>4.	如果开发OpenGL应用需要 在附加库中输入 -lfltk_gl -lglut 指定连接库。</p><p><img height="343" border="0" width="533" alt="" src="http://www.ibm.com/developerworks/cn/linux/l-fltk/images/image024.jpg" /></p><p>提示：因为我使用的Linux为RedHat 8,为选择中文环境，所以配置说明也是中文，英文版本可能有所不同，对照修改即可.</p><p>&nbsp;</p><p><a name="resources"><span class="atitle">参考资料 </span></a></p><p>1.	想了解更多的FLTK的知识和下载FLTK源代码等可以到         <a href="http://www.fltk.org/">www.fltk.org</a> 网站。         <a href="http://www.fltk.org/documentation.php">FLTK的编程手册</a>你想了解FLTK构件的事件方法等都在里面。OpenGL</p><p>2.	还是参考一下         <a href="http://www.opengl.org/">www.opengl.org</a>上的资料吧，有文档说明还有教学和源代码。</p><p>&nbsp;</p><p><a name="author"><span class="atitle">关于作者</span></a></p><table cellspacing="0" cellpadding="0" border="0" width="100%">    <tbody>        <tr>            <td colspan="3"><img height="5" width="100%" alt="" src="http://www.ibm.com/i/c.gif" /></td>        </tr>        <tr valign="top" align="left">            <td>&nbsp;</td>            <td><img height="5" width="4" alt="" src="http://www.ibm.com/i/c.gif" /></td>            <td width="100%">            <p>左锦，就职南沙资讯科技园，喜爱 Linux，Java 还有蓝天白云青山绿水。通过         <a href="mailto:zuo170@163.com?cc=">zuo170@163.com</a>和他联系。</p>            </td>        </tr>    </tbody></table><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2010/03/201039172417_2888.html" target="_blank">继续阅读《FLTK编程模型<转>》的全文内容...</a></p><h3>相关文章:</h3><ul><p><a  href="http://www.rtoslab.net/2009/12/20091215233958.html">几种GUI中的图形上下文比较</a>&nbsp;&nbsp;(2009-12-15 23:39:58)</p></ul>]]></description><category>他山之玉</category><comments>http://www.rtoslab.net/2010/03/201039172417_2888.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=74</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=74&amp;key=2c4342d6</trackback:ping></item><item><title>Tcl on VxWorks(出自Tcl.tk的wiki)</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2010/01/2010118202243.html</link><pubDate>Mon, 18 Jan 2010 20:22:43 +0800</pubDate><guid>http://www.rtoslab.net/2010/01/2010118202243.html</guid><description><![CDATA[<h2>文章为转载，出处为<a target="_blank" href="http://wiki.tcl.tk/21062">tcl官方网站的wiki</a></h2><p>&nbsp;</p><p>This file is far from being a readily mergeable patch -- see some of the ugly technical details below -- but it should get someone started who is desperate to run Tcl on VxWorks.These instructions will result in a Tcl DKM (downloadable kernel module) that can be run and interacted with on the console. Running as a VxWorks RTP (real-time process) mode is not supported, although that should be a comparatively small step.</p><hr /><div class="centered"><h2 id="pagetoce288c788">Building Tcl for VxWorks</h2></div><hr /><p>These instructions are for a cross-build from</p><p><a href="http://wiki.tcl.tk/4473">Microsoft Windows</a></p><p>to, for reference, the &quot;SIMNTgnu&quot; target (which is the Windows-based VxWorks simulator that comes with Workbench) from the</p><p><a href="http://wiki.tcl.tk/1866">Cygwin</a></p><p>command line.  For other targets, update the tools and their parameters accordingly (e.g., use the</p><p><i>ccppc</i></p><p>compiler instead of</p><p><i>ccpentium</i></p><p>for PowerPC targets).</p><h3 id="pagetoc27f0a796">Apply VxWorks Patch</h3><p>Download the Tcl 8.5.2 source code.Download the patch:</p><p><a rel="nofollow" href="http://sourceforge.net/tracker/download.php?group_id=10894&amp;atid=360894&amp;file_id=276425&amp;aid=1955146">http://sourceforge.net/tracker/download.php?group_id=10894&amp;atid=360894&amp;file_id=276425&amp;aid=1955146</a></p><p>(this is a plain-text file).Apply the patch to the Tcl 8.5.2 source code using the &quot;patch&quot; program.</p><h3 id="pagetoc6dea177d">Configure for SIMNTgnu</h3><p>Some of these settings must be adjusted based on your target.</p><pre>  export WIND_BASE=&quot;c:\\WindRiver\\vxworks-6.3&quot;  export CC=&quot;ccpentium&quot;  export CPPFLAGS=&quot;-D_WRS_KERNEL -DCPU=SIMNT -DTOOL_FAMILY=gnu -DTOOL=gnu -Ic:/WindRiver/vxworks-6.3/target/h -Ic:/WindRiver/vxworks-6.3/target/h/wrn/coreip -DUSE_FIONBIO&quot;  export CFLAGS=&quot;-mtune=i486 -march=i486 -ansi&quot;  export LDFLAGS=&quot;-r -nostdlib&quot;  export EXTRA_TCLSH_LIBS=&quot;-Wl,-X -T `cygpath --mixed ${WIND_BASE}/target/h/tool/gnu/ldscripts/link.OUT`&quot;  export DL_OBJS=&quot;tclLoadVxWorks.o&quot;  export SHLIB_SUFFIX=&quot;.out&quot;  export SHLIB_LD=&quot;ccpentium -r -nostdlib&quot;  export SHLIB_LD_LIBS=&quot;-Wl,-X -T `cygpath --mixed ${WIND_BASE}/target/h/tool/gnu/ldscripts/link.OUT`&quot;  export AR=&quot;arpentium&quot;  export ac_cv_c_bigendian=no</pre><h3 id="pagetoc18301c34">Generic Configuration</h3><p>These settings are to convince the</p><p><i>configure</i></p><p>script of the existence of various VxWorks functionality, rather than determining the host's functionality.</p><pre> export ac_cv_func_memcmp_clean=yes export ac_cv_func_strtoll=no export ac_cv_func_strtoull=no export ac_cv_func_strncasecmp=no export ac_cv_func_realpath=no export ac_cv_func_uname=no export ac_cv_func_gethostbyname_r=no export ac_cv_func_gethostbyaddr_r=no export tcl_cv_strstr_unbroken=ok export tcl_cv_strtoul_unbroken=ok export tcl_cv_strtod_unbroken=ok export tcl_cv_strtod_buggy=ok export tcl_cv_timezone_long=no export tcl_cv_timezone_time=no export tcl_cv_putenv_copy=yes export ac_cv_lib_pthread_pthread_mutex_init=yes export no_pipe=yes</pre><h3 id="pagetoc86a9edcf">Run Configure</h3><p>Now run the autoconf script:</p><pre> ./configure --enable-threads --disable-shared --enable-symbols --host=vxworksdkm</pre><h3 id="pagetoc88843d01">Fix Makefiles for Cygwin</h3><p>When building on Windows using Cygwin, the Makefile needs to be hacked so that</p><p><i>make</i></p><p>sees cygwin-style paths while the compiler sees Windows-style paths:</p><pre> sed -e 's/\$(CC)\(.*\)\(\$[A-Za-z0-9_./()]*\)$/$(CC)\1\`cygpath --windows \2\`/' &lt; Makefile &gt; Makefile.1 sed -e 's/-I\(\${[A-Z_]*}\)/-I\`cygpath --windows \1\`/g' &lt; Makefile.1 &gt; Makefile.2 sed -e 's%-L/cygdrive/\(.\)\(/[A-Za-z0-9._/]*\)%-L\1:\2%g' &lt; Makefile.2 &gt; Makefile.3 sed -e 's%\t\t\(\$(GENERIC_DIR)/tclPkgConfig.c\)%\t\t\`cygpath --windows \1\`%' &lt; Makefile.3 &gt; Makefile.4 sed -e 's%\t\t\(\$(UNIX_DIR)/tclUnixInit.c\)%\t\t\`cygpath --windows \1\`%' &lt; Makefile.4 &gt; Makefile.5</pre><p>This shouldn't be necessary for a cross-build from Unix.</p><h3 id="pagetoc8fd94107">Build</h3><p>After all of the above, Tcl should build fine.  On Windows, use the hacked</p><p><i>Makefile.5</i></p><p>(see above).This should result in the loadable module</p><p><b>tclsh.out</b></p><p>.</p><hr /><div class="centered"><h2 id="pagetoc39382f82">Using Tcl</h2></div><hr /><p>In the VxWorks</p><p><a href="http://wiki.tcl.tk/1387">C</a></p><p>interpreter, load the Tcl DKM built above -- assumed to be in the</p><p><i>/tcl</i></p><p>directory, adjust as necessary -- using</p><pre> ld &lt; /tcl/tclsh.out</pre><p>Before starting Tcl, the</p><p><i>pre-init</i></p><p>script must be set to configure Tcl's library path, e.g., by running the following command in the VxWorks C interpreter:</p><pre> TclSetPreInitScript (&quot;set ::tclDefaultLibrary /tcl/library&quot;);</pre><p>Note: if this step omitted, then Tcl will fail, complaining that it can not find the</p><p><i>init.tcl</i></p><p>file.  Then it will crash.The Tcl module provides two entry points that can be called from the C interpreter:</p><dl><dt><tt>tcl</tt></dt><dd>Enters an interactive Tcl shell session.  Line editing and history follows the usual VxWorks rules.  Use <tt>shellConfigSet INTERPRETER=C</tt> to return to the C interpreter. Tcl interpreter state is preserved when switching in and out of the interactive session. Ctrl-C can be used to restart the interpreter (at which point state is lost).</dd><dt><tt>tclsh <i>file</i></tt></dt><dd>This executes the contents of <i>file</i> in a new Tcl interpreter (no state is shared with other sessions).</dd></dl><hr /><div class="centered"><h2 id="pagetocedbe8b2c">Tcl Extensions</h2></div><hr /><p>The following VxWorks-specific commands are available:</p><h3 id="pagetoc092637eb">shellConfigSet</h3><p>Usage:</p><pre> shellConfigSet config</pre><p>This calls</p><p><tt>shellConfigSet (CURRENT_SHELL_SESSION, <i>config</i>)</tt></p><p>.The primary purpose of this command is to switch back from an interactive Tcl session to the C interpreter using</p><p><tt>shellConfigSet INTERPRETER=C</tt></p><p>.  See the</p><p><tt>shellLib</tt></p><p>documentation for more information.</p><h3 id="pagetoc049c166e">shellEvaluate</h3><p>Usage:</p><pre> shellEvaluate cmd ?interpreter?</pre><p>This evaluates</p><p><i>cmd</i></p><p>in</p><p><i>interpreter</i></p><p>and returns the result.  If omitted,</p><p><i>interpreter</i></p><p>defaults to</p><p><tt>C</tt></p><p>.See the documentation for</p><p><tt>shellInterpEvaluate()</tt></p><p>for more information.Only integer-type return values are supported.  While</p><p><tt>shellInterpEvaluate()</tt></p><p>appears to return the polymorphic type</p><p><tt>SHELL_EVAL_VALUE</tt></p><p>, it is not documented, and I have not seen its</p><p><tt>type</tt></p><p>field be anything else than</p><p><tt>SHELL_INT</tt></p><p>.</p><h3 id="pagetoc9abd2f80">shellExec</h3><p>Usage:</p><pre> shellExec cmd ?interpreter?</pre><p>This evaluates</p><p><i>cmd</i></p><p>in</p><p><i>interpreter</i></p><p>and returns the output, similar to capturing a process' standard output.  If omitted,</p><p><i>interpreter</i></p><p>defaults to</p><p><tt>C</tt></p><p>.The shell echoes commands as they are interpreted, so</p><p><tt>cmd</tt></p><p>is included in the output. The C shell also prints the value that each individual command evaluates to. So some post-processing of the returned value is necessary.A new interpreter session is created, which has its working directory initialized to some default, rather than inheriting Tcl's working directory.</p><p><i>cmd</i></p><p>should use absolute file names or change to the desired directory before accessing any files.This command may hang if</p><p><i>cmd</i></p><p>attempts to read from the console.</p><h3 id="pagetoc723f4d1e">exit</h3><p>The</p><p><tt>exit</tt></p><p>command is replaced to delete the current interpreter rather than exiting from the process -- the latter would make Tcl unusable. If this happens at an inopportune time, the error &quot;eval called on a deleted interpreter&quot; may occur. This is harmless, but Tcl should be modified to avoid this error.If</p><p><tt>exit</tt></p><p>is used in an interactive session, the current Tcl interpreter is deleted, and the session is returned to the C interpreter. When</p><p><tt>tcl</tt></p><p>is called again, a new Tcl interpreter session is started.</p><hr /><div class="centered"><h2 id="pagetoc0e50e585">BSP Features</h2></div><hr /><p>For reference, I needed to enable the following features in the kernel configurator beyond the &quot;default&quot;:</p><ul>    <li>INCLUDE_GETADDRINFO</li>    <li>INCLUDE_GETIFADDRS</li>    <li>INCLUDE_GETNAMEINFO</li>    <li>INCLUDE_GETNAMEINFO_SYSCTL</li>    <li>INCLUDE_GETSERVBYNAME</li>    <li>INCLUDE_STRICMP</li></ul><hr /><div class="centered"><h2 id="pagetoc98e9b44b">Tcl Features</h2></div><hr /><p>Loadable Tcl modules must be built as DKMs, and should be stub-enabled.Sorry, no threads yet.No pipes or</p><p><a href="http://wiki.tcl.tk/1039">exec</a></p><p>.</p><hr /><div class="centered"><h2 id="pagetoc00bf0aed">The Gory Details</h2></div><hr /><p>Here are some implementation details of the VxWorks port:</p><ul>    <li>For better or worse, the patch modifies Tcl's <tt>unix</tt> port rather than creating a separate <tt>vxworks</tt> port.  That kept the patch smaller, but makes it impossible to merge.</li>    <li>The patch does not make use of some the POSIX APIs that were added in more recent versions of VxWorks, but instead uses the legacy APIs.</li>    <li>When <tt>TclpObjAccess()</tt> is called with an <tt>R_OK</tt> (is the file readable?) parameter, it is replaced with a check for <tt>F_OK</tt> (does the file exist?).  VxWorks' <tt>access(...,R_OK)</tt> erroneously returned false for files on NFS-mounted volumes even though they were readable.  This means that <tt><a href="http://wiki.tcl.tk/1041">file</a> readable</tt> may now return a false positive in some cases.</li>    <li>The probably greatest hack is the use of the event-based rather than the threaded notifier. The major reason is that VxWorks does not have anonymous pipes (the <tt>pipe()</tt> system call) that the threaded notifier uses. VxWorks does have named pipes which could be used instead, but I did not get around to implementing that. So far, the event-based notifier seems to hold up well even when multiple threads are running. However, given that I don't understand all the details, I can't guarantee that this won't cause issues in more complex applications.</li>    <li>In VxWorks DKM mode, everything runs as tasks (threads) in the kernel &quot;process&quot;.  Calling <tt>exit()</tt> is therefore not possible.  <tt>Tcl_Exit()</tt> calls <tt>Tcl_Finalize()</tt>, which renders the Tcl state unusable for other threads.  <tt>Tcl_SetExitProc()</tt> was not an option since it is expected to not return.  Therefore the patch overload's Tcl's <a href="http://wiki.tcl.tk/1040">exit</a> command to delete the current interpreter instead. That seems to work for the most part, except for a few places where Tcl kept calling <tt>Tcl_Eval()</tt> without checking for interpreter deletion first -- so I added the appropriate checks in the places that I came across.</li>    <li>VxWorks has no timezone, user id, group id, or <tt>/etc/passwd</tt>, so those features are commented out. Note that many VxWorks systems do not have real-time clocks, so unless the time is explicitly set (e.g., using <a href="http://wiki.tcl.tk/3391">Network Time Protocol - NTP</a>), the clock starts at zero.</li>    <li>I shied away from implementing threads so far, because they depend on <tt>pthread_exit()</tt>.  Its equivalent in the VxWorks legacy API, <tt>taskDelete()</tt>, does not clean up resources that the thread was using, and might thus cause memory leaks and other issues.</li></ul><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2010/01/2010118202243.html" target="_blank">继续阅读《Tcl on VxWorks(出自Tcl.tk的wiki)》的全文内容...</a></p><p><a href="http://www.rtoslab.net/2010/01/2010118202243.html#comment" target="_blank">找不到相关文章，请发表流言</a></p>]]></description><category>风河资料库</category><comments>http://www.rtoslab.net/2010/01/2010118202243.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=72</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=72&amp;key=4d872451</trackback:ping></item><item><title>&amp;lt;转&amp;gt;在romInit.s中显示简单Shell的代码</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/12/20091218215834.html</link><pubDate>Fri, 18 Dec 2009 21:58:34 +0800</pubDate><guid>http://www.rtoslab.net/2009/12/20091218215834.html</guid><description><![CDATA[<p>&nbsp;</p><p>本文为转载，原文地址为：http://www.cnblogs.com/hpunix/articles/1548776.html</p><p>&nbsp;</p><p>在romInit.s中显示简单Shell的代码<br /><br />&nbsp;/*************************************************************************************<br />A~F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x41 ~0x46<br />a~f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x61 ~0x66<br />'-'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x2d<br />'&gt;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x3e<br />'!'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x21<br />' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x20<br />':'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x3a<br />**************************************************************************************/<br /><br />/*************************************************************************************<br />MainCmdLoop&nbsp; : global while cycle<br />InvalidateCMD: print &quot;Invalidate Command!&quot;, and return display &quot;-&gt;&quot;<br />CmdContinue&nbsp; : return display &quot;-&gt;&quot;<br />**************************************************************************************/<br /><br />/*************************************************************************************<br />InvalidateCMD: print &quot;Invalidate Command!&quot;, and return display &quot;-&gt;&quot;<br />CmdContinue&nbsp; : return display &quot;-&gt;&quot;<br />**************************************************************************************/<br /><br />/*************************************************************************************<br />Register Define:<br />r6, r7,r30&nbsp;&nbsp; : worked as the temp register<br />r5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : work as the cmd field<br />r4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : address<br />r3/r31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : i，j<br />r8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : data<br />**************************************************************************************/<br /><br />FUNC_BEGIN(CmdLoopCycle)<br />&nbsp;&nbsp;&nbsp; nop<br />&nbsp;&nbsp;&nbsp; nop<br />CmdLoopInternal:<br />&nbsp;&nbsp;&nbsp; READADRB(r5,r7,MPC83XX_URBR1(CCSBAR))<br />/*&gt;*************************************************************************<br />* &gt;系统消息分发<br />**&gt;*************************************************************************/&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpwi&nbsp;&nbsp; r5,0x64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's 'd'&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; DisPlayoperation<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpwi&nbsp;&nbsp; r5,0x6d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's 'd'&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; CmdModification<br /><br />&nbsp;&nbsp;&nbsp; cmpwi&nbsp;&nbsp; r5,0xa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's 回车 */<br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; CmdContinue<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bne&nbsp;&nbsp;&nbsp;&nbsp; InvalidateCMD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Others symbols, enter into Invalidate <br /><br />CMD*/<br /><br />/*&gt;******************************************************************************<br />* &gt;修改内存内容部分&nbsp; --- M<br />**&gt;******************************************************************************/<br />CmdModification:<br />&nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp; r3 循环计数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp; r4 代表输入地址，初始化*/<br />&nbsp;&nbsp; <br />&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r31,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 临时变量 */<br />&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r30,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 临时变量 */&nbsp;&nbsp; <br />&nbsp;<br />CmdModificationInternal:<br />&nbsp;&nbsp;&nbsp; READADRB(r5,r7,MPC83XX_URBR1(CCSBAR))<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x0a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's 回车&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; CmdDisModification <br /><br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's ' '&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; CmdModificationInternal<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为数字(0~9)<br />***************************************************************************/<br />ismDigital:&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ble&nbsp;&nbsp;&nbsp;&nbsp; ismLowerCharDig&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; ismLowerCharDig&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x30<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,r4,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r4,r4,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ismFinished<br />&nbsp;&nbsp; <br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为小写字母(a~f)<br />***************************************************************************/<br />ismLowerCharDig:&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;'a'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; ismHighCharDig&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;'f'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; ismHighCharDig&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x57<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,r4,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r4,r4,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ismFinished<br /><br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为大写字母(A~F)<br />***************************************************************************/<br />ismHighCharDig: <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;'A'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; InvalidateCMD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;'F'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; InvalidateCMD&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x37<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,r4,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r4,r4,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br /><br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为大于8个字符<br />***************************************************************************/<br />ismFinished:<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r3,0x8<br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; CmdModificationInternal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 显示修改界面<br />***************************************************************************/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />CmdDisModification:<br />&nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp; r3 循环计数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp; r31 dataH, r30 dataL&nbsp;&nbsp; */<br />mDisplayDchar:<br />&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; r4,r3,r4<br />&nbsp;lbz&nbsp;&nbsp;&nbsp;&nbsp; r5,0(r4)<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r31,r5,28,28,31<br />&nbsp;&nbsp;&nbsp; clrlwi&nbsp; r30,r5,28<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //Hi bits<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r31,0x9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayCharHi<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,0x61<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r31)&nbsp;&nbsp;&nbsp; /* output 'v' */<br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayLow<br />&nbsp;&nbsp; <br />ismDisplayCharHi:<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,0x30<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r31)&nbsp;&nbsp;&nbsp; /* output 'v' */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />ismDisplayLow:<br />&nbsp;&nbsp;&nbsp; //Lo bits<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r30,0x9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayCharLo<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r30,r30,0x61<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r30)&nbsp;&nbsp;&nbsp; /* output 'v' */<br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayBreak<br />&nbsp;&nbsp; <br />ismDisplayCharLo:<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r30,r30,0x30<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r30)&nbsp;&nbsp;&nbsp; /* output 'v' */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />ismDisplayBreak:<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x58)&nbsp;&nbsp;&nbsp; /* output ':' */<br /><br />&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r31,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* r31用作 J, 先前的值被抹掉&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r30,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* r30用作 输出Data, 先前的值被抹掉 */<br />&nbsp;<br />modGetOneByte:<br />&nbsp;&nbsp;&nbsp; READADRB(r5,r7,MPC83XX_URBR1(CCSBAR))<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x0a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's 回车&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; modUpdateOneByte <br /><br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's ' '&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; modGetOneByte<br /><br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's '.'&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; CmdContinue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 跳出修改部分&nbsp;&nbsp; */<br /><br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为数字(0~9)<br />***************************************************************************/<br />ismuDigital:&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ble&nbsp;&nbsp;&nbsp;&nbsp; ismuLowerCharDig&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; ismuLowerCharDig&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r30,r30,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r30,r30,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,1<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ismuFinished<br />&nbsp;&nbsp; <br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为小写字母(a~f)<br />***************************************************************************/<br />ismuLowerCharDig:&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;'a'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; ismuHighCharDig&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;'f'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; ismuHighCharDig&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x57<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r30,r30,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r30,r30,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,1<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ismuFinished<br /><br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为大写字母(A~F)<br />***************************************************************************/<br />ismuHighCharDig: <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;'A'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; InvalidateCMD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;'F'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; InvalidateCMD&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x37<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r30,r30,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r30,r30,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,1<br /><br /><br />ismuFinished:<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,1<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r31,0x2<br />&nbsp;&nbsp;&nbsp; bne&nbsp;&nbsp;&nbsp;&nbsp; modGetOneByte<br />/*******************************************************************************<br />&nbsp;* 结束字符显示<br />&nbsp;*******************************************************************************/<br />&nbsp;<br />/**************************Next modification lines******************************/<br />modUpdateOneByte:<br />&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; r6,r4,r3<br />&nbsp;&nbsp;&nbsp; stb&nbsp;&nbsp;&nbsp;&nbsp; r30,0(r6)<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r3,0x4<br />&nbsp;&nbsp;&nbsp; bne&nbsp;&nbsp;&nbsp;&nbsp; mDisplayDchar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CmdContinue<br />&nbsp;&nbsp;&nbsp; nop<br />&nbsp;&nbsp;&nbsp; nop<br /><br />/*&gt;****************************************************************************<br />* &gt;显示内存内容部分 D<br />**&gt;****************************************************************************/<br />DisPlayoperation:<br />&nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp; r3 循环计数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp; r4 代表输入地址，初始化*/<br /><br />&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r31,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 临时变量 */<br />&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r30,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 临时变量 */&nbsp;&nbsp; <br /><br />DisPlayopeInternal:<br />&nbsp;&nbsp;&nbsp; READADRB(r5,r7,MPC83XX_URBR1(CCSBAR))<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x0a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's 回车&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; DisplayDisplay <br /><br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If it's ' '&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; beq&nbsp;&nbsp;&nbsp;&nbsp; DisPlayopeInternal<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为数字(0~9)<br />***************************************************************************/<br />isdDigital:&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ble&nbsp;&nbsp;&nbsp;&nbsp; isdLowerCharDig&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; isdLowerCharDig&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x30<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,r4,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r4,r4,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isdFinished<br />&nbsp;&nbsp; <br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为小写字母(a~f)<br />***************************************************************************/<br />isdLowerCharDig:&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;'a'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; isdHighCharDig&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;'f'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; isdHighCharDig&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x57<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,r4,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r4,r4,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isdFinished<br /><br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为大写字母(A~F)<br />***************************************************************************/<br />isdHighCharDig: <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;'A'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; InvalidateCMD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r5,0x46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;'F'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; InvalidateCMD&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; subfic&nbsp; r5,r5,0x37<br />&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,r4,r5<br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r4,r4,4,0,27<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br /><br />/**************************************************************************<br />*&nbsp;&nbsp;&nbsp; 判断是否为大于8个字符<br />***************************************************************************/<br />isdFinished:<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r3,0x8<br />&nbsp;&nbsp;&nbsp; blt&nbsp;&nbsp;&nbsp;&nbsp; DisPlayopeInternal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />DisplayDisplay:<br />&nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3,0<br />&nbsp;&nbsp; <br />DisplayDchar:<br />&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; r4,r3,r4<br />&nbsp;lbz&nbsp;&nbsp;&nbsp;&nbsp; r5,0(r4)<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; rlwinm&nbsp; r31,r5,28,28,31<br />&nbsp;&nbsp;&nbsp; clrlwi&nbsp; r30,r5,28<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //Hi bits<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r31,0x9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayCharHi<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,0x61<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r31)&nbsp;&nbsp; /* output 'v' */<br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayLow<br />&nbsp;&nbsp; <br />isdDisplayCharHi:<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,0x30<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r31)&nbsp;&nbsp; /* output 'v' */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />isdDisplayLow:<br />&nbsp;&nbsp;&nbsp; //Lo bits<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r30,0x9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &gt;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bgt&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayCharLo<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r30,r30,0x61<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r30)&nbsp;&nbsp; /* output 'v' */<br />&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isdDisplayBreak<br />&nbsp;&nbsp; <br />isdDisplayCharLo:<br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r30,r30,0x30<br />&nbsp;&nbsp;&nbsp; WRITEADRBREG(r6,MPC83XX_UTHR1(CCSBAR),r30)&nbsp;&nbsp; /* output 'v' */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />isdDisplayBreak:<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x20)&nbsp;&nbsp; /* output ' ' */<br /><br />&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r3,r3,1<br />&nbsp;&nbsp;&nbsp; cmpi&nbsp;&nbsp;&nbsp; r3,0x10<br />&nbsp;&nbsp;&nbsp; bne&nbsp;&nbsp;&nbsp;&nbsp; DisplayDchar<br />/*******************************************************************************<br />&nbsp;* 结束字符显示<br />&nbsp;*******************************************************************************/<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp; CmdContinue<br />&nbsp;&nbsp;&nbsp; nop<br />&nbsp;&nbsp;&nbsp; nop&nbsp;&nbsp;&nbsp; <br /><br />InvalidateCMD: <br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x0a)&nbsp;&nbsp; /* output 回车 */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x0d)&nbsp;&nbsp; /* output 换行 */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x49)&nbsp;&nbsp; /* output 'I' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x6e)&nbsp;&nbsp; /* output 'n' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x76)&nbsp;&nbsp; /* output 'v' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x61)&nbsp;&nbsp; /* output 'a' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x6c)&nbsp;&nbsp; /* output 'l' */&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x69)&nbsp;&nbsp; /* output 'i' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x64)&nbsp;&nbsp; /* output 'd' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x61)&nbsp;&nbsp; /* output 'a' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x74)&nbsp;&nbsp; /* output 't' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x65)&nbsp;&nbsp; /* output 'e' */&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x20)&nbsp;&nbsp; /* output ' ' */<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x43)&nbsp;&nbsp; /* output 'C' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x6f)&nbsp;&nbsp; /* output 'o' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x6d)&nbsp;&nbsp; /* output 'm' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x6d)&nbsp;&nbsp; /* output 'm' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x61)&nbsp;&nbsp; /* output 'a' */ <br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x6e)&nbsp;&nbsp; /* output 'n' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x64)&nbsp;&nbsp; /* output 'd' */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x21)&nbsp;&nbsp; /* output '!' */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ba&nbsp; CmdContinue<br />&nbsp;&nbsp;&nbsp; nop<br />&nbsp;&nbsp;&nbsp; nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />CmdContinue:<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x0a)&nbsp;&nbsp; /* output 回车 */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x0d)&nbsp;&nbsp; /* output 换行 */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x2d)&nbsp;&nbsp; /* output '-'&nbsp; */<br />&nbsp;&nbsp;&nbsp; WRITEADRB(r6,r7,MPC83XX_UTHR1(CCSBAR),0x3e)&nbsp;&nbsp; /* output '&gt;'&nbsp; */<br /><br />&nbsp;&nbsp;&nbsp; ba&nbsp; CmdLoopInternal&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; nop<br />&nbsp;&nbsp;&nbsp; nop<br /><br />CmdLoopReturn:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; blr&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />FUNC_END(CmdLoopCycle)</p><p>&nbsp;</p><p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/12/20091218215834.html" target="_blank">继续阅读《<转>在romInit.s中显示简单Shell的代码》的全文内容...</a></p><h3>相关文章:</h3><ul><p><a  href="http://www.rtoslab.net/2009/12/20091218213627.html"><转>实现动态加载VXWORKS .O/.OUT模块</a>&nbsp;&nbsp;(2009-12-18 21:36:27)</p><p><a  href="http://www.rtoslab.net/2009/12/200912219553.html">贪吃蛇 for WindMl3.0 更新源代码！</a>&nbsp;&nbsp;(2009-12-2 19:5:53)</p><p><a  href="http://www.rtoslab.net/2009/12/2009121183920.html">编译windml时需要注意的！</a>&nbsp;&nbsp;(2009-12-1 18:39:20)</p><p><a  href="http://www.rtoslab.net/2009/08/20098156366.html">wwm中的链表UGL_LIST</a>&nbsp;&nbsp;(2009-8-15 6:36:6)</p><p><a  href="http://www.rtoslab.net/2009/08/200981184637.html">贪吃蛇 for WindMl3.0</a>&nbsp;&nbsp;(2009-8-11 8:46:37)</p></ul>]]></description><category>他山之玉</category><comments>http://www.rtoslab.net/2009/12/20091218215834.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=71</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=71&amp;key=ce0767c4</trackback:ping></item><item><title>&amp;lt;转&amp;gt;实现动态加载VXWORKS .O/.OUT模块</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/12/20091218213627.html</link><pubDate>Fri, 18 Dec 2009 21:36:27 +0800</pubDate><guid>http://www.rtoslab.net/2009/12/20091218213627.html</guid><description><![CDATA[<p>&nbsp;</p><p>本文为转帖，原文地址为http://www.cnblogs.com/hpunix/articles/355758.html</p><p>&nbsp;</p><p>&nbsp;</p><p>实现动态加载VXWORKS .O/.OUT模块<br /><br />整个过程为：<br />创建文件系统--》下载文件--》加载模块--》查找符号地址并执行<br /><br />以下为演示该过程的一个简易实现文件，有使用或者引用的话，也<br />打个招呼，或者给评论一下：<br />==============START OF THE FILE=============<br />/*********************************************************<br />&nbsp;* 版权所有 NP系统工作室。<br />&nbsp;*<br />&nbsp;* 文件名称：&nbsp;&nbsp;&nbsp; \FilseSystemCreate.c<br />&nbsp;* 文件标识：&nbsp;&nbsp; <br />&nbsp;* 内容摘要：&nbsp;&nbsp;&nbsp; 创建文件系统，在系统启动之后保存文件<br />&nbsp;* 其它说明：<br />&nbsp;* 当前版本：&nbsp;&nbsp;&nbsp; S 1.0<br />&nbsp;* 作&nbsp;&nbsp;&nbsp; 者：&nbsp;&nbsp;&nbsp; william<br />&nbsp;* 完成日期：&nbsp;&nbsp;&nbsp; 2005-10-12 17:04<br />&nbsp;* 当前责任人-1：william<br />&nbsp;*<br />&nbsp;* 修改记录1：&nbsp; <br />&nbsp;*&nbsp;&nbsp;&nbsp; 修改日期：2006-3-21 12:00<br />&nbsp;*&nbsp;&nbsp;&nbsp; 版 本 号：S 1.0<br />&nbsp;*&nbsp;&nbsp;&nbsp; 修 改 人：william<br />&nbsp;*&nbsp;&nbsp;&nbsp; 修改内容：创建<br />&nbsp;* 修改记录2：<br />&nbsp;**********************************************************/<br /><br />#include &lt;taskLib.h&gt;<br />#include &lt;vxWorks.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;ioLib.h &gt;<br />#include &lt;symLib.h &gt;<br />#include &lt;loadlib.h &gt;<br /><br />#include &quot;dosFsLib.h&quot;<br />#include &quot;ramDrv.h&quot;<br />#include &quot;usrLib.h&quot;<br /><br /><br />typedef int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STATUS;<br />#define ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1<br />#define OK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br />#define DIAG_RAM_DISK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0x100000*10)&nbsp; /* 64M */<br />#define DIAG_RAM_DISK_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;/selfdev/&quot;<br /><br />STATUS FileSystem_Init()<br />{<br />&nbsp;&nbsp;&nbsp; BLK_DEV&nbsp;&nbsp;&nbsp;&nbsp; *pBlkDev;<br />&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *pFileSysRamDiskBase = NULL;<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ramDrv();<br />&nbsp;&nbsp;&nbsp; pFileSysRamDiskBase = malloc(DIAG_RAM_DISK_SIZE);<br />&nbsp;&nbsp;&nbsp; if(NULL == pFileSysRamDiskBase)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; bzero(pFileSysRamDiskBase,DIAG_RAM_DISK_SIZE);<br /><br />&nbsp;&nbsp;&nbsp; pBlkDev = ramDevCreate( pFileSysRamDiskBase, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* start address */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* sector size */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64,&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* sectors per track */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (int)(DIAG_RAM_DISK_SIZE/512),&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* total sectors 64 MBytes */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* offset */<br />&nbsp;&nbsp;&nbsp; if(NULL == pBlkDev)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free(pFileSysRamDiskBase);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROR;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; if(NULL == dosFsMkfs (DIAG_RAM_DISK_NAME, pBlkDev))<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free(pFileSysRamDiskBase);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROR;<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; return OK;<br />}<br /><br />extern SYMTAB_ID sysSymTbl ;<br />void runModule()<br />{<br />&nbsp;&nbsp;&nbsp; STATUS status=ERROR;<br />&nbsp;&nbsp;&nbsp; int fd;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; MODULE_ID hModule ;<br />&nbsp;&nbsp;&nbsp; FUNCPTR taskEntry = NULL ;<br />&nbsp;&nbsp;&nbsp; SYM_TYPE * pType ;<br /><br />&nbsp;&nbsp;&nbsp; if ((fd = open(&quot;/selfdev/youown.o&quot;, O_RDONLY, 0)) &lt; 0)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\nCannot open memory device.\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto done;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; if ((hModule=loadModule(fd,LOAD_ALL_SYMBOLS))==NULL)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;loadModule error = 0x%x.\n&quot;,errno) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto done;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; <br />&nbsp;&nbsp;&nbsp; status = symFindByName(sysSymTbl,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;willian_test&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (char **)&amp;taskEntry,pType ) ;<br />&nbsp;&nbsp;&nbsp; if (status==ERROR)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;symFindByName error=%d\\n&quot;, errno) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto done;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;taskEntryr=0x%x, type=%d\n.&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (int)taskEntry,(int)*pType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; status = taskSpawn(&quot;test1&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; taskEntry,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,0,0,0,0,0,0,0,0,0) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (status==ERROR)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;taskSpawn error=%d\n&quot;,errno) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto done;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; <br />done:<br />&nbsp;&nbsp;&nbsp;&nbsp; if (fd &gt;= 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close(fd);&nbsp;&nbsp; <br />}<br /><br />&nbsp;<br /><br />int downLoadModules(<br />&nbsp;&nbsp;&nbsp; char *hostName,<br />&nbsp;&nbsp;&nbsp; char *srcfileName,<br />&nbsp;&nbsp;&nbsp; char *destfileName,<br />&nbsp;&nbsp;&nbsp; char *usr,<br />&nbsp;&nbsp;&nbsp; char *passwd)<br />{<br />&nbsp;&nbsp;&nbsp; .........<br />&nbsp;&nbsp;&nbsp; /*实现下载远端PC模块到本地机*/<br /><br />&nbsp;&nbsp;&nbsp; return (filesize);<br />}<br /><br /><br />STATUS test_dynamic_download()<br />{<br />&nbsp;&nbsp;&nbsp; STATUE status = OK;<br />&nbsp;&nbsp;&nbsp; int fileLenth = 0;<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; status = FileSystem_Init();<br />&nbsp;&nbsp;&nbsp; if(status == ERROR)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\nerror occured during init file system\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROK;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; fileLenth = downLoadModules(&quot;winner2&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;youown.o&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;/selfdev/youown.o&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;target&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;target&quot;);<br />&nbsp;&nbsp;&nbsp; if(ERROR == fileLenth)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\nSome error occured when download files\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROK;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(0 == fileLenth) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return OK;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; runModule();<br />}<br />=============END OF THE FILE==========<br /><br />几个需要注意的问题：<br />1：在文件系统初始化中使用的是MALLOC，该部分是使用的实际是<br />&nbsp;&nbsp; BSP的空间在实际申请的过程中一定要根据自己可能拷贝的文<br />&nbsp;&nbsp; 件大小和实际的BSP的空间<br /><br />2：在创建文件系统之后，可以查看该目录的文件列表，或者执行<br />&nbsp;&nbsp; COPY，前提是必须在TORNADO中选择初始化文件系统组件；<br />&nbsp; <br />3：在下载文件的过程中，有的BSP初始化已经可以直接通过COPY<br />&nbsp;&nbsp; 在远端FTP SERVER直接拷贝文件，比如：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; copy &quot;youown.o&quot;,&quot;/selfdev/youown.o&quot;<br />&nbsp;&nbsp; 这种情况没有必要再调用downLoadModules，至于如何使能，<br />&nbsp;&nbsp; 大家关注的话可以在后边对其专门论述。&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />4：加载模块的过程可以调用如下代码：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((hModule=loadModule(fd,LOAD_ALL_SYMBOLS))==NULL)<br />&nbsp;&nbsp;&nbsp; 同样也可以如下实现：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ld(1,0,&quot;/selfdev/youown.o&quot;);<br />&nbsp;&nbsp;&nbsp; 至于各个参数什么意思，参考HELP就可以找到结论了！<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />5：在&nbsp;&nbsp;&nbsp; status = symFindByName(sysSymTbl,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;willian_test&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (char **)&amp;taskEntry,pType ) ;<br />&nbsp;&nbsp; 中，有可能实际返回错误，但是通过lkup 是可以实际找到的，<br />&nbsp;&nbsp; 对于这个问题，我看网上答案比较少，原因是这样的：<br />&nbsp; <br />&nbsp;&nbsp; 假如你在主机运行shell,默认的远端目标机是没有符号表<br />&nbsp;&nbsp; （symbol table）的，只有在主机的shell上，你运行LKUP的<br />&nbsp;&nbsp; 时候，才能找到这个符号，不信你可以这样尝试一下，打开两<br />&nbsp;&nbsp; 个SHELL，一个通过串口，一个通过TORNADO的网口，你在其中<br />&nbsp;&nbsp; 一个中能够使用LKUP找到，而在另外一个则不能找到，是不是<br />&nbsp;&nbsp; 呀？？&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来继续解释，我们的symFindByName是在目标机器上<br />&nbsp;&nbsp; 执行的，所以自然的就返回错误了，也是没有找到了！<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解决方法是这样的：在目标机中包含符号表，同时将其和<br />&nbsp;&nbsp; 主机保持同步。<br />&nbsp;&nbsp; Wind River told us to include all this defines in the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config files for the target:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_SYM_TBL_SYNC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_LOADER<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* object module loading */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_NET_SYM_TBL <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* load the symbol table by whatever means */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_SHELL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* target-based shell */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_SHOW_ROUTINES<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* optional target-based system utilities */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_STAT_SYM_TBL <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* optional target error status routines */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_SYM_TBL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* symbol table package */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_UNLOADER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* optional object module unloading */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define INCLUDE_WDB<br /><br /><br /><br /><br /><br />&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/12/20091218213627.html" target="_blank">继续阅读《<转>实现动态加载VXWORKS .O/.OUT模块》的全文内容...</a></p><h3>相关文章:</h3><ul><p><a  href="http://www.rtoslab.net/2009/12/20091218215834.html"><转>在romInit.s中显示简单Shell的代码</a>&nbsp;&nbsp;(2009-12-18 21:58:34)</p><p><a  href="http://www.rtoslab.net/2009/12/200912219553.html">贪吃蛇 for WindMl3.0 更新源代码！</a>&nbsp;&nbsp;(2009-12-2 19:5:53)</p><p><a  href="http://www.rtoslab.net/2009/12/2009121183920.html">编译windml时需要注意的！</a>&nbsp;&nbsp;(2009-12-1 18:39:20)</p><p><a  href="http://www.rtoslab.net/2009/08/20098156366.html">wwm中的链表UGL_LIST</a>&nbsp;&nbsp;(2009-8-15 6:36:6)</p><p><a  href="http://www.rtoslab.net/2009/08/200981184637.html">贪吃蛇 for WindMl3.0</a>&nbsp;&nbsp;(2009-8-11 8:46:37)</p></ul>]]></description><category>他山之玉</category><comments>http://www.rtoslab.net/2009/12/20091218213627.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=70</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=70&amp;key=770b90a4</trackback:ping></item><item><title>几种GUI中的图形上下文比较</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/12/20091215233958.html</link><pubDate>Tue, 15 Dec 2009 23:39:58 +0800</pubDate><guid>http://www.rtoslab.net/2009/12/20091215233958.html</guid><description><![CDATA[<p><meta content="text/html; charset=utf-8" http-equiv="Content-Type"><meta content="Word.Document" name="ProgId"><meta content="Microsoft Word 11" name="Generator"><meta content="Microsoft Word 11" name="Originator"><link href="file:///C:%5CDOCUME%7E1%5Cmuch%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" /><!--[if gte mso 9]><xml><w:WordDocument><w:View>Normal</w:View><w:Zoom>0</w:Zoom><w:PunctuationKerning /><w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:ValidateAgainstSchemas /><w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid><w:IgnoreMixedContent>false</w:IgnoreMixedContent><w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText><w:Compatibility><w:SpaceForUL /><w:BalanceSingleByteDoubleByteWidth /><w:DoNotLeaveBackslashAlone /><w:ULTrailSpace /><w:DoNotExpandShiftReturn /><w:AdjustLineHeightInTable /><w:BreakWrappedTables /><w:SnapToGridInCell /><w:WrapTextWithPunct /><w:UseAsianBreakRules /><w:DontGrowAutofit /><w:UseFELayout /></w:Compatibility><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel></w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml><w:LatentStyles DefLockedState="false" LatentStyleCount="156"></w:LatentStyles></xml><![endif]--><style type="text/css"><!-- /* Font Definitions */ @font-face	{font-family:宋体;	panose-1:2 1 6 0 3 1 1 1 1 1;	mso-font-alt:SimSun;	mso-font-charset:134;	mso-generic-font-family:auto;	mso-font-pitch:variable;	mso-font-signature:3 135135232 16 0 262145 0;}@font-face	{font-family:"\@宋体";	panose-1:2 1 6 0 3 1 1 1 1 1;	mso-font-charset:134;	mso-generic-font-family:auto;	mso-font-pitch:variable;	mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{mso-style-parent:"";	margin:0cm;	margin-bottom:.0001pt;	text-align:justify;	text-justify:inter-ideograph;	mso-pagination:none;	font-size:10.5pt;	mso-bidi-font-size:12.0pt;	font-family:"Times New Roman";	mso-fareast-font-family:宋体;	mso-font-kerning:1.0pt;}p	{mso-margin-top-alt:auto;	margin-right:0cm;	mso-margin-bottom-alt:auto;	margin-left:0cm;	mso-pagination:widow-orphan;	font-size:12.0pt;	font-family:宋体;	mso-bidi-font-family:宋体;} /* Page Definitions */ @page	{mso-page-border-surround-header:no;	mso-page-border-surround-footer:no;}@page Section1	{size:595.3pt 841.9pt;	margin:72.0pt 90.0pt 72.0pt 90.0pt;	mso-header-margin:42.55pt;	mso-footer-margin:49.6pt;	mso-paper-source:0;	layout-grid:15.6pt;}div.Section1	{page:Section1;}--><span lang="EN-US"><o:p><br></o:p></span></style><!--[if gte mso 10]><style>/* Style Definitions */table.MsoNormalTable{mso-style-name:普通表格;mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;mso-style-noshow:yes;mso-style-parent:"";mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-para-margin:0cm;mso-para-margin-bottom:.0001pt;mso-pagination:widow-orphan;font-size:10.0pt;font-family:"Times New Roman";mso-fareast-font-family:"Times New Roman";mso-ansi-language:#0400;mso-fareast-language:#0400;mso-bidi-language:#0400;}</style><![endif]--></meta></meta></meta></meta></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;</p><p><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp; 今天晚上看了看几个GUI下的图形上下文(</span><span lang="EN-US">GC</span>，<span lang="EN-US">graphics context</span><span lang="EN-US">)，的使用方法，发现在应用上没有太大的区别，区别只是在于在不同的GUI中其内容不同而已。在网上搜索了一下，发现还有的GUI中将图形上下文定义为类，如Symbian系统中。而在手头上有的有的这几个gui中，都是定义为结构体了，</span>在不同的GUI中对图形上下文又有不同的定义和使用方法。比如：在windml和microwindows中，是作为函数的参数进行传递的，而在UCGUI中，却是作为全局变量使用的。</span></p><p><span style="font-size: small;">&nbsp;&nbsp; 这样做，各有利弊，从我个人的使用角度出发，我认为做为参数传递是比较方便的。<br /></span></p><p style="text-indent: 21pt;"><span style="font-size: small;">在这里，将手头上现有的<span lang="EN-US">gui</span>中的图像上下文列举出来。如果对其他<span lang="EN-US">GUI</span>的图形上下文有兴趣，请自行查找，<a href="http://www.rtoslab.net" target="_blank">在这里</a>，much就不一一列举了。</span></p><p><span style="font-size: small;"><span lang="EN-US"><o:p>&nbsp;</o:p></span></span><span lang="EN-US"><o:p></o:p></span></p><p><b style=""><span lang="EN-US" style="font-size: 18pt;">WINDML<o:p></o:p></span></b></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">typedef struct ugl_gc</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; {</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; struct ugl_ugi_driver *pDriver; /* driver associated with gc */</span></span></p><p style="text-indent: 21pt;" class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">UGL_DDB *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDefaultBitmap; /* output bitmap for rendering */</span></span></p><p style="text-indent: 21pt;" class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">UGL_RECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boundRect; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* bounding rect of output bitmap */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_RECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewPort;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* view port */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_RECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clipRect;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* clipping rectangle */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_REGION_ID&nbsp;&nbsp; clipRegionId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* clipping region */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_COLOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foregroundColor;&nbsp;&nbsp;&nbsp; /* foreground color */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_COLOR&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;backgroundColor;&nbsp;&nbsp;&nbsp; /* background color */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_RASTER_OP&nbsp;&nbsp; rasterOp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* raster operation */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lineWidth;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* line width */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_LINE_STYLE&nbsp; lineStyle;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* line style */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_MDDB *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPatternBitmap;&nbsp;&nbsp;&nbsp;&nbsp; /* fill pattern bitmap */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; struct ugl_font *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pFont;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* active font */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_UINT32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; changed;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* hanged status bit field */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; void *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* optional driver extensions */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_UINT32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; magicNumber;&nbsp;&nbsp;&nbsp; /* GC id plus changed status. */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; UGL_LOCK_ID&nbsp;&nbsp;&nbsp;&nbsp; lockId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Id of mutex semaphore. */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">} UGL_GC;</span></span></p><p><span lang="EN-US"><o:p>&nbsp;</o:p></span><span lang="EN-US"><o:p><br /></o:p></span></p><p><b style=""><span lang="EN-US" style="font-size: 18pt;">microwindows<o:p></o:p></span></b></p><p><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span lang="EN-US">typedef struct _mwscreendevice {</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD<span style="">&nbsp;&nbsp; </span>xres;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* X screen res (real) */</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD<span style="">&nbsp;&nbsp; </span>yres;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* Y screen res (real) */</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD<span style="">&nbsp;&nbsp; </span>xvirtres;<span style="">&nbsp; </span>/* X drawing res (will be flipped in portrait mode) */</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD<span style="">&nbsp;&nbsp; </span>yvirtres;<span style="">&nbsp; </span>/* Y drawing res (will be flipped in portrait mode) */</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>planes;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* # planes*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>bpp;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* # bpp*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>linelen;<span style="">&nbsp;&nbsp;&nbsp; </span>/* line length in bytes for bpp 1,2,4,8*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* line length in pixels for bpp 16, 24, 32*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>size;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* size of memory allocated*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>long<span style=""> </span>ncolors;<span style="">&nbsp;&nbsp; </span>/* # screen colors*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>pixtype;<span style="">&nbsp;&nbsp; </span>/* format of pixel value*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>flags;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* device flags*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void *<span style="">&nbsp;&nbsp;&nbsp;&nbsp; </span>addr;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* address of memory allocated (memdc or fb)*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PSD<span style=""> </span>(*Open)(PSD psd);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*Close)(PSD psd);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*GetScreenInfo)(PSD psd,PMWSCREENINFO psi);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*SetPalette)(PSD psd,int first,int count,MWPALENTRY *pal);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*DrawPixel)(PSD psd,MWCOORD x,MWCOORD y,MWPIXELVAL c);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWPIXELVAL (*ReadPixel)(PSD psd,MWCOORD x,MWCOORD y);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*DrawHorzLine)(PSD psd,MWCOORD x1,MWCOORD x2,MWCOORD y,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWPIXELVAL c);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*DrawVertLine)(PSD psd,MWCOORD x,MWCOORD y1,MWCOORD y2,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWPIXELVAL c);</span></p><p style="margin-left: 42pt; text-indent: -21pt;" class="MsoNormal"><span lang="EN-US">void<span style=""> </span>(*FillRect)(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2, MWPIXELVAL c);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PMWCOREFONT builtin_fonts;</span></p><p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* *void (*DrawText)(PSD psd,MWCOORD x,MWCOORD y,const MWUCHAR *str,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int count, MWPIXELVAL fg, PMWFONT pfont);***/</span></p><p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*Blit)(PSD destpsd,MWCOORD destx,MWCOORD desty,MWCOORD w,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD h,PSD srcpsd,MWCOORD srcx,MWCOORD srcy,long op);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*PreSelect)(PSD psd);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*DrawArea)(PSD psd, driver_gc_t *gc, int op);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>(*SetIOPermissions)(PSD psd);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PSD<span style=""> </span>(*AllocateMemGC)(PSD psd);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWBOOL(*MapMemGC)(PSD mempsd,MWCOORD w,MWCOORD h,int planes,int bpp,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int linelen,int size,void *addr);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*FreeMemGC)(PSD mempsd);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*StretchBlit)(PSD destpsd,MWCOORD destx,MWCOORD desty,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD destw,MWCOORD desth,PSD srcpsd,MWCOORD srcx,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD srcy,MWCOORD srcw,MWCOORD srch,long op);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void<span style=""> </span>(*SetPortrait)(PSD psd,int portraitmode);</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int<span style="">&nbsp;&nbsp;&nbsp; </span>portrait;<span style="">&nbsp;&nbsp; </span> /* screen portrait mode*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PSUBDRIVER orgsubdriver; /* original subdriver for portrait modes*/</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(*StretchBlitEx) (PSD dstpsd, PSD srcpsd,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD dest_x_start, MWCOORD dest_y_start,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MWCOORD width, MWCOORD height,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int x_denominator, int y_denominator,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int src_x_fraction, int src_y_fraction,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int x_step_fraction, int y_step_fraction,</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>long op);</span></p><p class="MsoNormal"><span lang="EN-US">} SCREENDEVICE;</span></p><p><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><p><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><p><b style=""><span lang="EN-US" style="font-size: 18pt;">UCGUI<o:p></o:p></span></b></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">struct GUI_Context_struct {</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">/* Variables in LCD module */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; LCD_COLORINDEX_UNION LCD;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; LCD_RECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClipRect;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; const tLCD_HL_APIList* pLCD_HL;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; U8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawMode;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">/* Variables in GL module */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; GUI_RECT* pClipRect_HL;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; U8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PenSize;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; U8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PenShape;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; U8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LineStyle;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; U8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FillStyle;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">/* Variables in GUICHAR module */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; const GUI_FONT* pAFont;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; I16P LBorder;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; I16P DispPosX, DispPosY;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; I16P DrawPosX, DrawPosY;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; I16P TextMode;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; I16P TextAlign;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">/* Variables in WM module */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; #if GUI_WINSUPPORT</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; const GUI_RECT* WM__pUserClipRect;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; GUI_HWIN hAWin;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; #endif</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">/* Variables in MEMDEV module (with memory devices only) */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; #if GUI_SUPPORT_MEMDEV</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; const tLCDDEV_APIList* pDeviceAPI;&nbsp; /* function pointers only */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; GUI_HMEM&nbsp;&nbsp;&nbsp; hDevData;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; GUI_RECT&nbsp;&nbsp;&nbsp; ClipRectPrev;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; #endif</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">/* Variables Anitaliasing module */</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; U8 AA_Factor;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp; U8 AA_HiResEnable;</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">};</span></span></p><p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span lang="EN-US"><o:p><span style="font-size: small;">&nbsp;</span></o:p></span></p><p class="MsoNormal"><span style="font-size: small;"><span style="font-family: 宋体;">等等不一而足。</span></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US"><o:p>&nbsp;</o:p></span></span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: small;"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">上述列举出的图形上下文的结构体中，有许多的相同之处，例如：线宽、字体、颜色等信息。在具体的使用过程中，如果能够灵活使用图形上下文，是可以解决一些采用常规手段无法解决的问题的！</span></span></p><p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span lang="EN-US"><o:p><br /></o:p></span></p><p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/12/20091215233958.html" target="_blank">继续阅读《几种GUI中的图形上下文比较》的全文内容...</a></p><h3>相关文章:</h3><ul><p><a  href="http://www.rtoslab.net/2010/03/201039172417_2888.html">FLTK编程模型<转></a>&nbsp;&nbsp;(2010-3-9 17:24:17)</p></ul>]]></description><category>杂七杂八</category><comments>http://www.rtoslab.net/2009/12/20091215233958.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=69</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=69&amp;key=01660de4</trackback:ping></item><item><title>贪吃蛇 for WindMl3.0 更新源代码！</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/12/200912219553.html</link><pubDate>Wed, 02 Dec 2009 19:05:53 +0800</pubDate><guid>http://www.rtoslab.net/2009/12/200912219553.html</guid><description><![CDATA[<p>一直在外面，一时找不到了！</p><p>无意之中在某个硬盘中找到这个源代码了！</p><p>上传至此！</p><p><a href="http://www.rtoslab.net/upload/2009/12/much_snake.rar" target="_blank">much_snake.rar</a></p><p>解压密码，请移步至<a href="http://www.cevx.com/bbs/thread-24641-1-1.html" target="_blank"><strong>此处</strong>查看</a>！</p><p>&nbsp;</p><p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/12/200912219553.html" target="_blank">继续阅读《贪吃蛇 for WindMl3.0 更新源代码！》的全文内容...</a></p><h3>相关文章:</h3><ul><p><a  href="http://www.rtoslab.net/2009/12/20091218215834.html"><转>在romInit.s中显示简单Shell的代码</a>&nbsp;&nbsp;(2009-12-18 21:58:34)</p><p><a  href="http://www.rtoslab.net/2009/12/20091218213627.html"><转>实现动态加载VXWORKS .O/.OUT模块</a>&nbsp;&nbsp;(2009-12-18 21:36:27)</p><p><a  href="http://www.rtoslab.net/2009/12/2009121183920.html">编译windml时需要注意的！</a>&nbsp;&nbsp;(2009-12-1 18:39:20)</p><p><a  href="http://www.rtoslab.net/2009/08/20098156366.html">wwm中的链表UGL_LIST</a>&nbsp;&nbsp;(2009-8-15 6:36:6)</p><p><a  href="http://www.rtoslab.net/2009/08/200981184637.html">贪吃蛇 for WindMl3.0</a>&nbsp;&nbsp;(2009-8-11 8:46:37)</p></ul>]]></description><category>VxWorks</category><comments>http://www.rtoslab.net/2009/12/200912219553.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=68</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=68&amp;key=577bb04a</trackback:ping></item><item><title>编译windml时需要注意的！</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/12/2009121183920.html</link><pubDate>Tue, 01 Dec 2009 18:39:20 +0800</pubDate><guid>http://www.rtoslab.net/2009/12/2009121183920.html</guid><description><![CDATA[<p>在重新编译windml时，最好先执行clean，然后，再进行build.<br /><br />否则，生成的.o文件和libwndml.a文件会越来越大。<br /><br />当然，在重新build之前不clean，也可以，不影响使用。<br /><br />也可以在调试过程中，不用clean，以节省时间。<br />等把windml调试结束后，准备正式用于vxworks时，再clean-&gt;build,避免使生成的库文件和vxworks文件不至于太大！<br /><br /><br />今天才发现这个，之前几乎没有执行过clean，导致库文件达到5M多，而clean、build后，库文件只有1M多！<br />这个差距还是蛮大的！</p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/12/2009121183920.html" target="_blank">继续阅读《编译windml时需要注意的！》的全文内容...</a></p><h3>相关文章:</h3><ul><p><a  href="http://www.rtoslab.net/2009/12/20091218215834.html"><转>在romInit.s中显示简单Shell的代码</a>&nbsp;&nbsp;(2009-12-18 21:58:34)</p><p><a  href="http://www.rtoslab.net/2009/12/20091218213627.html"><转>实现动态加载VXWORKS .O/.OUT模块</a>&nbsp;&nbsp;(2009-12-18 21:36:27)</p><p><a  href="http://www.rtoslab.net/2009/12/200912219553.html">贪吃蛇 for WindMl3.0 更新源代码！</a>&nbsp;&nbsp;(2009-12-2 19:5:53)</p><p><a  href="http://www.rtoslab.net/2009/08/20098156366.html">wwm中的链表UGL_LIST</a>&nbsp;&nbsp;(2009-8-15 6:36:6)</p><p><a  href="http://www.rtoslab.net/2009/08/200981184637.html">贪吃蛇 for WindMl3.0</a>&nbsp;&nbsp;(2009-8-11 8:46:37)</p></ul>]]></description><category>VxWorks</category><comments>http://www.rtoslab.net/2009/12/2009121183920.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=67</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=67&amp;key=20e062b2</trackback:ping></item><item><title>Windows 7 主要功能区别</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/10/20091023212045.html</link><pubDate>Fri, 23 Oct 2009 21:20:45 +0800</pubDate><guid>http://www.rtoslab.net/2009/10/20091023212045.html</guid><description><![CDATA[<p>Windows 7包含6个版本，分别为Windows 7 Starter(初级版)、Windows 7 Home Basic(家庭普通版)、Windows 7 Home Premium(家庭高级版)、Windows 7 Professional(专业版)、 Windows 7 Enterprise(企业版)以及Windows7 Ultimate(旗舰版)。</p><p>&nbsp;</p><p>Windows 7 Starter(初级版)</p><p>　　这是功能最少的版本，缺乏Aero特效功能，没有64位支持，没有Windows媒体中心和移动中心等，对更换桌面背景有限制(很奇怪)。它主要设计用于类似上网本的低端计算机，通过系统集成或者OEM计算机上预装获得，并限于某些特定类型的硬件。</p><p>　　Windows 7 Home Basic(家庭普通版)</p><p>　　这是简化的家庭版，中文版预期售价399元。支持多显示器，有移动中心，限制部分Aero特效，没有Windows媒体中心，缺乏Tablet支持，没有远程桌面，只能加入不能创建家庭网络组(Home Group)等。它仅在新兴市场投放，例如中国、印度、巴西等。</p><p>　　Windows 7 Home Premium(家庭高级版)</p><p>　　面向家庭用户，满足家庭娱乐需求，包含所有桌面增强和多媒体功能，如Aero特效、多点触控功能、媒体中心、建立家庭网络组、手写识别等，不支持Windows域、Windows XP模式、多语言等。</p><p>　　Windows 7 Professional(专业版)</p><p>　　面向爱好者和小企业用户，满足办公开发需求，包含加强的网络功能，如活动目录和域支持、远程桌面等，另外还有网络备份、位置感知打印、加密文件系统、演示模式、Windows XP模式等功能。64位可支持更大内存(192GB)。 可以通过全球OEM厂商和零售商获得。</p><p>　　Windows 7 Enterprise(企业版)</p><p>　　面向企业市场的高级版本，满足企业数据共享、管理、安全等需求。包含多语言包、UNIX应用支持、BitLocker驱动器加密、分支缓存(BranchCache)等，通过与微软有软件保证合同的公司进行批量许可出售。不在OEM和零售市场发售。</p><p>　　Windows 7 Ultimate(旗舰版)</p><p>　　拥有所有功能，与企业版基本是相同的产品，仅仅在授权方式及其相关应用及服务上有区别，面向高端用户和软件爱好者。专业版用户和家庭高级版用户可以付费通过Windows随时升级 (WAU)服务升级到旗舰版。</p><p>　　注：在这六个版本中，Windows 7家庭高级版和Windows 7专业版是两大主力版本，前者面向家庭用户，后者针对商业用户。此外，32位版本和64位版本没有外观或者功能上的区别，但64位版本支持16GB(最高至192GB)内存，而32位版本只能支持最大4GB内存。目前所有新的和较新的 CPU都是64位兼容的，均可使用64位版本</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><img title="" alt="" src="http://www.rtoslab.net/upload/2009/10/200910232124167880.jpg" onload="ResizeImage(this,520)" /></p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/10/20091023212045.html" target="_blank">继续阅读《Windows 7 主要功能区别》的全文内容...</a></p><p><a href="http://www.rtoslab.net/2009/10/20091023212045.html#comment" target="_blank">找不到相关文章，请发表流言</a></p>]]></description><category>杂七杂八</category><comments>http://www.rtoslab.net/2009/10/20091023212045.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=66</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=66&amp;key=82811434</trackback:ping></item><item><title>传递祝福，共庆祖国60华诞！</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/10/2009101144346.html</link><pubDate>Thu, 01 Oct 2009 14:43:46 +0800</pubDate><guid>http://www.rtoslab.net/2009/10/2009101144346.html</guid><description><![CDATA[<p>祝愿伟大祖国繁荣昌盛</p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/10/2009101144346.html" target="_blank">继续阅读《传递祝福，共庆祖国60华诞！》的全文内容...</a></p><p><a href="http://www.rtoslab.net/2009/10/2009101144346.html#comment" target="_blank">找不到相关文章，请发表流言</a></p>]]></description><category>杂七杂八</category><comments>http://www.rtoslab.net/2009/10/2009101144346.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=65</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=65&amp;key=63663136</trackback:ping></item><item><title>wwm中的链表UGL_LIST</title><author>netmuch@gmail.com (much)</author><link>http://www.rtoslab.net/2009/08/20098156366.html</link><pubDate>Sat, 15 Aug 2009 06:36:06 +0800</pubDate><guid>http://www.rtoslab.net/2009/08/20098156366.html</guid><description><![CDATA[<p>&nbsp;</p><p><span style="color: #3366ff">作者：much<br />Email：netmuch#163.com</span></p><p><span style="color: #3366ff"><span><span style="font-size: small">如需转载，请务必注明文章来源于本站(</span></span></span><span style="color: #3366ff"><a target="_blank" href="http://www.rtoslab.net/"><span style="font-size: small"><font color="#0a5d0a">风与水的天堂</font></span></a><span style="font-size: small">)。<br />文章出处：</span></span><span style="color: #3366ff"><a href="http://www.rtoslab.net/"><span style="font-size: small"><font color="#0a5d0a">http://www.rtoslab.net</font></span></a><span><span style="font-size: small"><br />Email：netmuch#163.com</span></span></span></p><p>&nbsp;</p><p>&nbsp;</p><p>在vxworks5.5中的windml3.0版本中，已近存在一个属于windml的链表UGL_LIST，对于这个链表，已经做的比较完整了。</p><p>其结构定义：</p><p>typedef struct ugl_node<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; struct ugl_node * pNext;<br />&nbsp;&nbsp;&nbsp; struct ugl_node * pPrev;<br />&nbsp;&nbsp;&nbsp; } UGL_NODE;</p><p>typedef struct ugl_list<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; UGL_NODE * pFirst;<br />&nbsp;&nbsp;&nbsp; UGL_NODE * pLast;<br />&nbsp;&nbsp;&nbsp; int count;<br />&nbsp;&nbsp;&nbsp; } UGL_LIST, * UGL_LIST_ID;</p><p>从其结构的定义上，可以看出来，UGL_LIST仅仅是一个前后的指针，并没有指向某一个特定数据，这也就是说，UGL_LIST具有很大通用性。</p><p>并且，已经提供了创建、销毁、添加节点、删除节点，查找前后，查找其中某个节点等等之类的函数，基本上可以直接使用，而不用另外再添加代码了！</p><p>在windml3.0中，UGL_LIST链表运用的最多的地方就是用来组织wwm中的窗口关系，然后就是用在窗口的z-order上面。</p><p>当然，如果要从这里了解UGL_LIST的使用，代码就显得比较繁琐了，则在wwm中的wwmMenu.c中，通过构建菜单控件，完整了描述了UGL_LIST的使用方法。</p><p>题外话：若对wwmMenu进行改造，基本上可以实现类似windows xp 的开始菜单！</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.rtoslab.net/2009/08/20098156366.html" target="_blank">继续阅读《wwm中的链表UGL_LIST》的全文内容...</a></p><h3>相关文章:</h3><ul><p><a  href="http://www.rtoslab.net/2009/12/20091218215834.html"><转>在romInit.s中显示简单Shell的代码</a>&nbsp;&nbsp;(2009-12-18 21:58:34)</p><p><a  href="http://www.rtoslab.net/2009/12/20091218213627.html"><转>实现动态加载VXWORKS .O/.OUT模块</a>&nbsp;&nbsp;(2009-12-18 21:36:27)</p><p><a  href="http://www.rtoslab.net/2009/12/200912219553.html">贪吃蛇 for WindMl3.0 更新源代码！</a>&nbsp;&nbsp;(2009-12-2 19:5:53)</p><p><a  href="http://www.rtoslab.net/2009/12/2009121183920.html">编译windml时需要注意的！</a>&nbsp;&nbsp;(2009-12-1 18:39:20)</p><p><a  href="http://www.rtoslab.net/2009/08/200981184637.html">贪吃蛇 for WindMl3.0</a>&nbsp;&nbsp;(2009-8-11 8:46:37)</p></ul>]]></description><category>VxWorks</category><comments>http://www.rtoslab.net/2009/08/20098156366.html#comment</comments><wfw:comment>http://www.rtoslab.net/</wfw:comment><wfw:commentRss>http://www.rtoslab.net/feed.asp?cmt=63</wfw:commentRss><trackback:ping>http://www.rtoslab.net/cmd.asp?act=tb&amp;id=63&amp;key=6b8009cb</trackback:ping></item></channel></rss>
