新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 2440启动代码分析心得体会

2440启动代码分析心得体会

作者: 时间:2016-11-26 来源:网络 收藏
通过研究2440启动代码,发现这个启动代码压根就没有从nandflash复制代码的功能,怪不得下载到nandflash没现象呢!

用伪C代码来描述2440的正常的启动过程。

本文引用地址:https://www.eepw.com.cn/article/201611/321602.htm

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就完成啦!




评论


技术专区

关闭