1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        淺談MiniGUI的VxWorks環境移植

        發布時間:  2012/9/12 17:33:14

        首先,需要準備好MiniGUI1.6.10的庫文件,和一些示例文件,可以到MiniGUI.org上下載.(可能我機器上的版本和下載的開源版本不一樣,但是這個文章寫出來就是為了備忘的。所以以我自己的版本為主介紹)

        1. Cygwin環境安裝

        這個就不多說了,windows上很有名的模擬linux平臺的工具軟件?梢院芊奖愕南螺d到。安裝的時候注意安裝make, vim兩個東西即可。

        2. 在cygwin上交叉編譯MiniGUI的產品

        由于我這里的目標板是mips的核,那我就以mips為例:

        MiniGUI源代碼中編譯文件:

        makefile.ng是用來VxWorks的編譯的文件.打開這個文件可以看到include rules.make,打開rules.make文件,可以看到這個文件中做了一些相關的設置。注意第一句TARGET_RULES=build/rules-mipse.vxworks?磥碛玫亩x是放在這個build/rules-mipse.vxworks文件中的,那我再打開這個文件。
         

        這個文件中有幾個定義需要注意:

        1.PREFIX:這個地方定義了編譯好的MiniGUI庫文件和頭文件放置的位置

        2.TARGET_DIR:這個地方定義了tornado工具安裝的路徑,方便尋找vxworks的庫文件和交叉編譯鏈工具

        3.CFLAGS:定義了MiniGUI編譯時候的參數,有類似下面的參數
        -g -mips3 -EL -D__LITTLE_ENDIAN__ -Wall -DTOOL_FAMILY=gnu -DTOOL=gnu -D_WRS_KERNEL -DMIPSEL -DCPU=MIPS64 -D__mips__ -D__MIPSEL__
         

        我們需要注意修改的地方有兩個

        -D__LITTLE_ENDIAN__    大小端,根據不同的客戶機有不同的要求,可能是__BIG__ENDIAN__ __LITTLE_ENDIAN__

        -DCPU=MIPS64    cpu類型:也需要根據不同的客戶機的要求,MIPS64 MIPS32等

        上面的內容都設置好了之后,我們還需要根據板子不同需要做一些代碼定制,如下:關閉鼠標,關閉png,jpeg,commlcd(為了排除問題,只打開dummy 引擎);打開DUMMY引擎。

        也就是注釋掉:……_CURSOR_SUPPORT    1……

        ……_PNG_FILE_SUPPORT    1……

        ……_JEPG_FILE_SUPPORT    1……

        修改配置

        vim src/sysres/mgetc-vxi386.c

        修改為:

        static char *SYSTEM_VALUES[]={"dummy","dummy","/dev/ts","none"};

        下面我們就可以進行交叉編譯了:

        交叉編譯時,必須使用cygwin內置的make命令來編譯。所以輸入如下

        $/bin/make -f makefile.ng clean

        $/bin/make -f makefile.ng

        $/bin/make -f makefile.ng install

        編譯完成后,就可以在已經定義好的目錄下找到編譯好的libMiniGUI.a文件和MiniGUI相關的頭文件.

        3. tornado產品上運行編譯出來的MiniGUI示例

        還記得上個文章說到怎么創建項目吧。那我們新創建一個項目,這里有幾點需要注意

        ◆如果我們是對一個已經編譯好內核的板子來說。我們需要準備好這個內核文件,方便 我們寫好的程序downloading到板子上

        ◆如果是一個已經編譯好內核的板子,我們就只需要建立一個downloadable的應用程序就可以了。

        ◆我們在選擇toolchain的設置的時候(如圖),需要按照不同的板子環境設置不同的toolchain,這里必須注意的是剛才編譯MiniGUI設置的CPU和大小端的內容,必須和這里選擇的一樣。
         

        toolchain的設置


        先給出一個MiniGUI的helloworld實例

        Code
         

         

         1 /* 
        2 ** $Id: helloworld.c,v 1.38 2007-10-25 07:56:45 weiym Exp $
        3 **
        4 ** Listing 2.1
        5 **
        6 ** helloworld.c: Sample program for MiniGUI Programming Guide
        7 **      The first MiniGUI application.
        8 **
        9 ** Copyright (C) 2004 ~ 2007 Feynman Software.
        10 **
        11 ** License: GPL
        12 */
        13 #include <stdio.h>
        14 #include <string.h>
        15 #include <MiniGUI/common.h>
        16 #include <MiniGUI/MiniGUI.h>
        17 #include <MiniGUI/gdi.h>
        18 #include <MiniGUI/window.h>
        19 #include <MiniGUI/mywindows.h>
        20 static char welcome_text [512];
        21 static char msg_text [256];
        22 static RECT welcome_rc = {10, 100, 600, 400};
        23 static RECT msg_rc = {10, 100, 600, 400};
        24 static const char* syskey = "";
        25 static int last_key = -1;
        26 static int last_key_count = 0;
        27 static void make_welcome_text (void)
        28 {
        29     const char* sys_charset = GetSysCharset (TRUE);
        30     const char* format;
        31     if (sys_charset == NULL)
        32         sys_charset = GetSysCharset (FALSE);
        33     SetRect (&welcome_rc,  10, 10, g_rcScr.right - 10, g_rcScr.bottom / 2 - 10);
        34     SetRect (&msg_rc, 10, welcome_rc.bottom + 10, g_rcScr.right - 10, g_rcScr.bottom - 20);
        35     if (strcmp (sys_charset, FONT_CHARSET_GB2312_0) == 0
        36             || strcmp (sys_charset, FONT_CHARSET_GBK) == 0) {
        37         format = "歡迎來到 MiniGUI 的世界! 如果您能看到該文本, 則說明 MiniGUI Version %d.%d.%d 可在該硬件上運行!";
        38     }
        39     else if (strcmp (sys_charset, FONT_CHARSET_BIG5) == 0) {
        40         format = "歡迎來到 MiniGUI 的世界! 如果您能看到該文本, 則說明 MiniGUI Version %d.%d.%d 可在該硬件上運行!";
        41     }
        42     else {
        43         format = "Welcome to the world of MiniGUI. \nIf you can see this text, MiniGUI Version %d.%d.%d can run on this hardware board.";
        44     }
        45     sprintf (welcome_text, format, MiniGUI_MAJOR_VERSION, MiniGUI_MINOR_VERSION, MiniGUI_MICRO_VERSION);
        46     strcpy (msg_text, "No message so far.");
        47 }
        48 static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
        49 {
        50     HDC hdc;
        51     syskey = "";
        52     switch (message) {
        53         case MSG_CREATE:
        54             make_welcome_text ();
        55             SetTimer (hWnd, 100, 200);
        56             break;
        57         case MSG_TIMER:
        58             sprintf (msg_text, "Timer expired, current tick count: %ul.",
        59                             GetTickCount ());
        60             InvalidateRect (hWnd, &msg_rc, TRUE);
        61          printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");
        62             break;
        63            
        64         case MSG_LBUTTONDOWN:
        65             strcpy (msg_text, "The left button pressed.");
        66             InvalidateRect (hWnd, &msg_rc, TRUE);
        67             break;
        68         case MSG_LBUTTONUP:
        69             strcpy (msg_text, "The left button released.");
        70             InvalidateRect (hWnd, &msg_rc, TRUE);
        71             break;
        72         case MSG_RBUTTONDOWN:
        73             strcpy (msg_text, "The right button pressed.");
        74             InvalidateRect (hWnd, &msg_rc, TRUE);
        75             break;
        76         case MSG_RBUTTONUP:
        77             strcpy (msg_text, "The right button released.");
        78             InvalidateRect (hWnd, &msg_rc, TRUE);
        79             break;
        80         case MSG_PAINT:
        81             hdc = BeginPaint (hWnd);
        82             DrawText (hdc, welcome_text, -1, &welcome_rc, DT_LEFT | DT_WORDBREAK);
        83             DrawText (hdc, msg_text, -1, &msg_rc, DT_LEFT | DT_WORDBREAK);
        84             EndPaint (hWnd, hdc);
        85             return 0;
        86         case MSG_SYSKEYDOWN:
        87             syskey = "sys";
        88         case MSG_KEYDOWN:
        89             if(last_key == wParam)
        90                 last_key_count++;
        91             else
        92             {
        93                 last_key = wParam;
        94                 last_key_count = 1;
        95             }
        96             sprintf (msg_text, "The %d %skey pressed %d times",
        97                             wParam - 1, syskey, last_key_count);
        98             InvalidateRect (hWnd, &msg_rc, TRUE);
        99             return 0;
        100         case MSG_KEYLONGPRESS:
        101             sprintf (msg_text, "=======The %d key pressed over a long term", wParam);
        102             InvalidateRect (hWnd, &msg_rc, TRUE);
        103             break;
        104         case MSG_KEYALWAYSPRESS:
        105             sprintf (msg_text, "=======The %d key pressed always", wParam);
        106             InvalidateRect (hWnd, &msg_rc, TRUE);
        107             break;
        108         case MSG_KEYUP:
        109             sprintf (msg_text, "The %d key released", wParam - 1);
        110             InvalidateRect (hWnd, &msg_rc, TRUE);
        111             return 0;
        112         case MSG_CLOSE:
        113             KillTimer (hWnd, 100);
        114             DestroyMainWindow (hWnd);
        115             PostQuitMessage (hWnd);
        116             return 0;
        117     }
        118     return DefaultMainWinProc(hWnd, message, wParam, lParam);
        119 }
        120 int MiniGUIMain (int argc, const char* argv[])
        121 {
        122     MSG Msg;
        123     HWND hMainWnd;
        124     MAINWINCREATE CreateInfo;
        125 #ifdef _MGRM_PROCESSES
        126     JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);
        127 #endif
        128     CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
        129     CreateInfo.dwExStyle = WS_EX_NONE;
        130     CreateInfo.spCaption = "Hello, world!";
        131     CreateInfo.hMenu = 0;
        132     CreateInfo.hCursor = GetSystemCursor(0);
        133     CreateInfo.hIcon = 0;
        134     CreateInfo.MainWindowProc = HelloWinProc;
        135     CreateInfo.lx = 0;
        136     CreateInfo.ty = 0;
        137     CreateInfo.rx = g_rcScr.right;
        138     CreateInfo.by = g_rcScr.bottom;
        139     CreateInfo.iBkColor = COLOR_lightwhite;
        140     CreateInfo.dwAddData = 0;
        141     CreateInfo.hHosting = HWND_DESKTOP;
        142    
        143     hMainWnd = CreateMainWindow (&CreateInfo);
        144    
        145     if (hMainWnd == HWND_INVALID)
        146         return -1;
        147     ShowWindow(hMainWnd, SW_SHOWNORMAL);
        148     while (GetMessage(&Msg, hMainWnd)) {
        149         TranslateMessage(&Msg);
        150         DispatchMessage(&Msg);
        151     }
        152     MainWindowThreadCleanup (hMainWnd);
        153     return 0;
        154 }
        155 #ifndef _LITE_VERSION
        156 #include <MiniGUI/dti.c>
        157 #endif
        158

         

         

        把這個實例添加到新建的tornado項目中,假設命名為helloworld.c文件,接下來,就需要把MiniGUI的頭文件路徑和庫文件給鏈接到tornado的項目中.
        打開tornado的workspace窗口中的build標簽,我們在這里面設置MiniGUI的頭文件和鏈接文件

        1)雙擊demo builds下面的MIPS64gnule。

        2)在打開的窗口中選擇c/c++ compile tag

        這里有tornado在編譯的時候使用的參數,

        首先我們要刪除-ansi, MiniGUI在開發的過程中,一些代碼中沒有按照ansi標準,所以我們需要先刪除這個參數。

        然后, 我們可以像使用gcc編譯選項的參數一樣加入我們的頭文件路徑,或者通過下面的“Include path...”按鈕來添加

        -IC:/cross/mipse/include

        3)添加鏈接,這里注意不是在link標簽下,是在Macro宏標簽下添加

        打開PRJ_LIBS宏,把庫文件路徑復制到value值里,然后按“add/set...”按鈕

        C:/cross/mipse/lib/libMiniGUI.a

        這樣,我們就把MiniGUI的庫文件鏈接上了,而且也加好了MiniGUI的頭文件路徑.

        下面,我們就可以編譯我們剛寫的MiniGUI的helloworld程序了。

        4)設置目標板

        現在我們需要連接上我們的目標版上的vxworks系統,把我們編譯好的程序燒上去了。首先,在菜單tools->target server...的選項中選擇configure,新建一個configuration,修改了configuration默認的名稱后,選擇target server properties下拉菜單,選擇core file and symbols,然后指定file路徑,這個所說的file就是前面提醒大家準備好的vxworks的內核文件"vxWorks"

        然后在target server中填入本機的ip地址, 在target name/IP address里面填入目標板的ip地址,確認。這時主界面的toolbar中的combobox里面就可以選擇當前的這個配置了。選中當前的配置后,就可以嘗試啟動鏈接了

        5)讓我們的MiniGUI程序跑起來

        目標板設置完成之后,我們可以把編譯好的download到目標機器上,啟動windsh,敲入MiniGUI_entry,就可以把剛才燒入的helloworld跑起來了~


        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线