Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Creare un Full Ascending stack in ARM assembly?

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Creare un Full Ascending stack in ARM assembly?

Messaggioda Foto Utenteharpefalcata » 10 nov 2019, 18:02

Buonasera a tutti,

Avrei bisogno di creare in un frammento del mio codice, uno stack di tipo full ascending.

Il problema è che il mio compilatore sembra che digerisca solamente istruzioni di tipo Thumb, e quindi non riescoi a fargli interpretare le normali istruzioni arm assembly.

Quello che vorrei fare è questo:

stmib r0,{r2-r3}
stmib r1,{r4-r6}

Nelle mie intenzioni, queste due istruzioni dovrebbero caricare due frammenti di stack che partono in due indirizzi diversi della sram, che sono r0 ed r1, e fissano i valori facendo l'incremento prima.

Il compilatore mi dice che non posso usare l'istruzione stmib perché questa non è riconosciuta come Thumb.

Ho trovato che "push" e "pop" invece funzionano correttamente, ma non capisco in quale maniera, nella push, io possa definire programmaticamente quale sia l'indirizzo di inizio dello stack.

Sapete come chiarirmi questo dubbio?

Grazie.
Avatar utente
Foto Utenteharpefalcata
300 1 3 5
Stabilizzato
Stabilizzato
 
Messaggi: 348
Iscritto il: 28 lug 2015, 21:03

0
voti

[2] Re: Creare un Full Ascending stack in ARM assembly?

Messaggioda Foto UtenteEcoTan » 10 nov 2019, 18:37

Non lo so, può anche darsi che non sia proprio possibile in quel sistema. perché vuoi fissare l'indirizzo in memoria?
Avatar utente
Foto UtenteEcoTan
5.515 4 10 13
Expert EY
Expert EY
 
Messaggi: 3409
Iscritto il: 29 gen 2014, 8:54

0
voti

[3] Re: Creare un Full Ascending stack in ARM assembly?

Messaggioda Foto Utenteharpefalcata » 10 nov 2019, 18:46

Ho bisogno di creare, all'interno della SRAM vari stack di modesta estensione, e di ognuno di questi devo conoscere indirizzo di parteza e dimensione, altrimenti, quando andrò a leggere questi valori rischierei di andare in "overlap" con quello che segue e di leggere dunque valori che non mi corrispondono.

Sospetto anche io che in Thumb mode non si possa fare.

Da quanto ho capito, nelle istruzioni push e pop, l'unico puntatore che fa fede è lo stack pointer (SP) e la PUSH scrive il valore all'indirizzo puntato da SP, stà allo sviluppatore spostare il puntatore in funzione di quale tipo di stack voglia essere creato.

In compenso sono riuscito finalmente ad escludere il thumb ed ho cominciato a sviluppare in ARM nativo.

A breve potrei riuscire a risolvere
Avatar utente
Foto Utenteharpefalcata
300 1 3 5
Stabilizzato
Stabilizzato
 
Messaggi: 348
Iscritto il: 28 lug 2015, 21:03


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti