对于之前提出了栈这一概念下面我们要提出问题:
1.为何要使用栈
答:c函数要用
2.如何使用栈
答:a.保存局部变量 b.保存lr等寄存器
3.调用者如何传参数给被调用者
start.s
.text
.global _start
_start:
/* 设置内存: sp 栈 */
ldr sp, =4096 /* nand启动 */
// ldr sp, =0x40000000+4096 /* nor启动 */
mov r0, #4
bl led_on
ldr r0, =100000
bl delay
mov r0, #5
bl led_on
halt:
b halt
c代码
void delay(volatile int d)
{
while (d--);
}
int led_on(int which)
{
unsigned int *pGPFCON = (unsigned int *)0x56000050;
unsigned int *pGPFDAT = (unsigned int *)0x56000054;
if (which == 4)
{
/* 配置GPF4为输出引脚 */
*pGPFCON = 0x100;
}
else if (which == 5)
{
/* 配置GPF5为输出引脚 */
*pGPFCON = 0x400;
}
/* 设置GPF4/5输出0 */
*pGPFDAT = 0;
return 0;
}
传参数mov r0, #4或 mov r0, #5 注意:r0-r3 为参数/结果寄存器
4.被调用者如何传参数给调用者
5.如何从栈中恢复那些寄存器
上一篇:jz2440裸机开发与分析: 点亮LED灯之C语言2
下一篇:jz2440裸机开发与分析:串口编程2
推荐阅读最新更新时间:2024-11-09 14:46
设计资源 培训 开发板 精华推荐
- LTC3886IUKG 具有 DCR 检测功能的高效、150kHz、5V 和 12V 双路输出降压转换器的典型应用电路
- 具有 400kHz 外部同步降压转换器的 LTC3646HDE 12V 至 1.8V 输出的典型应用电路
- 无线调频话筒
- LTC3226EUD 3.3V 后备电源典型应用电路
- 步进电机驱动板V2.0(5V)
- [广西师大校赛]任意波形发生器
- LT3461AES6 3.3V 至 5V 升压转换器的典型应用电路
- LM2576降压-升压转换器欠压锁定电路典型应用电路
- LT6656BCS6-3、3V 升压输出电流电压基准的典型应用
- LT8570IDD 1.5MHz、5 至 12V 输出升压转换器的典型应用