我有一段我不确定的代码会非常欣赏它的工作方式。类型转换和指针
第一点是关于类型转换。谁能告诉我,如果我正确地阅读下面的代码:
#define A_TIME 0xC0500000
#define B_TIME *(UINT_8 *)(A_TIME + 0x00002909)
这是该B_TIME的输出是一个指向8位= 0×09的无符号整数? 我不确定类型铸造是如何工作的?它是否将8 LSB分配给B_TIME?另外,我很困惑*(UINT_8 *)?这到底意味着什么?它是一个指向8位无符号整数的指针?
第二部分可能会清楚地知道,一旦我知道上面,但无论如何,我会张贴:
UINT_8 Timer = 0;
Input_Time (&Timer);
#define C_TIME *(UINT_16 *)0xC0C0B000
#define MASK 0x003F
void Input_Time (UINT_8 *Time)
{
*Time = 0xC0;
*Time |= (UINT_8)((C_TIME >> 4) & MASK);
return;
}
什么是*时间之后Input_Time功能的价值?有人能够通过代码并为我解释每一步吗?
道歉的新手(这是一个字?!)的问题。
非常感谢。 詹姆斯
编辑:
OK,我很高兴与以上。谢谢。现在我很困惑,在代码中碰巧以下,Input_Time()被调用后:
#define OUT_TIME *(UINT_8 *)0xC0411297
OUT_TIME = Timer;
这怎么可能?是不是OUT_TIME
地址0XC0411297内的8位值?这是如何运作的?
非常感谢你,这使得现在更有意义! 1.因此,B_TIME的值等于地址0xC0502909中存储的任何8位值(在RAM中)。 2.你清除了我对第1部分的理解之后,很直白地理解了。 我不得不感谢您抽出时间来解释这一点,尤其是考虑到它只有这么短的时间。 – James 2013-02-26 18:53:54
@詹姆斯,它可能不是内存,但是。 – 2013-02-26 18:55:52
@詹姆斯 - 用你的新问题的答案更新。 – 2013-02-26 21:19:19