野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8913|回复: 13

C的问题

[复制链接]
发表于 2017-7-19 17:11:13 | 显示全部楼层 |阅读模式
我在两个程序里面用到了同样的变量,加了extern,编译的时候还是说我重复定义了,请问是怎么回事呢??

主题推荐

回复

使用道具 举报

 楼主| 发表于 2017-7-19 17:20:28 | 显示全部楼层
C:\Users\YC\Desktop
回复 支持 反对

使用道具 举报

发表于 2017-7-19 17:21:39 | 显示全部楼层
说具体点,怎样定义和在什么文件声明的
回复 支持 反对

使用道具 举报

发表于 2017-7-19 17:36:46 | 显示全部楼层
把工程传上来 看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 17:58:53 | 显示全部楼层
这是GPIO.c里面的部分

  1. __IO uint16_t ADC_ConvertedValue;
  2. /*--------------------------------------------------------------------------------*/
  3. #define true 1
  4. #define false 0
  5. extern int BPM;                   // óÃà′½óêÕÂö3åËùÂêused to hold the pulse rate
  6. extern int Signal;                // ½óêüÎ′′|àíμÄêy¾Yholds the incoming raw data
  7. extern int IBI = 600;             // ὸö·åÖμ¼äμÄ걼䣬±ØDëóDDÄÂêholds the time between beats, must be seeded!
  8. unsigned char Pulse = false;     // μ±Âö3åÎa¸ßμçƽê±ÎaÕ棬μíê±Îa¼ùtrue when pulse wave is high, false when it's low
  9. extern char QS = false;        // becomes true when Arduoino finds a beat.
  10. int rate[10];                    // êy×éóÃóú½óêÕ×îoó10¸öIBIêy¾Yarray to hold last ten IBI values
  11. unsigned long sampleCounter = 0;          // óÃóúÅD¶ÏÂö3åê±3¤used to determine pulse timing
  12. unsigned long lastBeatTime = 0;           // óÃóúIBIused to find IBI
  13. int P =512;                      // ·åÖμused to find peak in pulse wave, seeded
  14. int T = 512;                     // ×îμíÖμused to find trough in pulse wave, seeded
  15. int thresh = 512;                // μ±Ç°ê±¿ìDÄÂêÖμused to find instant moment of heart beat, seeded
  16. int amp = 100;                   // Âö3åÕñ·ùused to hold amplitude of pulse waveform, seeded
  17. int Num;
  18. unsigned char firstBeat = true;        // used to seed rate array so we startup with reasonable BPM
  19. unsigned char secondBeat = false;      // used to seed rate array so we startup with reasonable BPM
  20. /*----------------------------------------------------------------------------------------------------------------------------*/

复制代码

这是main()里面的部分

  1. #define true 1
  2. #define false 0
  3. char QS = false;
  4. int BPM;

  5. extern int Signal;
  6. int IBI = 600;

  7. // ADC1×a»»μÄμçÑ1Öμí¨1yDMA·½ê½′«μ½SRAM
  8. extern __IO uint16_t ADC_ConvertedValue;
  9. // èí¼tÑóê±
  10. void Delay(__IO uint32_t nCount)
  11. {
  12.   for(; nCount != 0; nCount--);
  13. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 17:59:45 | 显示全部楼层
T--yc 发表于 2017-7-19 17:58
这是GPIO.c里面的部分
这是main()里面的部分

说我QS和IBI  重复定义了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 18:02:41 | 显示全部楼层
fire 发表于 2017-7-19 17:36
把工程传上来 看看

是因为QS和IBI已经被赋值,所以叫重复定义了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 18:13:59 | 显示全部楼层
T--yc 发表于 2017-7-19 17:58
这是GPIO.c里面的部分
这是main()里面的部分

我把两边都不赋值,,,错误就没有了
回复 支持 反对

使用道具 举报

发表于 2017-7-19 18:27:34 | 显示全部楼层
extern int IBI = 600; 这种写法就是属于C语言基础不牢靠
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 18:42:20 | 显示全部楼层
Yang_Guang 发表于 2017-7-19 18:27
extern int IBI = 600; 这种写法就是属于C语言基础不牢靠

那应该怎么写
回复 支持 反对

使用道具 举报

发表于 2017-7-19 21:05:41 | 显示全部楼层
extern int IBI = 600;,这样的初始化对于extern来说是不推荐的。
首先在函数内部的声明都是多余的,你extern int IBI = 600; 这样extern就是多余的,本来在函数里面定义的变量就是局部变量,你加什么extern声明。。。
如果用的话写在函数外面,然后其他文件需要的时候加声明,这才是全局变量。
你下面那个应该也是一样的问题,,
这只是我的理解,不知道对不对.............
回复 支持 反对

使用道具 举报

发表于 2017-7-20 10:27:09 | 显示全部楼层
直接传工程上来看看,不然我们猜不出你的问题啊,亲。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 10:44:58 | 显示全部楼层
fire 发表于 2017-7-19 17:36
把工程传上来 看看

不会传工程
回复 支持 反对

使用道具 举报

发表于 2017-7-20 10:53:19 | 显示全部楼层

那我们帮不了你了,有心无力   
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 08:20 , Processed in 0.046031 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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