【发布时间】:2013-02-12 07:39:07
【问题描述】:
我有一段代码我不确定是否会非常感谢它的工作原理。
首先是关于类型转换。谁能告诉我我是否正确阅读了以下代码:
#define A_TIME 0xC0500000
#define B_TIME *(UINT_8 *)(A_TIME + 0x00002909)
B_TIME 的输出是否是指向 8 位 = 0x09 的无符号整数的指针? 我不确定类型转换是如何工作的?它是否将 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 函数后的 *Time 值是多少?有人可以单步执行代码并为我解释每个步骤吗?
为这个问题的新手(这是一个词吗?!)道歉。
非常感谢。 詹姆斯
编辑:
好的,我对以上内容很满意。谢谢。在调用 Input_Time() 之后,我现在对代码中发生的以下情况感到困惑:
#define OUT_TIME *(UINT_8 *)0xC0411297
OUT_TIME = Timer;
这怎么可能? OUT_TIME不是地址0XC0411297内的8位值吗?它是如何工作的?
【问题讨论】: