各位高手们,板子是mini2440 的,我这个简单的裸板点灯,看上去非常简单,可惜就是跑不起来,谁能解决下?

youarewe 2012-08-16 03:07:57
请大家不要以为这个程序简单,我花了好久时间的调试,前提是在裸板上的(没有uboot的环境)jlink 调试,还有人在uboot的基础上也调不通的。你们可以根据自己的
板子试试这个程序,我实在是受不了了。这个都调不通,学了那么多知识感觉都是太空虚了。。。。。哎!

在crt0.s
.text
.global _start
_start :
LDR R0, =0x53000000

MOV R1, #0x0 ;//关看门狗
STR R1, [R0]

ldr sp , =1024*4

bl main
MAIN_LOOP:
B MAIN_LOOP

在led_on_c.c中


#define GPFCON (*(volatile unsigned long *)0x56000010)
#define GPFDAT (*(volatile unsigned long *)0x56000014)

#define GPF4_out (1<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2))
#define GPF7_out (1<<(7*2))

#define GPF8_out (1<<(8*2))


int main(void)
{
unsigned long i = 0;

GPFCON = GPF5_out|GPF6_out|GPF7_out|GPF8_out;
// 将LED1-3对应的GPF4/5/6三个引脚设为输出
while(1) //我想让这个灯无限时间的亮灭,可是现在的现象是只能亮一次,有谁知道是怎么回事
{
GPFDAT=0xffffffff ;//熄灭
for(i=0;i<100000;i++);
GPFDAT=0 ; //点亮
}

return 0;
}
...全文
363 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
HMGuardian 2012-11-24
  • 打赏
  • 举报
回复
这个,你的SP倒底指向的哪里啊!用noflash运行程序似乎是不可写的哟…… 通常c函数的前几条语句都有push指令,如果你的sp指向的是noflash,死掉是很正常的…… 另外你的廷时循环的次数有点少啊,我800MHz主频的cpu,0x400000(十六进制哦)这么大的数都闪得非常快……
gOrubby 2012-11-24
  • 打赏
  • 举报
回复
两次亮灯之间的时间间隔过小 你眼睛看不出来的 建议增大延时
wesley 2012-11-22
  • 打赏
  • 举报
回复
延时太短了?
暗夜精灵 2012-10-15
  • 打赏
  • 举报
回复
哥们,你的情况估计和我一样
我以前做着LED程序的时候也出问题
最初的症状是循环一进去就出不来,后来发现if啥的都不准
慢慢查终于查出来,所有变量都没法赋值,值恒定-1(全0xFF)
估计是引导程序有问题,我用keil+jlink写就可以,而且能单步调试,但keil提供的引导程序比你这个多多了(我当时也是用的你这个)
顺便问下,你是怎么运行程序的,jlink下载到SDRAM运行(0x30000000)?还是编译好之后用jlink烧到norflash?还是用串口线下载过去的?
wowocpp 2012-10-15
  • 打赏
  • 举报
回复
装载地址 和运行不一样吧
x258828110 2012-10-14
  • 打赏
  • 举报
回复
我最近也在搞这个程序,我是想烧写到nand flash的,但是用jlink,擦除老是失败,提示:flailed to erase chip 用jlink commander烧写也不行,不知道是板子坏了,还是我的程序有问题
yyttiao 2012-08-27
  • 打赏
  • 举报
回复
少加了延时
int main(void)
{
unsigned long i = 0;

GPFCON = GPF5_out|GPF6_out|GPF7_out|GPF8_out;
// 将LED1-3对应的GPF4/5/6三个引脚设为输出
while(1) //我想让这个灯无限时间的亮灭,可是现在的现象是只能亮一次,有谁知道是怎么回事
{
GPFDAT=0xffffffff ;//熄灭
for(i=0;i<100000;i++);
GPFDAT=0 ; //点亮
点亮的瞬间灭掉了,这里要给点亮适当的时间,才能看到亮的结果
}

return 0;
}
woshi_ziyu 2012-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

自己揭帖,在norflash中的局部变量是无法存入的,所以造成此种现象
[/Quote]
表示不理解

楼主把解决方法介绍一下呢
JiMoKuangXiangQu 2012-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
自己揭帖,在norflash中的局部变量是无法存入的,所以造成此种现象
[/Quote]
???
难道你的堆栈指针指NorFlash?
局部变量又具体是指的哪个?变量i?
JiMoKuangXiangQu 2012-08-19
  • 打赏
  • 举报
回复
少加了个延时:
int main(void)
{
unsigned long i = 0;

GPFCON = GPF5_out|GPF6_out|GPF7_out|GPF8_out;
// 将LED1-3对应的GPF4/5/6三个引脚设为输出
while (1) //我想让这个灯无限时间的亮灭,可是现在的现象是只能亮一次,有谁知道是怎么回事
{
GPFDAT=0xffffffff ;//熄灭
for(i=0;i<100000;i++);
GPFDAT=0 ; //点亮
for(i=0;i<100000;i++);
}

return 0;
}
youarewe 2012-08-17
  • 打赏
  • 举报
回复
自己揭帖,在norflash中的局部变量是无法存入的,所以造成此种现象

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