原创 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, 也充分说明了该现象:
1.jpg
虽然, 我们在配置位窗口, 选择各项设定, 但是在 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后, 
2.jpg
通过对 HEX 文件的分析, 我们也可以证实上述现象.
 
 
[定义”配置宏”的文件]
我们在 HICC18 安装目录中, 找到了 \dat\cfgmap 目录下的 .cfgmap 文件(比如说 18f45k20.cfmap). 这里可能是”配置宏”被定义的地方.
3.jpg
 
要提及的是, 我们也找到了有着同样疑问的帖子, 
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”), 这里引入了新的配置方式如下:
 
4.jpg
之所以使用这个语法, 如同该使用手册中提到的, 各种设定值, 有着详细的文档支持. 
容易找到 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
 

文章评论1条评论)

登录后参与讨论

用户1602177 2013-2-20 11:17

感谢博主分享~~
相关推荐阅读
allen_zhan 2023-02-27 19:08
对"三极管"译名由来的探讨
想讨论一个有意思的话题:今天中国大陆的电子业界, 为何将 BJT 称呼为 "三极管"? 或因其象形, 前辈自行进行随意的不严谨定义么? 带着疑问我们做了一下延伸查阅, 或得出这样的结论, 即中译名"三...
allen_zhan 2023-02-19 18:15
对知乎提问"为何三极管的一个PN结工作在反偏"的回复
将这个回复, 也发表在博文中, 作为自己的一个学习笔记叭.知乎问题: "三极管里面的PN结相当于二极管,为什么里面PN结加反向电压也能导通?"我的回复:首先, 二极管的"反向"概念, 容易给初学者某种...
allen_zhan 2023-02-18 10:17
从肖特基二极管到PN结与三极管
最近数个工作日的兴趣是回顾电子基础器件的发明/发展历史, 期待夯实技术基础的底蕴. 在学习与搜索资料的过程中, 顺便对知乎的一个同学的基础问题, 进行了回复. 不小心回复一下就成了千字文, 觉得挺有趣...
allen_zhan 2023-01-28 11:53
微功率 ISM 频率探讨相关文档组总结
不知不觉, 自开启关于微功率频率的话题起, 即从第一份文章写就到今天总结之日, 已经接近 10 个工作日左右. 早先的想法是对工程界未来的微功率设备相关项目, 从项目规划开始, 对选择系统, 频率, ...
allen_zhan 2023-01-27 22:50
关于 LoRa 应用场景的讨论
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. "第52号文" 对 470MHz 的约束引自 如下:(四)民用计量仪表限在建筑楼宇、住宅小区及村庄等小范围内组网应用,任意时刻限...
allen_zhan 2023-01-25 13:24
ISM 频段中 2.4G 与 5.8GHz 设备的使用与限制
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. ISM 频段定义中的 2.4G 与 5.8GHz正如同 文中确定的, 2.4G, 5.8GHz 属于中国大陆 ISM 频段的定义...
我要评论
1
21
关闭 站长推荐上一条 /2 下一条