У меня есть код, который я не уверен, очень оценил бы безуспешность его работы.Тип литья и указатели
Первый бит касается типа литья. Может кто-нибудь сказать мне, если я правильно читал следующий код:
#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? Может кто-то пройти через код и объяснить каждый шаг для меня?
Извините за новизну (это слово ?!) вопроса.
Большое значение. Джеймс
EDIT:
ОК, я доволен выше. Благодарю. Я сейчас озадачен к следующему, которое происходит в коде, после Input_Time() был вызван:
#define OUT_TIME *(UINT_8 *)0xC0411297
OUT_TIME = Timer;
Как это возможно? Не OUT_TIME
8-битное значение в адресе 0XC0411297? Как это работает?
Большое спасибо, теперь это имеет гораздо больше смысла! 1. Таким образом, значение B_TIME равно любому 8-битовому значению (в ОЗУ) по адресу 0xC0502909. 2. После того как вы поняли мое понимание 1. часть 2. была прямолинейной, чтобы понять. Я должен поблагодарить вас за то, что вы нашли время, чтобы объяснить это, особенно учитывая, что он был только на такое короткое время. – James
@James, это может быть не ОЗУ, но да. –
@James - обновляется с ответом на ваш новый вопрос. –