解析S3C2440第一个C程序的内部机制
为什么在调用C程序时,要在汇编(.S)文件中设置栈指针sp(Stack Pointer) r13?还有设置栈指针的时候赋的值是多少时如何确定的。
1 | .text |
为什么要nand启动设置成4096,nor启动设置为0x40000000+4096?
1.SDRAM的地址是 0x30000000 - 0x40000000。
2.Nand启动时,片内4K RAM基地址为0(在0地址处),Nor Flash不可访问。
3.Nor启动时,片内RAM地址为0x4000 0000,片内RAM在0x4000 0000往后的4k 此时的栈顶可以设置到内存的上限 0x40000000 + 4k(4096)。
4.调用C函数时,返回地址、局部变量一般都保存在栈里,所以调用C程序时要设置栈指针
5.之所以设成4096,是由于S4C2410、S3C2440从NAND Flash启动时,它的内部4K RAM的地址为0~4095,可以把栈
指针指向最后──其实你也可以指向0~4095中间某个位置,只要不破坏要运行的代码就可以