你相信吗?keil能把人整死~~!

[复制链接]
8038|50
 楼主| 程疗匠人 发表于 2009-4-1 22:26 | 显示全部楼层 |阅读模式
keil 8.17a
1、把我的IO操作语句优化掉了,根本没帮我编译.
2、程序仿真一切正常,上板运行就跑飞了,不知为何?,然后把死循环由原来的while(1)改成for(;;)也一样。不知是什么原因。
3、重新建立个工程,再手动敲一边就好了,复制粘贴也不行。

真是郁闷死我了,大家有没碰到这样的问题?
汽车电子 发表于 2009-4-1 22:31 | 显示全部楼层

没遇到过

   我遇到过库函数有问题 
   strstr     strcmp 都不行,自己写一个就可以
渤海三叠浪 发表于 2009-4-1 22:34 | 显示全部楼层

动手敲的内容和复制粘贴的内容是一样的么?

眼见不一定为实啊!!!!
mklwcai 发表于 2009-4-2 10:29 | 显示全部楼层

还是没有摸透keil的脾气

调段程序,一开始死活不稳定
后来减少了优化等级才稳定下来
虽然知道问题出在哪,但就是不知道该为什么编译器要那种选项

但是不用keil,还能用啥呢
wlq_9 发表于 2009-4-2 10:40 | 显示全部楼层

还可以用

iar for 51.只是用的人很少,只有万利在推.
另外还有GCC可用.
未来是梦 发表于 2009-4-2 12:01 | 显示全部楼层

re

5楼,哪有gcc for 51?给个连接
 楼主| 程疗匠人 发表于 2009-4-2 12:09 | 显示全部楼层

keil全速执行后停下来就自动弹出反汇编窗口,很是烦人。为

谁能告诉我~~~谁能告诉我~~~是我们改变了世界还是世界改变了我们~~!!!
 楼主| 程疗匠人 发表于 2009-4-2 12:11 | 显示全部楼层

自动打铃仪程序,出这个问题。

#include <reg51.h>
unsigned char ms50,xiaoshi,fenzhong,xianmiao,beeptemp;
unsigned long miao;
sbit beep = P1^0;

void init(void)    //初始化函数,就是开机首先要做的事情,init是自己起的名字
     {
     TMOD=0x11;
     PT1=1;
     TH0=0xB1;
     TL0=0xE0;
     TH1=0x3C;
     TL1=0xB0;
     TR1=1;
     TR0=1;
     IE=0x8A;
     }           //这段程序启动了芯片中的两个定时器

void timer0 (void) interrupt 1 using 1    //定时器中断程序,定时时间到,自动运行此程序
     {
     TH0=(65536-5000)/256;                //这两行的数值代表每5000us运行一次此程序
     TL0=(65536-5000)%256;                //置定时值,每次时间到都要重新置定时值
     }

void timer1 (void) interrupt 3 using 2    //定时器中断程序
     {
     TH1=(65536-49990)/256;                //这两行的数值代表每5000us运行一次此程序
     TL1=(65536-49990)%256;                //置定时值,每次时间到都要重新置定时值
     ms50=ms50+1;
     if(ms50>=20)
       {
       miao++;                            //辅助计时变量+1
       ms50=0;
       }
     }

void alarm(void)
    {
    beeptemp=1;
    if(miao>=10&&miao<=12)
      {
      beeptemp=0;
      }
    if(miao>=30&&miao<=35)
      {
      beeptemp=0;
      }
    if(miao>=42&&miao<=50)
      {
      beeptemp=0;
      }
    if(miao>=80&&miao<=120)
      {
      beeptemp=0;
      }
    beep=beeptemp;
    }

void main(void)
     {
     init();
     while(1)
       {
       xiaoshi=miao/3600;
       fenzhong=miao%3600/60;
       xianmiao=miao%60;
       alarm();
       }
     }
mxh0506 发表于 2009-4-2 12:29 | 显示全部楼层

5000us * 20 = 1e5us = 0.1s

还有,ms50应该声明成volatile
mxh0506 发表于 2009-4-2 12:35 | 显示全部楼层

还有,

为什么要:
#include <reg51.h>
你用的芯片在Keil里选不到么? 项目设置里针对具体芯片的设置做了么?
init()函数里只初始化了最基本的51寄存器,有没有必须初始化的扩展寄存器没有初始化? 比如外部RAM访问控制WDT等.
wlq_9 发表于 2009-4-2 13:11 | 显示全部楼层

6L

记错了,不是GCC.是SDCC 51
 楼主| 程疗匠人 发表于 2009-4-2 16:47 | 显示全部楼层

volatile 有什么特别之处吗?为什么要声明成volatile

 楼主| 程疗匠人 发表于 2009-4-2 16:48 | 显示全部楼层

还有,静态变量和全局变量有什么不一样的地方、?

除了静态变量只能函数内使用,全局变量能任何函数使用这个区别
mxh0506 发表于 2009-4-2 19:53 | 显示全部楼层

能说说你用的是什么芯片么?

也许最合适的头文件不是reg51.h
 楼主| 程疗匠人 发表于 2009-4-2 19:57 | 显示全部楼层
ayb_ice 发表于 2009-4-2 20:21 | 显示全部楼层

又发现有人怀疑KEIL了

 楼主| 程疗匠人 发表于 2009-4-2 20:29 | 显示全部楼层

找不到自己的原因,只好怀疑keil了。如果ayb_ice告诉我原因我

不怀疑keil了
为什么软仿真和硬运行不一样?
刘前辈 发表于 2009-4-2 20:41 | 显示全部楼层

怎么我运行的一点问题都没有?

把LZ的程序简化后我编译、运行了一遍。好好的,没问题呀。

Keil_7.05,正版。

别老说别人的问题,还是查查自己的程序问题。
 楼主| 程疗匠人 发表于 2009-4-2 20:49 | 显示全部楼层

请问 刘前辈 是怎么简化的?为什么我全速运行停下来就弹出

cddx 发表于 2009-4-3 01:57 | 显示全部楼层

山寨版程序匠人

嘿嘿,山寨版程序匠人
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

224

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部