[应用相关] 延时程序死机

[复制链接]
1150|16
 楼主| bbapple 发表于 2019-1-29 22:27 | 显示全部楼层 |阅读模式
程序中运行到延时程序,程序就好像死机了,什么反应都没有了

void delayms(unsigned int tt) {
    unsigned int t;                    //   ?                             
     for(;tt>0;tt--)               
       for(t=230;t>0;t--)        //  ?        
         {                                                
          ;
         }     
}程序跳出后,不知程序跑到哪里去了,就死机了。软件模拟是没有问题的。
c51写的。
handleMessage 发表于 2019-1-29 22:27 | 显示全部楼层

unsigned int t;反汇编看看t是什么样的,会不会因为该值是临时变量,由于中断的缘故,该变量的值老是被修改而无法到达0。
wanglaojii 发表于 2019-1-29 22:30 | 显示全部楼层

可以用char的要用int。
laozhongyi 发表于 2019-1-29 22:31 | 显示全部楼层
考虑狗、中断、和函数重入、堆栈溢出的问题
Edisons 发表于 2019-1-29 22:36 | 显示全部楼层
无符号类型减不到0??????
_gege 发表于 2019-1-29 22:36 | 显示全部楼层
无符号的 在MDK或是其他IDE下不能简单判断 大于(小于0)0,要用0xff表示,这个方法 在WINDOWS或是LINUX下就正常的
Mozarts 发表于 2019-1-29 22:40 | 显示全部楼层
要看下汇编结果,这个从C的结构上来看应该是没问题的。
Listate 发表于 2019-1-29 22:40 | 显示全部楼层

你使用的whilt吗?
是不是一直在死循环没哟跳出来
sourceInsight 发表于 2019-1-29 22:44 | 显示全部楼层
for下面都加括号试试,其实都省略大括号也是可以的。
boy1990 发表于 2019-1-29 22:45 | 显示全部楼层

while还是for循环呢?
这个是程序跑飞了?
CallReceiver 发表于 2019-1-29 22:47 | 显示全部楼层
是不是定义的数据类型不对呢
看下是否是其他原因造成的。。
lihui567 发表于 2019-1-30 10:39 | 显示全部楼层
硬件仿真看看情况,你的程序跑到哪里了,是进去硬件错误中断了?
kingkits 发表于 2019-1-30 11:48 | 显示全部楼层
tt是传输过来的数据,编译器有时用堆栈传送数据,有时用寄存器传送,这个可能导致你对该 变量操作时(tt--),不能达到预期的结果。
安全的方法是在函数中单独定义一个变量,把传送过来的参数赋值给它,用内部定义的变量进行计算
ayb_ice 发表于 2019-1-31 15:24 | 显示全部楼层
根本不是这里的问题
hanzhen654 发表于 2019-1-31 20:03 | 显示全部楼层
这个代码不会出现死循环啊
hanzhen654 发表于 2019-1-31 20:03 | 显示全部楼层
debug 调试下,看下。
晓伍 发表于 2019-3-1 17:25 | 显示全部楼层
一步一步调试看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

293

主题

1811

帖子

1

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