打印

stm32移植日志之一,谈谈怎样移植操作系统

[复制链接]
3441|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djyos|  楼主 | 2009-8-7 23:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看本文件请参考《都江堰操作系统与嵌入式系统设计》第15章,该书在www.djyos.com可以下载。
    在今天的微控制器市场上,cortex-m3是个不折不扣的当红小生,出道不久就大红大紫,大有席卷天下之势,攻击范围涵盖高端8位机至32位arm7的微控制器市场。潮流不可阻挡,djyos此时推出cm3内核的stm32版本,实乃顺天应人。
同时,移植进度将配合bboom同学发起的DIY活动(http://group.**/2055),移植日志将在该论坛同步发布。
闲话少说,先回答一个大家普遍关心的问题:
“移植一个操作系统的首要工作是什么?”
“废话,这算哪门子问题哦,不就是用新cpu的指令重写汇编部分代码,重写硬件相关的部分代码嘛!”
    如果这样想的话,你就大错特错了!操作系统就是计算机中的政府机关,开机后首先得到cpu眷顾的就是你,你享有控制一切社会资源的权利,移植操作系统,就相当于以某一个地区政府为蓝本,在一个新**上建立起**制度相同的政府机关。然而各地有自己的乡土人情、风俗习惯、文化程度、经济水平等,政府机构的设置虽大同,但必存小异。依葫芦画瓢地创建一套行政机关,必然水土不服。
所以,移植操作系统的首要工作是:决定目标系统资源的使用方式和权限管理策略,也就是常说的先定个调。一般来说,移植操作系统,在动手写代码之前,至少应该确定以下几个策略:
1、有许多cpu有多种运行模式,操作系统要安排好内核和应用程序代码分别在什么模式下运行,应用程序代码有什么权限,使其各守本分,各司其职。
2、分配内存空间,代码存放地址,运行时地址,数据存放地址,运行时地址,堆内存地址,线程的栈地址,异常处理程序的栈空间,中断的栈空间等。
3、系列化安排,嵌入式cpu都是系列化的cpu,同一个内核,系列化型号,不同型号之间大同小异,内核在适应不同型号cpu时,不应该修改代码,而是应该只修改配置文件。
4、决定中断管理硬件如何与操作系统的中断模块匹配。
    前三点是传统操作系统需要考虑的,而第四条是djyos独有的。这来源于djyos特有的中断管理模块,传统操作系统对中断的管理很少,基本上不外乎提供以下几个功能:
1、提供一个中断处理函数的封皮和封底,一般用汇编语言实现,使应用程序可以用普通C语言函数的方式写ISR。
2、提供关中断和开中断的函数。
3、提供中断连接函数,使中断发生时相应的应用程序ISR能被调用。
4、设置中断ISR的栈指针。
5、linux提供了上下半部的管理功能,算是有一点管理,只是这种管理有些不伦不类——本来就不是实时系统,弄这么复杂干吗?
    而djyos则对中断实施了系统级的管理,详见《都江堰操作系统与嵌入式系统设计》一书的第六章,djyos把中断划分为实时中断和异步信号,并且提供中断同步功能,使得大部分中断代码变得更加容易,少量实时性要求高的代码又有更高的实时性,而且更加方便了项目经理管理项目团队。然而,有得必有失,这些红利不是白白得来的,你需要在移植操作系统时,付出代价。然而,移植操作系统是一次性的,应用程序项目则有成千上万,故这种付出是值得的。
    讲了这么多大道理,都是纸上谈兵,来点实际的吧,我们也给si版本的djyos for stm32定个调:
1、操作系统内核和应用程序都在特权模式下运行。
2、异步事件的优先级全部设为最低优先级,且不可改变。
3、所有异常ISR函数使用使用同一个栈,栈指针是msp,其他代码使用线程栈,栈指针psp。
4、大部分代码在flash中执行,设一个配置选项,由用户选择ISR(含异常和中断)的运行位置(ram还是flash),使用户可以根据flash和ram的速度优化关键代码。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

454

帖子

1

粉丝