您的位置:首页 > 其它

第十六周课堂测试补充

2018-01-03 11:13 309 查看

测试中错误部分的理解和学习

地址的定义部分错误

C语言中

*(volatile unsigned int *)0x500


的解释:

如下;

(unsigned int *)0x500


:将地址
0x500


强制转化为int型指针

*(unsigned int *)0x500=0x10
:对地址为
0x500


赋值为
0x10


详见嵌入式中的 (volatile unsigned int )理解

修改测试代码如下:

#define DATA_Addr  0xFFFFC0000
#define DATA    *(volatile int *) DATA_Addr

void SetHours(int hours)
{
unsigned short time;
time = (unsigned short)(DATA);
time &= 0x07FF;//将hous小时所在的比特位置0
DATA = ((unsigned short))(hours<<11)|time;//将要设置的hours变量通过移位变换到time变量中hours所在的比特位置,再与time以或运算合并

}
int getHours()
{
unsigned short time;
time = (unsigned short)(DATA);
return (int)((time>>11)&0x001f);//直接将time向右移动11位清除掉分钟和秒的比特位上的数据,再将hours之前的位清零;

}

测试:


对于秒部分的提取和置位的学习

这里直接给出代码因为seconds与上面同理只是位置不同

#define DATA_Addr  0xFFFFC0000
#define DATA    *(volatile int *) DATA_Addr

void SetSeconds(int seconds)
{
unsigned short time;
time = (unsigned short)(DATA);
time &= 0xffe0;
DATA = ((unsigned short))(seconds)|time;

}
int getSeconds()
{
unsigned short time;
time = (unsigned short)(DATA);
return (int)(time&0x001f);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: