电子发烧友网 > 控制/MCU > 正文

STM32单片机设计extern全局变量的定义解析

2018年11月01日 16:10 ? 次阅读

今天在写SysTcik_Handler()这个中断函数时,总是报错,明明在开头定义的全局变量extern u16 ntime,(nTIme--写在stm32f10x_it.c的sysTIck中断函数中)但是编译时总是报错,百度之后才有了解决方法,

STM32单片机设计extern全局变量的定义解析

之前也注意到过extern变量,但是没有仔细思考过它的使用方法,今天碰到了,一定要把它弄明白,把这个关键字的一般作用弄清楚(仅仅是一般作用,C的博大精深不敢妄谈);

当你建立一个头文件库时,经常会遇到一个问题,就是在A文件中定义一个temple变量,想把它的值传递给B文件使用,但是A文件操作中函数又不可以带返回参数,比如说中断服务函数,那该怎么办?如果你把temple定义在A中,然后让A.h和B.h包含在includes.h中,然后把includes.h放在A.c和B.c中单个编译是没有问题的,但是链接的时候会出现问题,

“Symbol temple mulTIply defined(by A.o and B.o)”

意思是这个变量被多次定义了!!!

解决的方法是:

在A中定义temple变量后,在B中用extern 声明一下就可以了,例如:

1.在A中定义temple并且赋值:u16 temp2=0;

2.在B中声明extern u16 temp2;

STM32单片机设计extern全局变量的定义解析

这里只是声明,不再赋值,否则会报错!

Symbol temp2 mulTIply defined (by catch_pwm.o and app.o)

这里要注意变量定义和变量声明的区别:

变量定义使用“数据类型+变量名称”的形式,编译器需要给它分配内存单元的;

而变量声明使用“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其他外部C文件中定义,我这里只是在外部用它。编译器就不会给它分配内存空间,而等到真正遇到变量定义时再给它分配内存空间。

//////////////////以下是“聚海”de帖子///////////////////////////////////

1、普通变量定义成全局变量

如果是普通类型,完全可以不用*.h文件,直接在*.c文件中定义,在调用文件处用extern 声明,因为对于普通类型,编译器是可以识别的。比如在一个 my.c文件中,我定义了char name[10];那么在别的文件中只要用extern char name[](由于是声明,一位数组可以省略大小,但不建议用指针,比较指针和数组是两回事)外部声明就可以了,告诉编译器这个变量我已经定义过了,具体怎样,你慢慢找吧。这符合常理,因为char是编译器能自主识别的类型。

2、自定义结构体类型定义成全局变量

不同于普通类型,如果不预先通知编译器,编译器是不会识别你自定义的类型的。这个时候,*.h文件便出现了。不是定义结构类型不占内存吗?那好,我大结构体的定义放在*.h文件中,这样一来,无论你incude无数次,内存都不会被占用的。而且这样还有个好处,在别的文件中可以include这个*.h文件,这样,在这个文件中,编译器就可以识别你的自定义类型了,目的不就达到了?假如我在global.h中定义了

typedef struct _POSITION

{

int x;

int y;

}POSITION;

那么我可以在一个global.c文件中实现全局变量的定义,不过要include那个*.h文件,比如

include “global.h”

POSITION current,;

这样就定义了cunrrent这个变量,在别的文件中引用这个变量时,只要extern POSITION current;进行声明,然后就可以用了,不过这个文件也还得include “global.h” 因为如果不包含,在这个文件中是不识别POSITION类型的。

1.如何引用一个已经定义过的全局变量?

答:extern  可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

2.全局变量可不可以定义在可被多个.C文件中?为什么?

答:可以,在不同的C文件中以static形式来声明同名全局变量。  可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

OVER!

技术专区

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

怎样用STM32单片机的GPIO控制LED显示状...

ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。 管脚对于位写1 gpio ...

发表于 2018-11-01 15:45 ? 6次阅读
怎样用STM32单片机的GPIO控制LED显示状...

基于STM32单片机高级控制定时器TIM1和TI...

STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16 位自动装载计数器(CNT)构成。...

发表于 2018-10-30 16:10 ? 72次阅读
基于STM32单片机高级控制定时器TIM1和TI...

基于STM32单片机对跑马灯的控制

