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.
2235
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

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).

Äänestä

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.

Äänestä

Kommentoi aloitusta


Äärimmäisen_kummallista kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu