③修改内存布局文件,使configtool能够正确定位程序在系统存储器中的位置。eCos提供3种不同的运行方式,即ROM方式、RAM方式、ROMRAM方式。每种模式都有两个相应的布局文件,如RAM方式的mlt_arm_at91_eb55_ram.ldi和mlt_arm_at91_eb55_ram.h。*.ldi和常见的ARM开发环境ADS中scattered链接方式下的*.scf文件的作用类似,即用来对不同段分别指定不同的链接地址。在*.ldi中需要修改MEMORY和SECTIONS两部分。对于代码在RAM中运行的内核及应用程序,需要根据系统RAM的实际情况修改内存布局文件中相关参数的值。本系统具有lMB的RAM,但有一半用来存放测量数据,根据系统实际的硬件情况,其起始地址为0x02000000,大小为0x80000,所以这个内存块定义为ram:ORIGIN=0x02000000,LENGTH=0x80000。处理器内部集成了8KB SRAM,其起始地址为0,大小为0x2000,所以这个内存块定义为sram:ORIGIN=0x00000000,LENGTH=0x2000。这样系统的MEMO-RY部分就由名为ram和sram的两个内存块构成。系统比较重要的两处SECTIONS部分的修改为SECTION_fixd_vectors(sram,0x20,LMA_EQ_VMA)和SEC-TION_rom_vectots(ram,0x02008000,LMA_EQ_VMA),第一处表示fixed_vectors段分配在从0x20开始的sram中,且LMA_EQ_VMA指定其加载地址等于虚拟地址。由于RedBoot运行时需要占用从0x02000000开始的一定空间的RAM,所以第二处使程序代码从0x02008000开始的ram中运行。*.1di文件修改完毕后需要相应地修改*.h文件中的宏,如#define CYGMEM_REGION_ram(0x02000000)。
④在组件仓库ecos.db中为以关键字target添加名为Flowr55的新目标平台。在这个目标平台中还必须用关键字packages包括ARM7体系结构层包和AT91M55800变体抽象层包,同时为了实现调试还必须包括串口驱动包和Flash驱动包及其上层驱动包。除了这些被包含的软件包外,根据不同的选择configtool还会为目标平台包掭加一些默认的包,如内核包、数学库包等。另外,还应加入一些对该平台的简单描述。
3.2 内核的配置
移植完成以后,一个最基本的目标平台就产生了。在configtool中可以看到Templatcs菜单的硬件平台列表中新增了Flow55目标平台模版,以default方式打开这个模版。各个软件包的CDL脚本中都给出了默认的配置值,有些值需要根据具体的应用要求重新配置。本系统一些重要的配置情况如下:
①由于系统线程数量较少(小于10),所以选择效率更高的位图调度器Bitmap scheduler,并将线程数numbersof priority levels限定为16,以提高任务切换的速度。当点击位图调度器的单选按钮时,configtool会检测到一个配置冲突。由于时间片轮转是默认使能的,而时间片轮转仅仅对应于多级队列调度器,所以出现配置冲突。Configtool会给出一个推荐的解决冲突的方法,即禁止时间片轮转,按照这个推荐的解决方法可以安全地解决这个冲突。这个地方可以充分体现出eCos强大的可配置性。
②由于配合RedBoot一起使用,所以内核配置为RAM启动方式。这样,系统上电后程序将由RedBoot复制到RAM中运行,以提高速度。
③系统的晶振频率为16 MHz,经PLL倍频后为32MHz,所以需将Clock speed配置为32000000;RTC是系统的时钟节拍发生器,本系统的时钟节拍时间选为20ms,所以也需要对RTC相关项进行配置。具体参数为Real-time clocknumerator配置为2000000000,Real-time clock denormnator配置为100,Real-time clock period配置为20000。
其余的配置选项使用默认的配置值即可。完成配置工作后,对内核进行编译可以产生内核库文件和链接脚本以及相关头文件。这些生成的文件再同应用程序一起编译、链接,生成最终的可执行映像文件。
3.3 基于eCos操作系统的应用软件的编写
eCos是一个单进程多线程的操作系统,多个线程在宏观上可以认为是并发运行的,而且各线程之间耦合低,便于软件的编写和维护。针对这一特点,本系统的软件结构如图4所示。

本系统主要有两种程序运行方式,分别称为方式A和方式B。方式A中,硬件中断产生后,相应的ISR(In-terrupt Service Routine)程序运行,由于ISR中是禁止中断的,所以在ISR中只进行最简单的操作,ISR退出后内核调用相应的DSR(Deferred Service Routime)。DSR中中断是使能的,所以可以进行一些稍复杂的处理,如简单的数据运算、内核调用(发送信号量和邮箱等)。在得到相应的信号量或消息邮箱后,相应的线程进入就绪态被内核调度运行。本系统中对键盘的处理就是基于这种方式——按键产生硬件中断、ISR执行,接着在DSR中进行相应的运算得到具体的键值后以消息邮箱的方式通知并唤醒键盘处理线程,键盘处理线程在完成任务后进入体眠直到再次有按键发生而被唤醒。方式B中,各线程只是周期性地被内核调度运行,如测量数据显示线程,在显示一次数据后调用延时函数进入休眠,直到延时完毕后再次进入就绪态被内核调用。
根据测控系统的实际情况,具体的线程编写如下:方式A为流量计算线程、温度测量线程、键盘处理线程、USB通信处理线程。方式B为测量数据显示和曲线绘制线程、流量控制线程、初始标定线程。
4 结论
经过实践,本系统运行稳定,实时性能良好。由于eCos的强大可配置性使得系统的软硬件可维护性强,在进行硬件改动或应用要求改动后可方便地进行升级。