初级会员

- 积分
- 56
- 金钱
- 56
- 注册时间
- 2015-1-8
- 在线时间
- 0 小时
|
5金钱
在usart.h文件中的所有代码如下:
#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"
#define USART_REC_LEN 200 //定义最大接收字节数 200
#define EN_USART1_RX 1 //使能(1)/禁止(0)串口1接收
extern u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
extern u16 USART_RX_STA; //接收状态标记
void uart_init(u32 bound);
#endif
在usart.c中有如下代码:
include"usart.h"
u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
u16 USART_RX_STA=0; //接收状态标记
我的分析:
在编译工程的时候,应该是先把把usart.h中的代码复制到 include"usart.h"所在程序中的位置处,整理后的usart.c中的代码的相对位置顺序为:
#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"
#define USART_REC_LEN 200 //定义最大接收字节数 200
#define EN_USART1_RX 1 //使能(1)/禁止(0)串口1接收
extern u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
extern u16 USART_RX_STA; //接收状态标记
void uart_init(u32 bound);
#endif
u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
u16 USART_RX_STA=0; //接收状态标记
然后再对上述整理后的程序代码进行编译。那么,按照c语言的知识, extern u16 USART_RX_STA; 这句话的意思是全局变量申明。 u16 USART_RX_STA=0; 的意思是定义全局变量并初始化为0。
我的问题:
1、在usart.h 中并没有其他函数使用全局变量 USART_RX_STA,为什么要在usart.h中进行申明?
2、即使在usart.h中有其他的函数使用全局变量 USART_RX_STA,按照编译的原理,也应该是在usart.h中进行定义全局变量并初始化,
在usart.c 中进行全局变量申明。但给的程序不是如此,该如何理解??
|
|