haoyan1234 发表于 2010-2-28 23:01:37

第一个裸跑程序(ADS1.2)

以下是参考亚瑟王的帖子整理
原帖:http://bbs.embedsky.net/viewthread.php?tid=54&extra=page%3D2
这里只讲步骤和方法,没有贴具体的源码出来。
首先复制一份光盘里面的无OS测试程序,命名为:led,我们要实现点亮LED灯的实验。
1、删除src目录下面的除去2440addr.inc,2440init.s,2440lib.c,2440slib.s,Memcfg.inc,Option.inc,mian.c之外的所有文件。(这里还需要nand.c以及相应的*.h头文件)
2、然后将2440addr.inc,2440init.s,2440lib.c,2440slib.s,Memcfg.inc,Option.inc复制到新建立的lib目录下。
3、修改main.c文件,在里面的main函数中实现点亮LED的C语言的代码。
4、建立一个ADS下的项目,添加上刚刚剩余的文件,然后编译。

会有两个主要的错误:

1、undefined symbol RdNF2SDRAM(这个在nand.c文件里有函数定义)

2、undefined symbol PCLK(参考TQ2440_Test.rar里的文件发现PCLK在option.h里通过GLOBAL_CLK来定义,参考其main.c里发现第一行里有宏定义#define GLOBAL_CLK   1,故需要在自己的main.c文件添加宏定义才可以,但是注意一定要在第一行才能编译通过!)

注意:这样编译肯定会有很多错误的,我们需要根据错误修改对应的文件,其实就是因为剩余的这几个文件还保留了以前的信息所致,简单删除操作就可以解决。
5、编译OK之后,使用uboot的a功能烧写镜像到Nand Flash,然后重启即可。

kpshare 发表于 2010-3-7 23:35:47

今天我正好也遇到这个问题,足足发了我一个中午时间,唉。。
我也像楼主那样保存了2440addr.inc,2440init.s,2440lib.c,2440slib.s,Memcfg.inc,Option.inc,nand.c等应文件,但是main.c文件我重新生成,同样出现“undefined symbol PCLK”这个问题,源代码我也看了,但修改后还是解决不了,后来我一个一个头文件地去试,最后在main.c文件里头加了#include "def.h",看了里头的代码,也找不到原因为什么非地这样做才行,我的main.c的添加的文件如下:
#define        GLOBAL_CLK        1
#include "def.h"
#include "2440addr.h"
void Main(void) {}

这样程序就可以运行了。
按常理PCLK是定义在option.h文件里头的,如#define PCLK (202800000/4),但天嵌的Option.h文件里则有如下定义:
#ifdef GLOBAL_CLK
        U32 FCLK;
        U32 HCLK;
        U32 PCLK;
        U32 UCLK;
#else
        extern unsigned int FCLK;
        extern unsigned int HCLK;
        extern unsigned int PCLK;
        extern unsigned int UCLK;
#endif
总之开始时,只加了#define        GLOBAL_CLK        1
就是运行不了,而加了def.h文件后才行,还真的不知道为什么,唉。。

非常小强娴 发表于 2010-3-31 20:30:57

对楼主的崇拜犹如滔滔江水连绵不绝又如黄河泛滥一发不可收拾

在水一舟 发表于 2010-5-19 12:27:44

很好的东西,我也要修改下

doublezxh 发表于 2010-5-26 16:03:15

很好的东西,我也要修改下

dickjtk 发表于 2010-5-28 00:26:43

很好的东西,我也要修改下

guoyin 发表于 2010-5-29 15:28:39

谢谢,楼主了!

zhangrenguo 发表于 2010-7-18 09:26:37

恩非常不错LZ

1060604020 发表于 2010-8-4 14:05:02

感谢楼主~~~~~

guguibin1988 发表于 2010-8-5 13:21:00

今天我正好也遇到这个问题,足足发了我一个中午时间,唉。。
我也像楼主那样保存了2440addr.inc,2440init.s,2440lib.c,2440slib.s,Memcfg.inc,Option.inc,nand.c等应文件,但是main.c文件我重新生成,同样出现 ...
kpshare 发表于 2010-3-7 23:35 http://bbs.embedsky.net/images/common/back.gif
因为在定义这些变量时
U32 FCLK;
U32 HCLK;
U32 PCLK;
U32 UCLK;
变量的类型是U32,而标准的c语言里没有这种变量的类型,其实是为了使用方便在def.h里对各种变量类型进行了宏定义。如:
#define U32 unsigned int
#define U16 unsigned short
#define S32 int
#define S16 short int
#define U8unsigned char
#define        S8char
这样要声明一个变量简洁的多unsigned int FCLK变成U32 FCLK。
所以也要加def.h这个头文件了。

huyutao 发表于 2011-1-24 13:58:20

强,不断的学习中

sweet萌 发表于 2011-11-22 08:40:57

谢谢指出,学习了
页: [1]
查看完整版本: 第一个裸跑程序(ADS1.2)