第十六周课堂测试补充

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

地址的定义部分错误

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之前的位清零;
    
}

测试:1065404-20180103222843346-650140189.png

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

这里直接给出代码因为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);
    
}

转载于:https://www.cnblogs.com/xhwh/p/8182834.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值