成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā)
本文將介紹MiniGUI的VxWorks環(huán)境移植,MiniGUI開發(fā)的主要目標(biāo)就是為基于Linux的實時嵌入式系統(tǒng)提供一個輕量級的圖形用戶界面支持系統(tǒng)。

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

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

這個就不多說了,windows上很有名的模擬linux平臺的工具軟件。可以很方便的下載到。安裝的時候注意安裝make, vim兩個東西即可。

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

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

MiniGUI源代碼中編譯文件:

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

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

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

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

3.CFLAGS:定義了MiniGUI編譯時候的參數(shù),有類似下面的參數(shù)
-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__    大小端,根據(jù)不同的客戶機有不同的要求,可能是__BIG__ENDIAN__ __LITTLE_ENDIAN__

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

上面的內(nèi)容都設(shè)置好了之后,我們還需要根據(jù)板子不同需要做一些代碼定制,如下:關(guān)閉鼠標(biāo),關(guān)閉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內(nèi)置的make命令來編譯。所以輸入如下

    $/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)品上運行編譯出來的MiniGUI示例

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

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

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

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

toolchain的設(shè)置



先給出一個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項目中,假設(shè)命名為helloworld.c文件,接下來,就需要把MiniGUI的頭文件路徑和庫文件給鏈接到tornado的項目中.

打開tornado的workspace窗口中的build標(biāo)簽,我們在這里面設(shè)置MiniGUI的頭文件和鏈接文件

1)雙擊demo builds下面的MIPS64gnule。

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

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

首先我們要刪除-ansi, MiniGUI在開發(fā)的過程中,一些代碼中沒有按照ansi標(biāo)準(zhǔn),所以我們需要先刪除這個參數(shù)。

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

-IC:/cross/mipse/include

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

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

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

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

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

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

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

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

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

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

【編輯推薦】

  1. 讓Perl成為你的嵌入式開發(fā)工具
  2. 嵌入式設(shè)備上的 Linux 系統(tǒng)開發(fā)
  3. 幾種Linux下嵌入式開發(fā)環(huán)境的簡單介紹
  4. 實時操作系統(tǒng)VxWorks在跟蹤雷達(dá)系統(tǒng)中的應(yīng)用
  5. VxWorks漢字顯示解決方案
責(zé)任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2021-09-26 11:51:25

MINIGUI嵌入式系統(tǒng)Linux

2009-07-03 18:07:31

Servlet的運行環(huán)

2009-04-11 15:12:24

VxWorks串口例子

2010-01-12 16:40:23

miniGUI編譯安裝

2009-04-28 16:18:29

vxWorks升級技術(shù)

2009-06-22 11:13:00

linuxJava運行環(huán)境

2013-10-14 18:35:37

數(shù)據(jù)保護

2011-06-09 11:06:36

JVM

2009-04-11 15:12:24

vxworks操作系統(tǒng)

2016-06-28 16:23:16

VxWorks/風(fēng)河

2011-08-05 10:40:54

2011-07-04 15:13:31

QT MPlayer 移植

2009-07-21 14:18:01

Rails運行環(huán)境

2009-07-09 15:31:23

構(gòu)建Python開發(fā)環(huán)

2010-09-08 15:19:46

生產(chǎn)環(huán)境性能測試風(fēng)險

2012-10-23 16:38:53

2009-06-29 10:34:34

VxWorks視頻采集系統(tǒng)

2010-09-27 16:26:09

JVMarm

2009-07-02 16:57:51

安裝VxWorks

2009-04-22 17:18:29

Vxworks驅(qū)動加載step by ste
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 老牛影视av一区二区在线观看 | 高清久久久| 午夜一级黄色片 | 欧美综合一区 | 日韩欧美日韩在线 | 天天天天操 | 超黄毛片| 久久亚洲免费 | 国产伦精品一区二区三区高清 | 亚洲精品一区二区三区中文字幕 | 一区二区在线观看免费视频 | 97久久精品午夜一区二区 | 成人片免费看 | 一区二区三区国产好 | 男人久久天堂 | 国产一区二区久久 | 成人毛片网 | 美女高潮网站 | 97人人澡人人爽91综合色 | 久久久久久天堂 | 久久一区二区三区四区 | 亚洲一区久久 | 美日韩精品 | 亚洲免费在线 | 欧美精品久久久久久久久久 | 国产小u女发育末成年 | 美女黄网站 | 精品国产欧美 | 精品视频一区二区三区 | 亚洲第一av| 久久久精品视频免费 | 日韩在线视频免费观看 | 久久伊人亚洲 | 久久久在线视频 | 欧美性猛片aaaaaaa做受 | 国产乱码一区 | 91久久国产综合久久 | 成人免费黄色 | 亚洲精品国产电影 | 日本精品视频一区二区三区四区 | 91豆花视频 |