12月22日考试

发布时间 2023-12-22 16:46:21作者: 20211312徐元琦

测试

信息安全系统有时间戳的需求,因此密码系统有实时钟芯片。假设实时钟芯片的IO 映像基址是 全局变量unsignted int TIME的指针地址,时间存放在(基址+2)的寄存器中(默认值为当前时间),寄存器是 16位,结构如附件中图所示

1. 按照下图给出TIME的注释(6‘)

  • 提取位
  • 插入位

2. 定义基于16位寄存器的宏(4‘)

#define DATA_Addr 0x0C00000
#define DATA *(volatile int *)(DATA_Addr)
DATA = 0x1234;

3. 使用至少两种方式(位运算,位域)完成如下功能,实现在timeXXXX1.c,timeXXXX2.c模块中(XXXX为你的四位学号),模块头文件为timeXXXX.h(30')

void setHour(int hour)
int getHour()

代码如下

#define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
void SetHours(int hours) //插入Hours
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~(0x1F<<11);
    newtime|=(hours&0x1F)<<11;
    TIME=newtime;
}
int getHours() //取出Hours
{
    int time=TIME;
    return (time>>11)&0x1F;
}

3 完成mainXXXX.c测试模块,测试你完成的代码,setHour的参数至少包含一条(你的学号%24)的值(10’)