6019|18

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

arm9 ldr r13,=0x1000 [复制链接]

  我用的是飞凌的 ok2440 ,哎 菜鸟一只


        AREA |DATA|,CODE,READONLY
        ENTRY
        ldr r13,=0x1000
        IMPORT LedMain
        b LedMain
        END

我看见 led bell等裸机程序中都有这个汇编跳转程序的    可是不懂        ldr r13,=0x1000  这句话有什么作用? =0x1000是什么啊? 教材上也没写,网上这东西又找不到的...帮帮忙
此帖出自ARM技术论坛

最新回复

嗯 谢谢各位给我解答  只恨可用分太少~~  详情 回复 发表于 2009-10-7 10:29
点赞 关注
 

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
送个数到R13吧

你看看后面R13干啥的就明白了。
此帖出自ARM技术论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
大哥分析下啊
程序功能是 跑马灯

有两个程序

        AREA |DATA|,CODE,READONLY
        ENTRY
        ldr r13,=0x1000
        IMPORT LedMain
        b LedMain
        END



/*********************LED实验*********************************/
// 公司名称 :保定飞凌嵌入式技术有限公司
// 描    述 :跑马灯
#define GPFCON (*(volatile unsigned *)0x56000050)
#define GPFDAT (*(volatile unsigned *)0x56000054)
#define GPFUP (*(volatile unsigned *)0x56000058)
int LedMain()
{
       
        void Delay(unsigned int);
        unsigned char ledtab[]={0xf7,0xef,0xdf,0xbf};
        int i;
        GPFUP&=0XFFFFFF87;       //使能上拉F3-6
        GPFCON&=0XC03f;
        GPFCON|=0X1540;          //将F3-6设为输出口
        while(1)
        {
                for(i=0;i<4;i++)
                {
                        GPFDAT=ledtab;
                        Delay(70);
                }
        }
        return(0);
       
}


void Delay(unsigned int x )
{
        unsigned int i,j,k;
        for(i=0;i<=x;i++)
                for(j=0;j<=0xff;j++)
                        for(k=0;k<=0xff;k++);

}

后面没用到r13啊  大哥明示啊!!
此帖出自ARM技术论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
有“=”号表示ldr是一个伪指令。
ldr r13,=0x1000  
就表示把立即数0x1000送入r13
此帖出自ARM技术论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
   我在书上看到 内存分配指令 DCB 可以用‘=’代替的 ,这里的等号不会是这个意思吧?、
还有,0x1000 是什么数?是地址吗?总有它的意义的吧?
此帖出自ARM技术论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
这里r13是堆栈指针的用法,因为你马上要跳到LedMain地方,一般是现场保护吧。
此帖出自ARM技术论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
我试过了  我把 0x1000改成0x00,0x30000000 ,0x31000000,和0x40000000(我板子的内存地址为0x30000000到0x340000000) 说明这和内存无关,只要这个语句存在,不关着个值是多少,跑马灯都正常运行的,但是我把这个语句去掉的时候,四个led只有中间两只led在闪了~~~

问什么会这样啊 ?请告诉我啊 这语句到底代表什么意思?
此帖出自ARM技术论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
呵呵  一直不懂那个 =  是什么意思 ,现在知道了  

简单讲就是将LDR PC,=value可以这样理解:
MOV Rd,#value 或者
LDR Rd, [PC, #offset]

在高手看来很简单吧  可是俺是菜鸟
此帖出自ARM技术论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 thecrypig 的回复:
呵呵? 一直不懂那个 =? 是什么意思 ,现在知道了?

简单讲就是将LDR PC,=value可以这样理解:
MOV Rd,#value 或者
LDR Rd, [PC, #offset]

在高手看来很简单吧? 可是俺是菜鸟

不错,看到那个=号就知道LDR是伪指令,用来解决mov之类或者ldr不能直接解决的问题,把这个问题留给汇编器来解决。LDR r13,=0x1000.看看0x1000内存4k的位置有些什么东西,r13一般表示为lr,程序跳转用的
此帖出自ARM技术论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
多谢上面这位大哥 ,经你提点,我才发现 0x1000正是4kb 真好是bootloader结束处!
此帖出自ARM技术论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 
r13是stack pointer,因为后面要跳到LedMain,估计这个function是用c写的,所以必须要事先分配stack,否则c程序没法运行。给r13赋值就是分配stack,对跑马灯来说只要是可用内存就行,并不在乎具体地址在哪。
此帖出自ARM技术论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 wangyan_ua 的回复:
r13是stack pointer,因为后面要跳到LedMain,估计这个function是用c写的,所以必须要事先分配stack,否则c程序没法运行。给r13赋值就是分配stack,对跑马灯来说只要是可用内存就行,并不在乎具体地址在哪。


对,R13不是lr,
此帖出自ARM技术论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 8 楼 rockursoul 的回复:
引用 7 楼 thecrypig 的回复:
呵呵? 一直不懂那个 =? 是什么意思 ,现在知道了?

简单讲就是将LDR PC,=value可以这样理解:
MOV Rd,#value 或者
LDR Rd, [PC, #offset]

在高手看来很简单吧? 可是俺是菜鸟

不错,看到那个=号就知道LDR是伪指令,用来解决mov之类或者ldr不能直接解决的问题,把这个问题留给汇编器来解决。LDR r13,=0x1000.看看0x1000内存4k的位置有些什么东西,r13一般表示为lr,程序跳转用的

哦,r13是sp,记错了
此帖出自ARM技术论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

14
 
引用 11 楼 gooogleman 的回复:
引用 10 楼 wangyan_ua 的回复:
r13是stack pointer,因为后面要跳到LedMain,估计这个function是用c写的,所以必须要事先分配stack,否则c程序没法运行。给r13赋值就是分配stack,对跑马灯来说只要是可用内存就行,并不在乎具体地址在哪。


对,R13不是lr,


很快啊,呵呵
此帖出自ARM技术论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 rockursoul 的回复:
引用 11 楼 gooogleman 的回复:
引用 10 楼 wangyan_ua 的回复:
r13是stack pointer,因为后面要跳到LedMain,估计这个function是用c写的,所以必须要事先分配stack,否则c程序没法运行。给r13赋值就是分配stack,对跑马灯来说只要是可用内存就行,并不在乎具体地址在哪。


对,R13不是lr,


很快啊,呵呵


我是八点半上班的,嘿嘿。
此帖出自ARM技术论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 14 楼 gooogleman 的回复:
引用 13 楼 rockursoul 的回复:
引用 11 楼 gooogleman 的回复:
引用 10 楼 wangyan_ua 的回复:
r13是stack pointer,因为后面要跳到LedMain,估计这个function是用c写的,所以必须要事先分配stack,否则c程序没法运行。给r13赋值就是分配stack,对跑马灯来说只要是可用内存就行,并不在乎具体地址在哪。


对,R13不是lr,


很快啊,呵呵


我是八点半上班的,嘿嘿。

一样^^
此帖出自ARM技术论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 
其实只要记住一条,C是基于栈的语言,没有栈是无法运行的。
此帖出自ARM技术论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 codewarrior 的回复:
其实只要记住一条,C是基于栈的语言,没有栈是无法运行的。


恩,这个虽然是基础,但是没有人提示真是想不到的。
此帖出自ARM技术论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

19
 
嗯 谢谢各位给我解答  只恨可用分太少~~
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表