keil C 出现WARNING:MULTIPLE CALL TO SEGMENT的解析
调试keil程序时有时会出现各种编译警告,一般情况下不会影响程序的运行。但出现如题WARNING:MULTIPLE CALL TO SEGMENT警告时,请留意您的程序是否会发生错误。上述警告指的是你定义的函数体在主程序中被调用,在中断中也被直接或间接的调用了。可想若主程序正运行此函数时,中断来临也运行这段程序的话会发生函数重载现象。若此现象发生且你在程序中未加处理,那么很有可能导致您的程序发生不可预测的结果。结合网上查询的结果和自己的设计提供几个可行的解决方法是:
1. 利用关键字reentrant表明函数可重载
评注:该法排除了编译器警告和可能出现的重载带来的影响,但此方法在重载发生时,为了保护主程序的程序信息,系统会将程序的信息保存到堆栈中,造成堆栈的而外负担
2. 如果空间多的话,可以定义两个同功能的函数,分别在中断和中断外调用
评注:该方法操作起来方便,不会出现上一个办法的弊端,但比较浪费code
3. 利用函数指针
评注:该方法适合用在确定中断和主程序不会同时调用该函数的时候。它不仅排除了编译器警告,在code占用、操作方面都比较好
相关文档:
如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。
一家之言,欢迎拍砖哈。
1、可以考虑先学习C.
大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语 ......
1.MFC中的方法:(C++)
CFileStatus status;
CFile::GetStatus("D:\\test.txt",status);
long lSizeOfFile;
lSizeOfFile = status.m_size;
lSizeOfFile的值就是D:\\test.txt文件的大小
2.标准C获得文件大小的5种方法
(注意:"__FILE__"指的是当前文件,你可以改为有效路径的目标文件,比如"D:\\test.txt")
#i ......
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。
我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的&ld ......
extern "C" 详解
在C++中,为了支持重载机制,在编译生成汇编代码时,函数的名字要加入函数的参数类型或者返回值类型等信息
在C中,因没有重载机制,编译后的代码只是简单的函数名字而已,不加入其他的信息
1. 不加入extern "C"
testexternc.cpp
int mytest(void)
{
int a=10,b=20;
int c=a+b;
ret ......
Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意?
A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如,为了转换一个类型为doubole的浮点数的指针到整型:
......