原创
PICC18(V9.80)的配置宏的定义位置
2013-2-20 11:17
1600
21
22
分类:
消费电子
PICC18(V9.80)的配置位的定义位置
[环境]
编译环境: MPLAB IDE(V8.89) + PICC18(V9.80)
在 “Quick Start.pdf” 文档中, 我们读到第一个 hello world 代码, 我们略略调整如下:
#include
__CONFIG(1, FCMDIS & IESODIS & XT);
void main(void)
{
while(1);
}
[问题]
尽管编译顺利通过, 我们想知道的, 就是”配置宏”, 比方说 FCMDIS 在哪里定义?
似乎网络上, 曾提及在旧版本中可以到安装目录下的 include 文件夹中, 寻找类似"pic18Fxxxx.h” 头文件, 但是在我们安装的这个版本中, 却无法找到. 实际上, 即使用”文件查找”的方式, 都无法找到 FCMDIS 的定义.
[为何要在代码中完成配置位定义]
尽管在 IDE 中, 允许我们在可视化操作下, 对配置位进行选择和配置, 但是当我们 uncheck Configuration Bits set in code, 也就是使用 Configuration Bits Window 进行配置时, 我们发现最终生成的 hex 文件, 却不不包含该配置位.
实际上, 在 IDE 的 output window, 也充分说明了该现象:
虽然, 我们在配置位窗口, 选择各项设定, 但是在 hex file 上, 却没有发现配置位. 一个合理的假设是, 当我们使用 IDE 使用 programmer 时, IDE 在帮我们做这个 job``` 这令人烦恼, 试试看出货时, 在生产的电脑上, 安装 IDE, 开启 project, 某个生产工程师或产线MM做 program```` ; (
因此, 我们应该使用 do set configuration bits with code, 也就是[环境]章节中, 我们提到的:
__CONFIG(1, FCMDIS & IESODIS & XT);
在屏蔽了 configuration bits windows 的 enable checkbox 后, 我们回到了代码实现的工作, rebuile后,
通过对 HEX 文件的分析, 我们也可以证实上述现象.
[定义”配置宏”的文件]
我们在 HICC18 安装目录中, 找到了 \dat\cfgmap 目录下的 .cfgmap 文件(比如说 18f45k20.cfmap). 这里可能是”配置宏”被定义的地方.
要提及的是, 我们也找到了有着同样疑问的帖子,
http://forum.htsoft.com/all/showflat.php/Cat/0/Number/233812/page/0/fpart/2/vc/1
这里的讨论者, 饶有兴趣提到了, 该文档中的语法问题, 简单提一下:
形如 “XT:FOSC=XT” 的意义, 我们一看就懂. 那么, “FCMDC:” (就是我们要找的这个”配置宏”) 又代表了啥? 这个帖子中, 不少人猜测这是 “If you're seeing just FCMDIS:, I'd guess that means mean exactly what you'd expect: FCMDIS is legal, but doesn't do anything (i.e., OFF is its default state anyway). ” 说起来, 我们认同这个假设…. ; P
[新的配置位设定方式]
当我们找到了 .cfgmap 文件, 并通过 “:” 后的解释, 或者直接猜测 “FCMDC:”(没有任何解释, 依靠我们推测其为默认值), 我们可以使用 __CONFIG 方式, 进行配置位设定.
但是, 检索 HICC18 的 manual 文档, 我们很清晰知道, 原来 __CONFIG 是一种过时用法, 不被 V9.80 继续推荐(From “Configuration Fuse” of Chapter “C Language Features”), 这里引入了新的配置方式如下:
之所以使用这个语法, 如同该使用手册中提到的, 各种设定值, 有着详细的文档支持.
容易找到 chipinfo.html, 很快的, 在 html 文档的支持下, 我们很容编写出类似下面语句的例子:
#include
//__CONFIG(1, FCMDIS & IESODIS & FOSC_INTIO7);
#pragma config IESO=OFF, FOSC=INTIO7, FCMEN=OFF
void main(void)
{
while(1);
}
显然, 两者效果是等效的. 不意外的, 我们检查 HEX 文件, 也是相同的. 另外提及的是, 在 0x300001 处的 config byte 的值就是 9, 这与 IDE 中的 configuration Bites Set Window 中选择相应的项目是一致的.
因此, 在 chipinfo.html 文档的帮助下, 设定 configuration bits 的任务变得轻易.
Allen Zhan
allen_zhan@163.com
Release ON
用户1602177 2013-2-20 11:17