通过研究2440启动代码,发现这个启动代码压根就没有从nandflash复制代码的功能,怪不得下载到nandflash没现象呢!用伪C代码来描述2440的正
经过研讨2440发动代码,发现这个发动代码压根就没有从nandflash仿制代码的功用,怪不得下载到nandflash没现象呢!
用伪C代码来描绘2440的正常的发动进程。
2440发动函数()
{
复位函数();
未定义形式函数()//这个是死循环
SWI函数();//这个函数在其他文件中存在
PAbt_Addr函数();//又是个死循环函数
DAbt_Addr函数();//仍是个死循环函数
……
}
复位函数()
{
if(关掉看门狗==1)
关掉看门狗;
Else
不关;
if(设置时钟==1)
设置好时钟;
Else
不设置时钟;
If(初始化贮存操控器==1)
初始化内存操控器;
Else
不初始化贮存操控器;
If(初始化I/O操控寄存器==1)
初始化I/O操控寄存器;
Else不初始化I/O操控寄存器
If(反常中断向量仿制到IRAM==1)
反常中断向量到IRAM;//IRAM为0x40000000;
Else不仿制;
装备相应形式仓库的巨细;//最终装备的是用户形式仓库的巨细,在用户形式下进入main函数
main();//调用main函数,这便是为什么单片机裸奔的时分需求死循环了。
}
其实在2440中main函数中不必死循环,在履行main函数结束之后,相当于复位函数()现已履行结束,接下来履行的是未定义函数(),因为方才剖析未定义函数是个死循环,相当于最坏的状况是,2440一直在未定义函数中停藏着。当然并不期望看到这样的状况,所以2440裸奔时,最好在main函数中构成死循环!关于51单片机来说,没有死循环的话,这个51单片机程序会跑飞!!!
假如想从nandflash发动,并发动一个体系的话,需求在C函数之前参加初始化nandflash函数以及从nandflash代码仿制到sdram的函数。假如再加一点其他的东西的话,一个小的bootloader就完结啦!
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/257902.html