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 

Začetniški problem v C-ju pri AVR-ju
Pojdi na stran Prejšnja  1, 2, 3 ... 20, 21, 22 ... 27, 28, 29  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Čet Sep 15, 2011 1:39 pm    Naslov sporočila:   Odgovori s citatom

Ja, točno to je bilo. Null terminator stringa mi je "povozil" polovico int cifre 35-10 in jo predelal v (najverjetneje) 0-10.

Ampak, ali ni pri velikosti arraya [16] le ta dolg pravzaprav 17 polj? Saj se šteje od 0, 1, 2, ...16. In v tistem zadnjem 17.tem (z oznako 16) sem računal skrajni doseg za null terminator..
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



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

PrispevekObjavljeno: Čet Sep 15, 2011 1:54 pm    Naslov sporočila:   Odgovori s citatom

lojzek je napisal/a:

Ampak, ali ni pri velikosti arraya [16] le ta dolg pravzaprav 17 polj? Saj se šteje od 0, 1, 2, ...16. In v tistem zadnjem 17.tem (z oznako 16) sem računal skrajni doseg za null terminator..


Ne, pri deklaraciji polja podas njegovo tocno velikost, torej int a[16]; je deklaracija polja z 16-imi elementi, prvi je a[0], zadnji a[15].

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



Pridružen-a: Ned 09 Jul 2006 12:13
Prispevkov: 1250
Aktiv.: 5.79
Kraj: Savinjska dolina-okolica Gornjega Grada

PrispevekObjavljeno: Sre Sep 21, 2011 1:02 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljeni !

Ponovno se oglašam z nekim začetniškim problemom Wink . Neko kodo iz Bascoma še verzije 8051 prevajam v C. Programiram za AVR studio in WinAvr-jem. Spodaj prilagam kodo, katera je napisana v Bascom8051:

Koda:

V_nap_sp:
         Cls
         Lcd "St.Vrt. ->:" ; V_naprej
         Lowerline
         Lcd "(OK)/(-)/(+)"

        [b] Do[/b]
          A1 = P3.3                                         ' (-)              239
          A2 = P3.5                                         ' (+)              223
          A3 = P3.4                                         ' (OK)             247
          Ar = P3.2                                         ' Avtomatsko/Ročno 251
          If A2 = 0 Then
                 If A1 = 0 Then
                   V_naprej = -1
                   Gosub V_nap_1
                 Else
                   Gosub V_nap_1
                 End If
                 Set Sprememba
          Elseif A1 = 0 Then
                 Gosub V_nap_2
                 Set Sprememba
          Elseif A3 = 0 Then
                 [b]Exit Do[/b]
          End If
          Waitms 250
        [b] Loop[/b]

Return



Napisan je le delček kode oziroma funkcija ki čaka pritiske tipk. Sedaj sem se lotil kodo prepisati v C vendar imam manjši problem. V Bascom kodi so uporabljeni ukazi ki so napisani krepko. Ti so: Do, Loop in exit do.

Mi lahko kdo prosim pove ali poda kakšen primer kako naj se te kode lotim v C-ju oziroma kaj naj uporabim namesto bascom ukazov Do, Loop in Exit do ? Spodaj sem kodo po večini prevedel, vendar se mi je zaradi zgornjih ukazov zataknilo Sad .
Prilagam še prevedeno kodo:

Koda:

void V_nap_sp()
{      
      char lcdstr1[16];
        char lcdstr2[16];

      LCDclr();
      sprintf(lcdstr1, "Vrtljaji: %i", Vrtljaji);
      LCDGotoXY(0, 1);                     //Kurzor postavi na drugo vrstico
      LCDstring("(OK)/(-)/(+)", 12);

   ?????   Do
      if (PLUS_is_pressed())
               
          {      
                  
                  if (MINUS_is_pressed())
               
                     {
                     V_naprej = -1;
                     V_nap_1();

                     else
                     {
                     V_nap_1();
                     }
                     }

            Sprememba = 1
            else if (MINUS_is_pressed())
            {
            V_nap_2;
            Sprememba = 1;
            }
            else if (OK_is_pressed())
            {
         ?????   exit do;
            }
           }

      delay_ms(LOCK_INPUT_TIME1);
   ?????   Loop;

}



Hvala vsem za nasvete.

_________________
Lp

Tomaž, S57KO
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
žrepko
Član
Član



Pridružen-a: Tor 23 Mar 2010 20:12
Prispevkov: 700
Aktiv.: 4.10
Kraj: Ptuj-Maribor

PrispevekObjavljeno: Sre Sep 21, 2011 1:39 pm    Naslov sporočila:   Odgovori s citatom

Potrebuješ funkcijo do while.
lahko tudi samo while(pogoj) { ... }

izvaja tisto kar je v while funkciji tako dolgo dokler pogoj ni izpolnjen.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Sre Sep 21, 2011 5:50 pm    Naslov sporočila:   Odgovori s citatom

Koda:
do ... loop -> for(;;) { ... }, ali while() { ... }

exit do -> break;

next -> continue;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
trobida
Član
Član



Pridružen-a: Ned 09 Jul 2006 12:13
Prispevkov: 1250
Aktiv.: 5.79
Kraj: Savinjska dolina-okolica Gornjega Grada

PrispevekObjavljeno: Sre Sep 21, 2011 7:17 pm    Naslov sporočila:   Odgovori s citatom

Hvala za info, bom poizkušal zgornjo kodo "prebekslati" tako, kot sta svetovala. Poročam Wink ...
_________________
Lp

