完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
南方大侠,前些日子研究了第九章,中断体系,然后改了一个小代码,却怎么也跑不起来,很是让我费解。
这个工程很简单,由ctr0.S,leds.c组成,原来的代码如下 @****************************************************************************** @ File:crt0.S @ 功能:通过它转入C程序 @****************************************************************************** .text .global _start _start: ldr r0, =0x53000000 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K bl main @ 调用C程序中的main函数 halt_loop: b halt_loop @************************************************ @File:leds.c @************************************************ #define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014) #define GPB5_out (1<<(5*2)) #define GPB6_out (1<<(6*2)) #define GPB7_out (1<<(7*2)) #define GPB8_out (1<<(8*2)) void wait(volatile unsigned long dly) { for(; dly > 0; dly--); } int main(void) { unsigned long i = 0; GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out; // 将LED1-4对应的GPB5/6/7/8四个引脚设为输出 while(1){ wait(30000); GPBDAT = (~(i<<5)); // 根据i的值,点亮LED1-4 if(++i == 16) i = 0; } return 0; } 通过OPENOCD,我能够将生成的代码顺利烧入NANDFLASH并正确运行. 可是,当我把ctr0.S改为如下之后,代码反而跑不起来了 @****************************************************************************** @ File:crt0.S @ 功能:通过它转入C程序 @****************************************************************************** .text .global _start _start: b Reset @1.Reset b Nodefine @2. b Nodefine @3. b Nodefine @4. b Nodefine @5. b Nodefine @6. b Nodefine @7.IRQ b Nodefine @8.FIQ Nodefine: b Reset Reset: ldr r0, =0x53000000 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K mov r1, #0x0 msr cpsr,r1 @ 允许IRQ,禁止FIQ mrs r1,cpsr ldr r0, =0x56000010 @SET GPBCON mov r1, #0x15400 str r1, [r0] ldr r0, =0x56000014 @GPBDAT,打开某个端口的LED,以便在调试时确定是否正确执行该汇编代码 mov r1, #0x7b0 str r1, [r0] bl main @ 调用C程序中的main函数 halt_loop: b halt_loop 我想了很久,没有明白为什么,使用ECLIPSE仿真,是能够顺利运行的,但是一旦下载到NANDFLASH,程序就跑飞了,还请大侠解惑. |
|
相关推荐
2个回答
|
|
-Ttext 意思是指定程序的text段起始位置,不是什么文件
|
|
|
|
kan kan
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2195 浏览 6 评论
1994 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4549 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 07:22 , Processed in 0.710383 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号