基于Keil C的覆盖分析,总结出编程中可能出现的几种不可预知的BUG,供各位网友参考
1、编译时出现递归警告,我看到很多网友都采用再入属性解决,对于再入函数,Keil C不对它进行覆盖分析,采用模拟栈来分配局部变量,对于data型的模拟栈,假设函数中如果用了x个变量,递归级数为y,那每调用一次递归函数就要使用(x+2)*y个堆栈空间,极易造成堆栈空间溢出,产生不可预知的错误。连汉诺塔问题都可以采用非递归算法实现,因此使用Keil C编程建议不要使用递归算法。
2、使用函数指针变量间接调用函数,以下几种情况会出现覆盖分析错误,但Keil C无法给出警告,产生不可预知的错误:
    A、给指针变量直接赋常数指,然后间接调用。
    B、指针变量定义为全局变量,而赋值和调用分别在不同的函数。
    C、函数指针作为参数传递。
出现以上情况时,连接时要使用overlay调整调用关系,但我个人觉得overlay命令使软件的可维护性变得很差,一般不建议使用此命令。建议函数指针定义为code类型,因为常数段有参与覆盖分析,但也有负作用,请看第3点。
3、函数指针定义为code类型时,在有些情况Keil C会给出递归警告,下面给出fun10到fun14五个范例进行分析
    A、main中的第二句产生的递归调用很好处理,只要把fun10放到其他的OBJ中就可解决,因为这时table和"abcdefg"会在不同的常数段。
    B、main中的第三句产生的递归调用可用main中第四句的方式解决。
C、main中的第五句产生的递归调用“不可以”采用main中第六句的方式解决,因为第六句就是第2点中的情况B,所以这两句只能用overlay命令解决。    

基于Keil C的覆盖分析,总结出编程中可能出现的几种不可预知的BUG的更多相关文章

  1. Java中弹出对话框中的几种方式

    1.显示一个错误对话框,该对话框显示的 message 为 'alert': JOptionPane.showMessageDialog(null, "alert", " ...

  2. 有些lambda表达式就可以体现出编程中「Context(上下文)」环境

    编程中什么是「Context(上下文)」?   每一段程序都有很多外部变量.只有像Add这种简单的函数才是没有外部变量的.一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行.你为了使他们运行 ...

  3. 【转】基于DM8168的视频智能分析系统的设计方案

        [导读] 为了实现高清视频的智能分析功能,本文介绍了一种以TI公司的DM8168为核心的高清视频智能分析系统的设计方案,该方案从硬件设计和软件设计两个方面介绍了硬件组成.工作流程.软件架构,并 ...

  4. KEIL C51代码优化详细分析

    阅读了<单片机与嵌入式系统应用>2005年第10期杂志<经验交流>栏目的一篇文章<Keil C51对同一端口的连续读取方法>(原文)后,笔者认为该文并未就此问题进行 ...

  5. 基于GPU加速的三维空间分析【转】

    基于GPU加速的三维空间分析 标签:supermap地理信息系统gisit 文:李凯 随着三维GIS 的快速发展和应用普及,三维空间分析技术以其应用中的实用性成为当前GIS技术研究的热点领域.面对日益 ...

  6. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

  7. 基于goahead 的固件程序分析

    # 前言 本文由 本人 首发于 先知安全技术社区: https://xz.aliyun.com/u/5274 最近在分析 dlink 的一个固件时遇到了用 goahead 开发的 web 服务.本文以 ...

  8. 第一次作业:基于Linux-0.12的进程分析

    这次作业主要基于Linux-0.12的源代码,分析Linux是如何组织进程,进程的状态之间是如何转换,以及进程是如何调度的. 一. 进程的概念: 1.进程就是:程序在数据集合上的一次运行过程,是系统进 ...

  9. 基于 Spark 的文本情感分析

    转载自:https://www.ibm.com/developerworks/cn/cognitive/library/cc-1606-spark-seniment-analysis/index.ht ...

随机推荐

  1. android UI之Shape详解_GradientDrawable

    在Android开发过程中,经常需要改变控件的默认样式, 那么通常会使用多个图片来解决.不过这种方式可能需要多个图片,比如一个按钮,需要点击时的式样图片,默认的式样图片. 这样就容易使apk变大. 那 ...

  2. Reverse Nodes in k-Group 解答

    Question Given a linked list, reverse the nodes of a linked list k at a time and return its modified ...

  3. C++默认构造函数的一点说明

    大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成默认构造函数.其实这句话我一直也是 深信不疑.但是最近看了一些资料让我有了一点新的认识. 其实我觉得大多数C++书籍之所以这样描述 ...

  4. 【POJ2196】Specialized Four-Digit Numbers(暴力打表)

    一道水题,只要会复制粘贴就好! #include <iostream> #include <cstring> #include <cstdlib> #include ...

  5. The Hitchhiker’s Guide to Python! — The Hitchhiker's Guide to Python

    The Hitchhiker's Guide to Python! - The Hitchhiker's Guide to Python The Hitchhiker's Guide to Pytho ...

  6. CRC 模式及实现

    CRC : Cyclic redundancy Check 循环冗余校验 概述参见wiki百科:http://en.wikipedia.org/wiki/Cyclic_redundancy_check ...

  7. CBitmap,HBitmap,Bitmap区别及联系

    加载一位图,可以使用LoadImage: HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int ...

  8. App签名--- Android

    步骤: 下面就Next即可

  9. jsp页面获取服务器时间

    Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MON ...

  10. 内存管理pbuf.h头文件源码解析——LwIP学习

    声明:个人所写所有博客均为自己在学习中的记录与感想,或为在学习中总结他人学习成果,但因本人才疏学浅,如果大家在阅读过程中发现错误,欢迎大家指正. LwIP的内核(core文件夹)文件中pbuf.c是包 ...