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 

PIC stack/memory array problem (mplab C18)

 
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
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.01
Kraj: Yogyakarta

PrispevekObjavljeno: Sre Okt 08, 2008 1:14 pm    Naslov sporočila:  PIC stack/memory array problem (mplab C18) Odgovori s citatom

Živjo!

Imam en hiter in velik problem Very Happy

Uporabljam PIC18F8722 v MPLAB okolju in z C18 prevajalnikom.

Želel sem uporabit spremenljivko, ki hrani IDje
in sicer 3 nivojski array

char spremenljivka[4][4][25]; Twisted Evil

pa mi zadeva vrne napako
Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x00000190

če zmanjšam to na [4][4][16] je vredu

uC ima 4Kb rama id tega ni zasedenega niti 1Kb.
tako da mi ni jasno v čem je problem


če prestavim zadevo v main funkcijo (drugače je globalna spremenljivka)
mi pa javi Error [1300] stack frame too large


any suggestions?

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 16.33
Kraj: Črnuče

PrispevekObjavljeno: Sre Okt 08, 2008 1:31 pm    Naslov sporočila:   Odgovori s citatom

Naletel na enak problem z Basic-om.

Picek res ima 4KB Flasha za program, le pa ta razdeljen med banke. In programski segment je lahko dolg toliko, da paše v posamezno banko. Vsaj nekako tako sem jaz to zastopil. Upam da se bo še kdo oglasil in povedal kako se temu izogniti.....

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.46
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Sre Okt 08, 2008 5:29 pm    Naslov sporočila:   Odgovori s citatom

Glej User guide, stran 62: Creating large data objects ...

http://ww1.microchip.com/downloads/en/DeviceDoc/C18_User_Guide_51288j.pdf

LP!
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.: 3.99
Kraj: Ljubljana

PrispevekObjavljeno: Sre Okt 08, 2008 6:41 pm    Naslov sporočila:   Odgovori s citatom

Naredi aray sam in sicer iz štirih array-ev po [4,25]!

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



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.01
Kraj: Yogyakarta

PrispevekObjavljeno: Sre Okt 08, 2008 7:02 pm    Naslov sporočila:   Odgovori s citatom

Highlag je napisal/a:
Naletel na enak problem z Basic-om.

Picek res ima 4KB Flasha za program, le pa ta razdeljen med banke. In programski segment je lahko dolg toliko, da paše v posamezno banko. Vsaj nekako tako sem jaz to zastopil. Upam da se bo še kdo oglasil in povedal kako se temu izogniti.....


pic ima 4K RAM-a in 128k FLASH-a drugače Wink

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.01
Kraj: Yogyakarta

PrispevekObjavljeno: Sre Okt 08, 2008 7:15 pm    Naslov sporočila:   Odgovori s citatom

chaos je napisal/a:
Glej User guide, stran 62: Creating large data objects ...

http://ww1.microchip.com/downloads/en/DeviceDoc/C18_User_Guide_51288j.pdf

LP!


e, to je pir Very Happy

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.15

PrispevekObjavljeno: Pon Nov 10, 2008 6:13 pm    Naslov sporočila:   Odgovori s citatom

No ja, sicer sem malo pozen za odgovor.... Bom pa dodal še par trikov kar se linker file-a tiče.

Jaz imam navado poleg spreminjanja velikosti gpr tudi preimenovati - na primer:
Koda:
SECTION     NAME=Eeprom_Menu              RAM=gpr4
SECTION     NAME=Serial_1              RAM=gpr5
SECTION     NAME=Ex_eeprom           RAM=gpr6

tako si lahko zložim spremeljivke po bankah glede na modul v katerem so klicane. Izvajanje programa je zato hitrejše (manj bankselektanja)
V programu pred deklaracijo spremenljivk kličem
Koda:
Eeprom_Menu      UDATA
<<<deklaracija spremeljivk vezanih na EEprom....>>>>


Inicializacijo ne prepuščam C18 ampak jo spišem sam. Zato skomentiram v linkerju vrstico:
Koda:
//FILES c018i.o

V svojem programu pa dodam
Koda:
STARThere   CODE    0x0000
<<<koda za inicializacijo>>>>

Paziti je potrebno da ustrezno inicializiraš fpflags zaradi pravilnega delovanja nekaterih starih čipov. V inicializacjo zato vključim:
Koda:
extern near char FPFLAGS;
   _asm
       // Initialize the stack pointer
       lfsr 1, _stack
       lfsr 2, _stack
       clrf TBLPTRU, 0         // 1st silicon doesn't do on POR                                               
       bcf FPFLAGS,RND,0       // Initalize rounding flag for floating point libs
   _endasm


V linkerju je mogoče definirati s čim naj bo zapolnjen preostali prostor po CODEPAGE-ih. To narediš tako, da dodaš na konec vrstice direktivo FILL:

Koda:
CODEPAGE   NAME=page       START=0x2A           END=0x7FFF   FILL 0xFFFF


kjer FFFF pomeni korak naprej. Lahko pa dodate svojo komando. Jaz dam v končno verzijo komado za reset. Koda za reset se razlikuje od uCja do uCja. Kodo komande dobite tako, da nekje v program vpišete to komando in po kompilanju pogledate Disassembly listing na isti lokaciji v katero ste vpisali komando. Stvar je uporabna v zares izrednih primerih pri debugiranju. Zapomniš flash s komando za prižig ene ledice na portu in na ta način zveš, če ti koda odpleše. Tega noben debugger ne javi!

Upam da bo komu kdaj koristilo...

_________________
LP, Matjaž
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
Stran 1 od 1

 
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: 232 dni


Powered by phpBB © 2001, 2005 phpBB Group