BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


程序特别容易死机,请帮一下忙。

首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
flytoim   帅哥
侠客




UID:258768
注册:2005-4-22
最后登录: 2008-07-03
帖子:13
精华:0

可用积分:16 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2008-7-2 16:37 
我在DOS下做了一个比较大的工程,用watcomc 11.0编译的,程序现在运行不了一分钟就死掉,而且死的很彻底,键盘不在相应。

为了调试main()函数只调用了其中一个写屏幕函数,死循环执行,很快程序就会死掉。
在加点东西以后,程序确可以正常运行。同时声明一下,没有用中断,除写显存以外,没有对指针进行操作。


代码如下:
unsigned char *vid_mem = (unsigned char *)0xb8000U;

SDWORD main(void)
{
SBYTE x = 0;

  while (1)
{
  write_char(24, 0, x++, 0x3e);

   MenuTask_S();  /*屏幕打印和键盘 CTRL + q/Q (system exit)*/
}

return 0;
}

void write_char(x,y,ch,attr)
unsigned char x,y,ch,attr;
{
unsigned char *v=0;
unsigned char p1[17],i=0;

if (x > 24)
{
  x =0;
}
if (y > 79)
{
  y =0;
}
for(i=0;i<17;i++)
{
  p1=(SBYTE)'\0';
}
_itoa(ch,p1,16);

v=vid_mem+(x*160)+y*2;
for(i=0;i<2;i++)
{
  *v++=p1;
  *v++=attr;
}
}

void write_string(x,y,p,attrib)
unsigned char x,y,*p,attrib;
{
unsigned short i;
unsigned char *v=0;

if (x > 24)
{
  x =0;
}
if (y > 79)
{
  y =0;
}

v=vid_mem+(x*160)+y*2;
for(i=y;*p!='\0';i++)
{
  *v++=*p++;
  *v++=attrib;
}
}

void DisplaySysDebugInfo(void)
{
static SBYTE init=FALSE_S,colour=0;
SBYTE row=0,col=75;
SWORD i=0,j=0,k=0;

write_string(24,20,"Sys88888888888888888888888b",/*0x20|*/colour++);

}

/*系统屏幕显示任务,每个运算周期调用一次*/
void MenuTask_S(void)
{
DisplaySysDebugInfo();

}

除了以上代码外,还有其它一些文件参与编译,编译的文件不一样,效果也不同。



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
flytoim   帅哥
侠客




UID:258768
注册:2005-4-22
最后登录: 2008-07-03
帖子:13
精华:0

可用积分:16 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2008-7-2 17:14 
回复 #1 flytoim 的帖子

一般造成死机的情况都有哪些,跟我现在这种情况类似的,我目前只知道死在中断里或内存越界,但我现在中断已经不启动了,同时仅有的代码已查了好多遍,感觉没越界。

还有一点我忘了提醒,我的代码在PC104上运行。



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
醉卧水云间
禁止访问-精灵使




UID:443805
注册:2006-7-19
最后登录: 2008-09-24
帖子:4462
精华:3

可用积分:1092 (家境小康)
信誉积分:280
专家积分:61 (本版:10)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


3楼 发表于 2008-7-2 23:57 
*** 作者被禁止或删除 内容自动屏蔽 ***
flytoim   帅哥
侠客




UID:258768
注册:2005-4-22
最后登录: 2008-07-03
帖子:13
精华:0

可用积分:16 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


4楼 发表于 2008-7-3 08:40 
回复 #3 醉卧水云间 的帖子

我们是一个极度保守极度落后的行业,本来想改用Vxworks的,后来还是DOS简单就用DOS了。



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
linternt   帅哥
天使


CU奥运火炬传递手2008
UID:152127
注册:2004-4-16
最后登录: 2008-10-07
帖子:1226
精华:1

可用积分:337 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:3
推广积分:0

来自:北京
状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2008-7-3 08:50 
不太懂,不过建议写屏后刷新一下输出,看会不会好点!



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

linux
solaris
c\c++\cgi
oracle\pro*c\sybase\esql
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
flytoim   帅哥
侠客




UID:258768
注册:2005-4-22
最后登录: 2008-07-03
帖子:13
精华:0

可用积分:16 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2008-7-3 16:41 
回复 #5 linternt 的帖子

输出?
嘛输出?



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?

首页 » 论坛 » C/C++ »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.071209 second(s), 4 queries , Gzip enabled