Arduino MKR Zero e puntatori

L'arduino MKR Zero ha 32kb di ram quindi gli indirizzi di memoria vanno da 0 a 32768 quindi anche se di norma un puntatore è grande 4 byte io posso memorizzare l'indirizzo in una variabile da 2 byte ?

Ho provato ha farmi stampare il binario di un indirizzo di memoria su seriale.
Codice:
Serial.begin(9600);
while(!Serial);
Serial.println(sizeof(unsigned short));
char* P = new char[90];
Serial.println((int)P,BIN);
Il risultato è
2
100000000000000000100111101000
sono più di 16 bit come mai ?

Perché un indirizzo NON è un int (ovvero con segno), ma un un unsigned long ... se lo dichiari int chiaramente viene usato anche il bit del segno.

Guglielmo

void Stamp(char* p){
Serial.println((unsigned int)p,BIN);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while(!Serial);
Stamp(new char[5]);
Stamp(new char[30]);
}
Risultato
100000000000000000101000111000
100000000000000000101000010000
Sono ancora più di 16. Un'altra domanda lo spazio degli indirizzi della flash e della SRAM è in comune ?

Allora devi guardare il datasheet della MCU ... li c'è spiegato come vengono mappati gli indirizzi (pagina 40).

Vedo che la SRAM comincia dall'indirizzo 0x20000000 e finisce all'indirizzo 0x20007FFF.

Comunque SI, è tutto nel Global Memory Space.

Guglielmo

Grazie infinite questi erano proprio i numeri che mi servivano GRAZIE!!!

Solo per completezza, pensandoci bene, il mio post #3 è errato (e l'ho segnato cancellato) ... usando int si vedrebbe, in decimale, il risultato con segno (cosa che non dovrebbe essere per un address), ma NON dei bit diversi ... il contenuto NON cambia in funzione del tipo dato con cui si visualizza, salvo non si facciano delle operazioni matematiche (... che, chiaramente, vanno a cambiare il contenuto).

Guglielmo