×
单片机 > 单片机程序设计 > 详情

2440启动代码分析心得体会

发布时间:2020-05-26 发布时间:
|
通过研究2440启动代码,发现这个启动代码压根就没有从nand flash复制代码的功能,怪不得下载到nand flash 没现象呢!

用伪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为0x4000 0000;

Else  不复制;

 

配置相应模式堆栈的大小;  //最后配置的是用户模式堆栈的大小,在用户模式下进入main函数

 

main();      //调用main函数,这就是为什么单片机裸奔的时候需要死循环了。

}

其实在2440中main函数中不用死循环,在执行main函数完毕之后,相当于复位函数()已经执行完毕,接下来执行的是未定义函数() ,由于刚才分析未定义函数是个死循环,相当于最坏的情况是,2440一直在未定义函数中停留着。当然并不希望看到这样的情况,所以2440裸奔时,最好在main函数中构成死循环!对于51单片机来说,没有死循环的话,这个51单片机程序会跑飞!!!

如果想从nand flash启动,并启动一个系统的话,需要在C函数之前加入初始化nandflash函数以及从nand flash代码复制到sdram的函数。如果再加一点其他的东西的话,一个小的bootloader就完成啦!




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析