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@来同我们交流。
|