首先要知道普通的IO就两种功能一个为输入,一个为输出。然后再以输入和输出细分为以哪种模式输出、以哪种...

发表于 2018-10-30 16:02 ? 54次阅读
基于STM32单片机对跑马灯的控制

如何选择STM32的启动代码

●小容量产品是指闪存存储器容量在16K 至32K 字节之间的STM32F101xx、STM32F10...

发表于 2018-10-30 16:00 ? 41次阅读
如何选择STM32的启动代码

基于STM32单片机对流水灯的控制

1.跟着例程自己创建自己的工程时,出现了GPIO库文件里有undefined等等,在我们刚开始学习新...

发表于 2018-10-30 15:42 ? 69次阅读
基于STM32单片机对流水灯的控制

基于STM32单片机秒中断源和闹钟中断源的解决方...

在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时...

发表于 2018-10-30 14:58 ? 29次阅读
基于STM32单片机秒中断源和闹钟中断源的解决方...

基于STM32单片机在手持设备中的应用设计

STM32作为现在最流行的单片机,广泛应用与各个领域。现在的手持设备也经常用STM32作为主控芯片。...

发表于 2018-10-29 15:53 ? 91次阅读
基于STM32单片机在手持设备中的应用设计

基于STM32单片机流水灯控制中的GPIO_In...

学习STM32时,首先要熟悉流水灯例程,在这里就来分析流水灯中的GPIO_Init()函数 例...

发表于 2018-10-29 15:42 ? 66次阅读
基于STM32单片机流水灯控制中的GPIO_In...

基于STM32单片机FSMC协议分析

FSMC对于类RAM存储器的读操作过程一般是:先发出片选信号、读写信号和地址信号,然后等待数据建立完...

发表于 2018-10-26 15:42 ? 43次阅读
基于STM32单片机FSMC协议分析

基于ESP8266和STM32单片机的程序代码编...

ESP8266模块在STM32上做Server时,外部对其端口进行收发数据的程序,大部分代码都备注了...

发表于 2018-10-25 15:12 ? 136次阅读
基于ESP8266和STM32单片机的程序代码编...

基于stm32单片机利用通用定时器输出PWM

第一步:开启时钟使能 RCC-》APB1ENR:1 位 //开启定时器3 时钟使能 第二...

发表于 2018-10-25 15:05 ? 100次阅读
基于stm32单片机利用通用定时器输出PWM

ST推出了STLINK-V3下一代STM8和ST...

意法半导体推出了STLINK-V3下一代STM8 和STM32微控制器代码烧写及调试探针,进一步改进...

发表于 2018-10-25 14:48 ? 83次阅读
ST推出了STLINK-V3下一代STM8和ST...

基于STM32单片机低功耗模式机制详细解析

本文主要解读STM32低功耗模式的机制,并不侧重STM32低功耗的程序实现,而且借助STM32固件库...

发表于 2018-10-24 16:16 ? 106次阅读
基于STM32单片机低功耗模式机制详细解析

基于STM32单片机的串口使用解析

STM32串口功能比较强大,但仅仅使用串口来说,是很简单的

发表于 2018-10-24 16:11 ? 95次阅读
基于STM32单片机的串口使用解析

基于STM32F103系列单片机的11个定时器解...

STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器...

发表于 2018-10-23 15:54 ? 62次阅读
基于STM32F103系列单片机的11个定时器解...

基于STM32单片机ADC连续采集和DMA循环转...

描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC...

发表于 2018-10-22 15:28 ? 112次阅读
基于STM32单片机ADC连续采集和DMA循环转...

基于STM32单片机通过使用宏assert_pa...

固件函数库通过检查库函书的输入来实现运行时间错误侦测。通过使用宏assert_param来实现运行时...

发表于 2018-10-22 15:12 ? 62次阅读
基于STM32单片机通过使用宏assert_pa...

基于STM32时钟系统的开发及配置

