从单片机到ARM9
参与Helper2416开发板助学计划心得
在ARM9之前学习过51、MSP430、STM32,从8位到16位再到32位的单片机,每一次的跨越无疑都是一次挑战。其中最明显的就是使用单片机实现某一相同的功能需要配置的寄存器越来越多。因为从51到430再到32,片上的功能越来越多,管理起来就越来越复杂。
也就是说越高级的芯片使用起来就越复杂?
从某些角度来说确实是这样,因为需要配置的寄存器的确是越来越多。但好在有分层思想的存在,把复杂的东西封装起来,提供一些方便操作的接口,来供我们调用,比如STM32的库函数,就让我们免去了翻阅数据手册寻找寄存器相关信息的麻烦。
可以说分层思想就是IT界的灵魂所在!
对于今天的ARM9系列的S3C2416来说,是比32更加复杂的单片机(可以理解为单片机,因为它内部的构成满足单片机的定义,不过除了学习没人把它当作一款单片机使用),也是一款微处理器(外接上存储设备、输入输出设备后,跑上Linux或者WinCE,它就是一台电脑)。那么使用它难吗?
难!确实难!首先相对于前面的提到的51、MSP430、STM32来说,就算你把ARM9当作一款单片机来使用,他们的开发方式就有很大的不同,51到32都有适合他们自身的集成开发环境,我们只要写好程序、编译链接生成可执行文件,然后通过软件烧写到flash后就可以上电运行了。这也让我们养成了所有的软件都是从main函数开始运行的错误意识,其实在这之前集成开发软件已经帮我们做好了很多前期处理了,比如把全局变量从flash拷贝到ram区等,这里又不得不提一下代码的分段了(在文章最后简要说明)。对于ARM9来说,真的很难找到一个合适的集成开发环境,因为对与ARM9来说也不需要,这就意味着我们要自己写在main函数执行之前的那段准备代码,那么了解ARM9的启动流程(不同厂商不同型号的芯片并不相同)就很有必要了,而且需要知道ARM9是一款微处理器,是要跑操作系统的,代码并不存放在内部的ROM中,同时片内的RAM也满足不了系统的开支,所以就有了外置的存储设备(比如SDRAM、NandFlash、SD卡等),而我们的代码就需要从NandFlash或者SD卡中拷贝到SDRAM中运行(代码不能直接在NandFlash中运行的,但是可以在NorFlash中运行,有关内容后面再发帖补充)。所以你想想,在我们的应用代码main函数运行之前要做多少准备工作,至少要初NandFlash/SD、SDRAM,从NandFlash/SD卡中读取代码,把代码复制到SDRAM中,然后跳转到main函数。这些就是Bootloader的工作中的一部分。Bootloader本身就是一个裸机程序,他的实现就是需要去操作哪些复杂的寄存器。这也就是底层的一小部分,为更高层次实现打好基础,做好准备。底层还包括内核、驱动什么的,确实难,这也是为什么搞底层的要比搞应用的工资高!
说了是分层了,底层跟硬件息息相关,确实是难。不过对于上层应用来说,只需要了解下层给你的接口,你就可以编写出你想要的应用程序来完成你所需要的工作了,这还难吗?实际上操作系统也就是让你更好的管理你的硬件,如果你只是做应用的话,不管你用的是多么高级多么复杂的芯片,你只要熟悉系统提供给你的接口,你都可以手到擒来。这不是很简单吗?
所以说分层思想是伟大的 !
实验楼要关门了,赶紧出去,关于代码的分段明天再来补充
论坛ID:yuanlai2010
发表时间:2014-07-04