原创 关于启动

2007-1-22 13:18 2265 3 3 分类: MCU/ 嵌入式

       “我购买了一块S3C2410的开发板,带触摸屏的。但是我用了几天还有几个问题没有搞明白,ARM 9一定要写启动代码吗?能不能不写起动代码,将程序下载到FLASH中,再自动转入MAIN()函数自动运行。。还有一个就是写数据到FRAME BUFFER 还不是很明白,请指点一下大概。在原代码中有一个定义 volatitle unsigned shor lcd_bufer[x][y],程序怎么直接对LCD—BUFER写数据就能直接写屏。硬是不懂。。。”


       这是我一个朋友问我的问题,他是刚开始学习ARM系统的,原来也做过一些关于51之类的单片机的工作。其实这个问题问的可能是很多象我们这种初学者经常被困扰的问题。


      我想这个问题的最基本的根源就是对机器启动的过程不是非常的清楚。


     每一个嵌入式系统在上电复位时,都肯定有一个且只有一个复位向量。这就是说我们的系统在复位时都会从一个固定的初始的复位向量开始工作!然而,我们在该向量地址处一般会放置一条无条件跳转指令。然后跳到我们要去处理的后续工作中。


     那么我们就会在相应的跳入地址处开始我们的一些基础的工作,当然最先开始的一般是要对我们的系统进行初始化,例如堆栈初始化,系统时钟初始化,外围设备的初始化,一些特殊寄存器的初始化啊等等。在一般的汇编编程中,这时候我们就会进入到一个MAINLOOP的循环中去开始我们的工作了,而在C语言呢,这时候就是进入到我们的MAIN函数中去。


     通过上面的了解,我想我们应该可以明白一个问题,就是我们一定是先把我们的程序写入到系统里面去,才会开始我们的工作。当然,在这里可能有对于一些ARM CHIP,我们是先写入其片内的FLASH ROM中去,做为我们启动时的一些基本工作。另外一些呢可能是直接写入到外部的FLASH中去(其内部有固化了一部分的启动代码)。


     当然,在我们现在一般的系统中,写入FLASH一般是通过该ARM CHIP进行操作的,而不是由外部的烧录器写入的。这个问题由于时间关系,要等到下一个日志里去说明了。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条