Board logo

标题: [原创]初学ARM-学习笔记(二) [打印本页]

作者: lenglx    时间: 2006-5-12 12:17     标题: [原创]初学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中,这样做,唔,未必是个好主意.
===========================================================================


作者: silverwolf7516    时间: 2006-5-12 12:44

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




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0