× MSP430, Microcontrollori 16 bit Ultra Low Power

[CCS - C] Aritmetica dei puntatori

9 Anni 8 Mesi fa #6 da Mauro Laurenti
Risposta da Mauro Laurenti al topic [CCS - C] Aritmetica dei puntatori
Ottimo test!

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
9 Anni 7 Mesi fa #7 da Cosimix
Risposta da Cosimix al topic [CCS - C] Aritmetica dei puntatori

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Cosimix
  • Avatar di Cosimix
  • Elite Member
  • Elite Member
Di più
9 Anni 7 Mesi fa #8 da nicolapc
Risposta da nicolapc al topic [CCS - C] Aritmetica dei puntatori
In realta' era solo un esercizio per riprendere dimestichezza con il C, infatti la stessa routine l'avevo scritta prima con un costrutto if.. , poi con uno switch, e poi ho pensato di rendere piu' efficiente sostituendo ogni confronto (e relativo salto "nel caso che...") con calcoli matematici.

la variabile "porta" che io passo alla routine puo' essere 1 oppure 2 (per il mio msp430g2553)
quindi faccio (brutalmente) 3 shift della variabile porta, ottenendo:
(se porta = 1) = bin 1000 = dec 8
(se porta = 2) = bin 10000 = dec 16

Come sai ogni shift a sinistra raddoppia il valore della variabile shiftata, quindi volendo moltiplicare velocemente un numero per 8 devo farlo tre volte.
Questo lo faccio perche' la mappa di memoria qui sotto (vai alla tabella 12)
homepages.ius.edu/RWISMAN/C335/HTML/msp430MemoryMapped.HTM

mi dice che registro P1OUT e' mappato a 021h, e il registro P2OUT a 029h, con una differenza quindi di 8 bytes.
Di conseguenza il mio puntatore pinOUT che punta direttamente al registro in memoria deve essere uno dei due valori appena detti.
La via piu' rapida che ho trovato e' stata quindi "trovare un offset" al quale aggiungendo otto oppure sedici si ottenesse 21h o 29h. Questo valore e' il 19h che vedi nel listato.

*** Questa e' la logica che ho seguito. Purtroppo sono un principiante quasi totale eccetto cose che ho studiato piu' di venti anni fa, quindi non garantisco ne' che siano fatte "come si deve", ne' che in futuro non saltino fuori casini (esempio, se metti la variabile porta diversa da 1 o 2, nonostante il compilatore non fara' una piega, non garantisco per l'incolumita' del pianeta... ;) ) ***

Ciao,

Nico

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • nicolapc
  • New Member
  • New Member
Di più
9 Anni 7 Mesi fa #9 da Cosimix
Risposta da Cosimix al topic [CCS - C] Aritmetica dei puntatori
Ciao, Nicola!
Sei stato chiarissimo! Ti spiego il motivo delle mie domande.
Consultando la guida
www.ti.com/lit/ug/slau144j/slau144j.pdf
ho notato che le costanti da te utilizzate, 0x19 e 0x1A, corrispondono rispettivamente agli indirizzi dei registri P3OUT e P3DIR (appartenenti ad altri microcontrollori). Da qui la mia curiosità.
Pensavo fossi partito dalla possibilità di sviluppare (in futuro) la routine in modo tale da utilizzare la stessa con microcontrollori aventi più pin. :)
Grazie per le delucidazioni.
Saluti,
Cosimo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Cosimix
  • Avatar di Cosimix
  • Elite Member
  • Elite Member
Di più
9 Anni 7 Mesi fa #10 da nicolapc
Risposta da nicolapc al topic [CCS - C] Aritmetica dei puntatori
E' una osservazione interessante.
Non avendo devices piu' grandi non avevo pensato a questo sviluppo, in pratica potrei usare la variabile porta = 0 per puntare alle uscite numero tre (anche se questo introdurrebbe una variante che va contro la sempicazione, perche' perderei la corrispondenza tra il valore della variabile e il numero fisico della porta)
Grazie per il suggerimento, appena trovo un po' di tempo ci penso su.
Ciao,
Nico.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • nicolapc
  • New Member
  • New Member
Di più
Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login