9784|26

1977

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

G2553.h头文件有许多不明白的地方,求帮助解释 [复制链接]

各位坛友好,我今天晚上闲来无事,查看了一下g2553的头文件,发现了有好多细节的地方很不清楚,百度了一晚上也弄不出个所以然,所以希望在这里大家能帮助我解释一下这些疑问。问题如下:
在g2553的头文件中,
/* External references resolved by a device-specific linker command file */
#define SFR_8BIT(address)   extern volatile unsigned char address
这个要怎么理解,结合下面的:
#ifndef __DisableCalData
SFR_8BIT(CALDCO_16MHZ);                       /* DCOCTL  Calibration Data for 16MHz */
SFR_8BIT(CALBC1_16MHZ);                       /* BCSCTL1 Calibration Data for 16MHz */
SFR_8BIT(CALDCO_12MHZ);                       /* DCOCTL  Calibration Data for 12MHz */
SFR_8BIT(CALBC1_12MHZ);                       /* BCSCTL1 Calibration Data for 12MHz */
SFR_8BIT(CALDCO_8MHZ);                        /* DCOCTL  Calibration Data for 8MHz */
SFR_8BIT(CALBC1_8MHZ);                        /* BCSCTL1 Calibration Data for 8MHz */
SFR_8BIT(CALDCO_1MHZ);                        /* DCOCTL  Calibration Data for 1MHz */
SFR_8BIT(CALBC1_1MHZ);                        /* BCSCTL1 Calibration Data for 1MHz */
#endif /* #ifndef __DisableCalData */
我是越看越不能理解,类似SFR_8BIT(CALDCO_16MHZ);                       /* DCOCTL  Calibration Data for 16MHz */ 的代码有很多很多,主要是对
/* External references resolved by a device-specific linker command file */
#define SFR_8BIT(address)   extern volatile unsigned char address
的不理解,其次#ifndef __DisableCalData和#endif /* #ifndef __DisableCalData */又是什么意思,请各位高人前辈帮忙,谢谢。

最新回复

main.c中有一句“BCSCTL1 = CALBC1_16MHZ;” 不明白“CALBC1_16MHZ”的值是多少  详情 回复 发表于 2013-1-22 19:34

点评

SFR_8BIT(CALDCO_16MHZ); 对使用宏定义的地方进行字符展开就是:extern volatile unsigned char CALDCO_16MHZ; SFR_8BIT is a macro that defines a variable to be a volatile unsigned char located at a  详情 回复 发表于 2012-12-20 23:36
#ifndef __DisableCalData和#endif /* #ifndef __DisableCalData 是条件编译。如果没有定义就定义它。请参考C语言手册 [ 本帖最后由 qinkaiabc 于 2012-12-20 15:37 编辑 ]  详情 回复 发表于 2012-12-20 23:30
 
点赞 关注

回复
举报

2776

帖子

413

TA的资源

五彩晶圆(中级)

沙发
 

回复 楼主 bobde163 的帖子

#ifndef __DisableCalData和#endif /* #ifndef __DisableCalData

是条件编译。如果没有定义就定义它。请参考C语言手册

[ 本帖最后由 qinkaiabc 于 2012-12-20 15:37 编辑 ]
 
个人签名
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

板凳
 

回复 楼主 bobde163 的帖子

SFR_8BIT(CALDCO_16MHZ);
对使用宏定义的地方进行字符展开就是:extern volatile unsigned char CALDCO_16MHZ;


SFR_8BIT is a macro that defines a variable to be a volatile unsigned char located at a certain address.
You quoted the macro definition.

However, somewhere else in a different header file, the macro is used in the form

SFR_8BIT(P1DIR = 0x22);
or
SFR_8BIT(0x22) P1DIR;

or something similar. I don't use IAR/CCS, so I don't know the exact syntax there, but on mspgcc it is similar:

#define sfrb(name, address) volatile unsigned char name asm(#address);
and used with
sfrb(P1DIR, 0x22);
throughout the different header files, which then expands to
volatile unsigned char P1DIR asm("0x22");

There are also sfrw and sfra macros which do the same for word or address-word (20bit) registers

The macro is usd in other header files which may be in a processor-specific subfolder or such. Perhaps it is even assembled by calling an include file with the name of the Port (P1) and the base address (0x20), so the same include file can be called for any number of ports, by addign port name and port register extension (P1 and OUT) and adding base address and register offset (0x20 and 2). It keeps maintenance low and allows reusing the header file for different MSPs with different module addresses but otherwise same module hardware.

点评

