您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 第三讲-CCS下基于NDK的应用开发流程
基于BeagleBoard嵌入式处理器的系统开发基于NDK的应用开发流程2012/11/16美国德州仪器1基于BeagleBoard嵌入式处理器的系统开发主要内容我们将了解到:基于NDK的应用设计NDK的结构栈初始化的主要过程应用实例中各模块的设计思路网络通信的测试2012/11/16美国德州仪器2基于BeagleBoard嵌入式处理器的系统开发NDKTMS320C6000NDK(NetworkDevelopmentKit):应用于DSP/BIOS实时操作系统(RTOS)顶层的网络栈。NDK用于加速其DSP的网络化进程,可用于测试TITCP/IP协议栈的功能和性能,并且满足各种不同网络应用对网络连接的需求。NDK仅用200-250K的程序空间和95K的数据空间即可支持常规的TCP/IP服务,包括应用层的TELNET、DHCP和HTTP等协议。因此,NDK很适合目前的嵌入式系统硬件环境,是实现DSP网络开发的重要支撑工具。2012/11/16美国德州仪器3基于BeagleBoard嵌入式处理器的系统开发主要工作以NDK为基础的开发中,主要完成的工作是:通过DSP/BIOS的API调用NETCTRL任务线程。该线程不是真正的网络任务线程,它以初始化线程的方式出现,是TCP/IP协议栈的事件调度线程。调用初始化函数NC_SystemOpen(),该函数完成对协议栈及其所需内存的初始化。创建系统配置,该系统配置用于对协议栈的控制和管理,可用CfgNew()和CfgLoad()函数操作。调用函数NC_NewStart()启动网络。2012/11/16美国德州仪器4基于BeagleBoard嵌入式处理器的系统开发NDK的结构NDK的设计目的:提供一个完整的TCP/IP功能环境。由五个模块组成,分别是:硬件抽象库(hal.lib)、网络控制库(netctrl.lib)、网络工具库(nettool.lib)、操作系统库(os.lib)和协议栈库(stack.lib)。2012/11/16美国德州仪器5基于BeagleBoard嵌入式处理器的系统开发硬件抽象库硬件抽象库HAL将具体的底层硬件抽象为一个硬件抽象层与NDK相隔离,为NDK提供一组编程接口,这一层还提供了以太网控制器的底层驱动。包含硬件外设到NDK的接口,例如,Timer、LED指示灯、以太网设备和串口等。2012/11/16美国德州仪器6基于BeagleBoard嵌入式处理器的系统开发网络工具库NETTOOL库中包含了NDK提供的所有基于网络服务的套接字,以及一些用于网络应用程序开发的工具。在网络工具库中应用最频繁的组件是基于配置系统的标签(tag)。配置系统几乎控制栈及其服务的每个方面。2012/11/16美国德州仪器7基于BeagleBoard嵌入式处理器的系统开发操作系统库操作系统库将DSP/BIOS操作系统的功能抽象为一个操作系统适配层与NDK隔离,为NDK提供了一组编程接口。其中包括线程管理、内存分配、数据包缓存管理、日志、临界区、cache一致性和中断管理等。2012/11/16美国德州仪器8基于BeagleBoard嵌入式处理器的系统开发协议栈库该库主要是TCP/IP网络栈,它包含从套阶层到以太网和PPP层的所有内容。TCP/IP协议栈是主要的TCP/IP网络功能库,该库构建在DSP/BIOS微操作系统之上,实现了从上层套接字到底层链路层的所有功能,而且可以很容易进行协议移植。该库直接编译应用于DSP/BIOSOS,不需要从一个平台移植到另一个平台。该库已经添加支持NIMU(NetworkInterfaceManagementUnit)、VLANs、IPv6等。2012/11/16美国德州仪器9基于BeagleBoard嵌入式处理器的系统开发网络控制库网络控制库NETCTRL是协议栈配置、初始化和事件调度的核心,它控制TCP/IP与外部的交互。功能:负责NDK的初始化和底层设备驱动通过配置服务回调函数启动和维护配置向底层设备驱动提供接口,同时调度驱动事件在退出时,卸载系统配置,清理驱动2012/11/16美国德州仪器10基于BeagleBoard嵌入式处理器的系统开发栈初始化的基本过程1.用初始化函数对操作系统环境进行初始化:NC_SystemOpen(),它的两个参数Priority和OpMode分别决定调度的优先级和调度器何时开始执行2.创建一个新的配置:CfgNew(),一旦创建了配置句柄,就可以将配置信息装载到句柄中,既可以整体装载,也可以采用一次一个条目的形式进行装载2012/11/16美国德州仪器11基于BeagleBoard嵌入式处理器的系统开发栈初始化的基本过程3.通过配置函数API的调用构建新配置或加载一个原来存在的配置:CfgLoad()/CfgAddEntry(两者的区别在于整体装载,还是逐一进行装载),装载的参数包括:网络主机名IP地址和子网掩码默认路由的IP地址需要执行的服务(例如:DHCP、DNS和HTTP)命名服务器的IP地址协议栈的属性(例如:IP路由、套接字缓存大小等)2012/11/16美国德州仪器12基于BeagleBoard嵌入式处理器的系统开发栈初始化的基本过程4.启动带有配置的堆栈NC_NetStart(),该函数有四个参数:配置句柄、指向开始函数的指针、指向结束函数的指针和指向IP地址事件的函数开始函数和结束函数只被调用一次。开始函数在初始化结束后准备执行网络应用程序时调用IP地址事件函数允许被多次调用NC_NetStart()函数运行至系统关闭时才返回2012/11/16美国德州仪器13基于BeagleBoard嵌入式处理器的系统开发栈初始化的基本过程5.当NC_NetStart()返回且会话结束后,调用CfgFree()释放配置句柄6.当所有资源释放后,调用NC_SystemClose()完成系统关闭操作2012/11/16美国德州仪器14基于BeagleBoard嵌入式处理器的系统开发NDK实现流程图2012/11/16美国德州仪器151.NC_SystemOpen():操作系统环境进行初始化;2.CfgNew():创建一个新的配置,该系统配置可以用来对协议栈进行控制和管理;3.调用CfgLoad(),构建一个新的配置或加载一个原来已经存在的配置;4.执行初始化函数NC_NetStart(),产生一个新的线程,即实现网络要求的任务线程;5.正常工作情况下,网络不会关闭;当在某点调用NC_NetStop()函数时,表明通过NC_NetStart()函数创建的线程停止调用用户回调函数;6.当NC_NetStart()函数成功返回并且当前任务执行完成时,调用CfgFree()函数释放配置句柄;7.所有资源被释放后,调用NC_SystemCLose()函数关闭系统。基于BeagleBoard嵌入式处理器的系统开发NDK开发实例说明本例使用SEED-DEC6437开发板。它是一款专为各种视频和网络应用而开发的、拥有10/100M以太网接口的独立模板。2012/11/16美国德州仪器16基于BeagleBoard嵌入式处理器的系统开发基于TI6437平台的网络通信程序运行图,右部分是系统初始化过程2012/11/16美国德州仪器17基于BeagleBoard嵌入式处理器的系统开发DSP/BIOS配置文件在DSP/BIOS执行过程中,对于main之前执行的部分,除了系统的初始化,还需要执行DSP/BIOS的配置文件。在配置文件中,完成了DSP/BIOS指定寄存器的设置、PLL时钟的设置、PRD时钟的设置、时钟频率的设置和用户启动函数的设置。2012/11/16美国德州仪器18基于BeagleBoard嵌入式处理器的系统开发DSP/BIOS配置文件部分内容bios.DDR2.len=0x08000000;bios.DDR2.createHeap=true;bios.DDR2.heapSize=0x00020000;bios.setMemDataHeapSections(prog,prog.get(DDR2));bios.GBL.CLKOUT=594.0000;bios.GBL.CALLUSERINITFXN=1;bios.GBL.USERINITFXN=prog.extern(dm6437_init);//Configuretimerbios.CLK.TIMERSELECT=Timer0;bios.CLK.RESETTIMER=true;2012/11/16美国德州仪器19基于BeagleBoard嵌入式处理器的系统开发库文件的修改在程序执行时,需要调用DM6437的初始化函数,因此工程需要包括evmdm6437bsl.lib和hal_eth_dm64lc.lib这两个与DM6437有关的库文件。编译运行时,程序正常,但是网络不通,此时会发现芯片9161A上的寄存器值为0。(在SEED-DEC6437系统中,采用DAVICOM公司的DM9161A作为10/100Base-TX以太网收发器,DM9161A的MII接口与TMS320DM6437的MII接口对接)这两个库文件针对TI的TMS320DM6437开发板,而本实验使用的是SEED-DEC6437开发板,虽然核心芯片使用的也是DM6437,但是它在底层的处理上可能会与DM6437芯片有一点不同,因此需要修改库文件。2012/11/16美国德州仪器20基于BeagleBoard嵌入式处理器的系统开发库文件的修改在DM6437中,芯片的EMAC/MDIO模式通过地址0x2寻址到PHY芯片;而在SEED-DEC6437中,芯片的EMAC/MDIO模块是通过地址0x8000(即15号)寻址到PHY芯片的,所以,需要通过修改上面两个库文件中寻找PHY的地址,使得这两个库可以适用于SEED-DEC6437芯片。在hal_eth_dm64lc.lib库文件中,定义了一个宏PHY_MASK。芯片连接中一共有16个PHY地址(0~15),宏PHY_MASK通过与任何一个16位的地址相与,而得到PHY芯片的编号。在DM6437中,定义PHY_MASK为0x2,表示程序要的是编号为1的芯片(编号从0开始),当它与任何16位的地址相与时,除了第1位,其它全部是0。对于SEED-DEC6437芯片,通过测试发现,需要的是编号为15的芯片,所以对于PHY_MASK,需要最高位置1,其它位全置0。2012/11/16美国德州仪器21基于BeagleBoard嵌入式处理器的系统开发库文件的修改#ifdefPHY_MASK//适用于DM6437的PHY_MASK值//#definePHY_MASK0x2//适用于SEED-DEC6437的PHY-MASK值#definePHY_MASK0x8000#endif2012/11/16美国德州仪器22基于BeagleBoard嵌入式处理器的系统开发DM6437的启动DSP/BIOS的配置文件中,指定了DM6437开发板的初始化函数例如,指定通过调用dm6437_init函数对DM6437开发板进行初始化bios.GBL.CLKOUT=594.0000;bios.GBL.CALLUSERINITFXN=1;bios.GBL.USERINITFXN=prog.extern(dm6437_init);2012/11/16美国德州仪器23基于BeagleBoard嵌入式处理器的系统开发该示例实现的功能利用NDK中的TCP/UDP协议栈实现下述功能:基于TCP/UDP的echo服务基于TCP的HTTP服务Telnet远程终端服务2012/11/16美国德州仪器24基于BeagleBoard嵌入式处理器的系统开发主模块在该模块中主要实现的功能:NDK的初始化和配置HTTP服务的指定TELNET服务的指定和配置网络相关参数的定义及设置DHCP
本文标题:第三讲-CCS下基于NDK的应用开发流程
链接地址:https://www.777doc.com/doc-5297783 .html