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