zoukankan      html  css  js  c++  java
  • Keil中慎用Printf()

    在单片机调试中常用的调试方法有Printf和仿真,Printf用得好很灵活,但用不好程序会死得很惨;

    举一个简单的实例:

    主程序Main.c

    image

    按键初始化在Main.c里被调用,实际的操作都被注释了,就剩下一个空壳,

    image

    工程中设置为软件仿真,理论上是这代码是没有什么问题,实际上也不存在问题

    image

    编译结果在第一张图出看出来,没有任何警告,没有任何错误,仿真时程序应该运行一个死循环:

    image

    当然以上都是说的正常情况下,但是实际仿真效果是:

    image

    image 程序无法运行,更不用说单步了,真是没有奇怪了:

    .s起动文件 –> main.c –> 调用KeyInit() –> 返回 –> 死循环 

    这逻辑一点问题都没有,为什么没法运行呢?

    分析:

    Key.c

    image

    Key.h

    image

    image

    从上面看引用了Stdio.h的Printf,而Printf()需要调用Putchar(),这个模块是需要外部来实现的,而程序中没有实现,编译时也没有报警,导致一个隐式调用。

    所以程序无法运行,建议printf使用时自己实现,不容易出问题,前设置调试开关。

    解决办法:

    1、实现Putchar();

    2、实现printf();

    3、不用printf();

  • 相关阅读:
    HTML
    短信发送平台-阿里大于
    java基础练习题
    2019年让程序员崩溃的 60 个瞬间,笑死我了
    JDBC连接时出现的问题总结
    Java 学习笔记 IO流与File操作
    Java 学习笔记 两大集合框架Map和Collection
    我的github博客地址
    重新认识mapreduce
    java打字游戏
  • 原文地址:https://www.cnblogs.com/worldsing/p/3126596.html
Copyright © 2011-2022 走看看