www.elektronik.si
Začetniški problem v C-ju pri AVR-ju
Pojdi na stran Prejšnja  1, 2, 3 ... , 24, 25, 26  Naslednja  :||:
www.elektronik.si -> Osnove programiranja AVR-jev

Avtor: rafaellsiKraj: Radovljica PrispevekObjavljeno: Pet Avg 26, 2016 2:26 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Da ti mogoče ne primankuje spomina?

Avtor: lojzekKraj: Koroška Bela PrispevekObjavljeno: Pet Avg 26, 2016 9:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pomislil sem tudi na to.... Mego 168 imam (po avr studiu) zapolnjeno do 14kB spomina (od 16kB) in max 950B (od 1kB) spremenljivk... Po AVR studiu pri prevodu oboje manj kot 100% Think

Imam še enega 328... Bom v ponedeljek poskusil še s tem, če bo kaj bolje.

Res pa je, da še nikdar taaako obsežnega programa in toliko spremenljivk še nisem skupaj sklamfal....

Avtor: DomeniusKraj: Trbovlje, LJ PrispevekObjavljeno: Ned Avg 28, 2016 10:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
lojzek je napisal/a:
...in max 950B (od 1kB) spremenljivk...

V RAM se ne shranjujejo samo spremenljivke, pozabil si na stack.

Avtor: lojzekKraj: Koroška Bela PrispevekObjavljeno: Pon Avg 29, 2016 8:15 am    Naslov sporočila:  
----------------------------------------------------------------------------
Če bi uporabil 328, bi moral program predelat.... Samo s prevodom programa zanjo ne deluje.

Bom moral ostati pri 168...

@Domenius: Ali lahko laično razložiš tvoj post...? Think Ali se poleg tega, kar AVR Studio napiše, v RAM naloži še nekaj?


Nazadnje urejal/a lojzek Pon Avg 29, 2016 8:20 am; skupaj popravljeno 1 krat

Avtor: tilz0RKraj: Črnomelj PrispevekObjavljeno: Pon Avg 29, 2016 8:17 am    Naslov sporočila:  
----------------------------------------------------------------------------
RAM je uporabljen za globalne in lokalne spremenljivke.

Globalne spremenljivke so tiste, ki so deklarirane izven funkcij, medtem, ko so lokalne tiste, ki so znotraj njih deklarirane.

Te spremenljivke (lokalne) se shranjujejo na "Stack" (slovensko "Sklad"), ki je del RAM-a, kar ti AVR studio ni štel v izračunu ker za to potrebuje izračunat celoten call stack upoštevajoč interrupt rutine v vsakem momentu.

Lahko se je zgodilo, da si šel s stackom izven memory-ja RAM-a in je vse začelo delovati po svoje.

Avtor: lojzekKraj: Koroška Bela PrispevekObjavljeno: Pon Avg 29, 2016 12:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
tilz0R je napisal/a:

Te spremenljivke (lokalne) se shranjujejo na "Stack" (slovensko "Sklad"), ki je del RAM-a, kar ti AVR studio ni štel v izračunu ker za to potrebuje izračunat celoten call stack upoštevajoč interrupt rutine v vsakem momentu.


To zna biti tisto....

Prevajalnik mi izvrže naslednje....
Koda:

Device: atmega168p

Program:   13596 bytes (83.0% Full)
(.text + .data + .bootloader)

Data:        964 bytes (94.1% Full)
(.data + .bss + .noinit)


Build succeeded with 106 Warnings...


Tisti Warningi so predvsem pri izpisu tekstov... malce zbrke med unsigned in signed spremenljivkami - dosedaj še niso motili izvajanja programa.

Če torej nekaj spremenljivk (te v zgornjih postih omenjene tekstualne in zato velike okoli 50 Bytov) zaradi izvajanja programa mora še nekam shranjevat, pa torej lahko del že prej shranjenih spremenljivk "povozi" Think ?

Torej je bolje, da te največje (besedila) reorganiziram in definiram globalno?

Avtor: tilz0RKraj: Črnomelj PrispevekObjavljeno: Pon Avg 29, 2016 12:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Gre nekako tako.

Imaš na voljo 1k rama in tvoje spremenljivke globalne kurijo 950B RAM-a.
Torej imaš za stack na voljo še recipiši 74Bytov.

