zoukankan      html  css  js  c++  java
  • 20155325 2018-2017 1 20180103课堂嵌入式基础

    要求

    在作业本上完成附图作业,要认真看题目要求。
    提交作业截图
    作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零)

    分析例子

    提取minutes

    一共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

    把原时间的分钟全部置零

    按位与

    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;
    
    }
    
  • 相关阅读:
    日常开发常用工具(持续更新中,欢迎小伙伴评论中分享自己认为好用的工具)
    使用 POJO 对象绑定请求参数
    Tomcat+Eclipse乱码问题解决方法
    微信客服接口发消息 -- 微信客服系列文章(一)
    @RequestParam--SpringMVC 注解系列文章(一)
    微信JS图片上传与下载功能--微信JS系列文章(三)
    微信JS分享功能--微信JS系列文章(二)
    微信JS初始化--微信JS系列文章(一)
    二十进制数的加法
    使用NuGet管理项目类库引用
  • 原文地址:https://www.cnblogs.com/GDDFZ/p/8214496.html
Copyright © 2011-2022 走看看