首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[原创]初学ARM-学习笔记(二)

[原创]初学ARM-学习笔记(二)

===========================================================================
2006/05/09
启动代码中的exit是做什么的?


// Enter the C code
                LDR     R0,=?C?INIT
                TST     R0,#1       ; Bit-0 set: INIT is Thumb
                LDREQ   LR,=exit?A  ; ARM Mode
                LDRNE   LR,=exit?T  ; Thumb Mode
                BX      R0
                ENDP


PUBLIC exit?A
exit?A          PROC    CODE32
                B       exit?A
                ENDP


PUBLIC exit?T
exit?T          PROC    CODE16
exit:           B       exit?T
                ENDP


是个死循环,没什么用途,不是?
错,有用.你不用象在C51中的main函数一样,最后都加一个死循环了.
// in c51
void main()
{
    //...........
    while(1)        // 很多初学51的朋友因为没意识到死循环的重要,犯了很多错误,
        ;
}       


在CARM中,当main()执行完毕,将进入exit.你因而省略了写死循环的步骤.
exit?A 用于处理THUMB代码从main的返回
exit?T 用于处理ARM代码从main的返回


[题外] 为什么当时C51的编译(连接)器不做这样的处理呢,如果这样做了,会使人少犯点无意的错误.
唔,我不知道.
我唯一能想到的原因,是基于RAM的考虑.
如果要这样做,startup code势必向main传递一个地址指针,价值2个字节.
在资源宝贵的51中,这样做,唔,未必是个好主意.
===========================================================================

建议在第一个帖子下面连载,这样方便阅读
呵呵!谢谢你的支持!~!!
 
返回列表