韦东山Linux嵌入式课程社区
直播中

徐敏

7年用户 158经验值
私信 关注

请问如果main不返回那需要设置栈吗?

裸机第二个例子,如果main不返回,需要设置栈吗?

汇编程序:
.text
.global _start
_start:
            ldr     r0, =0x53000000     @ WATCHDOG寄存器地址
            mov     r1, #0x0                     
            str     r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启
            
            ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                @ 调用C程序中的main函数
halt_loop:
            b       halt_loop

c代码:

#define GPFCON      (*(volatile unsigned long *)0x56000050)
#define GPFDAT      (*(volatile unsigned long *)0x56000054)
int main()
{
    GPFCON = 0x00000100;    // 设置GPF4为输出口, 位[9:8]=0b01
    GPFDAT = 0x00000000;    // GPF4输出0,LED1点亮

    // 如果这里加上一个死循环,启动的时候,还需要设置栈吗??
    // 添加下面的语句
    while(1);

    return 0;
}

回帖(6)

周彦楠

2019-8-13 09:15:09
我的意思,main不会返回回去,也就不需要返回后的执行地址,就不需要设置栈了。
举报

李鸾

2019-8-13 09:27:51
可是他 一定会返回,这个假设不成立  只需记住一点: 调用C函数 一定要设置栈
举报

陆焙兆

2019-8-13 09:37:28
为什么一定要返回回去,如果是操作系统不是直接进进入任务的处理了,不会返回了么??
举报

孔朱磊

2019-8-13 09:45:26
因为是BL....
举报

更多回帖

发帖
×
20
完善资料,
赚取积分