版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
我在这里把常见的GPRS模块分成3种:(1) GPRSDTU(GPRS数传单元,常称GPRS透传模块)(2) GPRS/GSMmodem(这是一种纯的GPRS/GSM调制解调器,常称为GPRS猫)⑶包含tcp/ip协议栈的GPRSmodem(其将GPRS/GSMmodem和tcpip协议栈圭寸装在一起,内部有卬u,flash,ram,控制单元等硬件,和dtu功能类似)GPRSDTU的理解及应用GPRSDTU内部封装了完善的TCP/IP等协议栈,可为无线传输传输提供透明的TCP/IP通道。主要应用于工业领域,而GPRSmodem通常要完成类似的功能必须借助于PC机的软件和硬件资源,如CPU、Memory和TCP/IP协议栈等,所以我们经常可以看到PC接一个无线的Modem来连接到外部的数据网。采用了GPRS的微控制器系统可以实现无线数传输领域的复杂应用,在远程抄表、工业控制、遥感\测、智能交通领域都得到了广泛的应用,下面是一个典型的应用:在使用了RFID技术的公交领域,非接触卡得到了普便的应用,乘客的刷卡交易数据通常都存储在车载的读卡机具中,如果采用特定设备依次对每辆车的数据提取是一个非常繁杂的工作,而采用无线传输方式的优势显然是不言而喻的,通过车载无线设备,可以以灵活的方式将乘客的交易数据传输到数据中心进行统一处理,此外还可以实现远程的公交调度控制以及公交车电子站牌GPRS信息发布的发布等等。当然,采用GPRS进行无线传输仍然存在一些问题需要更好地解决,比如传输的可靠性问题、传输速率等,目前GPRS的理论带宽是171.2Kbps,实际应用带宽在40Kbps左右。GPRS无线设备连接到外部数据网两种方法的比较!我们使用GPRS无线设备做数传的时候,在连接到外部数据网时通常有两种方法:(I).拨号上网:常见的如拨ATD*99***#(II).指定Server的IP地址、Port端口号,使用特定的AT指令来连接到外部的数据网,也即internet例如:Simcom的GPRS模块SIM300C采用的指令为:AT+CIPSTART="TCP","211.247.26.252","3030",即可连接具有公网IP地址为211.247.26.252,TCP端口号为3030的Server。两种方式各有特点:拨号上网的方式采用的是外部的协议栈,需要用户自己来实现PPP、TCP、UDP等协议栈,而第二种方式则采用模块自带的协议栈,用户的底层应用程序不需要实现上述较为复杂的协议栈。所以,早期的GPRS无线模块多不带协议栈,常用第一种方式做数传。而自身带有通讯协议栈的GPRS模块多采用第二种方式。当然,二者各有优缺点,采用第一种方式,实现起来较为复杂,但是使用灵活,用户的数据封装比较灵活,可以适应用户的特殊应用。采用第二种方式,由于自身带有完备的通讯协议栈,所以用户实现起来较为简单,但成本较高,数据的封装格式也较为固定。GPRSDTU和GPRSMODEM有什么区别?GPRSDTU全称GPRS数据终端单元,在软件设计上,它封装了协议栈内容并且具有嵌入式操作系统,硬件上可看作是嵌入式PC加无线接入部分的结合,用于串口数据可靠传输;GPRSMODEM是接入GPRS分组网络的一个物理通道,它本身不具有操作系统,必须依附于计算机(在功能类似与有线MODEM),在计算机操作系统之上才能进行PPP拨号连接,通常是与PC结合使用,实现拨号上网。从某种角度来说,GPRSDTU是嵌入式PC与GPRSMODEM的结合。GPRSDTU的四个核心功能:1) 内部集成TCP/IP协议栈GPRSDTU内部封装了PPP拨号协议以及TCP/IP协议栈并且具有嵌入式操作系统,从硬件上,它可看作是嵌入式PC与无线GPRSMODEM的结合;它具备GPRS拨号上网以及TCP/IP数据通信的功能。2) 提供串口数据双向转换功能GPRSDTU提供了串行通信接口,包括RS232,RS485,RS422等都属于常用的串行通信方式,而且GPRSDTU在设计上大都将串口数据设计成“透明转换”的方式,也就是说GPRSDTU可以将串口上的原始数据转换成TCP/IP数据包进行传送,而不需要改变原有的数据通信内容。因此,GPRSDTU可以和各种使用串口通信的用户设备进行连接,而且不需要对用户设备作改动。3) 支持自动心跳,保持永久在线GPRS通信网络的优点之一就是支持GPRS终端设备永久在线,因此典型的GPRSDTU在设计上都支持永久在线功能,这就要求DTU包含了上电自动拨号、采用心跳包保持永久在线(当长时间没有数据通信时,移动网关将断开DTU与中心的连接,心跳包就是DTU与数据中心在连接被断开之前发送一个小数据包,以保持连接不被断开)、支持断线自动重连、自动重拨号等特点。4) 支持参数配置,永久保存GPRSDTU作为一种通信设备,其应用场合十分广泛。在不同的应用中,数据中心的IP地址及端口号,串口的波特率等都是不同的。因此,GPRSDTU都应支持参数配置,并且将配置好的参数保存内部的永久存储器件内(一般为FLASH或EEPROM等)。一旦上电,就自动按照设置好的参数进行工作。GPRSDTU的扩展功能:较为专业的GPRSDTU还提供一些扩展功能,主要包括:支持数据中心域名解析、支持远程参数配置/远程固件升级、支持远程短信/电话唤醒、支持本地串口固件升级、提供短信通道、提供DTU在线/离线电平指示等。这些扩展功能可以增强系统的可靠性,以及方便用户的使用及维护。在工作方式上,GPRSDTU于GPRSMODEM的最大区别就是GPRSDTU内部CPU在主动进行控制拨号和处理TCP/IP协议包.而GPRSMODEM则是被动的,需要外部设备来进行拨号和进行TCP/IP协议包处理.使用时该如何选择?如果是要求数据长期可靠传输,那么应当采用GPRSDTU,通过GPRS网络平台,实现与监控中心端的数据通信。即便现场是计算机,可以设置拨号网络,但是在无人值守的情况要进行自动传输,也建议使用GPRSDTU,因为普通计算机的操作系统(如Windows)的拨号网络主要是针对普通用户的上网业务(如浏览网页,收发Email等)设计的,而不是针对数据可靠收发应用来设计的.例如,对于断线重拨的处理上,Windows操作系统最多是提示网络断线,而并不进行自动重拨.而对于无人值守的应用领域,自动重拨应该是最基本的要求.而专业的GPRSDTU在这些方面处理都是非常完善的.因此,在需要数据长期可靠传输的领域,都应选择使用GPRSDTU.如果只是用于无线上网,则可以选择GPRSMODEM.下面来说说GPRSDTU和带tcpip协议栈的gprsmodem的区别:GPRSDTU上面已经说的很清楚了,带tcpip协议栈的gprsmodem与它的差别在于,它在操作上还和普通的gprsmodem很相似,即:所有对模块的操作只能用AT命令,尤其是发送和接收数据都要通过专用的AT命令。(注:这一点很不方便,你需要在自己的客户端编写读写串口设备的程序,读写的实质就是想串口读数据和写如AT命令,不能发挥带操作系统嵌入式系统的作用,而且有的时候会有副作用,本文最后说明。所以,建议如果嵌入式系统采用的cpu是单片机的话,因为单片机资源有限建议使用gprsdtu或者带协议栈的gprsmodem,你要用纯gprsmodem的话,将非常麻烦,你自己需要实现tcpip协议栈,难度很大。如果是使用像嵌入式linux操作系统的嵌入式无线上网,可以买个纯的gprs/gsmMODEM,成本也低)对于带tcpip协议栈的gprsmodem它们都有自己的一套专用的tcpipat命令,所有使用它要看对应的at命令手册,在使用前,需要在minicom等类似串口操作工具上测试,模块的好坏。下面是我的带tcpip协议栈的gprsmodem(huaweigtm900B)在minicom下的测试记录:AT+CGDCONT=1,"IP","CMNET"OKAT+CSQ+CSQ:11,0上面的测试记录记录了两种10模式(黑体部分为设置10模式的参数),第二种方式(等号后第一参数为1):模块对输入输出数据进行转换(ascii和十六进制数进行转化,比如:想发送Ox1A到对方,需要把Ox1A转成2字节:0x31,0x41,也就是可显字符''和'A'。发送的时候,发送的为字符串:”A”,即:AT%IPSEND=”1A”当模块收到用户这样的输入,在内部会把数据还原成有效数据0x1A。(注:模块中字符之间的转化是自动的,代码固化在里面)同样当等号后第一参数为1的时候,模块收到TCP/UDP连接方的数据,比如0x1A,会转换成相应的字符串"1A"输出。),这个时候用户也要对输入和输出数据进行相应转换(用户在自己客户端编程实现字符之间的转换,上面一大堆16进制数就没有转换的结果)。第一种方式(等号后第一参数为0),不需要对输入的数据进行编码,但这个时候用户一定要确保输入的数据为可显字符且不能为分号(;)、引号("),推荐使用模式1。上面显示的telnet南京大学bbs后显示的结果,能正确显示Ascii的字符。注意:HUAWEIGTM900B可以用我的《GPRS模块在Linux平台上ppp拨号上网总结与心得》中第1和3种方式拨号成功,用第2种方式,可能由于带tcpip协议栈的副作用,使得一直出现"LCP:timeoutsendingConfig-Requests"LCP配置报文发送超时而失败,不能成功拨号ppp协议PPP成就了3件事:(1) 明确地划分出一帧的尾部和下一帧的头部的成帧方式。这种帧格式也处理错误检测工作。(2) 当线路不再需要时,跳出这些线路,测试它们,商议选择,并仔细地再次释放链路控制协议。这个协议被称为链路控制协议LCP(LinkControlProtocol)。(3) 用独立于所使用的网络层协议的方法来商议使用网络层的哪些选项;对于每个所支持的网络层来说,所选择的方法有不同的网络控制协议NCP(NetworkControlProtocol)oNCP在因特网中(TCP/IP协议)为IPCP。0标签:无标签uc/osII的临界态及任务状态一、uc/os怎样处理临界段代码临界段(criticalsection)Uc/os在处理临界段代码时必须先关中断,等处理完毕后再开中断进入和退出临界段宏指令为:OS_ENTER_CRITICAL();OS_EXIT_CRITICAL()在不同的处理器在OS_CPU.H文件中进行不同的定义OS_ENTER_CRITICAL();OS_EXIT_CRITICAL()可以用不同的方法实现,通过CRICITAL_METHOD可以选择具体那种方法CRITICAL_METHOD=1时,直接用处理器指令关中断和开中断CRITICAL_METHOD=2时,在堆栈中保存中断的开关状态,然后再关中断,在执行OS_EXIT_CRITICAL()时,从堆栈中弹出原来中断的开关状态。CRITICAL_METHOD=3时,利用扩展功能得到当前处理器状态的值,并保存在c函数的局部变量中。利用该变量恢复原先的中断状态。二、任务状态睡眠态:指任务驻留在程序空间,没有交由uc/osII管理。就绪态:通过调用OSTaskCreate()或OSTaskCreateExt(健立任务,建立后的任务即进入就绪态运行态:优先级最高的就绪态的任务将进入运行态,就绪的任务只有当所有优先级高于这个任务的任务转为等待状态或者被删除时,才能进入运行态。等待状态:正在运行的任务通过调用OSTimeDly()或OSTimeDlyHMSM()使自身进入等待状态,让下一个进入就绪态的优先级最高的任务进入运行状态,等待的时间过去以后,系统服务函数OSTimeTick()使延迟了的任务进入就绪态。中断服务态:被中断的任务即进入了中断服务态,这时正在执行的任务被挂起,中断服务程序控制了CPU的使用权,在中断服务程序中可能会报告多了事件的发生,使一个或多个任务进入就绪态,这样在中断服务程序返回之前,uc/osII要判断哪个就绪态的任务的优先级最高,在中断返回时执行该任务当所有的任务都在等待事件的发生或等待延迟时间的结束时,uc/os将执行空闲任务(idle_task)楼主:uCOS-ll移植模板为何要多用一个OSPendSV中断?OSPendSV,模板,移植uCOS-ll移植模板为何要多用一个OSPendSV中断?感觉没必要多用一个中断。因为CORTEX-M3中断自动保护局部变量寄存器,使得切换任务全部都是在C环境下,OSCtxSw与OSIntCtxSw也就可以完全一样。切换任务都是C环境下调用OSCtxSw,不必保存局部变量寄存器。(实际上就是C环境下调用汇编规则,汇编可以任意使用局部变量寄存器而不必保存)OSCtxSw(OSlntCtxSw):R4-R11入栈(非局部变量寄存器入栈)XPSR,PC,LR入栈关中断OSTCBCur->OSTCBStkPtr=SPOSTaskSwHookOSTCBCur=OSTCBHighRdyOSPrioCur=OSPrioHighRdySP=OSTCBHighRdy->OSTCBStkPtr恢复中断R4-R11出栈(非局部变量寄存器入栈)XPSR,PC,LR出栈函数返回2楼:OSPendSV是专用的任务切换中断楼主介绍的方法是ARM7切换任务的典型方法。因为ARM7的中断不能在实际意义上嵌套,它追求的是“任务优先、尽快切换任务的原则”,是“就地切换”的方法,这种方法在Cortex-M3上也可以使用,但效率低,不能发挥Cortex-M3的技术优势。OSPendSV是专为Cortex-M3切换任务用的。因为Cortex-M3的中断可硬件嵌套,它追求的是“中断优先,尽快响应中断”。假设使用ARM7的“就地切换”方法,当前任务关中断后把新任务切换好,再重开中断,又假如这时有3级的中断嵌套,每级中断都要切换到不同的任务,那么当前任务的1次切换+3级中断的3次任务切换,要切换4次,最后跑的新任务也只不过是其中的一个!在Cortex-M3中,把所有任务切换的事情都放在最低中断优先级的OSPendSV中,前面的4次切换,只要切换1次就行。各位高手,实在不得已问一下,我找遍了资料也没找到。在uc/osII中,有这么一句#defineOS_CPU_GLOBALS。还有在uc/osll的OS_CPU.H中有:#ifdefOS_CPU_GLOBALS#defineOS_CPU_EXT#else#defineOS_CPU_EXTextern#endif#define为什么只有一个参数?只有一个参数何意?请赐教,小弟不胜感激。db10发布于2007-10-3122:39:00#ifdefOS_CPU_GLOBALS#defineOS_CPU_EXT#else#defineOS_CPU_EXTextern#endif说这个还要从开始用这个说起,比较罗嗦。如我现在有A.C,B.C,A.H三个文件在A.H中有定义:#ifdefOS_CPU_GLOBALS#defineOS_CPU_EXT#else#defineOS_CPU_EXTextern#endifOS_CPU_EXTinta;现在A.c中使用:#defineOS_CPU_GLOBALS#includeA.Ha=1;如果在B.c中使用:#includeA.H则也可以直接使用a=2;这样用起来很方便,每次加上#includeA.H后就可以直接使用A.H所有变量如果还有不明,请仔细想想再来聊,呵呵eeproom发布于2007-11-18:15:00这样设计的好处是,一个项目的诸多*.c文件共用一个*.h文件,让文档结构清晰,不过唯一的坏处是增加了编译器编译时间。mannerfh发布于2007-11-58:59:00为了不重复包函文件或变量对吧wchangtao发布于2007-11-511:21:00多谢多谢,看明白了!多谢各位帮忙有四种类型的堆栈:堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年钻井泥浆工职业资格考试押题试卷
- 2026年中医耳鼻喉科湿热蕴结鼻渊辨证测试卷及答案
- 槽探作业安全生产操作规程培训
- 锚杆拉拔力试验安全技术措施培训
- 信号把钩工安全操作规程培训
- 基坑(槽)、边坡土方施工防坍塌整治方案培训
- 提高压力容器安全技术管理措施培训
- 2026年高一物理秋季开学分班测试卷及答案
- (2026年)幼儿园师德师风工作总结
- 2025年河南省开封市顺河区四年级数学第二学期期末联考试题含答案
- 2026年秋季学期泰山版(新教材)五年级信息科技上册教学计划
- 基于学科逻辑的氧化还原反应-高三二轮
- 部编版五年级上册语文全套预习单(8单元)
- 2026年河南省中考数学真题含答案
- 2026年人教版(2024)小学美术三年级上册【全册】教学设计(附目录)
- (2026年)医疗废物规范化管理知识培训课件
- 老龄经济学课件
- 土石方工程测量方案
- 《苹果碳足迹核算技术规范》
- 老年患者术前风险评估
- 2025河北高速恒质公路建设集团有限公司社会招聘考试参考题库及答案解析
评论
0/150
提交评论