微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于DSP/BIOS大空间网络型火灾探测系统设计

基于DSP/BIOS大空间网络型火灾探测系统设计

时间:07-29 来源:3721RD 点击:

3 系统软件实现

系统的主要任务是实现视频数据的采集、处理以及数据的网络收发。系统软件模型由两部分组成:驱动程序与应用程序。驱动程序直接控制底层物理器件的行为,是由提供给DSP/BIOS的若干个API函数组成。应用程序是在DSP/BIOS实时操作系统上,依据TI的RF5框架进行编写设计的。根据应用程序的各个功能模块,创建不同的任务线程实现整个系统软件的开发。RF5是德州仪器(TI)公司新近推出的DSP软件开发参考框架,以DSP/BIOS为基础,利用其中的数据处理单元和数据通信单元方便快捷的完成DSP系统软件的设计与开发。在DSP/BIOS中,任务的调度是通过HWI、SWI和TSK这3个模块实现,DSP/BIOS通过各模块优先级的不同完成对各任务线程的调度。

系统软件设计流程如图4所示。首先对DSP/BIOS模块进行静态配置,包括设置内、外部存储器的映射空间,创建多任务线程及所需堆栈,配置TI网络开发包NDK的启动环境,分配旗语、邮箱通信机制的存储位置及大小等。其中创建的多任务线程包括系统控制任务、视频输入任务、算法处理任务、图像JPEG压缩任务、网络初始化任务、串口通信任务。在应用程序进入DSE/BIOS线程调度器之前,处理器需要完成3个模块的初始化:(1)芯片板级间的初始化,包括CSL、RAM、Cache及EDMA的设置。(2)RF5模块的初始化,包括通道模块,SCOM模块及ICC模块。一个任务可以创建多个通道,每个通道可以包含多个内核,每个内核只能包含一种标准算法。(3)视频捕获(FVID)通道的建立与启动。

应用程序的Main()函数在完成系统初始化任务后退出,程序控制权正式交给DSP/BIOS任务线程调度器,根据优先级和RF5中的任务切换准则调度各任务线程。为保证网络传输的实时性,应将网络初始化任务的优先级配置成高于其他任务的优先级。处于同一优先级的任务之间利用同步通信机制SCOM模块进行信息传递,同时基于RF5的SCOM通信机制内部,制定了任务调用及切换规则,这样就避免了多个任务同时访问一个队列指针的情况。

3.1 视频输入任务

系统主线程已经创建且打开了视频捕获通道,并初始化了FVID对象。该任务首先启动SCOM消息队列,从捕获通道的缓冲区获取一帧图片,然后利用SCOM队列指针将视频数据传输至算法处理任务。此时,该任务处于阻塞状态,等待算法处理任务接收完成的返回消息,系统切换至算法处理任务,直到接收到返回消息,视频输入任务才处于等待状态,等待下一个循环重新采集视频。每一个任务都不断地处于等待消息与处理数据的状态中。

3.2 算法处理任务

该任务分别创建了火焰检测通道对象FIRE_CHAN_Obj与烟雾检测通道对象SMOCK_CHAN_Obj。每一个核对像都要在被初始化以后再调用注册函数CHAN_regCell(),通过这种方式可以将每一个核对象注册到相应的任务通道中。最后,线程调用函数CHAN_open()为每个指定的通道(chanNum)传递核对像,这样通道通过调用核对像来执行检测算法。烟雾检测算法流程如图5所示。

当算法处理任务接收到SCOM队列送来的视频数据后,分别送入火焰与烟雾两个检测通道。如果发现火焰或者烟雾疑似区域,两个通道会分别将区域坐标返回,利用返回的坐标对疑似区域进行定位跟踪,然后将跟踪结果送入JPEG图像压缩任务;如果两个通道都没有返回疑似区域坐标,则直接将原始视频数据送至下一个任务。烟雾检测算法分为图像预处理模块、图像分割模块、特征提取模块、目标识别及坐标提取模块,这4个算法模块分别对应4个核对像。核与核以及核与通道之间采用ICC模块进行通信,任务通道通过调用这些核对象来完成对整个烟雾检测算法的执行过程。烟雾一般分为白烟、黄烟和黑烟,难以从颜色或形状上对其进行检测,所以应该对烟雾的半透明性、整体移动性、边界闪烁性、主方向性和扩散性等方面进行分析。

3.3 网络传输任务

TI公司结合其C6000系列芯片推出的NDK(Network Developer's Kit)网络开发包采用紧凑的设计方法,实现了利用较少的资源消耗来支持TCP/IP协议栈,在实际应用中,NDK仅用约200 kB的程序空间和95 kB数据空间即可支持常规的TCP/IP服务,其中包括应用层的telnet、DHCP、HTTP等。同时NDK还集成了类似于网卡的物理层收发器的驱动程序。

NDK开发包包括Network Tools、OS Adaptation Layer、TCP/IP Stack Library、Hardware Adaptation Layer、Network Control这5个模块,要开发基于NDK的网络应用程序,必须利用以上5个模块构建一个完整的TCP/IP功能环境。首先静态创建网络初始化任务,在该任务中构建TCP/IP协议栈的过程是:(1)在调用协议栈其他API函数之前,必须先调用函数NC_SystemOpen(),用它来初始化协议栈及系统环境,它的两个参数Priority和OpMode分别决定了调度任务的优先级和调度器何时开始执行。(2)调用函数CfgNew()创建新的协议栈配置,返回配置句柄hCfg,对该句柄添加网络层与应用层的相关配置。(3)调用函数NC_NetStart()来启动网络事件调度器。真正的网络收发任务是由NetworkRx和NetworkTx完成,这两个任务就是在指针NetworkIPAddr所指的函数中通过TaskCreate动态创建的。在系统结束时还会调用函数CfgFree()与NC_SystemClose()分别用来释放配置内存及关闭TCP/IP协议栈。
设计在NetworkRx、NetworkTx任务中开发的是基于Client/Server与Browser/Server两种模式的应用程序。在Client/Server模式中,DM642作为服务器,PC作为客户端,由于该系统对实时性的要求较高且允许在一定范围内的丢包及出错现象发生,所以NetworkTx在传输层采用面向无连接的UDP协议。NetworkRx接收的是PC对DM642的控制命令,即服务器、客户端双方定义好的少数数据结构,所以NetworkRx在传输层采用了面向连接的TCP协议。该模式下的应用程序是采用Socket网络编程的方式进行开发的,以太网在链路层的最大传输单元为1500Byte,所以必须对每帧视频在IP层进行分片操作。同时需要在上位机上开发基于VC++6.0的客户端程序,为实现视频数据高质量的显示效果,系统采用微软公司推出的流媒体处理开发包Directshow对视频数据进行译码显示。

在Browser/Server模式中,利用DM642的嵌入式文件系统创建Web服务器,便于将火灾现场的视频信息以网页的形式送入局域网,再经过路由器的端口映射传至因特网。例如,在局域网内部设置Web服务器的IP地址为192.168.0.11,在地址栏输入该地址,Web服务器访问结果如图6所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top