用Microwindows(Nano-X)編寫“hello world”

來源:互聯網
上載者:User

用Microwindows(Nano-X)編寫“hello world”

By: 吳垠
Date: 2008-05-09
Homepage: http://blog.csdn.net/wooin
Email: lazy.fox.wu#gmail.com
Copyright: 該文章著作權由吳垠和他可愛的老婆小包子所有。可在非商業目的下任意傳播和複製。對於商業目的下對本文的任何行為需經作者 同意。
Link:  http://blog.csdn.net/wooin/archive/2008/05/14/2446721.aspx
1. Microwindows, 又叫Nano-X,是一個輕巧的GUI系統,由於其是開源免費的,並且支援中文,所以常被用在需要顯示圖形介面的嵌入式裝置中。對 Microwindows的介紹我就不說了,Google上可以搜到很多。本文主要是介紹如何從網上下載一個Microwindows,並且編譯,然後用 Microwindos寫出一個自己的"hello world"程式。注意:這裡介紹的只是在PC上啟動並執行Microwindows,不是交叉編譯嵌入式環境的。

這裡(www.microwindows.org) 是Microwindows的官方網站,已經有很多年沒有更新了,但是Microwindows的應用並沒有因此而減弱。

2. 下面開始今天的工作(我的Linux發 行版是Fedora 5),首先從網站上下載一個Microwindows的源碼包,我們用0.90版的,下載後應該是這樣的一個檔案:microwindows- 0.90.tar.gz
用下面的命令解壓,並進入其源碼目錄:
$ tar -xzvf microwindows-0.90.tar.gz
$ cd microwindows-0.90/src
3. 修改幾個檔案:
檔案 Arch.rules
21行:
COMPILER = gcc
改為
COMPILER = gcc32

因為Fedora 5預設的gcc是4.1.0版,語法檢查太嚴格,Microwindows編譯會出錯。如果你的發行版上預設的gcc也是4.x版的,請換成3.x版的, 將上面的“gcc32”換成你Linux上gcc 3.x版本的名字,沒有的話可能就要自己安裝了。
用gcc 4.x也不是不能編譯,只是由於Microwindows的代碼太老了,跟新編譯器不相容,編譯會出一些錯誤,你按照錯誤提示修改一下原始碼也可以編譯通 過,有點麻煩,這裡我就不詳細介紹了。

110行:
LINK_APP_INTO_SERVER     = N
改為
LINK_APP_INTO_SERVER     = Y

修改檔案 config
136行:
HAVE_JPEG_SUPPORT        = Y
改為
HAVE_JPEG_SUPPORT        = N
因為我的電腦上沒有 /usr/lib/libjpeg.a 這個檔案,編譯會出錯,如果你有這個檔案,
你可以試試不修改上面這行,看看能不能編譯通過。
這個可以讓Microwindows支援jpeg檔案
259行:
X11                      = N
改為
X11                      = Y
修改這個配置讓Microwindows使用X11的滑鼠和鍵盤的驅動程式
4. 編譯Microwindows:
在microwindows-0.90/src目錄下運行make命令進行編譯:
$ make

如果沒有意外的話會編譯成功。如果還有錯誤的話可能就是你的Linux環境缺檔案,可以根據編譯報錯的提示資訊修改config檔案試試。

運行一下bin目錄下的Demo程式看看你是否編譯成功了。mine程式是Microwindows內建的一個掃雷遊戲,跟windows下的一樣。運行 一下試試:

$ cd bin
$ ./mine

如果你可以看到中的遊戲介面,就說明你編譯成了,恭喜!!

5. 編寫自己的"Hello World"程式,在src目錄下建一個“projects”檔案夾
$ mkdir projects
$ cd projects
然後在裡面編寫我們的程式,下面列出了“hello.c”來源程式和“Makefile”
6.
 1 /***************************************************************************
2 * Filename : hello.c
3 * Begin : 2008-05-09 16:24:44
4 * Project : Hello Nano-X World
5 * Version : 1.0
6 * Copyright : GPL v2.0
7 * Author : Wu Yin
8 * Description :
9 ***************************************************************************/
10 #include <stdio.h>
11 #include "nano-X.h"
12 #include "nxcolors.h"
13
14 int main()
15 {
16 GR_WINDOW_ID root_wid, wid;
17 GR_GC_ID gc;
18 GR_COORD x, y;
19 GR_SIZE width, height;
20 GR_EVENT event;
21
22 x = 0;
23 y = 0;
24 width = 640;
25 height = 480;
26
27 if (GrOpen() < 0)
28 {
29 printf("Can't open graphics/n");
30 return 0;
31 }
32
33 gc = GrNewGC();
34 // 建立父視窗(根視窗)
35 root_wid = GrNewWindow(GR_ROOT_WINDOW_ID, x, y, width, height,
36 1, GR_COLOR_ROYALBLUE, GR_COLOR_BLACK);
37 // 建立一個子視窗
38 wid = GrNewWindow(root_wid, 60, 60, 200, 60, 1, GR_COLOR_BLACK, GR_COLOR_WHITE);
39 GrMapWindow(root_wid); // 繪製父視窗
40 GrMapWindow(wid); // 繪製子視窗
41
42 // 顯示在父視窗中的文字
43 GrSetGCForeground(gc, GR_COLOR_RED); // 前景色彩(字型顏色)
44 GrSetGCBackground(gc, GR_COLOR_GREEN); // 背景色(字型背景顏色)
45 GrText(root_wid, gc, 10, 20, "Hello in root_wid", -1, GR_TFBOTTOM);
46
47 // 顯示在子視窗中的文字
48 GrSetGCForeground(gc, GR_COLOR_RED); // 前景色彩(字型顏色)
49 GrSetGCBackground(gc, GR_COLOR_GREEN); // 背景色(字型背景顏色)
50 GrText(wid, gc, 10, 20, "Hello in wid", -1, GR_TFBOTTOM);
51
52 for (;;)
53 {
54 GrGetNextEvent(&event);
55 }
56 GrClose();
57
58 return 1;
59 }
60
7.
 1 ##############################################################################
2 # Makefile
3 ##############################################################################
4 ifndef TOP
5 TOP = ..
6 CONFIG = $(TOP)/config
7 endif
8
9 include $(CONFIG)
10
11 ############################# targets section ################################
12 # If you want to create a library with the objects files, define the name here
13 OBJS = hello.o
14 TARGETS = hello
15
16 all: default $(TARGETS)
17
18 ######################### Makefile.rules section #############################
19 include $(TOP)/Makefile.rules
20
21 ifeq ($(SHAREDLIBS), Y)
22 LD_NANOXCLIENTLIBS = $(CCNANOXCLIENTLIBS)
23 else
24 LD_NANOXCLIENTLIBS = $(NANOXCLIENTLIBS)
25 endif
26
27 ######################## Tools targets section ###############################
28 $(TARGETS): $(OBJS) $(NANOXCLIENTLIBS) $(TOP)/config
29 $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -o $@ $(LD_NANOXCLIENTLIBS)
30 clr:
31 rm -f *.o *~ .depend $(TARGETS)
8. 將上面兩個源檔案建立在你的projects檔案夾中,然後運行make命令編譯它,如果沒有意外的話,在projects檔案夾中應該產生一個“hello”可執行檔,執行它,就可以看到下面這個介面了:
9. 剩下的工作就是寫你自己的程式了 ^_^
   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.