找回密码
 注册
关于网站域名变更的通知
查看: 462|回复: 4
打印 上一主题 下一主题

单片机程序总跑飞?小技巧帮你忙

[复制链接]
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-8-7 13:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    经常接触单片机的朋友,肯定遇到过单片机程序跑飞的问题。由于程序较为复杂,所以一旦出现跑飞的现象就比较难以查找错误出现的地方,网络上对错误的解释和解决方法也比较五花八门,并不方便查找。小编特意帮大家整理了关于单片机程序跑飞死机的原因,大家快来看看能不能在其中找到自己想要答案吧。5 b8 Q* x+ m- n$ f
    / \7 w& E3 N$ c0 Z/ g* D+ c
    单片机程序死机,跑飞了
      J2 E/ W) ~, M; @/ g  [可以从以下几个方面查找原因:
    9 f( Z: F  b) S4 M% k2 R" b4 g  I
    , U% ~( v5 p6 B, F4 [1 S3 L' H/ o& D1、意外中断3 I; Z( H* t0 T

    - A3 u* M% d' c- C是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。
    - m$ u4 l3 J( Z- @) D; u) o7 ]- V# G( p1 s2 I
    2、中断变量处理不妥; Y" ]9 @: [2 R- ]) V; R# i1 e
    & I4 B3 a- P; G" G& f- \
    若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile;其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断,否则出现造成数据乱套。
    0 b, r1 o2 |3 F: g8 ]
    ! r* y2 _) F  F3、地址溢出,常见错误为指针操作错误
    0 w: b9 d0 i$ t. P8 v9 V8 D" h- [2 D0 p6 {, e
    着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
    6 `4 t+ L9 e* P2 J' G; ~$ s9 s( P6 V( E8 |* }" M* [- z
    4、无条件的死循环8 b" x( O8 ^9 I
    & h8 A# b  @' W2 \+ }
    比如使用while(x),等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制。
    8 t' i. X: V8 w1 V! i
    ) H" e0 g# B0 ^" e! [: U7 U8 M, [5、看门狗没有关闭
    ' A" v" g& p! z' N7 H, E; Q, u8 f6 p* s9 k$ ^9 y
    有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机。这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗。) z( J& ]( P6 O( e( }& q2 @

    ) ]" _+ x5 I- \' k6、堆栈溢出
    . S: {( {% [$ }9 ~* j% ^1 y
    8 p: ?5 T7 J3 D最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。+ j' \- {2 [6 ?, k, u8 y- ?. O

    ! G# x0 X7 M8 `, Y通过本篇文章,大家是否找到了自己想要的问题解决方法了呢?就算没有找到,本篇文章也能帮助大家在一定程度上预防跑飞现象的发生。
    ! P, n3 \7 F1 e# b

    该用户从未签到

    2#
    发表于 2020-8-7 13:35 | 只看该作者
    无条件的死循环,这个有时候需要,

    该用户从未签到

    3#
    发表于 2020-8-7 14:46 | 只看该作者
    我的程序经常跑飞

    点评

    我以前也一样的  详情 回复 发表于 2020-8-7 15:29
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
     楼主| 发表于 2020-8-7 15:29 | 只看该作者
    uiclx8s1js 发表于 2020-8-7 14:46
    4 u# G* [! y- X" z9 Z我的程序经常跑飞
    5 Y. B3 r1 X6 {5 o" \! l
    我以前也一样的* E! H1 k, D, m3 O+ y

    8 `8 J9 V8 W& m, i& Q6 U5 {

    该用户从未签到

    5#
    发表于 2020-8-7 16:43 | 只看该作者
    这种问题难找

    “来自电巢APP”

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-22 03:44 , Processed in 0.125000 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表