天嵌 ARM开发社区

 找回密码
 注册
查看: 5800|回复: 11

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

[复制链接]
haoyan1234 发表于 2010-2-28 23:01:37 | 显示全部楼层 |阅读模式
以下是参考亚瑟王的帖子整理
原帖: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

因为在定义这些变量时
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 U8  unsigned char
#define        S8  char
这样要声明一个变量简洁的多unsigned int FCLK变成U32 FCLK。
所以也要加def.h这个头文件了。
huyutao 发表于 2011-1-24 13:58:20 | 显示全部楼层
强,不断的学习中
sweet萌 发表于 2011-11-22 08:40:57 | 显示全部楼层
谢谢指出,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-4 15:20 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表