Assembly Uboot终止独立应用程序
我在终止通过uboot运行的独立应用程序时遇到了一个小问题。我正在使用TI的基于omap5的评估板。uboot工作正常,我有一个简单的程序,可以使用loady通过uboot的命令提示符上传,并使用go[loadaddr]执行 问题是在程序运行并显示字符串后,它就挂在那里了。 我必须手动重置电路板以启动它并继续使用ubootAssembly Uboot终止独立应用程序,assembly,bootloader,u-boot,bare-metal,Assembly,Bootloader,U Boot,Bare Metal,我在终止通过uboot运行的独立应用程序时遇到了一个小问题。我正在使用TI的基于omap5的评估板。uboot工作正常,我有一个简单的程序,可以使用loady通过uboot的命令提示符上传,并使用go[loadaddr]执行 问题是在程序运行并显示字符串后,它就挂在那里了。 我必须手动重置电路板以启动它并继续使用uboot .global _Start _Start: LDR sp, = sp_top BL my_init mov pc,r14 基本上,我只想在程序执行后返回命令提示符 编辑:
.global _Start
_Start:
LDR sp, = sp_top
BL my_init
mov pc,r14
基本上,我只想在程序执行后返回命令提示符
编辑:
我正在运行的代码
#define UART3_addr 0x48020000 //UART Port Address
volatile unsigned char * const UART_PTR = (unsigned char *)UART3_addr;
int my_init()
{
display ("Testing");
return 0;
}
void display(const char *string)
{
while(*string != '\0'){
*UART_PTR = *string;
string++;
}
}
你没有给我们太多的细节,但是,也许你用U-Boot启动的程序永远不会回来。你能展示一下这个程序吗?我添加了代码…我也尝试过剥离所有内容,只使用返回0;在我的_init()函数中调用。。。。。。。也许你的工具链(ABI?);但我认为您使用的是好的,因为您的程序运行正常。如果您能够读入堆栈并调试此类错误,那就太好了……“我只想返回命令提示符”——然后您必须保留U-Boot交给“程序”的堆栈和返回地址。您的启动代码似乎没有这样做。U-Boot将您的独立“程序”视为一个过程,而不是实际操作系统中的可执行文件。