历史上的今天
今天是:2025年03月29日(星期六)
2020年03月29日 | 有关设置栈指针sp寄存器r13
2020-03-29 来源:eefocus
为什么在调用C程序时,要在汇编(.S)文件中设置栈指针sp(Stack Pointer) r13?还有设置栈指针的时候赋的值是多少时如何确定的。
.text
.global _start
_start:
/* 设置内存: sp 栈 */
ldr sp, =4096 /* nand启动 */
// ldr sp, =0x40000000+4096 /* nor启动 */
/* 调用main */
bl main
halt:
b halt
为什么要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中间某个位置,只要不破坏要运行的代码就可以
史海拾趣
|
利用LED指示电流幅度的电路设计 图中LED的发光强度与负载电流成正比,该电路的设计目的是提供一个非常紧凑的电路来替代某些天文学设备中12V电源线上的电表。这种设备包含工作状况不可视的小功率加热元件(防露元件)。不过,当加热器接通时,LED就 ...… 查看全部问答> |
|
华邦的w83977芯片,初始化进入扩展功能模式只能读到它的ID号为0x97、device version为 0X74,其他的寄存器都无法正常读写,就连写CR30为1来激活一个功能都失败了(如激活UART_A),不知这个芯片的初始化有什么需要注意的地方?   ...… 查看全部问答> |
|
第一个问题是关于hidden terminal的,问题是假如网络环境内的所有terminal都可以侦测到其他terminal,为什么还会有冲突的发生? 第二个问题是在下述MAC scheme中(FDMA, fixed TDMA, Aloha, Slotted Aloha, Reservation Aloha, Reservation TDMA, M ...… 查看全部问答> |
|
我正在调试Windows Mobile下的Audio Driver,发现: 在某些情况下,系统wake-up回来,可以收到PowerUp,但是不能收到D0 不知道哪位兄弟碰到过这种情况?… 查看全部问答> |
|
【TI阅读】Advancing the Capabilities of Discrete Power MOSFETs 本帖最后由 dontium 于 2015-1-23 13:30 编辑 mosfets ,TI也做这个? … 查看全部问答> |
|
大家所熟知的蓝牙技术背后有一个名叫Bluetooth SIG的组织,该组织负责制定蓝牙技术的各项指标和准则。近日,Bluetooth SIG又公布了两项全新标准(http://www.bluetooth.com/Pages/Press-Releases-Detail.aspx?ItemID=156),很可能会促成一大批医 ...… 查看全部问答> |




