嵌入式软件开发之: 复位和初始化
ial_stackheap()
__user_initial_stackheap()
; 程序中指定栈基地址或在描述文件中指定该地址
LDR r0,=heap_base
; r1 contains SB value
MOV pc,lr
13.5.5 硬件初始化
一般情况下,系统初始化代码和主应用程序是分开的。系统初始化要在主应用程序启动前完成。但部分与硬件相关的系统初始化过程,如启用Cache和中断,必须在C库初始化代码执行完成后才能执行。
为了在进入主应用程序之前,完成系统初始化,可以使用$sub和$super函数标识符在进入主程序之前插入一个例程。这一机制可以在不改变源代码的情况下扩展函数的功能。
下面的例子说明了如何使用$sub和$super函数标识。链接程序通过调用$sub$$main()函数取代对main()的调用。所以用户可以在自己编写的$sub$$main()例程中启用Cache或使能中断。
extern void $Super$$main(void);
void $Sub$$main(void)
{
cache_enable(); // 使能caches
int_enable(); // 使能中断
$Super$$main(); // 调用原来的main()函数
}
在$Sub$$main(void)函数中,链接程序通过调用$Super$$main(),使代码跳转到实际的main()函数。
在完成硬件初始化之后,必须考虑主应用程序运行在何种模式。如果应用程序运行在特权模式(Privileged mode),只需在退出复位处理程序前切换到适当的模式;如果应用程序运行在用户模式下,要在完成系统初始化之后,再切换到用户模式。模式的切换工作,一般在$Sub$$main(void)函数中完成。
- 基于DSP的导弹仿真器嵌入式组件设计(04-30)
- 为嵌入式软件建立统一软件系统框架的方法详介(05-23)
- 在VIM中实现对嵌入式软件的调试(08-06)
- 基于仿真的嵌入式软件白盒覆盖测试系统设计(08-26)
- 嵌入式软件运行剖面建模及测试用例生成(11-06)
- 嵌入式软件与硬件的集成测试过程研究(11-16)