Tomaž, S57KO
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Čet Sep 22, 2011 6:11 am    Naslov sporočila:   Odgovori s citatom

Če je tista do - loop zanka pravzaprav glavni program in se mora stalno izvajati, ga označiš takole:
Koda:
while(1)
{

//tvoj programček

} //zaključek while zanke - in s tem tudi programa


V glavnem while (1) in oklepaja označujeta program. Z oklepaji tudi označiš dele programa - ukaze, ki po funkciji spadajo skupaj in se morajo tudi skupaj izvesti.

Seveda, če je to glavni program, iz njega ne moreš "izskočiti". Kaj bo pač mikro potem počel? Če pa je to samo ena funkcija (podprogram), pa iz nje izskočiš na več načinov: 1. ko se enkrat izvrši, 2. z ukazom return (ko je npr izpolnjen pogoj).
V primeru, da je to funkcija, pa bi tudi zanko funkcije mogoče naredil z 1. while(pogoj), ali pa 2. do --funkcija--- while (pogoj).

Malce branja , drugače pa se podobnega na netu kar najde..
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Sre Sep 28, 2011 1:03 pm    Naslov sporočila:   Odgovori s citatom

Zopet eno vprašanje, nekdo ki zna, bo hitreje odgovoril, kot pa se bom jaz prebil skozi morje branja na netu.

V eni podfunkciji programa imam lokalno (v njej) definirani recimo dve int spremenljivki. Mikro pri izvajanju funkcije ti spremenljivki spreminja.
Kaj se s tema spremenljivkama zgodi po izhodu iz funkcije. Ali se njuna vrednost "izniči", ali še vedno ta vrednost ostane nekje v spominu mikroja?

Pravzaprav to niti ni bistvo željene informacije. Najbolj me zanima, kaj se s tema spremenljivkama zgodi ob ponovnem klicu podfunkcije. Ali je njihova vrednost še vedno taka, kot je bila ob prejšnjem obisku funkcije? Oz. kolikšna je verjetnost, da se njuna vrednost ni spremenila?

Izsek problema za lažje razumevanje:

Koda:
void podfunkcija ()
{
unsigned int a, b;
if (en pogoj == true)
   ++a;
else 
   ++b;
}


Sem poizkušal sicer z AVR studiovim simulatorjem sam ugotoviti, ampak mi nekaj v tem delu simulacije ne dela po željah (seveda ne, ko ga pa nekje biksam), tako da točnega odgovora sam nisem ugotovil.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sre Sep 28, 2011 1:14 pm    Naslov sporočila:   Odgovori s citatom

a in b ne obstajata zunaj funkcije. Načeloma vrednost sicer ostane nekje v RAM-u, vendar je kakršnokoli zanašanje na to vrednost recept za kasnejši glavobol.
Biblijo v roke in naštudiraj "doseg" spremenljivk.

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Sre Sep 28, 2011 1:45 pm    Naslov sporočila:   Odgovori s citatom

Se mi je kar zdelo, da tako na easy ne bo šlo. Ali bom moral uporabiti globalne spremenljivke, ali pa povsem drug princip....
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
matjazkariz
Član
Član



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

PrispevekObjavljeno: Sre Sep 28, 2011 2:11 pm    Naslov sporočila:   Odgovori s citatom

Eni compilerji podpirajo deklaracijo globalnih spremenljivk v funkciji in sicer ponavadi jo definiraš s static...

Koda:
static unsigned char blabla;

_________________
LP, Matjaž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sre Sep 28, 2011 2:17 pm    Naslov sporočila:   Odgovori s citatom

Static ne pomaga. Spremenljivka znotraj funkcije navzven ne bo vidna.
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Sre Sep 28, 2011 3:19 pm    Naslov sporočila:   Odgovori s citatom

Rabiš za rekurzijo?
V tem primeru bi šlo s static.
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: 9406
Aktiv.: 42.35
Kraj: Kranj - struževo

PrispevekObjavljeno: Sre Sep 28, 2011 9:02 pm    Naslov sporočila:   Odgovori s citatom

Globalno spremeljivko narediš. Ali imaš premalo RAM-a ali v čem je težava?
_________________
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
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Sre Sep 28, 2011 10:47 pm    Naslov sporočila:   Odgovori s citatom

Se je kar debata razvila. Moja želja je, da bi pravzaprav štel, kolikokrat je program poklical podfunkcijo in je bil hkrati nek pogoj izpolnjen (tuhtam o neki moji vrsti debounce-ja tipke,. Zakaj? Ker ne vem, kako to profiji naredijo) Ob X-kratni ponovitvi klica podfunkcije in hkratno izpolnjenem pogoju- pritisnjeni tipki bi pa postavil zastavico v neki globalni - za cel program veljavni spremenljivki.

Drugače pa, o "static" deklaraciji bom še malo prebral- ni pa frke, če kdo od vas tudi kaj o tem omeni. Ni pa to problem rešiti z nekaj več globalnimi spremenljivkami.
Rad bi pač ugotovil neko "drugo" pot , če je seveda kolikor-toliko enostavno rešljiva.

Aja.... Rekurzija je pa kaj? Neutral

..... Naslednjič se oglasim (najverjetneje) šele v ponedeljek. Grem familijo v hribe terat...
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 -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3 ... 20, 21, 22 ... 27, 28, 29  Naslednja
Stran 21 od 29

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


Powered by phpBB © 2001, 2005 phpBB Group