对于采集卡主芯片的选择,由于需要支持TCP/IP网络,需要支持IIC接口,同时还可以支持内存控制以及Flash控制器,因此选择了三星公司的ARM芯片S3C4510B,该芯片采用ARM7TDI内核,32位RISC架构。对于嵌入式操作系统的选择,uClinux具有免费、开源、可裁减性好、对TCP/IP网络协议支持的较好并且稳定性高等优点,因此选择uClinux作为嵌入式操作系统。同时由于IIC总线技术有连接简单、数据传输速率高、高可靠性等优点,所以采集卡的主芯片和采集单片机使用IIC总线相连。
2.2 采集卡(多路器)的功能
采集卡的主要作用,一方面是从与每组节点机相连的采集单片机中通过IIC总线读取节点机的信息,另一方面监听自身的事先约定的端口,当有连接请求并收到发送数据的命令后送出从采集卡中读取的数据。硬件上已经有了IIC和网络接口,软件方面,可以从网上资源中获取S3C4510B芯片的IIC控制器和网络驱动程序,然后集成到uClinux嵌入式操作系统中。此外还需要一段采集程序实现系统的主要功能。
采集程序根据系统需要的功能,分为两个部分,一部分定时从IIC总线读取数据,另一部分监听某个约定端口、收取命令并发送数据。这两个部分分别由两个线程来执行。两个线程共享同一块数据缓冲区。线程一通过IIC总线读取采集卡中的数据,写入缓冲区中,线程二一方面读取缓冲区中的数据发送,另一方面在发送完毕后,把已经发送了的缓冲区填写为无效数据。由于数据缓冲区属于临界区域,这两个线程在使用缓冲区的时候要严格互斥。
程序的主体结构如下:
read_iic(){ //线程一运行的函数
打开iic设备;
while(1) {
读取iic设备的数据;
写入全局缓冲区中;
休眠一定的时间;
}
}
send_data() { //线程二运行的函数
绑定本地端口;
监听本地端口;
while(1) {
收到命令;
发送全局缓冲区中的数据;
填写无效数据;
}
}
main() {
初始化全局缓冲区;
创建线程一;
创建线程二;
}
2.3 运行情况以及发展方向
在实际运行1周后,曙光4000A大规模集群监控系统运行状况良好,其中采集卡功能良好,在规定的延迟内数据传输流畅,没有出现数据漏传、丢失等现象,说明监控系统中的嵌入式系统运行很稳定,发挥了预期的作用。
在将来的监控系统升级工作中,可以考虑在这个采集卡中加入嵌入式数据库技术,把收到的数据存储起来,并且和uClinux提供的Web服务结合,在Web服务中显示监控系统的数据,这样就可以在任何一台机器上以浏览网页的形式监控整个集群,从而节省了监控节点的开销,提高了采集卡的利用率。
三:结束语
嵌入式系统体积小、灵活性高,已经被应用到各行各业,例如汽车、家电、航空、精密仪器等等。本文介绍的嵌入式系统在曙光4000A大规模机群监控系统中的应用,结合了ARM技术、IIC总线技术,采用了uClinux嵌入式操作系统,体积小、可扩展性好、成本低,数据流向清晰明确,现在已经作为配套产品提供给用户。