www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

C18 - napačno računanje
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Tor Maj 01, 2012 6:55 pm    Naslov sporočila:  C18 - napačno računanje Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 1011
Aktiv.: 4.27
Kraj: Rače

PrispevekObjavljeno: Tor Maj 01, 2012 8:10 pm    Naslov sporočila:   Odgovori s citatom

Malo zaskrbljen nad temi rezulalti sem takoj šel preizkusiti.

C18 3.40 na 18F67J11:

signed long A = 0;
signed char B = -1;

A += B; rezultat: A=-1

unsigned long A = 0x1234;
unsigned long B = 0;

if (A > B) drži.

Očitno problem ni v prevajalniku.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Tor Maj 01, 2012 8:21 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Tor Maj 01, 2012 8:46 pm    Naslov sporočila:   Odgovori s citatom

Ja probelm imaš v poravnavi variabel!
Očitno si izklopil ali pozabil vklopiti neki prevajalnikov switch!
Oziroma si ročno določil kazalce variabel!
Posamezna 4 bytna variabla mora biti znotraj 256 bytne banke, kar pri tebi ni.
Če gledaš kodo (odebeljene adrese)...

0021fe 59ff SUBWFB 0xff,0x0,0x1
002200 50ee MOVF 0xee,0x0,0x0
002202 5900 SUBWFB 0x0,0x0,0x1

Adresa prve 4 bytne variable ti kaže na naslov 0xfe, kar pa ni ok!

LP Mr. Green GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 1011
Aktiv.: 4.27
Kraj: Rače

PrispevekObjavljeno: Tor Maj 01, 2012 10:55 pm    Naslov sporočila:   Odgovori s citatom

Če je spremenljivka večja od 256 bytov, ti prevajalnik javi napako. Tudi če je skupna velikost spremenljivk večja od 256 bytov ti javi napako.
Če rabiš večje spremenljivke (oziroma več) moraš banko povečati oz. spremenljivke razdeliti med posamezne banke.
Če si banko povečal, potem lahko do spremenljivk dostopaš samo preko kazalcev!!!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Sre Maj 02, 2012 12:35 am    Naslov sporočila: icon_idea  Odgovori s citatom

1. Zamenjaj procesor s takim, ki nima bank Mr. Green
2. Uporabi proc z več spomina

V teh časih je izbira ogromna...

Poskusi še z Little / Big Endian...

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
trully1
Član
Član



Pridružen-a: Pet 14 Nov 2003 20:20
Prispevkov: 216
Aktiv.: 0.91
Kraj: Železniki

PrispevekObjavljeno: Sre Maj 02, 2012 9:38 am    Naslov sporočila:   Odgovori s citatom

Zdravo

Tudi jaz sem naletu na težave, če nista bili spremenljivki enakega tipa.

Koda:
signed long A1 = 0;
signed char B1 = -1;
signed long A2 = 0;
signed char B2 = -1;

A1 += B1; //rezultat: A1=-1
A2 += B2; //rezultat: A2=0x00FFFFFF


Namesto zgornjega zapisa testiraj s tem: (pri meni je pomagalo)

Koda:
A1 += (signed long)(B1);
A2 += (signed long)(B2);


LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sre Maj 02, 2012 9:51 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Sre Maj 02, 2012 11:27 am    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:
Razlog je bil v tem, da sem banke povečal (.lkr datoteka) saj sem v eni .c datoteki potreboval več kot 256 bytov spomina.

Aha, če spreminjaš linker datoteke moraš biti pazljiv, ker ne moreš kar razširiti banke, ker je hardware-sko določena!

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 1011
Aktiv.: 4.27
Kraj: Rače

PrispevekObjavljeno: Sre Maj 02, 2012 12:49 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
Če si banko povečal, potem lahko do spremenljivk dostopaš samo preko kazalcev!!!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sre Maj 02, 2012 12:52 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 1011
Aktiv.: 4.27
Kraj: Rače

PrispevekObjavljeno: Sre Maj 02, 2012 2:19 pm    Naslov sporočila:   Odgovori s citatom

Citirano iz Microchip help:

Citiram:
By default, MPLAB C18 assumes that an object will not cross a bank boundary.
An object that is larger than 256 bytes can be created, but the following steps are required to create a multi-bank object:

1. The object must be allocated into its own section using the #pragma idata or #pragma udata directive.
#pragma udata buffer_scn
static char buffer[0x180];
#pragma udata
2. Accesses to the object must be done via a pointer.
char * buf_ptr = &buffer[0];
...
// examples of use
buf_ptr[5] = 10;
if (buf_ptr[275] > 127)


Se držim tega in ni težav.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galjotj
Član
Član



Pridružen-a: Pet 02 Nov 2012 15:08
Prispevkov: 231
Aktiv.: 1.50
Kraj: Zgornji Brnik

PrispevekObjavljeno: Sob Nov 03, 2012 12:39 am    Naslov sporočila:   Odgovori s citatom

Imam en "mogoče" podoben problem. C18 Projekt je ravno tako na 18F4550 (fizično sicer na 2550) in tudi že precej "zapolnjen", saj obdelujem kup senzorjev, servo motorje ter USB komunikacijo. Vse deluje BP, dokler ne vstavim kakšne matematike ala sin, atan2, acos, kar povzroči nestabilno delovanje, čeprav prevajanje ne najde nobenih problemov. Problem nastane že, ko so omenjene funkcije v neuporabljeni proceduri.

Se je kdo že srečal s čim podobnim ?

Sem našel domneve okrog premajhnega sw stacka, nepravilno definiranih spremenljivk... Nekaj tega sprobal, ne vem, če pravilno, a zaenkrat vse brez uspeha..

Hvala in lp

_________________
Pa sam programirat sem hotu!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sob Nov 03, 2012 2:32 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galjotj
Član
Član



Pridružen-a: Pet 02 Nov 2012 15:08
Prispevkov: 231
Aktiv.: 1.50
Kraj: Zgornji Brnik

PrispevekObjavljeno: Sob Nov 03, 2012 2:10 pm    Naslov sporočila:   Odgovori s citatom

Ja, res je, da sem z veliko manjšimi spremenljivkami presegel velikost banke, kar je javil tudi prevajalnik. Pa sem dodal:

#pragma udata udata1

in problem je "izginil".

Tudi dokler ne vklopim spornih funkcij, "premeščene" spremenljivke delajo navidez normalno.

Torej, če je bug, kako potem stvar zaobiti, saj toliko spremenljivk pač rabim ?

HVALA IN LP

_________________
Pa sam programirat sem hotu!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group