激情五月天婷婷,亚洲愉拍一区二区三区,日韩视频一区,a√天堂中文官网8

<ul id="buwfs"><strike id="buwfs"><strong id="buwfs"></strong></strike></ul>
    <output id="buwfs"></output>
  • <dfn id="buwfs"><source id="buwfs"></source></dfn>
      <dfn id="buwfs"><td id="buwfs"></td></dfn>
      <div id="buwfs"><small id="buwfs"></small></div>
      <dfn id="buwfs"><source id="buwfs"></source></dfn>
      1. <dfn id="buwfs"><td id="buwfs"></td></dfn>
        始創(chuàng)于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊(cè)有禮 登錄
        • 掛牌上市企業(yè)
        • 60秒人工響應(yīng)
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補(bǔ)償
        全部產(chǎn)品
        您的位置: 網(wǎng)站首頁(yè) > 幫助中心>文章內(nèi)容

        淺談MiniGUI的VxWorks環(huán)境移植

        發(fā)布時(shí)間:  2012/9/12 17:33:14

        首先,需要準(zhǔn)備好MiniGUI1.6.10的庫(kù)文件,和一些示例文件,可以到MiniGUI.org上下載.(可能我機(jī)器上的版本和下載的開(kāi)源版本不一樣,但是這個(gè)文章寫(xiě)出來(lái)就是為了備忘的。所以以我自己的版本為主介紹)

        1. Cygwin環(huán)境安裝

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

        2. 在cygwin上交叉編譯MiniGUI的產(chǎn)品

        由于我這里的目標(biāo)板是mips的核,那我就以mips為例:

        MiniGUI源代碼中編譯文件:

        makefile.ng是用來(lái)VxWorks的編譯的文件.打開(kāi)這個(gè)文件可以看到include rules.make,打開(kāi)rules.make文件,可以看到這個(gè)文件中做了一些相關(guān)的設(shè)置。注意第一句TARGET_RULES=build/rules-mipse.vxworks?磥(lái)用的定義是放在這個(gè)build/rules-mipse.vxworks文件中的,那我再打開(kāi)這個(gè)文件。
         

        這個(gè)文件中有幾個(gè)定義需要注意:

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

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

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

        我們需要注意修改的地方有兩個(gè)

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

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

        上面的內(nèi)容都設(shè)置好了之后,我們還需要根據(jù)板子不同需要做一些代碼定制,如下:關(guān)閉鼠標(biāo),關(guān)閉png,jpeg,commlcd(為了排除問(wèn)題,只打開(kāi)dummy 引擎);打開(kāi)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"};

        下面我們就可以進(jìn)行交叉編譯了:

        交叉編譯時(shí),必須使用cygwin內(nèi)置的make命令來(lái)編譯。所以輸入如下

        $/bin/make -f makefile.ng clean

        $/bin/make -f makefile.ng

        $/bin/make -f makefile.ng install

        編譯完成后,就可以在已經(jīng)定義好的目錄下找到編譯好的libMiniGUI.a文件和MiniGUI相關(guān)的頭文件.

        3. tornado產(chǎn)品上運(yùn)行編譯出來(lái)的MiniGUI示例

        還記得上個(gè)文章說(shuō)到怎么創(chuàng)建項(xiàng)目吧。那我們新創(chuàng)建一個(gè)項(xiàng)目,這里有幾點(diǎn)需要注意

        ◆如果我們是對(duì)一個(gè)已經(jīng)編譯好內(nèi)核的板子來(lái)說(shuō)。我們需要準(zhǔn)備好這個(gè)內(nèi)核文件,方便 我們寫(xiě)好的程序downloading到板子上

        ◆如果是一個(gè)已經(jīng)編譯好內(nèi)核的板子,我們就只需要建立一個(gè)downloadable的應(yīng)用程序就可以了。

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

        toolchain的設(shè)置


        先給出一個(gè)MiniGUI的helloworld實(shí)例

        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 = "歡迎來(lái)到 MiniGUI 的世界! 如果您能看到該文本, 則說(shuō)明 MiniGUI Version %d.%d.%d 可在該硬件上運(yùn)行!";
        38     }
        39     else if (strcmp (sys_charset, FONT_CHARSET_BIG5) == 0) {
        40         format = "歡迎來(lái)到 MiniGUI 的世界! 如果您能看到該文本, 則說(shuō)明 MiniGUI Version %d.%d.%d 可在該硬件上運(yùn)行!";
        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

         

         

        把這個(gè)實(shí)例添加到新建的tornado項(xiàng)目中,假設(shè)命名為helloworld.c文件,接下來(lái),就需要把MiniGUI的頭文件路徑和庫(kù)文件給鏈接到tornado的項(xiàng)目中.
        打開(kāi)tornado的workspace窗口中的build標(biāo)簽,我們?cè)谶@里面設(shè)置MiniGUI的頭文件和鏈接文件

        1)雙擊demo builds下面的MIPS64gnule。

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

        這里有tornado在編譯的時(shí)候使用的參數(shù),

        首先我們要?jiǎng)h除-ansi, MiniGUI在開(kāi)發(fā)的過(guò)程中,一些代碼中沒(méi)有按照ansi標(biāo)準(zhǔn),所以我們需要先刪除這個(gè)參數(shù)。

        然后, 我們可以像使用gcc編譯選項(xiàng)的參數(shù)一樣加入我們的頭文件路徑,或者通過(guò)下面的“Include path...”按鈕來(lái)添加

        -IC:/cross/mipse/include

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

        打開(kāi)PRJ_LIBS宏,把庫(kù)文件路徑復(fù)制到value值里,然后按“add/set...”按鈕

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

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

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

        4)設(shè)置目標(biāo)板

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

        然后在target server中填入本機(jī)的ip地址, 在target name/IP address里面填入目標(biāo)板的ip地址,確認(rèn)。這時(shí)主界面的toolbar中的combobox里面就可以選擇當(dāng)前的這個(gè)配置了。選中當(dāng)前的配置后,就可以嘗試啟動(dòng)鏈接了

        5)讓我們的MiniGUI程序跑起來(lái)

        目標(biāo)板設(shè)置完成之后,我們可以把編譯好的download到目標(biāo)機(jī)器上,啟動(dòng)windsh,敲入MiniGUI_entry,就可以把剛才燒入的helloworld跑起來(lái)了~


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

        服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

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

        0371-60135900
        7*24小時(shí)客服服務(wù)熱線