研究过时钟来源,再来研究时钟的去向,MCU自身要能正常运作,即需要一个时钟,这个时钟既是系统时钟(S...

发表于 2018-10-19 15:55 ? 158次阅读
基于STM32时钟系统的开发及配置

STM32单片机常见的工作异常现象分析及解决方案

工作异常现象:main函数中的系统运行指示灯不闪烁,但是初始化过程中点的一个灯是亮的!说明程序运行一...

发表于 2018-10-19 15:55 ? 105次阅读
STM32单片机常见的工作异常现象分析及解决方案

基于stm32单片机,FLASh先擦后写的函数分...

void FLASH_WriteByte(u32 addr ,u16 flashdata1) ...

发表于 2018-10-18 15:30 ? 124次阅读
基于stm32单片机,FLASh先擦后写的函数分...

基于STM32单片机利用ST库函数设置Systi...

对于STM32系列的微处理器中,执行一条指令只需要几十ns,进行for循环时,要实现N毫秒延时,那么...

发表于 2018-10-18 15:12 ? 90次阅读
基于STM32单片机利用ST库函数设置Systi...

基于STM32单片机的功能及特点

STM32是32位的单片机却只要八位单片机的价格,速度也是八位的好几倍。 更重要的是它作为ARM入...

发表于 2018-10-17 16:51 ? 176次阅读
基于STM32单片机的功能及特点

STM32单片机外部晶振配置时钟设置

由于STM32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。 ...

发表于 2018-10-12 16:11 ? 181次阅读
STM32单片机外部晶振配置时钟设置

基于通过寄存器和调用库函数的方式,对比测试STM...

通过在线调试的方式,可以看出1条C语句:GPIOA -> BSRR = 1<<3;//PA3输出高电...

发表于 2018-10-12 15:59 ? 97次阅读
基于通过寄存器和调用库函数的方式,对比测试STM...

STM32单片机特性解析

其基于专为要求高性能、 低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一...

发表于 2018-09-10 16:55 ? 402次阅读
STM32单片机特性解析

传主程序枚举控件的引用给子面板,全局变量可以,功能全局变量就不行!请问是什么原因?

发表于 2018-08-03 00:25 ? 413次阅读
传主程序枚举控件的引用给子面板,全局变量可以,功能全局变量就不行!请问是什么原因?

单片机的简介51单片机和STM32单片机的区别及...

单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序...

发表于 2018-07-06 15:57 ? 1391次阅读
单片机的简介51单片机和STM32单片机的区别及...

在keil中仿真stm32单片机

发表于 2018-07-06 06:54 ? 385次阅读
在keil中仿真stm32单片机

STM32串口SPI主从通信源程序

发表于 2018-07-06 03:08 ? 364次阅读
STM32串口SPI主从通信源程序

在头文件中定义全局变量的方法

发表于 2018-07-04 08:34 ? 219次阅读
在头文件中定义全局变量的方法

在keil中仿真stm32单片机

发表于 2018-07-02 01:20 ? 145次阅读
在keil中仿真stm32单片机

7个基于STM32单片机的精彩设计实例

STM32是ST公司推出的基于ARM-Cortex-M3内核的32位单片机。

发表于 2018-04-13 17:11 ? 2950次阅读
7个基于STM32单片机的精彩设计实例

全局变量和队列的区别在哪里?

发表于 2018-03-28 21:31 ? 614次阅读
全局变量和队列的区别在哪里?

stm32单片机休眠模式后无法下载程序怎么办

利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒...

发表于 2018-03-23 14:40 ? 548次阅读
stm32单片机休眠模式后无法下载程序怎么办

新手求助 串口中断里面全局变量失效问题

发表于 2018-02-10 10:25 ? 1432次阅读
新手求助 串口中断里面全局变量失效问题

谨慎使用局部变量和全局变量

发表于 2018-01-30 10:58 ? 1055次阅读
谨慎使用局部变量和全局变量

ARM汇编.global和.extern(转载)

发表于 2018-01-26 15:54 ? 617次阅读
ARM汇编.global和.extern(转载)

关于全局变量和功能全局变量的创建和使用

发表于 2018-01-25 20:58 ? 2877次阅读
关于全局变量和功能全局变量的创建和使用

stm32单片机入门c语言解析

学习思路(仅供参考):步骤一,安装完STM32学习的软件,比如J-Link、Keil for ARM...

发表于 2017-12-23 15:26 ? 9074次阅读
stm32单片机入门c语言解析

全局变量和成员变量的区别分析

成员变量是指定维度的成员变量,用于标识某个维度成员。简介由 Analysis Services 内部...

发表于 2017-12-11 13:50 ? 890次阅读
全局变量和成员变量的区别分析

全局变量和成员变量的区别分析

成员变量是指定维度的成员变量,用于标识某个维度成员。简介由 Analysis Services 内部...

发表于 2017-12-11 13:50 ? 164次阅读
全局变量和成员变量的区别分析

全局变量和局部变量有什么区别

全局变量是编程术语中的一种,源自于变量之分。变量分为局部与全局,局部变量又可称之为内部变量。局部变量...

发表于 2017-12-11 11:58 ? 1420次阅读
全局变量和局部变量有什么区别

stm32单片机gpio工作原理是怎样的呢?看完...

黄色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号1的I/O 端口进入STM32内部经过编...

发表于 2017-11-28 07:32 ? 4310次阅读
stm32单片机gpio工作原理是怎样的呢?看完...

STM32单片机GPIO口的学习

STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL...

发表于 2017-11-25 09:52 ? 685次阅读
STM32单片机GPIO口的学习

stm32单片机中使用GPIO口模拟PWM输出解...

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核...

发表于 2017-11-24 17:33 ? 2113次阅读
stm32单片机中使用GPIO口模拟PWM输出解...

关于单片机全局变量初始化的问题

变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能...

发表于 2017-11-22 15:16 ? 674次阅读
关于单片机全局变量初始化的问题

单片机RS485通信接口、控制线、原理图及程序教...

RS232 标准是诞生于 RS485 之前的,但是 RS232 有几处不足的地方:接口的信号电平值较...

发表于 2017-04-24 14:12 ? 9224次阅读
单片机RS485通信接口、控制线、原理图及程序教...

单片机STM32的引脚模式设置

单片机STM32的引脚有多种方式可以选择。 如果你是用直接写寄存器来配置的话,那么,看上手册,给配置...

发表于 2016-08-16 18:21 ? 6862次阅读
单片机STM32的引脚模式设置

工厂自动化难题,用STM32-F2全方位解决方案...

工业环境正在对嵌入式控制系统开发人员构成日益严峻的挑战,究其主要原因,当前系统和通信协议栈变得越来越...

发表于 2013-06-13 11:33 ? 4864次阅读
工厂自动化难题,用STM32-F2全方位解决方案...

工程师应该掌握的STM32单片机关键基础精华

从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没有开始...

发表于 2013-04-15 11:45 ? 19717次阅读
工程师应该掌握的STM32单片机关键基础精华

STM32学习手记(5):数据的保存与毁灭!

据说,32位单片机很可能会取代8位单片机或16位单片机,诸如51,PIC,AVR等。于是等到Cort...

发表于 2012-12-11 09:36 ? 36565次阅读
STM32学习手记(5):数据的保存与毁灭!

工程师STM32单片机学习基础手记(4):用PW...

用PWM的方法实现荧火虫灯——上次提到要用Timer的PWM功能来实现荧火虫灯。当然还是找一个现成的...

发表于 2012-11-07 15:24 ? 19119次阅读
工程师STM32单片机学习基础手记(4):用PW...

工程师STM32单片机学习手记(3):修修改改玩...

在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫...

发表于 2012-10-25 10:18 ? 24202次阅读
工程师STM32单片机学习手记(3):修修改改玩...

工程师STM32单片机学习基础手记(2):从勉强...

将蓝色框内的GPIOC改为GPIOD。这个是最先写的,但实际上一开始根本没注意到这个地方,没有改成G...

发表于 2012-10-11 11:53 ? 18796次阅读
工程师STM32单片机学习基础手记(2):从勉强...

STM32单片机,想说爱你不容易!?

电子发烧友网讯:单片机领域从来就不缺激烈观点的碰撞,也许不同观点间的碰撞,会容易擦出更为绚丽的智慧火...

发表于 2012-09-28 15:07 ? 16994次阅读
STM32单片机,想说爱你不容易!?

STM32单片机小Tips(1):充分准备与开始...

前言:从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没...

发表于 2012-09-27 11:03 ? 32413次阅读
STM32单片机小Tips(1):充分准备与开始...
a计划博彩 a计划博彩,连环夺宝注册送,唯品会注册送60元