我有一段我不確定的代碼會非常欣賞它的工作方式。類型轉換和指針
第一點是關於類型轉換。誰能告訴我,如果我正確地閱讀下面的代碼:
#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