Vsak klic funkcije znotraj druge funkcije dodatno obremenjuje stack. Če ga zasedeš, torej celih 74Bytov pushneš na stack (na stack gredo lokalne spremenljivke, delovni registri, pa še kaj).

Ko pushneš na stack zadeve se povečuje zasedenost. Če stack prekoračiš, si v območju kjer ni RAM-a (v ARM Cortex bi te čakal HardFault error) in ko nazaj pop-neš dol imaš neznane vrednosti na stacku, ki je izven RAM-a.

Po domače bi lahko rekli, da se povozi RAM.


Nazadnje urejal/a tilz0R Pon Avg 29, 2016 1:18 pm; skupaj popravljeno 1 krat

Avtor: lojzekKraj: Koroška Bela PrispevekObjavljeno: Pon Avg 29, 2016 1:16 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala za lepo domačo razlago.

Torej bom program primoran optimirati predvsem v smislu spremenljivk in njih uporabe. Na žalost sem program že skoraj v celoti spisal, tako da bo dela malo več. Bom vedel za naslednjič.

Avtor: integrercKraj: Novo mesto PrispevekObjavljeno: Čet Nov 24, 2016 7:59 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!
Prešel na AVR studio 6, WinAVR.
Težava, ki jo nikakor ne morem rešiti je sledeča.....
Ko hočem uporabiti v svojem projektu npr. lcd knjižnico (ki jo dodam v projekt), mi ob prevajanju javi napak.... lcd_lib.h: no such file or directory
Knjižnica seveda obstaja v failu in bi morala delovati, je tudi zdefinirana v samem programu (#define <lcd_lib.h>).
Prosim za pomoč, kaj delam narobe?
LP!

Avtor: matjazkariz PrispevekObjavljeno: Čet Nov 24, 2016 9:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Namesto define napiši include in namesto<> daj "", če je header v isti mapi kot ostale datoteke projekta.

Avtor: integrercKraj: Novo mesto PrispevekObjavljeno: Čet Nov 24, 2016 9:54 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, ja saj sem dal #include in z narekovaji sem poizkusil, pa je isto...

Avtor: JanKraj: Dolenjska PrispevekObjavljeno: Čet Nov 24, 2016 10:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imaš mogoče kakšne presledke v imenu poti projekta?
Če jih imaš, prestavi projektno mapo direktno na C:\ in poskusi, če bo isto.

Jan

Avtor: integrercKraj: Novo mesto PrispevekObjavljeno: Čet Nov 24, 2016 11:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ne nimam presledke v imenu poti , poskusil sem dat projekt direktno na C: in je ista "figa"....očitno delam nekaj narobe...v solution explorerju dodam z ADD knjižnjico, .c in .h, potem pa izberem "build" in mi pokaže zgoraj omenjen error.

Error 1 lcd_lib.h: No such file or directory C:\Users\Andrej\Documents\Atmel Studio\vajeatmelstudio\vajadelamojstra\vajadelamojstra\lcd.lib.c

Avtor: DomeniusKraj: Trbovlje, LJ PrispevekObjavljeno: Pet Nov 25, 2016 9:23 am    Naslov sporočila:  
----------------------------------------------------------------------------
Pot (path) imaš kar dolgo, mogoče bi jo bilo dobro skrajšati - sem že imel probleme. Tudi šumnike in presledke odsvetujem - vem da jih nimaš, govorim na splošno. Pa napisal si lcd_lib.c, tam kjer imaš pot pa imaš napisano lcd.lib.c. Se pravi da bi bilo pravilno #include "lcd.lib.h".

Avtor: integrercKraj: Novo mesto PrispevekObjavljeno: Pet Nov 25, 2016 10:51 am    Naslov sporočila:  
----------------------------------------------------------------------------
Hm, ne vem kako, ampak res je, ime knjižnjice je bil lcd.lib v sami knjižnjici pa je imenovana lcd_lib. Spremenil sem ime knjižnice na lcd_lib in očitno bo v redu, error-a ni več.
Bom pa proti večeru preizkusil, če dela tudi funkcionalno.
Hvala, lp!

Stran 25 od 26

Powered by phpBB © 2001,2002 phpBB Group