易截截图软件、单文件、免安装、纯绿色、仅160KB

keil C 出现WARNING:MULTIPLE CALL TO SEGMENT的解析

调试keil程序时有时会出现各种编译警告,一般情况下不会影响程序的运行。但出现如题WARNING:MULTIPLE CALL TO SEGMENT警告时,请留意您的程序是否会发生错误。上述警告指的是你定义的函数体在主程序中被调用,在中断中也被直接或间接的调用了。可想若主程序正运行此函数时,中断来临也运行这段程序的话会发生函数重载现象。若此现象发生且你在程序中未加处理,那么很有可能导致您的程序发生不可预测的结果。结合网上查询的结果和自己的设计提供几个可行的解决方法是:
1. 利用关键字reentrant表明函数可重载
    评注:该法排除了编译器警告和可能出现的重载带来的影响,但此方法在重载发生时,为了保护主程序的程序信息,系统会将程序的信息保存到堆栈中,造成堆栈的而外负担
2. 如果空间多的话,可以定义两个同功能的函数,分别在中断和中断外调用
    评注:该方法操作起来方便,不会出现上一个办法的弊端,但比较浪费code
3. 利用函数指针
    评注:该方法适合用在确定中断和主程序不会同时调用该函数的时候。它不仅排除了编译器警告,在code占用、操作方面都比较好


相关文档:

DAY3|编个"hello world"的C程序先~

今天要编个最简单的"hello world"的C程序,算是初步感受下Linux中的编程环境,涉及以下3个步骤:
1. 先在"vim"里编写源文件;
2. 然后再用"gcc"编译生成"hello"的可执行文件;
3. 运行"hello",看看效果。
那么开始吧!
1. vim
vim hello.c
i
#include <stdio.h>
int
main (void)
{
printf ("hello.\n" ......

c指针详解

 第一章 概念
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。
先声明几个指针放着做例子:
例一:
(1)int *ptr;
(2)char ......

C/C++数组名与指针区别深入探索

(1)
数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
(2)
数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
(3)
指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址
(4)
数组名作为函数形参时,在函数体内,其失去了本身的内涵 ......

c/c++强制类型转换

 Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意?
A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如,为了转换一个类型为doubole的浮点数的指针到整型: ......

生产者 消费者问题实现 (linux下C语言)

操作系统的一个经典问题是"生产者-消费者"问题, 这涉及同步信号量和互斥信号量的应用, 在这里,我用线程的同步和互斥来实现.
/*
* author 张文
* 2008/06/20
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h> ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号