• 20155327 嵌入式C语言课堂补交


    嵌入式C语言

    题目要求

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

    题目分析

    分析一:提取插入时间

    根据老师上课讲的例子


    分析图片可知:
    一共16bits,时有5位,分有6位,秒有5位

    先提取分钟:

    time>>5:将时间右移五位去掉秒
    (time>>5)&0x3F:此时只需要最后五位,因此&上0x3F,即&0000000000111111,将除后五位置零
    最后即可提取出后五位的分钟

    插入新分钟

    newtime=oldtime&~(0x3F<<5):将分钟位置置零
    newtime|=(hours&0x3F)<<5:将之前提取出来的分钟左移五位放置到新时间的分钟,再与新时间&

    分析二:寄存器

    题目要求:时间存放在(基址+2)的16位寄存器中:
    定义时间宏存放地址:

    #define Time_Addr 0xFFFFC0000
    #define TIME *(volatile int *) (Time_Addr+2)
    

    题目解答:

    • 提取时:由于所在高五位,需要右移11位
    #define Time_Addr 0xFFFFC0000
    #define TIME (volatile int ) (Time_Addr+2)
    int gethours()
    {
    int time = TIME;
    return (time>>11)&0x1F;
    }
    
    void sethours(int hours)
    {
    int oldtime = TIME;
    int newtime = oldtime & ~(0x1F<<11);
    newtime =newtime | ((hours&0x1F)<<11);
    TIME=newtime;
    }
    
    • 提取秒:低五位不需要移
    #define Time_Addr 0xFFFFC0000
    #define TIME (volatile int ) (Time_Addr+2)
    int getseconds()
    {
    int time = TIME;
    return time&0x1F;
    }
    
    void setseconds(int hours)
    {
    int oldtime = TIME;
    int newtime = oldtime & ~0x1F;
    newtime =newtime | (seconds&0x1F);
    TIME=newtime;
    }
    
  • 相关阅读:
    length()与trim()函数用法
    软件测试面试题集锦
    数据库索引介绍
    sum 函数语法与应用
    报表测试方法与注意事项
    添加、编辑、删除功能测试点
    登陆测试思路总结
    查询功能测试点总结
    case 函数语法与使用
    js获取地址栏上的Id值
  • 原文地址:https://www.cnblogs.com/l97----/p/8232850.html
Copyright © 2020-2023  润新知