标准版数采仪问题解决全记录-时间跳变问题
2008-05-28 11:58
246 查看
数采仪时间跳变的问题已经困惑了我半年的时间,经过测设人员的辛苦工作,终于找到了规律,这样我才能解决问题。
现象描述:
在数采仪的面板上设置时间后,有时时间会跳变为莫名其妙的值。
测试结果:
如果只设置月份,则时间跳变一定会出现。
问题根源:
原来程序中设置时间时,取出数码管中的状态值,当作字符串来使用,但是实际上,并没有对该字符串做初始化,这导致了字符串内容的不确定性。
原程序中对数码管内容的变量是这样定义的:
char Content[10];
假如数据管当前的显示内容是,2008-05-02,则长度正好为10个字节,这时Content后面紧接着的内存字节不一定是字符串的结尾标识'\0',而可能是任何值。
这样,把Content当作字符串来使用就会出现问题。
解决方法:
程序中做了如下修改,
char* pT=Led.GetContent();
char pMyTempPt[11];
memcpy(pMyTempPt, pT, 10);
pMyTempPt[10] = 0;
pT = pMyTempPt;
解释,取出数码管的内容后,强制加上结束标志(pMyTempPt[10] = 0),这样pT 就可以当作字符串来使用了。
现象描述:
在数采仪的面板上设置时间后,有时时间会跳变为莫名其妙的值。
测试结果:
如果只设置月份,则时间跳变一定会出现。
问题根源:
原来程序中设置时间时,取出数码管中的状态值,当作字符串来使用,但是实际上,并没有对该字符串做初始化,这导致了字符串内容的不确定性。
原程序中对数码管内容的变量是这样定义的:
char Content[10];
假如数据管当前的显示内容是,2008-05-02,则长度正好为10个字节,这时Content后面紧接着的内存字节不一定是字符串的结尾标识'\0',而可能是任何值。
这样,把Content当作字符串来使用就会出现问题。
解决方法:
程序中做了如下修改,
char* pT=Led.GetContent();
char pMyTempPt[11];
memcpy(pMyTempPt, pT, 10);
pMyTempPt[10] = 0;
pT = pMyTempPt;
解释,取出数码管的内容后,强制加上结束标志(pMyTempPt[10] = 0),这样pT 就可以当作字符串来使用了。
相关文章推荐
- 新版数采仪问题解决全记录-不能用single step下
- 新版数采仪问题解决全记录-升级失败问题
- 新版数采仪问题解决全记录-烧写程序不能正确执行
- 记录几个暂时没有找到解决方法的问题,后续有时间依次解决
- 新版数采仪问题解决全记录-模块上报不了数据
- 购物车清空转发与重定向问题(使用Session来保存客户一次会话的信息记录)???时间问题,待解决!还没解决
- Atitit 理财之道 信用卡账单管理之道 attilax总结 1. 信用卡账单管理 信用卡账单信息的目的,解决一下问题 2 1.1. 账单记录明细可追溯,原则上保留五十年 可按照时间 银行 卡
- 解决CentOS 7 history命令不显示操作记录的时间和用户身份问题 推荐
- C# SQL语句执行时间过长在操作完成之前超时时间已过或服务器未响应问题的解决
- dz论坛在线时间更新机理分析(解决在线时间不更新和部分用户刷在线时间的问题)
- 记录一次java ssm框架下数据回滚问题以及解决方法
- VMware虚拟机时间同步问题解决
- 记一次VNC远程连接Linux问题解决记录(5900端口测试、KDE桌面安装)
- 记录下自己遇到的问题和解决方法
- 记录一个问题的解决方法
- Android Toast问题解决记录
- 【狼人杀plus全记录】没有公网IP照样完美解决微信小程序本地测试问题,超简单方法!
- 解决SQL Server 2005数据库中datetime时间字段在前端显示时分秒的问题
- 【Linux】无法添加用户,报“useradd: cannot open /etc/passwd”问题解决过程记录