• 1.摘要
  • 2.基本信息
  • 3.基本信息
  • 4.概述
  • 5.硬件平台
  • 6.软件设计
  • 7.文件系统
  • 8.用户Shell
  • 9.结语

μc/os

摘要:本文介绍了μC/OS在ColdFire为核心系统上的具体应用,并在此基础上做了扩展,在μC/OS的核心上实现了RAM盘和文件系统。为了方便应用和调试,还实现了用户Shell程序,可以接受并执行用户命令,扩展并丰富了μC/OS的功能。

基本信息

  • 中文名

    μC/OS

  • 关键词

    μC/OS μCLinux

  • 硬件平台

    采用GPFC数据采集系统

  • 特点

    证明了开放源码软件的巨大生命力

基本信息

μC/OS的应用和扩展

关键词:μC/OSμCLinux嵌入式系统ColdFire

概述

近年来,随着微控制器性能的不断提高,嵌入式应用越来越广泛。市场上的大型商用嵌入式实时系统,如VERTEX,VXWORK,PSOS等等,已经十分成熟,并为用户提供了强有力的开发和调试工具。但商用嵌入式实时系统价格昂贵,而且都针对特定的硬件平台。对于国内中小型系统的开发,购买商用实时系统并不划算。此时,采用免费软件和开放代码不失为一种选择。源码开放(C代码)的嵌入式系统有μC/OS的uCLinux。μC/OS简单易学,提供了嵌入式系统的基本功能,其核心代码短小精悍,如果针对硬件进行优化,还可以获得更高的执行效率。但是μC/OS相对商用嵌入式系统来说还是过于简单,而且存在开发调试困难的问题。UCLinux是免费软件运动的产物,包含丰富的功能,包括文件系统、各种外调驱动程序、通讯模块、TCP/IP、PPP、HTTP,甚至WEB服务器的代码。在INTERNET上流传的uCLinux已经被移植到当前几乎所有的硬件平台上,功能与PC机上运行的Linux不相上下,其代码也十分复杂。完全移植没有必要也十分困难,但uCLinux的代码经过世界范围内的优化,稳定可靠而且高效,所有模块的代码都可以从INTERNET上获得,可以进行模块移植。在本例应用中,笔者在ColdFire硬件平台上运行了μC/OS的核心,并实现了uCLinux的文件系统,使得在嵌入式应用中可以进行文件操作。同时针对μC/OS调试困难的问题。还移植了uCLinux的用户Shell,使得用户可以用命令行方式进行程序的调试和开发。

硬件平台

本系统的硬件平台采用GPFC(General Purpose Fieldbus Controller)数据采集系统。该系统是由德国汉堡国家同步辐射实验实(DESY)Dr.Matthias Clausen领导的研究小组开发,采用MOTOROLA公司的ColdFire MCF5206处理器为核心。ColdFire MCF5206处理器属于MOTOROLA 32位MCU家族,在源码上与68K系列兼容。全静态设计,在33MHz的工作频率下可达最大17MIPS的处理能力。除了具有68K系统的通用功能模块外,片内还带有DRAM控制模块,可以直接外接DRAM芯片。由于ColdFire将片选逻辑电路、总线控制器、DRAM控制模块等全部集成在MCU内部,使得外围电路变得十分简单。

在笔者所用的GPFC系统中,ColdFire工作在32MHz,外围电路包括两片DEAM芯片,共计4M的RAM,一片128K的FLASH,用于存放引导程序。其余为I/O电路。系统通过RS-232串口与PC机相连。

软件设计

本系统的软件采用μC/OS为嵌入式平台。在应用中切实感到了开放源代码的无可替代的优点。首先是可以根据自己的需要对源代码进行取舍,去掉不需要的变量和不使用的函数,甚至可以根据需要改写相关函数。在μC/OS的源代码中,函数执行中有许多条件判断,作用是防止参数的错误传递。例如,与信号量有关的函数在执行前都会检查一下传递给函数的指针是不是一个有效的信号量指针。作为通用系统,这些条件判断是完全必要的,避免出现错误时系统崩溃。但作为具体的应用,只要在程序设计时保证参数传递的正确性,完全可以不用条件判断,就能提高函数的执行速度,尤其一些频繁调用的函数,或当MCU速率不高的时候,重写部分函数往往可以显著提高系统性能。另外,由于用户对系统有源码级的了解,可以添加自己编写的模块,与原系统兼容,使系统具有可扩展性。

正是由于μC/OS的可扩展性,笔者将uCLinux的RAM盘、文件系统和用户Shell移植到了μC/OS上,在用户程序中可以进行文件操作,文件系统可以为任务保存数据,并提供了统一的接口函数。用户编制的单个任务也可以保存在RAM盘上,可以在终端上用命令方式执行运行、监控、删除任务。

文件系统

uCLinux的文件系统与Linux的基本相同,文件以树型目录组织。由于篇幅所限,关于文件系统的细节,读者可参考Linux和Unix的相关资料,本例中将RAM中高端的1M分配给文件系统,建立了容量为1M的RAM盘。UCLinux的文件系统由逻辑块组成,如果是磁盘文件系统,对应为磁盘块;RAM盘则对应为内存块,每个块为512字节。一个标准的逻辑盘划分成几个部分:引导块、超级块、索引节点区和数据区。

引导块 超级块 索引节点区 数据区

引导块在文件系统的开头,通常为一个逻辑块、存放引导程序,用于启动和引导操作系统。在我们的RAM文件系统中由于不需要RAM盘引导,所以不分配引导块。超级块记录文件系统当前状态,盘有多大,能存放多少文件,何处可以找到空闲空间和用于文件系统管理的信息。索引节点区紧接在超级块后面,存放文件系统的索引节点表。在文件系统中每一个文件(包含目录)占据一个索引节点表项。索引节点是一个记录文件信息的数据结构:

struct dinode{

short di-mode;

/*文件模式:是文件还是目录,是可读、可写还是可执行*/

short di-nlink;