Cortex-M3平台上lwIP+AJAX的Web嵌入式应用
端子和几个电阻电容即可,电路如图4所示。 系统软件设计 整个系统软件基于FreeRTOS实时操作系统开发,TCP/IP协议栈采用精简高效的lwIP进行实现。系统软件框架如图5所示。 FreeRTOS系统配置 FreeRTOS预先固化在LM3S9D96的ROM中,提供了一种独特的方式快速开发可靠的高度集成的嵌入式系统。本系统中FreeRTOS运行参数须配置如下: static xPORT_INIT_PARAMETERS g_sFreeRTOSPortInit ={ 系统引导程序startup_ccs.c中,须配置NmiSR和FaultISR处理函数。 #pragma DATA_SECTION(g_pfnVectors, ".intvecs") 与FreeRTOS相关的三个处理函数入口地址须在\SafeRTOS\ SafeRTOS_API.h中指定: #define vFreeRTOS_PendSV_Handler_Address ( 0x02000fdd ) 此外,FreeeRTOS需要占用0x20C bytes RAM,可选择0x20000000—0x2000020C RAM区预留给内核kernel使用,在CCS工程配置文件xx.cmd文件中做如下配置: #define APP_BASE 0x00000000 (1)在/ports目录下,增加对stellaris LM3S9D96的MAC层驱动实现 stellarisif.h/stellarisif.c:实现与lwIP网络驱动接口,此代码从lwIP的“ethernetif.c”衍射出来,重要函数有stellarisif_init(),stellarisif_receive(),stellarisif_output(),stellarisif_interrupt(),及stellarisif_transmit(); sys_arch.h/sys_arch.c:实现sys_init(),sys_arch_thread(),sys_arch_timeouts及信号量,邮箱等功能。 perf.h/perf.c:主要实现perf_init()函数。 cc.h:一些与CPU或编译器相关的定义,如数据长度、字的高低位顺序等。 (2)在/apps增加lwIP抽象应用层API RAW API进行TCP/IP编程,为提高程序可读性及设计方便,对lwIP TCP/IP库函数进行抽象、封装,提供应用层方便简捷的API,此部分包括以下文件中实现: lwiplib.h/lwiplib.c:包括核心封装有:lwIPInit(),lwIPPrivateInit(),lwIPInterruptTask(),lwIPEthernetIntHandler(),lwIPPrivateNetworkConfigChange()。 以上二步的源代码,均可在TI网站上下载到示例源代码文件。 AJAX动态网页设计 基于AJAX的动态网页设计可分成前台、后台二部分来实现。 前台包括(1)AJAX脚本设计,完整代码见附件ajax.js;(2)HTML网页设计,可借助专业的网页开发工具如Dreamware8.0进行设计,完整代码见附件index.htm。代码关键地方均给出了注释,index.htm网页通过调用ajax.js中的function ajax(url)方法创建一个ajax对象PlantRT.xml,并进行必要的初始化:使用GET方式,关联事件为function updateRTStatus(xml,e),页面刷新周期5s。在function updateRTStatus(xml,e)中,通过调用ajax.js中的getXMLValue(xmlData, field)方法获得服务器的响应值。主页面Index网页效果如图5所示。 后台则包括服务器httpd程序设计,通过httpd响应前台index.htm网页请求。具体在Lwip/apps/httpserver_raw/fs.c中的struct fs_file *fs_open(char *name)函数中,增加对/PlantRT.xml请求的响应,详细软件可参考附件III服务器代码段部分。
80000000, // System clock rate.
1000/portTICK_RATE_MS, // Scheduler tick rate.
FreeRTOSTaskDeleteHook, // Task delete hook.
FreeRTOSErrorHook, // Error hook.
FreeRTOSIdleHook, // Idle hook.
0, // System stack location.
0, // System stack size.
0 // Vector table base.
};
void (* const g_pfnVectors[])(void) =
{
(void (*)(void))((unsigned long)&__STACK_TOP), // The initial stack pointer
ResetISR, // The reset handler
NmiSR, // The NMI handler
FaultISR, // The hard fault handler
IntDefaultHandler, // The MPU fault handler
……..
}
#define vFreeRTOS_SVC_Handler_Address ( 0x02000f45 )
#define vFreeRTOS_SysTick_Handler_Address ( 0x02001175 )
#define RAM_BASE 0x20000210
MEMORY
{
FLASH (RX) : origin =APP_BASE, length =0x00080000 //Application stored in and executes from //internal flash
SRAM (RWX) : origin =RAM_BASE, length =0x00017df0 //Application uses internal RAM for data
}
lwIP移植
lwIP移植涉及的主要过程如下:
将制作好的网页index.htm及AJAX代码ajax.js,样式mchp.css及logo图片sjtulogo.png等网页文件,通过TI提供的makefsfile.exe(此软件可在TI网站上下载)软件转换成webhtml.h文件,将此webhtml.h添加到整个软件工程中并编译整个工作软件,编译完成后下载到LM3S9D96中,即可实现嵌入式平台下的AJAX动态网页刷新。若要实现通过手机浏览index.htm的支持,只需要在设计样式mchp.css时考虑网页的缩放比例即可。
- 基于CMSIS标准的Cortex-M3的应用软件开发(06-20)
- 基于μC/OS-II和TCP/IP协议的多串口服务器(08-23)
- μC/OS-II就绪表算法在Cortex-M3架构上的适配设计(01-22)
- STM32中断与嵌套NVIC快速入门(01-25)
- 基于STM32的电池管理系统触摸屏设计方案(01-25)
- 发挥ARM Cortex-M3和M4微控制器最大作用的要诀(01-21)