(3)从主机接收核心和文件系统,启动核心运行。
系统加电时,BSP从位于0地址的非易失存储器FLASH中执行,和运行在主机上的程序通信,从串口或网卡的数据寄存器中读取数据,把核心和文件系统下载到内存中指定的位置,最后将CPU中的程序计数器PC置为核心在内存中的起始地址,实现核心启动。但是,程序在FLASH中执行时不能对变量进行写操作,为了使程序能正确执行,BSP必须将自己重定位(即把自己搬运到)到内存中,并且在进入c语言函数执行前要设置好堆栈指针。
其主要实现过程的伪码如下:
硬件(cup、内存等)初始化;
通信设备(网卡、串口)初始化;
将自己重定位到内存中;
设置系统的堆栈指针;
跳转到从串口读取核心和文件系统的函数;
从串口读取核心和文件系统的函数(void)
{
while(核心没读取完){
while(串口的接收数据寄存器为空)(等待);
从串口的数据寄存器读取数据到内存中;
核心大小减去已读取的大小,确定核心是否读取完;
if(核心读取完){
-asm{mov pc,一核心在内存中的起始地址;}
}
}