当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]摘要:本文介绍了μC/OS在ColdFire为核心系统上的具体应用,并在此基础上做了扩展,在μC/OS的核心上实现了RAM盘和文件系统。为了方便应用和调试,还实现了用户Shell程

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

/*和文件相关的链接数*/

short di-uid;

/*文件所有者的标示*/

short di-gid;

/*文件所有者的组标示*/

long di-size; /*文件大小*/

char di-addr[ ];

/*文件数据所在的逻辑块编号*/

time-t di-atime;

/*文件最后一次访问的时间*/

time-t di-mtime;

/*文件最后一次修改的时间*/

time-t di-ctime;

/*文件建立的时间*/

}

其中的数组di-addr[ ]记录文件数据所在的逻辑块号。本例中RAM盘为1M,每个逻辑块512字节,共2048个逻辑块,所以每个逻辑块的编号要用两个字节表示。为了记录足够长的文件,di-addr[ ]中逻辑块可分为直接块和间接块。关于直接块和间接块的概念,请读者参考Linux的相关文档。分析索引节点可知,通过索引节点就可以完全确定一个文件。索引节点表中的第一项就是根目录。索引节点区的大小决定了文件系统中最多能有多少个文件(包括目录)。在本例中,笔者设定为128项。在索引节点区后就是数据区,数据区以逻辑块为单位按次序编号。如果要访问某个文件,只要找到该文件对应的索引节点表项,从di-addr[ ]项中就可以查出文件数据所在的逻辑块。文件的访问需要通过fread()或fwrite()函数,其细节不再复述。

添加了文件系统后,任务的运行将和文件相关,所以TCB(任务控制块)要做相应的修改。需要添加任务所在目录项和任务打开文件项。当一个任务调用OSTaskCreate创立新的任务的时候,子任务应该继承先前任务的目录项和任务打开文件项。

五、 用户Shell

用户Shell实际上是一个在μC/OS下独立运行的任务,处于最低的优先级。 Shell启动后,进入睡眼状态,等待用户输入。用户从终端上输入命令后将唤醒Shell,Shell首先检测输入命令是不是内部命令,如果不是,则在 TCB中查询当前所在文件目录,然后在目录中查询是否有与输入匹配的文件,如果有且文件属性为可执行时,则调用OSTaskCreate创立一个新的任务。由于Shell优先级为最低,新创建的任务将马上运行。新任务执行完后可以用OSTaskDel删除自己。如果在当前目录中找不到匹配项,则返回错误信息。

在本例中,Shell中包含的内部命令为cd(改变当前目录),pwd(显示当前工作目录),mkdir,rmdir(创立删除目录),ps(显示当前系统中的任务),kill(删除任务)。

由于μC/OS中的OSTaskCreate不能动态分配堆栈空间,OSTaskDel也能释放任务的堆栈空间。为了实现Shell的加载和删除任务的功能,笔者对上述两个函数进行了改写,添加了内存管理函数 malloc()和mfree()。为了简间起见,以8k为单位申请和释放内存块。系统的内存资源由一个双向链表进行管理。在OSTaskCreate中调用malloc(),参数为希望分配的内存块数,malloc()将检索内存管理的双向链表,返回空闲块地址。而OSTaskDel中将调用 mfree()释放内存,重新加入双向链表。为了避免内存空洞,在Shell中启动的任务采用相同大小的堆栈。

通过用户Shell,单独的任务可以保存在RAM盘上,通过命令方式运行、监控,查看任务状态、删除任务,作为一种有力的开发和调试手段。

六、 结语

μC/OS的出现和应用也只是近年来的事,其迅猛的发展证明了开放源码软件的巨大生命力。相信经过广大用户的不断丰富和完善,μC/OS的功能将日趋成熟,应用也会更加广阔。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2023年9月21日 /美通社/ --由工业和信息化部、发展改革委、科技部、商务部、中国科学院、工程院、中国贸促会、上海市人民政府共同举办并以"碳循新工业 数聚新经济"为主题的第二十三届工博会,9...

关键字: 激光切割 SCARA OS STORE

北京2023年9月19日 /美通社/ -- 随着科技的快速发展,我们正处在一个数据爆炸的时代。超大规模数据中心作为数据的重要存储和处理场所,其数量在不断增长,与之而来的数据量也在呈指数级增长。这不仅包括原始数据,还包括分...

关键字: 分布式 节点 软件 数据中心

(全球TMT2023年9月15日讯)企业移动性管理领域企业42Gears宣布推出AstroStatus,这是一种直观的事件沟通解决方案,旨在增强企业能力,让企业在云托管解决方案出现服务中断和意外故障时能随时向客户通报情...

关键字: STATUS RS OS GE

拉斯维加斯2023年9月15日 /美通社/ -- 美国当地时间9月12日,万众瞩目的美国国际太阳能展RE+ 2023在拉斯维加斯The Venetian Convention and Expo Center会展中心隆重召...

关键字: 新能源 OS SOLAR OCEAN

厦门2023年9月15日 /美通社/ -- Greenpath是美国一家提供全方位综合服务的回收商、加工商和制造商,已有25年的历史,在加利福尼亚州、内华达州和德克萨斯州均设有分公司。Greenpath拥有处理各种物料的...

关键字: GREEN ST 金属 OS

印度班加罗尔2023 9月15日 /美通社/ -- 企业移动性管理领域的领先企业 42Gears 十分高兴地宣布推出AstroStatus,这是一种直观的事件沟通解...

关键字: STATUS RS OS GE

香港2023年9月12日 /美通社/ -- 优克联集团("优克联"或"该公司",纳斯达克股票代码:UCL)创建了全球领先的移动数据流量共享市场。该公司今日宣布旗下子公司深圳市优克联...

关键字: 移动数据 数据流 OS 智能硬件

印度班加罗尔2023年9月8日 /美通社/ -- 下一代数字化和咨询服务的全球领军者Infosys (NSE, BSE, NYSE: INFY) ,近日宣布在《IDC MarketScape:2023年全球人工智能服务供...

关键字: IDC MARKET 人工智能 OS

深圳2023年9月8日 /美通社/ -- 近日,超算领域国际顶级会刊SC23公布了论文入选名单,由微众银行区块链团队发表的论文——《FISCO-BCOS:An Enterprise-grade Permissioned...

关键字: 区块链 OS 开源 联盟链

进入神经发育和神经退行性研究领域 德国海德堡2023年9月6日 /美通社/ -- 欧健生物医疗集团(European Wellness Biomedical Group,以...

关键字: 新唐 AN AD OS
关闭
关闭