打印
[STM32F1]

延时程序死机

[复制链接]
710|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
morrisk|  楼主 | 2023-1-13 23:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序中运行到延时程序,程序就好像死机了,什么反应都没有了

void delayms(unsigned int tt) {
    unsigned int t;                    //   ?                             
     for(;tt>0;tt--)               
       for(t=230;t>0;t--)        //  ?        
         {                                                
          ;
         }     
}程序跳出后,不知程序跑到哪里去了,就死机了。软件模拟是没有问题的。
c51写的。

使用特权

评论回复
沙发
yszong| | 2023-1-13 23:52 | 只看该作者
unsigned int t;反汇编看看t是什么样的,会不会因为该值是临时变量,由于中断的缘故,该变量的值老是被修改而无法到达0。

使用特权

评论回复
板凳
dingy| | 2023-1-13 23:55 | 只看该作者
可以用char的要用int。

使用特权

评论回复
地板
heweibig| | 2023-1-13 23:57 | 只看该作者
考虑狗、中断、和函数重入、堆栈溢出的问题

使用特权

评论回复
5
houcs| | 2023-1-13 23:59 | 只看该作者
无符号类型减不到0??????

使用特权

评论回复
6
morrisk|  楼主 | 2023-1-14 08:02 | 只看该作者
无符号的 在MDK或是其他IDE下不能简单判断 大于(小于0)0,要用0xff表示,这个方法 在WINDOWS或是LINUX下就正常的

使用特权

评论回复
7
dingy| | 2023-1-14 08:04 | 只看该作者

要看下汇编结果,这个从C的结构上来看应该是没问题的。

使用特权

评论回复
8
xxrs| | 2023-1-14 08:06 | 只看该作者

你使用的whilt吗?
是不是一直在死循环没哟跳出来

使用特权

评论回复
9
wyjie| | 2023-1-14 08:08 | 只看该作者
无符号改成有符号类型

使用特权

评论回复
10
huanghuac| | 2023-1-14 08:11 | 只看该作者
for下面都加括号试试,其实都省略大括号也是可以的。

使用特权

评论回复
11
zwll| | 2023-1-14 08:14 | 只看该作者
while还是for循环呢?

使用特权

评论回复
12
supernan| | 2023-1-14 08:16 | 只看该作者
这个是程序跑飞了?

使用特权

评论回复
13
shimx| | 2023-1-14 08:18 | 只看该作者
是不是定义的数据类型不对呢

使用特权

评论回复
14
huangchui| | 2023-1-14 08:19 | 只看该作者
看下是否是其他原因造成的。。

使用特权

评论回复
15
wenfen| | 2023-1-14 08:22 | 只看该作者
硬件仿真看看情况,你的程序跑到哪里了,是进去硬件错误中断了?

使用特权

评论回复
16
xxrs| | 2023-1-14 08:24 | 只看该作者
tt是传输过来的数据,编译器有时用堆栈传送数据,有时用寄存器传送,这个可能导致你对该 变量操作时(tt--),不能达到预期的结果。

使用特权

评论回复
17
yszong| | 2023-1-14 08:26 | 只看该作者
安全的方法是在函数中单独定义一个变量,把传送过来的参数赋值给它,用内部定义的变量进行计算

使用特权

评论回复
18
pengf| | 2023-1-14 08:29 | 只看该作者
根本不是这里的问题

使用特权

评论回复
19
dengdc| | 2023-1-14 08:32 | 只看该作者

这个代码不会出现死循环啊

使用特权

评论回复
20
zhanghqi| | 2023-1-14 08:35 | 只看该作者
debug 调试下,看下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

701

主题

6879

帖子

2

粉丝