本文来源其他网站。^_^

一:关于处理器的寄存器定义

针对处理器的寄存器定义文件是一个汇编文件,包含特定器件上所有特殊功能寄存器的定义。编译时,针对处理器的寄存器定义文件将被编译成需要链接到应用程序的目标文件 。

例如,在 PIC18C452 针对处理器的寄存器定义文件中, PORTA 定义为:

SFR_UNBANKED0 UDATA_ACS H'f80'PORTAPORTAbits RES 1 ; 0xf80

第一行指定 PORTA 所在的数据寄存器存储区和这个存储区的起始地址。 PORTA 有两个标号, PORTAbits 和 PORTA,都指向同一个地址 (本例中是 0xf80)。

二:关于 声明

针对处理器的头文件是包含特殊功能寄存器外部声明的 C 文件,特殊功能寄存器在寄存器定义文件中定义。

例如,在PIC18C452 的针对处理器头文件中, PORTA 声明为:

extern volatile near unsigned char PORTA;

和:

extern volatile near union {struct {unsigned RA0:1;unsigned RA1:1;unsigned RA2:1;unsigned RA3:1;unsigned RA4:1;unsigned RA5:1;unsigned RA6:1;} ;struct {unsigned AN0:1;unsigned AN1:1;unsigned AN2:1;unsigned AN3:1;unsigned T0CKI:1;unsigned SS:1;unsigned OSC2:1;} ;struct {unsigned :2;//填充前两位unsigned VREFM:1;unsigned VREFP:1;unsigned :1;//此位被填充unsigned AN4:1;unsigned CLKOUT:1;} ;struct {unsigned :5;//填充前五位unsigned LVDIN:1;} ;} PORTAbits ;

第一个声明指定 PORTA 是一个字节 (unsigned char)。由于变量是在寄存器定义文件中定义的,因此需要 extern 修饰符。 volatile 修饰符告知编译器不能假定 PORTA 能保留赋给它的值。 near 修饰符指定了端口位于存取 RAM 中。第二个声明指定 PORTAbits是可位寻址的匿名结构的联合 。特殊功能寄存器中的每一位可能有不只一种功能 (因此会有不只一个名称),因此联合中对于同一个寄存器有多个结构定义。所有结构定义中的各位分别针对寄存器中相同的位。如果一个位只有一个功能,那么在其它结构定义中,这一位只是被填充。例如,在第三和第四个结构中, PORTA 的第 1 位 和第 2 位只是被填充,因为它们只有两个名称;而第 6 位有四个名称,在每个结构中都指定了第 6 位。

pic关于头文件的进一步理解(基于PIC单片机 C18编译器)相关推荐

  1. Qt工作笔记-undefined reference to `vtable for MyObject'及对moc文件的进一步理解

    源码如下: main.cpp #include <QApplication> #include <QObject> #include <QTextCodec>cla ...

  2. PIC单片机入门_PICC头文件介绍

    PICC支持下的C程序代码中一定要包含pic.h头文件,该文件安装在HT-PIC\include目录下.它是很多头文件的集合,C编译器在pic.h中根据用户选择的芯片自动载入相应的其它头文件,例如用户 ...

  3. C++:include:理解 C++ 中的头文件和源文件的作用

    关于头文件和源文件我们主要围绕: C++编译模式, 声明和定义区别, 符号只能被定义一次, 符号被定义在多个源文件,但是一个源文件只能定义一次 这四个方面来分析论述 1:C++ 编译模式 在一个C++ ...

  4. C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用

    1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...

  5. 理解 C++ 中的头文件和源文件的作用

    一.C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件-- .cpp 文件和 .h 文件.其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码:而 .h 文件则被称作 ...

  6. C++ 头文件使用规范建议

    1.背景 拥有良好的编程规范和风格是一名程序员成熟的标志.规范的编码可以减少代码冗余,降低出错率,便于代码管理和代码交流等,事实上,其作用远不止这些,我们要牢记编码规范在心中啊. C++ 具有很多强大 ...

  7. C语言头文件路径相关问题总结说明

    聊聊系统路径位置,绝对路径与相对路径,正斜杠 `/` 与 反斜杠 `\` 使用说明 ...... by 矜辰所致 目录 前言 一.C语言中的头文件引用 二.KEIL 中的头文件路径 2.1 Incud ...

  8. C++头文件和源文件,编译过程

    源文件如何根据#include来关联头文件  1.系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找. #include <xxx.h> 2.用户自定义的文件用双引号括起来, ...

  9. C++头文件和源文件的编译过程

    源文件如何根据#include来关联头文件 1.系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找. #include <xxx.h> 2.用户自定义的文件用双引号括起来,编 ...

最新文章

  1. 大学生目前普遍存在的问题,看你中招了没?
  2. 分享几个 Pyecharts 技巧,助你画出更直观/炫酷的图表
  3. 两台电脑之间用网线之间传文件
  4. 用python画爱心动图_编写Python爬虫抓取暴走漫画上gif图片的实例分享
  5. jQuery版本不同及多次引用问题
  6. MinGW问题解决:gcc: installation problem, cannot exec `cc1'
  7. 干货 | 携程度假无线前端架构演进之路
  8. 软件开发定律系列之布鲁克斯定律有感
  9. 关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题
  10. 【数据库】MySQL创建视图(CREATE VIEW)
  11. Shell编程之条件语句(if语句,case分支语句)
  12. vue设置html自动跳转路由器,vue2.0项目实现路由跳转的方法详解
  13. Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
  14. Hbase和MySQL的区别是什么?
  15. 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物救助系统
  16. sql server 多条记录数据合并为一条_面试必备sql知识点——MySQL基础
  17. Zune支持哪些格式?
  18. 柔性OLED触摸屏的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. word毕业论文页眉设置自动添加章节标题并左右对齐
  20. 《道德经的人生智慧》读书笔记

热门文章

  1. iOS 设计模式系列:Memento – 备忘录模式
  2. 屏幕使用时间忘了能还原吗_忘记了屏幕使用时间的密码怎么办,解决方法从这揭秘~...
  3. c#语言switch+case用法,C# switch case语句
  4. 2017年度总结——三十而立
  5. springboot基于Javaweb的超市管理系统 毕业设计-附源码281024
  6. 现代信号处理之手机加速度传感器步态数据采集、分析(采集的数据和MATLAB代码见CSDN同名资源)
  7. 通过TrackPopupMenu函数弹出菜单
  8. 计算机专业的英语短文,计算机专业英语短文翻译.doc
  9. 解决Failed to get response from https://registry.npmmirror.com/eslint问题
  10. 电脑在IDE模式下能正常启动,改成AHCI后蓝屏——解决方法