博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20155325 2018-2017 1 20180103课堂嵌入式基础
阅读量:4560 次
发布时间:2019-06-08

本文共 1440 字,大约阅读时间需要 4 分钟。

要求

在作业本上完成附图作业,要认真看题目要求。

提交作业截图
作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零)

1071478-20180106160417268-1675727246.png

分析例子

提取minutes

1071478-20180106160426143-1268303375.png

一共16位,minutes占10-5+1=6位,seconds占4-0+1=5位

所以time>>5使得minutes被放到了最右边

为了只剩下minutes,故而要把16位中除后6位以外的数都变成0

所以要用0去&

又因为0000000000111111=0x3F

所以(time>>5)&0x3F

设置minutes

1071478-20180106160440065-1137452377.png

把原时间的分钟全部置零

按位与

0x3F<<5 = 0000011111100000

取反后1111100000011111

与原来的数相与,则minutes位置零

把上一步提取出来的分钟左移五位放置到正确的位置,再与新时间相或

提取和设置hours

取出时间

volatile

volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量。

volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。

结果

#define DATA 0xFFFFC0002 //IO映像基址是OxFFFFC0000,时间在基址+2#define TIME *(volatile int *)(DATA) //类型转换

int getHours();

把时间从TIME取出来

hours一共5位,16-5=11,所以应该右移11位

0000000000011111 = 0x1f

int getHours() //取出Hours{    int time=TIME;    return (time>>11)&0x1f;}

void SetHours(int hours);

时间取到oldtime

0000000000011111 = 0x1f

1111100000000000 = 0x1f<<11

0000011111111111 = ~(0x1f<<11)

void SetHours(int hours) //插入Hours{    int oldtime=TIME;    int newtime;    newtime=oldtime&~(0x1F<<11);    newtime|=(hours&0x1F)<<11;    TIME=newtime;}

方法二:

newtime=oldtime&7ff;newtime|=(hours<<11)&f800;

int geSeconds();

int getSeconds() //取出Seconds{    int time=TIME;    return time&0x1f;}

void SetSeconds(int Seconds);

1111111111100000 = 0xffe0

{    int oldtime=TIME;    int newtime;    newtime = oldtime&0xffe0;    newtime|= Seconds&0x1F;    TIME=newtime;}

转载于:https://www.cnblogs.com/GDDFZ/p/8214496.html

你可能感兴趣的文章
redis列表list
查看>>
雷林鹏分享: C# 简介
查看>>
ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法
查看>>
实用类-<Math类常用>
查看>>
构建之法阅读笔记之四
查看>>
10.15习题2
查看>>
Windows Server 2008 R2 备份与恢复详细实例
查看>>
Ubuntu上kubeadm安装Kubernetes集群
查看>>
关于java学习中的一些易错点(基础篇)
查看>>
MFC的多国语言界面的实现
查看>>
四则运算个人项目 最终版
查看>>
java线程系列---java5中的线程池
查看>>
SQL表连接
查看>>
新秀系列C/C++经典问题(四)
查看>>
memset函数具体说明
查看>>
经常使用的android弹出对话框
查看>>
确保新站自身站点设计的合理性的六大注意点
查看>>
1033. 旧键盘打字(20)
查看>>
asp编程实例:ASP编程中20个非常有用的例子
查看>>
HDU 1076 An Easy Task
查看>>