Я беру курс по программированию, ориентированному на машины, и у меня есть проблема с пониманием типов данных при обращении к адресу памяти. Например, если я хочу получить доступ к куску памяти в позиции 0x40020000. Я бы написал это так.В чем разница между типами данных при обращении к памяти?
#define NAME_OF_THE_REGISTER *((unsigned int *)(0x40020000))
Но в чем разница между использованием какого-либо другого типа данных? Например unsigned short или unsigned char. Я знаю, что у них разный диапазон, но если я изменю этот код на unsigned short, я все равно могу получить доступ к памяти, и все будет работать нормально.
В «примерных» кодах мой университет предоставляет им возможность переключиться между unsigned char, volatile unsigned char, unsigned int, volatile unsigned int и т. Д., И я не могу понять, почему. Пример
#define PORT 0x40020000
#define PORTNAME ((volatile unsigned int *) (PORT))
#define PORTOFFSET1 ((volatile unsigned short *) (PORT + 0x4)) //offset to access Output register
В чем преимущества и недостатки между ними?
'% d' печать 4294903301 кажется маловероятным – harold
@harold Действительно. Опечатка. Теперь исправлено. Благодарю. –