免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 885 | 回复: 0
打印 上一主题 下一主题

uCOSII移植lab-board笔记(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-17 17:07 |只看该作者 |倒序浏览

                    针对lab-board,实验室师兄已经写好了相应的代码,主要是用来检测开发板的各种外围接口电路,其中包括串口、键盘、数码管、网卡、USB以及IIS音频接口等基本驱动程序。可以说现在还只是一个简单的bootloader,功能十分有限,并没有像加载uCOS或uClinux操作系统的功能。但理解这些代码却对后续的移植OS有着很重要的作用。
    这两天,基本上把整个代码按其流程跟着走了一遍,并利用ADS对其加以修改,编译连接并最终烧到开发板上观察实验效果。在这过程中,一方面自己对arm的相关指令更加熟悉,不再像前段时间那样一直感觉是雾里看花,确实只有动手去编写代码才能够理解深刻,光是课堂上听老师讲或一味看书还远远不够;另一方面,也对整个开发板的接口电路有了全面的了解,因为代码基本上都是用来驱动开发板上的各种外围设备的,如SDRAM和串口等。
    下面对代码的流程简单地总结下,其中关键又在于板级初始化代码,包括如下几个步骤:
1、程序入口处(即地址0x0处)开始对异常向量表进行设置,里面包括reset、undef、irq等中断向量表项,事实上,和我们使用的x86中断向量表不一样,arm的异常向量表内的每个表项保存的并不是真正的异常处理程序地址,而是一条跳转到异常处理程序的跳转指令(如B reset);由于程序中是使用44b0的向量中断模式,所以其后又添加了一系列的中断向量表项。
2、由于系统启动后,首先就是从0x0地址开始执行指令,这里就是跳转到reset中断处理程序处,因此下面做的就是编制reset中断处理程序,其中包括禁止watchdog定时器、屏蔽所有中断、设置中断模式(上面的向量中断模式就是在这设置的)、设置时钟发生器(如PLL),最后还包括初始化SDRAM控制器,否则存储器根本就不能用(呵呵,这就是嵌入式底层程序与我们通常的应用程序开发的区别了,因为一般的应用程序下面有像Windows、Linux这样的操作系统为我们打理一切了,而嵌入式底层开发则一切都得自己亲力亲为)。值得注意的是,上面的一系统初始化工作事实上就是对相应的特殊功能寄存器进行设置,不可思议吧,要是你还想追究下去的话,可能只有进一步学习硬件芯片设计才能解惑了。当然了,现在我们也只需要清楚寄存器通过怎样设置来使外围设备正常工作。
3、接下来的工作就是将RO、RW和ZI段(事实上就是代码段和数据段)由flash中copy到RAM中去运行,毕竟在flash中运行比在RAM中运行慢多了,小程序在flash中直接运行还可以,要是程序大了问题可就随之而来了。PS: 在ADS中的DebugRel Settings->ARM Linker->Listings中选中Image map, Symbols可以很清楚地看到连接时的各种详细信息,大到RO, RW, Zi的段地址分配,小到各函数中的变量地址值,这对于我们理解程序加载执行很有帮助。
4、copy完成后,就需要对arm的各种工作模式下的堆栈进行相应设置,注意的是必须将堆栈错开;当然,并不是每一种模式下的都得设置,关键是看系统的需求了。
5、哈哈,到这已经是万事俱备,只欠东风了。要做的就是通过一条ldr指令,将用C编写的可爱的main函数地址赋给pc指针,从而跳转到我们的main程序去执行。但到此,我们任务并未全部完成,还有如下工作要做:
(1)设置好44B0 I/O端口特殊功能寄存器,因为arm的GPIO口是功能复用的,要是没有设置好,后果很严重!幸好的是,我们可以用C来操作,省事多了。
(2)设置UART特殊功能寄存器,否则我们在PC机的超级终端会什么也看不到的;在PC机上超级终端的属性设置(如波特率大小)与这里寄存器的设置值是必须是一致的,如此才能够通信正常。另外,就是UART的串口读写函数了,这样才能够从超级终端读入我们输入的信息,并且打印信息到超级终端上。
(3)终于可以进入死循环了(这可是嵌入式系统中常用的伎俩了),对于lab-board,循环里做的是先通过串口打印菜单信息,等待用户输入进入到不同的选项功能去,如测试数码管显示、iis播放音乐等,同样这些选项功能函数都是用C来实现的。
   
    更进一步,若想让ucos在lab-board上跑起来,除了上面所提到的,还有很多因素要考虑,与上面只是一个简单的测试应用程序比较,ucos毕竟是一个操作系统。不过,我相信坚持下去ucos一定能够在lab-board上跑起来的,况且现在已经为若干个小时后的2007树立了良好的开头了! ^_^
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27708/showart_248188.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP