基于uClinux的开发应用程序-Helloworld和跑马灯程序

发 布 时 间 : 2008-11-18 来 源 : 本站原创 作 者 : 立宇泰电子 浏 览 :

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

 

 



上一篇:在ARMSYS44B0上建立NFS的开发环境 下一篇:关于Linux内核的裁减