12月22日考试
测试
信息安全系统有时间戳的需求,因此密码系统有实时钟芯片。假设实时钟芯片的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’)