zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155326信息安全系统设计基础》嵌入式C语言课上考试补交

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

    PPT上的例子

    • 已知位运算规则为:

        &0 --> 清零
        &1 --> 不变
        |1 --> 置1
        |0 --> 不变
      
    • getMinutes部分

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

    • SetMinutes部分

    • 代码如下:
    
    #define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
    #define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
    void SetMinutes(int minutes) //插入Minutes
    {
        int oldtime=TIME;
        int newtime;
        newtime=oldtime&~(0x3F<<5);
        newtime|=(minutes&0x3F)<<5;
        TIME=newtime;
    }
    int getMinutes() //取出Minutes
    {
        int time=TIME;
        return (time>>5)&0x3F;
    }
    
    

    课上习题

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

    • sethours部分
    
    void setHours(int hours){
        int oldtime=TIME;
        newtime|=(oldtime&0X1F)<<11;
        TIME=newtime;    
    }
    
    
    • getHours部分
    
    int gethours()
    {
        int time;
        time=TIME;
        return (time>>11&0X1F);
    }
    
    
    • 代码如下:
    
    #define Time_Addr 0XFFFFC0000
    #define TIME *(volatile int*) (Time+2)
    int gethours()
    {
        int time;
        time=TIME;
        return (time>>11&0X1F);
    }
    
    void sethours(int hours){
        int oldtime=TIME;
        newtime|=(oldtime&0X1F)<<11;
        TIME=newtime;
        
    }
    
    

    课下扩展

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

    • 代码如下:
    
    #define TIME_Addr  0xFFFFC0000
    #define TIME *(volatile int *) (TIME_Addr+2)//这里需要将地址+2
    
    void SetSeconds(int seconds)
    {
        int oldtime = TIME;
        int newtime = oldtime & ~ 0x1F;
        newtime |= (seconds/2) & 0x1F;
        TIME = newtime;
    }
    
    int getSeconds()
    {
        int time = TIME;
        return (time & 0x1F)*2;//此处不考虑Seconds除2带来的误差,因此直接乘2
    }
    
    
  • 相关阅读:
    像素与豪米的转换
    C#中的事件和委托
    .Datagridview数据写入DataTable
    C# winform DataGridView 常见属性
    c# winform 用代码修改DataGridView列头的名字,设置列名,修改列名
    SVN常用命令
    (装载)C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别
    C# WinForm dataGridView 技巧小结
    IPV4二进制显示
    Microsoft SQL Server 2005技术内幕:TSQL查询 PerformanceDB.sql
  • 原文地址:https://www.cnblogs.com/lmc1998/p/8196452.html
Copyright © 2011-2022 走看看