摘要:本文结合tms320c6211的硬件特点,介绍了基于dsp/bios和ndk的嵌入式网络操作系统设计方案。
关键词:dsp/bios,嵌入式系统,网络操作系统,dsp
概述
随着嵌入式应用的普及,嵌入式操作系统的问题日益引人关注。由于dsp代表了一类重要的嵌入式应用,以dsp为核心的嵌入式操作系统也正在成为人们研究的热点。为了对自己的dsp产品提供软件支持,ti公司发行了dsp/bios程序包。但是关于dsp/bios的定位却存在分歧。一方面,在ti的正式资料和文档中均回避把dsp/bios称为实时操作系统,另一方面,为了满足在dsp应用中对操作系统环境的迫切需求,ti及其产品的用户均将dsp/bios视为一个“简单的”实时操作系统。
事实上dsp/bios并不是真正的实时操作系统,而只是用于帮助程序员开发实时操作系统的软件包。而且,它不包含网络功能。所以,在用dsp/bios设计网络操作系统时,需要从两方面入手:一,利用dsp/bios提供的资源进行裁减和整合;二,补充dsp/bios中未能提供的网络功能。
1 dsp/bios的构成
一般认为dsp/bios由三部分内容组成,即
1)dsp/bios实时库和api
2)dsp/bios配置工具
3)dsp/bios插件
其中配置工具用于提供可视化的编程环境,而插件用于支持调试过程。所以,实时库和api才是dsp/bios的核心。dsp/bios实时库可以为最终生成的嵌入式实时操作系统提供运行时的基本服务,包括线程调度,中断管理等功能。dsp/bios api由十几个模块组成,如dev设备驱动接口,mem存贮段管理器等。程序员通过调用api来使用dsp/bios。
dsp/bios api由十几个模块组成,每个模块又由相关的数据结构和函数组成。在有关dsp/bios的资料中混杂使用了模块(module)、对象(object)等术语,不过,dsp/bios与面向对象技术并没有直接的关联。所谓模块,是指一个逻辑上的概念,表示一组数据结构和以此为基础的一组函数。对象则是特指按模块中的数据结构所创建的变量。
如果程序员定义了某个对象,他将可以使用模块中的相应函数,并用这些函数代码来组成自己的嵌入式操作系统。
在程序员开发自己的嵌入式操作系统时,一般不会同时需要dsp/bios的全部模块。所以,dsp/bios中的内容是按需使用的。但是,开发平台会自动选择部分核心模块,并为它们创建对象。例如,开发平台会自动选择任务管理器( multi-task manager)模块,以支持空闲处理功能:tsk_idle (),即:
tsk_obj tsk_idle (ifxn, iarg0, iarg1, iarg2, iarg3, iarg4, iarg5, iarg6, iarg7, iautostk, imanstk, istksz, istkseg, ipri, ienv, iexitflag, iusetskname, istatreg)
由dsp/bios实时库生成的代码和程序员新编制的代码链接到一起就构成了dsp的嵌入式应用系统。这些代码之间的执行关系由boot.c文件规定,该文件的缺省执行顺序为:
一,初始化dsp:由复位中断向量将程序引导到c_int00,开始初始化寄存器等硬件资源;二,初始化dsp/bios模块:通过调用bios_init完成,bios_init由开发平台中的配置工具自动生成;三,初始化用户应用环境:通过调用main例程实现;四,启动dsp/bios:由bios_start启动由dsp/bios实时库中的相关例程,bios_start也是由开发平台中的配置工具自动生成的。但是,通过调整boot.c可以改变系统的执行顺序。
2 ndk开发环境
为了加速其高档dsp的网络化进程,ti结合其c6000系列推出了tcp/ip ndk (network developer’s kit)。该开发包采用紧凑的设计方法,实现了用较少的资源耗费支持tcp/ip。从实用效果看,ndk仅用200-250k程序空间和95k数据空间即可支持常规的tcp/ip服务,包括应用层的telnet,dhcp,http等。所以,ndk很适合目前嵌入式系统的硬件环境,是实现dsp上网的重要支撑工具。
与常规的tcp/ip应用环境不同,为了最大限度地减少资源消耗,ti为其ndk采用了许多特殊技巧,例如:低层驱动程序与协议栈之间通过指针传递数据,不对包进行复制考贝。因为在嵌入式系统中,低层驱动程序和应用程序一样均需要开发者自行设计。也就是说,在