Arduino gcc ongelma

Jos kirjoitan
asm("mov r0, #1000");
niin kääntäjä toimii. Jos kirjoitan
asm("mov r0, #1001");
niin tulee ilmoitus:
Error: invalid constant (3e9) after fixup
Onko tuo ominaisuus, bugi, jäynä tai onko minulta jäänyt jotain huomaamatta?

Rekisteriin voi kyllä ladata muistista ihan minkä luvun tahansa.
Ilmoita


Kannattaa kaivaa prosessorin manuaali esiin ja katsoa miten tuo vakio on koodattu mov r0, ... käskyyn. Siinä todennäköisesti on jokin bitti raja. Tuo 1000 voidaan ilmaista <= 10 bitillä:

1000 = 250 << 2 (eli 8 -bit vakio + 2 bittinen siirto vakio, esim. mov r0, 250, rol 2)
1000 = 125 << 3 (eli 7 -bit vakio + 2 bittinen siirto vakio, esim. mov r0, 125, rol 3)

Tuota 1001 ilmaisemiseen siirtobittejä ei voi käyttää, joten vakio osan pitäisi olla 12 -bittiä. Joten todennäköisesti joku tuollainen rajoitus tulee vastaan. Eli luku 1016 on seuraava minkä voi ilmaista, (jos vakio osa 8-bittinen niin silloin 1004).
Ilmoita
eikös arduino ole Atmel AVR -pohjainen?

Niissä rekisteri on 8 bittiä.

Jos kääntäjä on tehty niin, että samaa rekisteriä voi kohdella joko etumerkittömänä tai etumerkillisenä, silloin hyväksyttävä arvoalue on:

-128 .. +255

Mikä tahansa tuon alueen ulkopuolinen luku pitäisi aiheuttaa virheilmoitus.
Jos kerran 1000 ei tuota virheilmoitusta, se on kääntäjän bugi.
Ilmoita

Vastaa alkuperäiseen viestiin

Arduino gcc ongelma

Jos kirjoitan
asm("mov r0, #1000");
niin kääntäjä toimii. Jos kirjoitan
asm("mov r0, #1001");
niin tulee ilmoitus:
Error: invalid constant (3e9) after fixup
Onko tuo ominaisuus, bugi, jäynä tai onko minulta jäänyt jotain huomaamatta?

Rekisteriin voi kyllä ladata muistista ihan minkä luvun tahansa.

5000 merkkiä jäljellä

Peruuta