2017-2018-1 20155326信息安全系统设计基础》嵌入式C语言课上考试补交

PPT上的例子

  • 已知位运算规则为:

    1. &0 --> 清零
    2. &1 --> 不变
    3. |1 --> 1
    4. |0 --> 不变
  • getMinutes部分

由于Seconds是0-5位,因此先右移5位将Minutes的最低位与位0对齐,再与上0000 0000 0011 1111,即0x3F,可将6-15位全部清0,获得minuts部分。

  • SetMinutes部分

  • 代码如下:

  1. #define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
  2. #define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
  3. void SetMinutes(int minutes) //插入Minutes
  4. {
  5. int oldtime=TIME;
  6. int newtime;
  7. newtime=oldtime&~(0x3F<<5);
  8. newtime|=(minutes&0x3F)<<5;
  9. TIME=newtime;
  10. }
  11. int getMinutes() //取出Minutes
  12. {
  13. int time=TIME;
  14. return (time>>5)&0x3F;
  15. }

课上习题

由于seconds和minutes占0-10位,要提取hours,则先将hour右移11位,hour有5位,再与上000000000000011111,即0X1F。

  • sethours部分

  1. void setHours(int hours){
  2. int oldtime=TIME;
  3. newtime|=(oldtime&0X1F)<<11;
  4. TIME=newtime;
  5. }
  • getHours部分

  1. int gethours()
  2. {
  3. int time;
  4. time=TIME;
  5. return (time>>11&0X1F);
  6. }
  • 代码如下:

  1. #define Time_Addr 0XFFFFC0000
  2. #define TIME *(volatile int*) (Time+2)
  3. int gethours()
  4. {
  5. int time;
  6. time=TIME;
  7. return (time>>11&0X1F);
  8. }
  9. void sethours(int hours){
  10. int oldtime=TIME;
  11. newtime|=(oldtime&0X1F)<<11;
  12. TIME=newtime;
  13. }

课下扩展

由于second在最右部分,所以不用左移,只需与上000000000000011111,即0X1F。

  • 代码如下:

  1. #define TIME_Addr 0xFFFFC0000
  2. #define TIME *(volatile int *) (TIME_Addr+2)//这里需要将地址+2
  3. void SetSeconds(int seconds)
  4. {
  5. int oldtime = TIME;
  6. int newtime = oldtime & ~ 0x1F;
  7. newtime |= (seconds/2) & 0x1F;
  8. TIME = newtime;
  9. }
  10. int getSeconds()
  11. {
  12. int time = TIME;
  13. return (time & 0x1F)*2;//此处不考虑Seconds除2带来的误差,因此直接乘2
  14. }

2017-2018-1 20155326信息安全系统设计基础》嵌入式C语言课上考试补交的更多相关文章

  1. 20155308《信息安全系统设计基础 嵌入式C语言课堂考试补博客

    20155308<信息安全系统设计基础 嵌入式C语言课堂考试补博客 知识点 置位 ?bits = bits | (1 << 7) ; /* sets bit 7 */ bits |= ...

  2. 2017-2018-1 20155318 《信息安全系统设计基础》第九周课下实践——实现mypwd

    2017-2018-1 20155318 <信息安全系统设计基础>第九周课下实践--实现mypwd 相关知识 man -k 查找含有关键字的内容 与管道命令结合使用:man -k k1 | ...

  3. 2017-2018-1 20155327 《信息安全系统设计基础》课堂测试&课下作业

    2017-2018-1 20155327 <信息安全系统设计基础>课堂测试&课下作业 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep ...

  4. 20145234黄斐《信息安全系统设计基础》第七周(Linux命令复习)

    已经到了11月,学期过半,而<信息安全系统设计基础>这门课也要到了期中考试了.所以,我在这里,对前半个学期的最基础的知识,做一个复习 复习计划分为两步,本次为Linux命令,下次计划复习g ...

  5. 20145216 20145330 《信息安全系统设计基础》 实验五 简单嵌入式WEB 服务器实验

    20145216 20145330 <信息安全系统设计基础> 实验五 简单嵌入式WEB 服务器实验 实验报告封面 实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/ ...

  6. 20145208《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验

    20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验 20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验

  7. 20145210 20145226 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验

    20145210 20145226 <信息安全系统设计基础>实验五 简单嵌入式WEB服务器实验 结对伙伴:20145226 夏艺华 实验报告封面 实验目的与要求 · 掌握在ARM开发板实现 ...

  8. 20145221 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验

    20145221 <信息安全系统设计基础>实验五 简单嵌入式WEB服务器实验 实验报告 队友博客:20145326蔡馨熠 实验博客:<信息安全系统设计基础>实验五 简单嵌入式W ...

  9. 20145303 20145339 《信息安全系统设计基础》 实验五 简单嵌入式WEB服务器实验

    20145303 20145339 <信息安全系统设计基础> 实验五 简单嵌入式WEB服务器实验 实验目的与要求 1.掌握在ARM开发板实现一个简单WEB服务器的过程 2.学习在ARM开发 ...

随机推荐

  1. Oracle 学习笔记 (七)

    一.数据库的启动 启动数据库的三个阶段: nomount, mount,open mount 阶段:. 1.读参数文件 2.分配内存 3.启动后台进程 4.初始化部分v$视图 mount 阶段: 读参 ...

  2. MRO,C3算法

    1了解python2和python3类的区别 python2在2.4之前使用的是经典类, 2.4之后, 使用的是新式类 class Foo: pass class Foo(object): pass ...

  3. mysql timestamp字段定义的

    Cause: java.sql.SQLException: Cannot convert value '2017-07-26 20:40:41.000000' from column 10 to TI ...

  4. openvas安装和基本使用

    OpenVAS是开放式漏洞评估系统,也可以说它是一个包含着相关工具的网络扫描器. OpenVAS是开放式漏洞评估系统,也可以说它是一个包含着相关工具的网络扫描器.其核心部件是一个服务器,包括一套网络漏 ...

  5. Eclipse 如何查看源代码

    Eclipse 关联源代码:

  6. 微信小程序--预览previewImage(长按保存图片)

    最近开发小程序,想实现二维码图片长按保存,发现无法保存,只能让图片先预览,再保存.注意:只有太阳码才有长按保存和识别功能,普通二维码只有长按保存功能. <image class='banner' ...

  7. 使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送

    业务分析: 最近工作需要,需要从FTP读取图片内容,添加到邮件正文发送.发送邮件正文,添加附件采用Spring的MimeMessageHelper对象来完成,添加图片也将采用MimeMessageHe ...

  8. mongodb异常恢复

    构造mongdb异常 启动mongodb,bash mongodb.sh #!/bin/bash pid_file=/var/run/mongodb/mongod.pid pid_dir=/var/r ...

  9. C++ 实现 split 操作

    理由:由于 C++ 标准库里面没有字符分割函数 split ,这可太不方便了,我们利用 STL 来实现自己的 split 函数: 原型:vector<string> split(const ...

  10. Python开发【第七篇】:面向对象二

    字段 class Foo:     #静态字段(保存在类中)     CC = 123       def __init__(self):         #普通字段(保存在对象中)          ...