ARM 的启动过程:
1.设置系统模式,关掉interrupt 和fast interrupt, 2.初始化TCM,分别设置DTCM和ITCM的基址和长度,设置各种工作模式如svc,irq,fiq,abt,undef等的堆栈基址, 3.初始化VFP,
4.初始化MMU,把s-ram,ddr等的大小等告诉mmu,
5.进入__main.
注意的事项:
1.启动或reset的时候,要关掉d-cache,和i-cache,
2.retarget, 处理fputc(),fgetc(),backspace(),ferror(),
3.stack heap 实现__user_initial_stackheap(),
4.中断向量表的在进入main之后安排,.
__main()作为c语言的入口函数,它主要做了以下工作:
1.把RO,RW从他们的加载域复制到他们的运行域中去(可以用在LINKER中设置RO=,RW=,来确定,也可以用scatter文件来定义),
2.初始化ZI域,
3.跳到__rt_entry.
而库函数__rt_entry()会完成以下工作:
1.调用__rt_stackheap_init()设置stack和heap,
2.调用__rt_lib_init()初始化相应的库函数,
3.调用main(),即是我们自己的应用程序了,
4.调用exit()来处理main()函数的返回值.
|
|