怎样用wince的串口类不断循环的发送一组数据

开发老菜鸟 2013-09-29 06:34:32
我刚学会了用wince的串口类向串口中发送数据。
可是我现在想从串口中不断循环的发送一段报文,应该用什么方法呢。
我现在用的方法是在初始化时开启一个线程,在线程中死循环发送数据,结果不出两分钟,程序报内存严重不足。
看了网上讲到的内存泄漏问题,限于水平,实在不会,更不敢从串口类中找原因。而且,我是在一个很简单的测试程序中完成的。

还有一个原因是,如果我开启一个定时器,在定时器里发送这段报文,程序运行很长时间都没有问题。但是我想问问用这种办法怎样考虑每个定时器是否能发完数,定时器如果开的快,肯定是有数据没发完,再进定时器该怎么发数呢?

我想请高手帮忙解释一下在定时器里发送数据的方法可行吗。
还有用线程的方法为什么会造成内存不足。我还是感觉这种方法可靠一些。
...全文
214 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
z_jzhao 2014-03-05
  • 打赏
  • 举报
回复
有用VB开发的吗
我的波塞冬 2013-10-03
  • 打赏
  • 举报
回复
不错,今天学到新东西了
  • 打赏
  • 举报
回复
引用 4 楼 sxhpudn 的回复:
我发一段报文要2,3秒的时间,可我定时器开的500毫秒,这倒不会造成内存溢出吗
你的问题要考虑你的串口类怎么处理了。比如你的发送接口是阻塞的方式,那么定时器肯定超时,相当于后面几次不会触发。如果不是,那么也要看你的类怎么处理。
开发老菜鸟 2013-09-30
  • 打赏
  • 举报
回复
代码其实很简单了,我做的程序本身就不复杂,从一开始学起的,每步都有记录,一个线程里死循环,往串口中发数,就是用的wince串口类,在汪兵的那本书中有讲,他的例程不能用,需要改几个设置。 感谢版主指出定时器可用,我并没有完全了解那个串口类,我有些担心,我发一段报文要2,3秒的时间,可我定时器开的500毫秒,这倒不会造成内存溢出吗
wohuazhen 2013-09-30
  • 打赏
  • 举报
回复
在线程中死循环发送数据,结果不出两分钟,程序报内存严重不足 我发一段报文要2,3秒的时间 ------------------------------------------ 楼主有多线程的概念吗?有线程同步的概念吗? 如果你的一段报文要发送2,3秒时间,波特率假设11 520 0,那么就是要发几十k的数据,有这么多吗? 你在打开串口的时候,设置的发送接收的buffer是多大的呢? 你往里面写一次又是多大的数据呢? writefile这个函数,你的了解是多少呢? 你的线程循环是如何控制的呢? 你的报文是如何产生的呢? 内存是如何分配的呢?需要释放吗?还是反复使用? 指针的概念? ----------------------------------------------------- 我觉得,你首先要看懂人家的串口类,是个什么行为。 然后要能够把这个类去掉,重新组合成几个函数,明白先后调用关系。 这样也能跑起来。开始做些简单的发送接收。 串口是可以回还的。你发送什么出去,回来什么。 最后人家的类还是你的改进版,还是不用类,这个不重要。 ------------------------------------------------- 不支持在线调试,就要会用log的方法。 看板子是否有调试串。 或者尝试printf看,会不会在ce界面上出现打印出来的东西。 -------------------------------------------------------- 可以把你的代码,部分伪代码,部分怀疑问题的地方贴出来。 不然人家说的,你也不一定看懂。
一介布衣萧萧 2013-09-29
  • 打赏
  • 举报
回复
把相关代码贴出来瞧瞧
91program 2013-09-29
  • 打赏
  • 举报
回复
在定时器中实现完全可以。
91program 2013-09-29
  • 打赏
  • 举报
回复
用线程的方法为什么会造成内存不足,需要看代码分析。
Virace GPS Simulator V0.3.1 自述文件 2009.6.7 ====================================================================== Virace GPS Simulator是什么? ====================================================================== Virace GPS Simulator(以下简称为Virace)用软件模拟GPS接收器输出的GPS语 句,通过串行口输出到GPS应用软件。用鼠标或键盘控制Virace而模拟实际GPS接 收器的运动,或者重播已有的GPS航迹文件,从而在室内测试GPS导航软件等。 Virace具有手动实时控制及航迹重播两种方式。为了控制灵活方便,Virace定义 了许多鼠标及键盘动作。经过少许试用,就可以对照一个大比例尺的导航地图以 超过正常驾车速度行驶在市区及郊区路上。 ====================================================================== Virace运行在什么操作系统下? ====================================================================== Windows ====================================================================== Virace运行的方式 ====================================================================== 1. Windows下的GPS软件可通过Virace的虚拟串口直接测试。 2. Windows下有微软的Device Emulator,因此部分与Device Emulator兼容的 PPC、CE、SP软件可以在Device Emulator中模拟测试,由Virace提供GPS信号。 3. 可以将Virace输出到蓝牙的输出COM口,测试使用蓝牙GPS模块的PPC、SP及 Symbian S60等GPS软件。 4. Virace输出到PC的物理COM口,测试任何与PC物理串口连接的GPS设备 5. 用Virace将plt、gpx、kml、gpssim、trk格式的航迹文件,转为带速度、方 位角,及卫星状态的nmea文件,再在GpsGate内播放。 ====================================================================== Virace的特点 ====================================================================== 四种模式:自由驾驶模式 + 三种航迹重播模式(逐点重放航迹模式,手控速度 航迹模式,比例速度航迹模式)。运行中根据需要可在四种模式间无缝自由切换。 航迹文件支持plt、gpx(含gpx航迹及Garmin详细航线)、kml、gpssim、trk。 可将航迹文件另存为带速度、方位角,及卫星状态的nmea文件。 航迹重播时具有丰富的控制项,可快进、快退,选择某个段,反序,循环,亦可 人为加入左右偏移。 载入航迹时可选过滤掉点数少或距离小的段。 可选与PC版OziExplorer交互运行。通过Ozi API,在Ozi中双击地图上的某点, Virace就立即跳跃至该点(自由驾驶模式),或跳至离该点最近的航迹(航迹 重播模式);单击地图上的某点,则以当前速度向该点行驶(自由驾驶模式)。 最多3路COM口输出,加1路Ozi输出。每路的参数是独立选择的,且可以独立启停。 支持虚拟串口。与Eltima Virtual Serial Port ActiveX Control V2.5及对应的 Eltima Virtual Serial Port Driver兼容。注:Eltima Virtual Serial Port 是共享软件,一切权利归其所有人。Virace的发行包内不包括该虚拟串口驱动及 控件,请自行购买或下载试用版。 多种转向方式。鼠标滚轮,Ozi中单击,键盘左右箭头等。另有键盘45度及10度转 向键。键盘左右箭头及鼠标滚轮的转向灵敏度可自定义。 多个预设的速度键及上下箭头加减速,另外可随时暂停(速度为0,但依然输出GPS 信号)。 在退出时自动保存当前位置(经纬度、速度、方位角等)及所有

19,523

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