G2553.h头文件有许多不明白的地方,求帮助解释

2019-03-24 12:56发布

各位坛友好,我今天晚上闲来无事,查看了一下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 */又是什么意思,请各位高人前辈帮忙,谢谢。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
qinkaiabc
1楼-- · 2019-03-24 18:35
#ifndef __DisableCalData和#endif /* #ifndef __DisableCalData

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

[ 本帖最后由 qinkaiabc 于 2012-12-20 15:37 编辑 ]
qinkaiabc
2楼-- · 2019-03-24 18:49
 精彩回答 2  元偷偷看……
bobde163
3楼-- · 2019-03-25 00:12
是一个宏定义,现在理解了,但是我不明白在官方给出的温度演示程序的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,这又让我搞不清楚,您能再解释一下吗?
wangfuchong
4楼-- · 2019-03-25 03:44
没仔细看
反正我也觉得一大堆书就是没有明了地讲明白实际中遇到的各种情况的机理的中文书
qinkaiabc
5楼-- · 2019-03-25 05:05
 精彩回答 2  元偷偷看……
qinkaiabc
6楼-- · 2019-03-25 10:03
CALBC1_1MHZ and CALDCO_1MHZ are two bytes programmed in the flash at the factory which are a calibrated value as to the VCO (voltage controlled oscillator) of the chip.  This means that when you load those two values into the respective registers, you are using a precalibrated setting to get appoximately 1MHz.

CALBC1_1MHZ and CALDCO_1MHZ是用来设置校准值的。TI已经把他放进flash中了。

一周热门 更多>

相关问题

    相关文章