嵌入式基础
整体思路
time指针指向该寄存器,所以定义一个timeOp位域,利用time指针将寄存器中的值放至timeOp中,存储后面寄存器读取到的结果再经过修改返回到寄存器里
用16位指针time指向这里使用的16位寄存器,用来读取和改变寄存器值
借助强制转换的方式将值传给time指针,指针将值给寄存器,将timeOp位域中hours的值直接返回即可
getHours()
提取时:提取只要将现在的时间值给一个中间值,再将中间值右移11位再将当前的低5位与上1,其他位与上1,即与上0x1F就可以提取出来了。
开始先提取时间地址:hour是放在基址加上2的16位寄存器中,定义一个时间宏存放地址;
根据结构图,Hours占5位,其地址与时间地址的偏移量为11,因此提取数值的时候将原数值右移11位;
右移后将数值与0x1F(00011111),将数值的低五位提取出来,也就是Hours。
SetHours (int hours)
原Hours置0,左移11位,其他位为0,用左移后的Hours或上一步的时间后,再把Hours设置到新的时间中,就得到了。
#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 |= (hours & 0x1F) << 11; int getHours() { int time = TIME; return (time>>11) & 0x1F; } time=DATA; time=time&0x07FF; time=time|(hours<<11); DATA=time; }