第三讲-CCS下基于NDK的应用开发流程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于BeagleBoard嵌入式处理器的系统开发基于NDK的应用开发流程2012/11/16美国德州仪器1基于BeagleBoard嵌入式处理器的系统开发主要内容我们将了解到:基于NDK的应用设计NDK的结构栈初始化的主要过程应用实例中各模块的设计思路网络通信的测试2012/11/16美国德州仪器2基于BeagleBoard嵌入式处理器的系统开发NDKTMS320C6000NDK(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

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功