请教关于ipl无法正常启动的问题

板子一启动进入ipl板子初始化代码,随后进入main函数,在main函数中调用init_***初始化串口的函数,但是当初始化结束以后即将返回到main函数时函
数出现了异常。

后来经过很多次的测试,即使在main函数中调用一个空的子函数时,
当返回到main函数时都会出现问题,我想可能时是和栈设置之类存在关系。

对sdram进行过仔细的测试,发现写入sdram的数据读出来是没有任何的异样
而且也没有任何的错误。

但是在ipl的startup.s的汇编文件中,在设置栈指针sp之前调用init_***初始化串口的函数是没有问题的,也是能够顺利返回的,但是设置栈指针sp之后进入init_***初始化串口的函数就不能顺利返回了。

在进入串口初始化函数后我试着读取被分配为栈的那块sdram空间,但是得到的都是空字符,根本就没有往里面压栈的感觉,很奇怪。

以上这些都是通过向串口输出信息来观察的。
可以确认的是调用的串口初始化函数是没有问题的,当在串口初始化函数返回前往串口输出数据,上位机也是能正常无误地接受的。

sdram的首地址从0xc000000,共64m,flash首地址为0x60000000,共16m。
现在在.lnk文件中的设置大概是这样的:

TARGET(elf32-littlearm)
OUTPUT_FORMAT(elf32-littlearm)
ENTRY(_start)
MEMORY
{
stack :ORIGIN = 0xc0000000, LENGTH = 0x1000
ram :ORIGIN = 0xc0001000, LENGTH = 0x70000
rom :ORIGIN = 0x60000000, LENGTH = 0x100000
}
SECTIONS
{
.text : { *(.text)
(.rodata)
*(.glue_7)
*(.glue_7t)
} > rom
_etext = .;
.data : { *(.data)
*(.sdata)
} > ram
.bss : {
*(.bss)
*(.sbss)
} > ram
}

在进入main函数前的start.s文件中已经将sp设置指向了0xc0001000

不知道问题出在哪,请教各位了!先谢谢了!