是一个宏定义,现在理解了,但是我不明白在官方给出的温度演示程序的C代码中有这样一条: void InitializeClocks(void) { BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ;  详情 回复 发表于 2012-12-20 23:56
 
个人签名
 
 

回复

1977

帖子

0

TA的资源

五彩晶圆(初级)

4
 

回复 板凳 qinkaiabc 的帖子

是一个宏定义,现在理解了,但是我不明白在官方给出的温度演示程序的C代码中有这样一条:
void InitializeClocks(void)
{
  BCSCTL1 = CALBC1_1MHZ;                    // Set range
  DCOCTL = CALDCO_1MHZ;
  BCSCTL2 &= ~(DIVS_3);
}
里面的CALBC1_1MHZ和CALDCO_1MHZ不知道在哪里定义的,在头文件中
SFR_8BIT(CALDCO_1MHZ);                       /* DCOCTL  Calibration Data for 16MHz */
SFR_8BIT(CALBC1_1MHZ);                       /* BCSCTL1 Calibration Data for 16MHz */
这两句也是定义它们是一个不可被编译优化的变量,而在G2553的datasheet中所使用的标签是CAL_DCO_1MHZ和 CAL_BC1_1MHZ,这又让我搞不清楚,您能再解释一下吗?
 
 
 

回复

5272

帖子

5

TA的资源

裸片初长成(中级)

5
 
没仔细看
反正我也觉得一大堆书就是没有明了地讲明白实际中遇到的各种情况的机理的中文书

点评

我刚入门,很多细节的地方没有弄清楚,希望能向您能多多求教:)  详情 回复 发表于 2012-12-21 13:11
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

6
 
关于SFR_8BIT的相关说明:
External references resolved by a device - specific linker command file
(外部引用解决的特定于设备的连接器命令文件)
#define SFR_8BIT(address)   extern volatile unsigned char address
#define SFR_16BIT(address) extern volatile unsigned int address
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

7
 
查看本帖全部讨论,请登录或者注册

点评

这个我知道,在数据表中看到了,只是数据表中给它的定义的标签是CAL_DCO_1MHZ和 CAL_BC1_1MHZ,这两者没有关系吗?  详情 回复 发表于 2012-12-21 13:08
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

8
 
查看本帖全部讨论,请登录或者注册

点评

我想问一下,你给出的这段定义的代码是出自G2553.h这个头文件中吗?我在头文件中怎么也找不到:titter:  详情 回复 发表于 2012-12-21 13:06
 
个人签名
 
 

回复

1977

帖子

0

TA的资源

五彩晶圆(初级)

9
 

回复 8楼 qinkaiabc 的帖子

查看本帖全部讨论,请登录或者注册
 
 
 

回复

1977

帖子

0

TA的资源

五彩晶圆(初级)

10
 

回复 7楼 qinkaiabc 的帖子

查看本帖全部讨论,请登录或者注册
 
 
 

回复

1977

帖子

0

TA的资源

五彩晶圆(初级)

11
 

回复 5楼 wangfuchong 的帖子

查看本帖全部讨论,请登录或者注册
 
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

12
 
查看本帖全部讨论,请登录或者注册
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

13
 
查看本帖全部讨论,请登录或者注册
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

14
 
查看本帖全部讨论,请登录或者注册
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

15
 
查看本帖全部讨论,请登录或者注册
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

16
 
查看本帖全部讨论,请登录或者注册

点评

我用的是CCS5.2  详情 回复 发表于 2012-12-21 15:33
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

17
 
查看本帖全部讨论,请登录或者注册

点评

我仔细对照了您给我的这个头文件和CCS里的头文件,在基础时钟模块的定义的这就不一样,CCS里的如下: /************************************************************ * Basic Clock Module ******************  详情 回复 发表于 2012-12-21 16:00
 
个人签名
 
 

回复

2776

帖子

413

TA的资源

五彩晶圆(中级)

18
 
查看本帖全部讨论,请登录或者注册
 
个人签名
 
 

回复

1977

帖子

0

TA的资源

五彩晶圆(初级)

19
 

回复 16楼 qinkaiabc 的帖子

查看本帖全部讨论,请登录或者注册
 
 
 

回复

1977

帖子

0

TA的资源

五彩晶圆(初级)

20
 

回复 17楼 qinkaiabc 的帖子

查看本帖全部讨论,请登录或者注册

点评

不同的编译环境,头文件时不一样的  详情 回复 发表于 2012-12-22 09:42
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
中星联华&ADI明日直播
直播主题:大咖面对面,轻松玩转高速ADC性能测试
直播时间:3月25日(周二)14:00
活动奖励:京东卡、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

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

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