spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Informatica > P. in Assembler

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 28-01-2017, 10.14.25
L'avatar di SoldatoSemplice
SoldatoSemplice SoldatoSemplice non è collegato
Robottaro master
 
Data registrazione: 06-07-2009
Residenza: Roma
Età : 34
Messaggi: 263
Potenza reputazione: 122
SoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua fama
Predefinito Shiftare una variabile in uscita.

Buongiorno a tutti,

Scrivo quì perchè sono alla ricerca di quale sia la tecnica migliore per raggiungere uno scopo.

Prima di ogni cosa, i presupposti sono questi: Impiego un assembly a 32 bit per un microcontrollore di tipo Cortex M4 della texas instruments ma, per la particolare richiesta che ho si può ragionare anche in termini di assembly ad otto bit, in quanto devo gestire solamente variabili ad otto bit.

Lo scopo è questo: all'esterno del mio microcontrollore, ho uno shift register, per la precisione il 74HC4094.

Il controller e lo shift register condividono come pin solamente Output Enable, Data e Clock.

Il mio scopo è trovare il miglior algoritmo assembly per shiftare il contenuto di questa variabile nello shift register usando appunto solo data e clock.

Dal momento che la variabile è ad otto bit, io avevo pensato a questa soluzione, ma mi sembra farraginosa e troppo cervellotica, chiedo dunque lumi se esiste qualche sistema migliore.

Partendo dalla variabile del mio controller, la sottopongo ad una AND con una mashera di tipo 0000 0001 in modo da estrarre il bit meno significativo.

A questo punto il risultato ottenuto dalla AND con la maschera potrà essere solamente 0000 0001 oppure 0000 0000 in base al valore del bit b0 della variabile.

Questo risultato lo sottraggo con una costante immutabile: 0000 0001 e, se viene settato il bit Z o meno, saprò se il bit in posizione b0 è uno zero, oppure un uno.

Noto il bit b0 posso shiftarlo in out pilotando opportunamente data e clock.

A questo punto estraggo il valore del secondo bit, quello in posizione b1 sottoponendo la medesima variabile di partenza con una maschera 0000 0010, poi faccio la sottrazione con una nuova costante e testo nuovamente il bit Z, conoscendo in questo modo il valore del secondo bit e shiftandolo fuori.

Procedendo in questa maniera per otto volte, creando otto maschere diverse, potrò shiftare fuori tutti i bit.

A me però sembra un pò macchinoso.

Per caso qualcuno di voi conosce qualche metodo più rapido?

Grazie mille

Leonardo
Rispondi citando
  #2  
Vecchio 29-01-2017, 15.01.49
L'avatar di Extar
Extar Extar non è collegato
Robottaro senior
 
Data registrazione: 11-10-2011
Residenza: lucca
Messaggi: 76
Potenza reputazione: 26
Extar E' per ora ancora un mistero
Predefinito

Premesso che non ho mai usato assembly su quei processori, ma sui PIC gli shift register si usano semplicemente iterando l'istruzione "rotate right through carry" (RRC) che essenzialmente esegue uno shift di tutti i bit del registro di una posizione verso destra usando il bit di carry come riporto per l'LSB. Iterando n volte sullo stesso registro hai il bit di carry che ha lo stesso valore del bit n-esimo, con il quale piloti lo shift register.

Ho fatto una rapida ricerca, il set istruzioni di un cortex m4 è, giustamente, un tantino più complesso e la stessa istruzione di shift ha più varianti e ammette più opzioni, a prima vista quella adatta a te mi sembra la LSRS (logical shift right con il condition flag):
http://infocenter.arm.com/help/index.../CIHDDCIF.html
http://infocenter.arm.com/help/index.../BABJCCDH.html

Spero di essere di aiuto
Saluti, Simone.
__________________
Le cronache di un laboratorio tormentato: T.S Labs


Store Tindie
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
PWM come uscita DIGITALE gonne.m Elettronica 5 18-12-2009 18.47.26
Uscita dai microcontrollori Aliekor Elettronica 7 28-08-2009 18.15.29
NEW! USCITA SUL MERCATO Marcolino Ultimate real robot 12 21-09-2003 20.53.12
Data di USCITA??? Vegekou Ultimate real robot 5 21-09-2003 20.44.04
uscita 54 !!!!!!!!!! ????????????????? dwz Costruisci e programma il tuo robot 0 14-02-2003 18.15.00


Tutti gli orari sono GMT. Adesso sono le: 17.24.00.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB