Hai indicato che l'indirizzo è un indirizzo fisico e che il tuo codice è in esecuzione in un processo.
Quindi, se siete
nel tipo di sistema operativo di alto livello, per esempio Linux, dovresti ottenere una mappatura nello spazio degli indirizzi fisico. In Linux,/dev/mem lo fa per te.
all'interno del kernel o senza sistema operativo e con una MMU, è necessario tradurre l'indirizzo fisico in un indirizzo virtuale. Nel kernel di Linux, phys_to_virt() lo fa per te. Presumo, nel kernel, che questo indirizzo sia sempre mappato.
all'interno del kernel o senza sistema operativo e senza MMU, si scrive direttamente a quell'indirizzo. Non c'è nessuna mappatura da considerare.
Ora, si dispone di una mappatura valida o dell'indirizzo fisico stesso, che si passa alla funzione.
void AssignValToPointer(uint32_t pointer, int value)
{
* ((volatile int *) pointer) = value;
}
Si potrebbe desiderare di aggiungere la parola chiave volatile, come il compilatore potrebbe ottimizzare il write-operazione via se non si legge da quella posizione dopo (probabile caso in cui la scrittura su un registro di un hardware mappato in memoria).
Si potrebbe anche voler usare il tipo di dati uintptr_t invece di uint32_t per il puntatore.
'* (int *) 0x12AED567 = 2345' Ma è meglio sapere cosa stai facendo ... – Mysticial
meglio non provare a meno che non si sia sicuri che la memoria non sia utilizzata –
Non solo la memoria non deve essere utilizzata per altri scopi , ma deve essere mappato. Su * nix almeno, se provi a scrivere su una pagina non mappata, la tua app segura e si blocca. –