?? 基于uclinux的開發應用程序-helloworld和跑馬燈程序 .txt
字號:
基于uClinux的開發應用程序-Helloworld和跑馬燈程序
1.概述
本文以Helloworld程序和跑馬燈程序為例,按步驟詳細說明如何在ARMSYS開發板上開發和運行最基本的應用程序。
參考文檔:ARMSYS上NFS調試環境的建立。
點擊這里下載本文的pdf格式文件。
1. Helloworld
建立helloworld應用程序步驟如下:
在uClinux-dist/user目錄下新建目錄:Myapp
1.1編寫Helloworld程序
編寫demo.c文件,代碼如下:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
printf(“Hello World! This is my first application.\n”);
return 0;
}
保存在Myapp目錄下。
1. 2編寫Makefile文件
內容如下:
EXEC = demo
OBJS = demo.o
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
romfs:
$(ROMFSINST) /bin/$(EXEC)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
同樣放在Myapp目錄下。
1. 3修改user/Makefile
為了讓編譯器編譯上述添加的內容,在user/Makefile中添加一句(一般按照字母排列):
dir _$(CONFIG_USER_MYAPP_DEMO) +=Myapp
1. 4修改config/config.in
config/config.in文件中添加的內容會在對用戶選項進行配置時反映出來。在文件的最后,增加一條:
###################################################################
mainmenu_option next_comment
comment 'My New Application'
bool 'demo' CONFIG_USER_MYAPP_DEMO
endmenu
###################################################################
1. 5 配置編譯
現在可以開始配置編譯了。在用戶配置選項中,我們看到最后多了一條:
My New Application--->
進入后,選中demo即可:
[*]demo
按照步驟編譯。產生新的romfs.img文件。下載到開發板上。
1. 6運行
uClinux啟動后,直接輸入:demo回車,應立即打印出一行:
Hello World! This is my first application.
這樣,你的第一個應用程序就成功了。
2.跑馬燈程序
運行跑馬燈程序,我們還是使用這個框架,只需要修改demo.C文件的內容即可。代碼如下:
#include <stdlib.h>
#include <stdio.h>
#define rPCONE (*(volatile unsigned *)0x1d20028)
#define rPDATE (*(volatile unsigned *)0x1d2002c)
#define rPUPE (*(volatile unsigned *)0x1d20030)
#define rWTCON (*(volatile unsigned *)0x1d30000)
#define rWTDAT (*(volatile unsigned *)0x1d30004)
#define rWTCNT (*(volatile unsigned *)0x1d30008)
#define MCLK 64000000
static int delayLoopCount=400;
void Led_Display(int LedStatus)
{
if((LedStatus&0x01)==0x01)
rPDATE=rPDATE&0x17f;
else
rPDATE=rPDATE|0x80;
if((LedStatus&0x02)==0x02)
rPDATE=rPDATE&0x1bf;
else
rPDATE=rPDATE|0x40;
if((LedStatus&0x04)==0x04)
rPDATE=rPDATE&0x1df;
else
rPDATE=rPDATE|0x20;
if((LedStatus&0x08)==0x08)
rPDATE=rPDATE&0x1ef;
else
rPDATE=rPDATE|0x10;
}
void wtDelay(int time)
{
int i,adjust=0;
if(time==0)
{
time=200;
adjust=1;
delayLoopCount=400;
rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
rWTDAT=0xffff;
rWTCNT=0xffff;
rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5);
}
for(;time>0;time--)
for(i=0;i<delayLoopCount;i++);
if(adjust==1)
{
rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
i=0xffff-rWTCNT;
delayLoopCount=8000000/(i*64);
}
}
int main(void)
{
int i, j;
/printf("Hello World! This is ARMSYS!\n");
printf("LED round robin showing for ARMSYS!\n");
rPDATE = 0x1ff;
rPCONE = 0x15569;
rPUPE = 0x6;
while(1)
{
for(i=0;i<4;i++)
{
Led_Display(0x01<<i);
wtDelay(5000);
}
}
return 0;
}
代碼修改后,重新編譯。下載到開發板,運行demo,可以看到4盞LED被跑馬燈式點亮的景象。
對該文檔內容有任何疑問,請通過發郵件到support@hzlitai.com.cn來同我們交流。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -