微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM的希望:两种嵌入式操作系统的比较

ARM的希望:两种嵌入式操作系统的比较

时间:02-15 来源:互联网 点击:

务切换。

  其最高优先级任务的寻找是通过建立就绪任务表来实现的。mC/OS中的每一个任务都有独立的堆栈空间,并有一个称为任务控制块TCB(Task Control Block)数据结构,其中第一个成员变量就是保存的任务堆栈指针。任务调度模块首先用变量OSTCBHighRdy记录当前最高级就绪任务的TCB地址,然后调用OS_TASK_SW()函数来进行任务切换。

  mClinux的进程调度沿用了Linux的传统,系统每隔一定时间挂起进程,同时系统产生快速和周期性的时钟计时中断,并通过调度函数(定时器处理函数)决定进程什么时候拥有它的时间片。然后进行相关进程切换,这是通过父进程调用fork函数生成子进程来实现的。

  mClinux系统fork调用完成后,要么子进程代替父进程执行(此时父进程已经sleep),直到子进程调用exit退出;要么调用exec执行一个新的进程,这个时候产生可执行文件的加载,即使这个进程只是父进程的拷贝,这个过程也不可避免。当子进程执行exit或exec后,子进程使用wakeup把父进程唤醒,使父进程继续往下执行。

  mClinux由于没有MMU管理存储器,其对内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。操作系统队内存空间没有保护,各个进程实际上共享一个运行空间。这就需要实现多进程时进行数据保护,也导致了用户程序使用的空间可能占用到系统内核空间,这些问题在编程时都需要多加注意,否则容易导致系统崩溃。

  由上述分析可以得知,mC/OS内核是针对实时系统的要求设计实现的,相对简单,可以满足较高的实时性要求。而mClinux则在结构上继承了标准Linux的多任务实现方式,仅针对嵌入式处理器特点进行改良。其要实现实时性效果则需要使系统在实时内核的控制下运行,RT-Linux就是可以实现这一个功能的一种实时内核。

  文件系统

  所谓文件系统是指负责存取和管理文件信息的机构,也可以说是负责文件的建立、撤销、组织、读写、修改、复制及对文件管理所需要的资源(如目录表、存储介质等)实施管理的软件部分。

  mC/OS是面向中小型嵌入式系统的,如果包含全部功能(信号量、消息邮箱、消息队列及相关函数),编译后的mC/OS内核仅有6~10KB,所以系统本身并没有对文件系统的支持。但是mC/OS具有良好的扩展性能,如果需要的话也可自行加入文件系统的内容。

  mClinux则是继承了Linux完善的文件系统性能。其采用的是romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。空间的节约来自于两个方面,首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。

  mClinux还继承了Linux网络操作系统的优势,可以很方便的支持网络文件系统且内嵌TCP/IP协议,这为mClinux开发网络接入设备提供了便利。

  由两种操作系统对文件系统的支持可知,在复杂的需要较多文件处理的嵌入式系统中mClinux是一个不错的选择。而mC/OS则主要适合一些控制系统。

  操作系统的移植

  嵌入式操作系统移植的目的是指使操作系统能在某个微处理器或微控制器上运行。mC/OS和mClinux都是源码公开的操作系统,且其结构化设计便于把与处理器相关的部分分离出来,所以被移植到新的处理器上是可能的。

  以下对两种系统的移植分别予以说明。

  (1)mC/OS的移植

  要移植mC/OS,目标处理器必须满足以下要求;

·处理器的C编译器能产生可重入代码,且用C语言就可以打开和关闭中断;

·处理器支持中断,并能产生定时中断;

·处理器支持足够的RAM(几K字节),作为多任务环境下的任务堆栈;

·处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。

  在理解了处理器和C编译器的技术细节后,mC/OS的移植只需要修改与处理器相关的代码就可以了。具体有如下内容:

·OS_CPU.H中需要设置一个常量来标识堆栈增长方向;

·OS_CPU.H中需要声明几个用于开关中断和任务切换的宏;

·OS_CPU.H中需要针对具体处理器的字长重新定义一系列数据类型;

·OS_CPU_A.ASM需要改写4个汇编语言的函数;

·OS_CPU_C.C需要用C语言编写6个简单函数;

·修改主头文件INCLUDE.H,将上面的三个文件和其他自己的头文件加入。

  (2)mClinux的移植

  由于mClinux其实是Linux针对嵌入式系统的一种改良,其结构比较复杂,相对mC/OS,mClinux的移植也复杂得多。一般而言要移植mClinux,目标处理器除了应满足上述mC/OS应满足的条件外,还需要具有足够容量(几百K字节以上)外部ROM和RAM。

mClinux的移植大致

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top