wince应用程序常见的错误与解决办法这几天一直在改wince的应用程序bug,现把自己遇到的一些问题总结下来,在
wince应用程序常见的错误与解决办法
这几天一直在改wince的应用程序bug,现把自己遇到的一些问题总结下来,在此抛砖引玉,希望大家也把自己遇到的一些提高应用程序稳定性的方法发出来一起分享。
1.指针的使用不能越界,否则很可能误修改其他变量的值,导致不可预测的结果,而且进行错误定位时,错误往往并不是在错误发生的地方。这个错误虽然大家都知道,但是本人这次还是犯了。
2.不要过于频繁的修改存储在NandFlash的文件,NandFlash写之前必须先擦除,所以每次修改一点内容,FAT文件目录表等信息都需要擦除重写,和电脑硬盘上的Fat系统操作是不一样的,而且长时间频繁操作还会导致nandflash Fat系统出错(不知道是不是我个人系统问题)。
3.对于重要区域数据应注意保护,比如nandflash内核文件(我在驱动中做了应用程序访问整个NandFlash的底层接口),因误擦除内核某个块的内容导致系统断电后不能启动。
4.全局变量勿嵌套使用,如果是在循环中发生全局变量嵌套使用很可能导致程序死循环,或其他奇怪的结果。
5.程序中用到结构体的大小时,尽量使用sizeof计算,而不要用常数,这样可以避免因结构体在使用中改动而带来的错误。
[解决办法]
谢谢分享
[解决办法]
总结得很好,支持一下!
[解决办法]
lz真细心,多谢分享
[解决办法]
支持下。
[解决办法]
谢谢lz分享
[解决办法]
谢谢楼主分享!我学习下、
强烈建议加精!
谢谢!
[解决办法]
非常感谢楼主
对于此等好人的此等好贴
版主加精吧
看帖的牛人们
有什么经验也分享出来吧
[解决办法]
mark
[解决办法]
顶!
[解决办法]
不错,支持一下LZ
[解决办法]
[解决办法]6.文件的操作:(1)打开属性为只读,则操作过程中不要企图写文件。(2)文件关闭后,不要再用文件句柄进行进行读写,否则应用程序很可能会直接退出。(3)文件Seek时不要越界。(4)不要频繁修改大文件,否则程序运行速度会很慢。
7.一个INT或Long型数据存在单字节数组中传输后解析一定要用无符号数组进行解析。
int COnLineDlg::Byte4ToInt(const BYTE *p)
{
return (p[0] < <0)+(p[1] < <8)+(p[2] < <16)+(p[3] < <24);
}
不能用:
int COnLineDlg::Byte4ToInt(const char *p)
{
return (p[0] < <0)+(p[1] < <8)+(p[2] < <16)+(p[3] < <24);
}。
或者直接用memcpy也可以。
[解决办法]6.文件的操作:(1)打开属性为只读,则操作过程中不要企图写文件。(2)文件关闭后,不要再用文件句柄进行进行读写,否则应用程序很可能会直接退出。(3)文件Seek时不要越界。(4)不要频繁修改大文件,否则程序运行速度会很慢。
7.一个INT或Long型数据存在单字节数组中传输后解析一定要用无符号数组进行解析。
int COnLineDlg::Byte4ToInt(const BYTE *p)
{
return (p[0] < <0)+(p[1] < <8)+(p[2] < <16)+(p[3] < <24);
}
不能用:
int COnLineDlg::Byte4ToInt(const char *p)
{
return (p[0] < <0)+(p[1] < <8)+(p[2] < <16)+(p[3] < <24);
}。
或者直接用memcpy也可以。
[解决办法]okok
[解决办法]学习了,谢谢哦!
[解决办法]经验帖可以多一点!
------解决方案--------------------
写不错。顶一个。
[解决办法]学习!目前正在学习wince应用程序这块!
[解决办法]up
[解决办法]每天一顶
[解决办法]学习中....
[解决办法]好东西要顶的...让更多人看到
[解决办法]marking
[解决办法]up
[解决办法]恩,不错
[解决办法]JF
[解决办法]好文章,谢谢
[解决办法]ding
[解决办法]总结得很好,支持一下!
[解决办法]喂也 今天直播的啊 呵呵 不错的东西,实践得出的结论往往珍贵
[解决办法]4.全局变量勿嵌套使用,如果是在循环中发生全局变量嵌套使用很可能导致程序死循环,或其他奇怪的结果。
这点是一定的吗?LZ,
我一直觉得与一般C程序是一样的,应该是可以嵌套使用吧,LZ的情况会不会是“个例”??谢谢
[解决办法]支持一下!
[解决办法]感谢
[解决办法]嘿嘿,还有一个容易忽视的边界对齐问题 :)
int* p1 = char* p2
or
memcpy(p1, p2, size);
?
[解决办法]mark
[解决办法]都喜欢搞驱动和硬件,其实应用也是非常关键的,谢谢楼主分享…
[解决办法]mark
[解决办法]学习,谢谢
[解决办法]mark。
呵呵。LZ可以再加一些关于库调用的内容,比如说在做TCPMP或者DX播放器的时候有些库的引用。DX在wince下调试还是有些技巧,呵呵。
我记得调DX的时候vs2005下面dx有一些原始的dx代码文件是需要修改一下的。呵呵。
[解决办法]支持
[解决办法]好,支持~~~~~~~~
[解决办法]谢谢分享!学习了
[解决办法]up,谢谢分享奥!
[解决办法]回帖是一种美德!
[解决办法]局部变量和全局变量赋值也很麻烦。
[解决办法]受教了,LZ真是好人哇~经验这东西很重要,自己去实践发现往往需要花费很多的时间.
[解决办法]谢谢分享
做个标记
[解决办法]mark
------解决方案--------------------
支持楼主。不过还是提倡Linux等开源方式的开发。
[解决办法]看成wincc了,路过!
[解决办法]谢谢分享
[解决办法]赞~~~
类型转换的存取中,如果整形变量不对齐在4边界位置上导致崩溃的问题的CE上出现很严重啊。。。。
[解决办法]这些都是做软件必须要遵守的一些常规!今天还用在这里强调???
另外, NandFlash文件操作的问题,改写文件内容确实会引起FAT表的擦除,因为Flash的擦除是有寿命次数的,频繁改写同一个文件会减少Flash的寿命。不过这不是问题,现在的Flash都有10万次以上的擦写寿命。另外,也不会引起文件系统出错,要是出错,就是你的系统有问题,或者是Flash驱动,或者是坏块管理上的。我们做的系统如果Flash是128M的,要做一个测试程序,反复读写100M的文件,几天几夜不停的测试。