2826|0

2453

帖子

19

TA的资源

五彩晶圆(中级)

楼主
 

求助头文件的问题 [复制链接]

http://zhidao.baidu.com/question/357076310.html?oldq=1

 

我百度了一下头文件的作用如下:
1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户
提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
      可将头文件保存于 include 目录,将定义文件保存于 source 目录(可以是多级
目录)。
   如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。为了加强
信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
然而具体该怎么用呢?
以zlg的某工程为例:
截取main.c开头某一段:
.....
#include "hw_memmap.h"
#include "hw_ints.h"
#include "hw_types.h"
#include "interrupt.h"
#include "gpio.h"
#include "sysctl.h"
#include "Systick.h"
#include "Timer.h"
#include "Pwm.h"
#include "Type.h"
                                     ...
中gpio.h为例,大致包含宏定义和函数声明,截取如下
...
#define GPIO_PIN_3              0x00000008  // GPIO pin 3
#define GPIO_PIN_4              0x00000010  // GPIO pin 4
...
extern void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins,
                           unsigned long ulPinIO);
extern unsigned long GPIODirModeGet(unsigned long ulPort, unsigned char ucPin);
...
函数的实现是在同目录下得gpio.c中实现的
gpio.c截取如下:
#include "../hw_gpio.h"
#include "../hw_ints.h"
#include "../hw_memmap.h"
#include "../hw_types.h"
#include "debug.h"
#include "gpio.h"
.....
void
GPIOPinIntEnable(unsigned long ulPort, unsigned char ucPins)
{
    //
    // Check the arguments.
    //
    ASSERT((ulPort == GPIO_PORTA_BASE) || (ulPort == GPIO_PORTA_AHB_BASE) ||
           (ulPort == GPIO_PORTB_BASE) || (ulPort == GPIO_PORTB_AHB_BASE) ||
           (ulPort == GPIO_PORTC_BASE) || (ulPort == GPIO_PORTC_AHB_BASE) ||
           (ulPort == GPIO_PORTD_BASE) || (ulPort == GPIO_PORTD_AHB_BASE) ||
           (ulPort == GPIO_PORTE_BASE) || (ulPort == GPIO_PORTE_AHB_BASE) ||
           (ulPort == GPIO_PORTF_BASE) || (ulPort == GPIO_PORTF_AHB_BASE) ||
           (ulPort == GPIO_PORTG_BASE) || (ulPort == GPIO_PORTG_AHB_BASE) ||
           (ulPort == GPIO_PORTH_BASE) || (ulPort == GPIO_PORTH_AHB_BASE));

    //
    // Enable the interrupts.
    //
    HWREG(ulPort + GPIO_O_IM) |= ucPins;
}
....
我的问题是:
1、main.c和gpio.c都包含了gpio.h。
然而当程序从main函数开始执行后,遇到include"gpio.h"将gpio.h内容“拷贝”到mian.c中,当函数执行到GPIOPinIntEnable()函数时整个工程并不包含gpio.c的内容。如何实现GPIOPinIntEnable()的算法的呢。(编译器怎么知道存在gpio.c这个文件并从中搜索)
2.我在zlg的任意一个头文件里没有看到包含别个系统自带和自建的头文件,和具体算法实现。和网上一些资料不一致。
3.zlg的库能够实现函数的算法隐藏,而只讲接口公布出来。其原理在哪?(回到第一个问题)

以引用摘自Luminary库。

问题补充:

gpio.h和gpio.c应该放在什么位置
与mian.c同目录还是source目录下?

此帖出自编程基础论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表