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 

C problem
Pojdi na stran 1, 2, 3  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
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5819
Aktiv.: 24.56
Kraj: Grosuplje

PrispevekObjavljeno: Ned Mar 04, 2012 1:08 pm    Naslov sporočila:  C problem Odgovori s citatom

vilko je napisal/a:
4 dni ali morda cel teden sem iskal napako v programu, pisanem v C-u.

V if stavku sem namestno dvojnega enačaja uporabil enojnega.

Namesto if (nekaj == nekaj)
sem napisa if (nekaj = nekaj )

Saj vem, pravila so taka. Ampak pravila bi moral olajšati človeku življenje ne pa, da mu ga zapletejo.

Živio Bascom!

Ja, ja teta Roza dela svoje Mad .
Čedalje več stvari si je potrebno zapisovati Brick wall.
Citiram:
Warning:
Beware of accidentally using the single equal sign (e.g. if (x = 10) ). The single equal sign is the assignment operator, and sets x to 10 (puts the value 10 into the variable x). Instead use the double equal sign (e.g. if (x == 10) ), which is the comparison operator, and tests whether x is equal to 10 or not. The latter statement is only true if x equals 10, but the former statement will always be true.
This is because C evaluates the statement if (x=10) as follows: 10 is assigned to x (remember that the single equal sign is the assignment operator), so x now contains 10. Then the 'if' conditional evaluates 10, which always evaluates to TRUE, since any non-zero number evaluates to TRUE. Consequently, if (x = 10) will always evaluate to TRUE, which is not the desired result when using an 'if' statement. Additionally, the variable x will be set to 10, which is also not a desired action.

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Ned Mar 04, 2012 7:02 pm    Naslov sporočila:   Odgovori s citatom

To je bolj problem kompajlerja. Poskusi tako napako napraviti v kakem bolj "komercialnem" kompajlerju. Visual Studio bi ti hitro povedal, da ne moreš implicitno pretvoriti integerja v boolean Wink Take napake se rade zgodijo, lahko si srečen, če te kompajler nanje opozori.

LP G

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Pon Mar 05, 2012 8:09 pm    Naslov sporočila:   Odgovori s citatom

Vilko, nemogoče bi bilo ustvariti sintakso, kjer bi enojni enačaj pomenil dve različni stvari. Prevajalnik ne razume človeške semantike in ne ve, kdaj mi želimo nekaj prirediti in kdaj primerjati dve vrednosti. Verjetno je v vseh programskih jezikih isto in ne samo v C-ju. Če pa se motim, se pa opravičujem. Ampak ta navada pride sčasoma.
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gregoral
Član
Član



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.04
Kraj: Ljubljana

PrispevekObjavljeno: Pon Mar 05, 2012 9:52 pm    Naslov sporočila:   Odgovori s citatom

@ljudsko:
Res da nujno rabimo dva različna operatorja, samo ni nujno da izberemo = in ==.

pascal:
- primerjanje =
- prirejanje :=

@Vilko:
Če boš več delal v C in C++ boš take napake hitro našel.

Opomba:
Obstajajo tudi jeziki kjer imaš tudi === operator.

javascript (in php):
- operator === primerja tudi tip spremenjlivke == pa ne
- "5" == 5 je true
- "5" === 5 je false

lp, Gregor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Krampus
Član
Član



Pridružen-a: Pon 08 Sep 2008 13:07
Prispevkov: 1853
Aktiv.: 9.08

PrispevekObjavljeno: Pon Mar 05, 2012 10:39 pm    Naslov sporočila:   Odgovori s citatom

Basic:
Piši kao što govoriš Smile

If a = b then
a = b + x
end if

_________________
Nisem ravno najbolj pameten na svetu, tu in tam pa imam kakšno idejo.
Nazaj na vrh
Prisoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Tor Mar 06, 2012 12:14 am    Naslov sporočila:   Odgovori s citatom

In na koncu..
C je še vedno tata mata vseh jezikov Smile

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gumby
Član
Član



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

PrispevekObjavljeno: Tor Mar 06, 2012 12:20 am    Naslov sporočila:  C problem Odgovori s citatom

Krampus je napisal/a:
Piši kao što govoriš Smile

Koda:
if(p=malloc(500))
{
  ...
  free(p);
}
else
  puts("kupi malo več RAM-a");

Kje je problem?

C über alles Very Happy

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



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.04
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2012 12:44 am    Naslov sporočila:   Odgovori s citatom

Problem seveda ni v Cju, problem je v programerjih.

Vilko hvali bascom,
silvo hvali assembler,
gumby ima rad C,
meni je všeč C++,
....

To lahko vlečemo do nezavesti Smile.

Dejstvo je da se večino mikrokontrolerjev da programirati v C ju (verjetno tudi v assemblerju).

V bascomu se ne da delat vsega,
C# je super za poslovne aplikacije na windowsih, za MCUje pa najbrž nikoli ne bo,
java je (baje) super samo je tudi bolj za destop aplikacije (linux in windows),
php je bolj za web strani,
...
assembler je pa za silvota Smile.

TOREJ:
Programer se mora prilagoditi prevajalniku ki ga uporablja.
Prevajalnik se načeloma ne prilagaja programerju.

Bom počasi utihnil / nehal neumnosti kvasit,
lp,Gregor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 60.06
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Tor Mar 06, 2012 12:50 am    Naslov sporočila:   Odgovori s citatom

gregoral je napisal/a:
assembler je pa za silvota Smile.


Asembler je zato, da stvari delajo hitreje, programer je pa zato počasen. Ampak silvo ima čas,...

_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Tor Mar 06, 2012 12:57 am    Naslov sporočila:   Odgovori s citatom

gregoral je napisal/a:


Dejstvo je da se večino mikrokontrolerjev da programirati v C ju (verjetno tudi v assemblerju).
--------------------------------------

V bascomu se ne da delat vsega

----------------------------------------------

assembler je pa za silvota Smile.


lp,Gregor

Ne verjetno, ampak prej obratna situacija (verjetno tudi v C-ju)-v assemblerju se da vse Smile

Z drugo izjavo se popolnoma strinjam, še preveč...

Tretja izjava..poskusi assembler, ti bo postal kmalu všeč, ko boš videl koliko pomnilnika privarčuješ, sploh če znaš kodo dobro optimizirati.
Skratka, na programerju je, da izbere jezik, ki mu najbolj ustreza in mu je najbolj všeč. Če ti bo basic premalo, boš pač vzel C. Če ti bo C premalo, boš vzel zbirnik. Se pa po moje tudi v C-ju da spisati vse, če imaš dovolj izkušenj, da znaš do dobra zoptimizirat kodo (če bi že pomnilnik bil tak problem).

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Tor Mar 06, 2012 1:01 am    Naslov sporočila:   Odgovori s citatom

VolkD je napisal/a:
gregoral je napisal/a:
assembler je pa za silvota Smile.


Asembler je zato, da stvari delajo hitreje, programer je pa zato počasen. Ampak silvo ima čas,...


Mislim, da Silvo ni tako počasen, kolikor programira v zbirniku. Je verjetno še precej hitrejši od marsikaterega C vešča Very Happy

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gregoral
Član
Član



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.04
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2012 1:31 am    Naslov sporočila:   Odgovori s citatom

Ne podcenjujem ne assemblerja ne silvota.

Moje stališče je tako:
- assembler omogoča v celoti izkoristiti MCU
- zahteva veliko večji začetni vložek (učenje)
- ni direktno prenosljiv med procesorji
- če obvladaš assembler za določen MCU lahko narediš veliko več pri isti količini pomnilnika
- če ne obvladaš assemblerja je lahko tvoj program celo večji od prevedenega iz C

Da ne bo pomote Silvotovo znanje assemblerja občudujem .
Kolikor sem opazil pa je eden redkih (če ni edini) na forumu ki dela v assemblerju.
Jaz sem se igral z assemblerjem, ga razumem, samo nimam volje da bi ga vzel za svojega.

Večina primerov na internetu je v Cju, ker je assembler preveč "write only".
Torej zaradi uporabljenih trikov izvorno kodo v assemblerju pogosto zares razume le avtor.

Če preteče dovolj časa včasih še avtor ne ve več točno kaj koda dela (velja za vse jezike).

VolkD je napisal/a:
Asembler je zato, da stvari delajo hitreje, programer je pa zato počasen. ...


Načelno se z izjavo strinjam. Vendar če ima programer izkušnje in izdelane solidne knjižnice, potem lahko tudi v assemblerju zelo hitro programira.

Sploh pri MCUjih kjer se večinoma dela samo s: string-i, integer-ji, in vgrajeno periferijo (Timerji, interrupti, ADC, UART, SPI, ...).

LP, Gregor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Mar 06, 2012 7:52 am    Naslov sporočila:   Odgovori s citatom

Citiram:
...silvo hvali assembler,...


He, he Silvo ne hvali assemblerja - ga pa uporablja Wink Sicer poznam tudi toliko osnov C-ja, da bi znal kaj enostavnega napisati a nekako mi ne "leže.."
Trditve glede assemblerja so popolnoma točne. Morda popravim darkotovo trditev. Slabo napisana assemblerska koda je prav tako lahko počasna ter potratna.

Res je programiranje - pravzaprav priprave na programiranje v assemblerju vzamejo precej časa. Če si rutine lepo "zložiš" je nadaljno programiranje zelo enostavno.
Nekaj časa nazaj sem si pripravljal rutine za LCD v navezi z I2c.
Če so rutine pametno napisane je dejansko zelo enostavno programirati.
Tako recimo izgleda del demo programa. Po moje je vsakemu, ki je blizu kakega programiranja razumljiv, kljub temu, da ni komentarjev)

Koda:
Demo:
   ldi LcdData,0
   rcall PosljiUkaz
   Napolni 1,0,20,' '   ;vrstica, začetek, število znakov , znak
   Napolni 2,0,20,' '   ;brisanje obeh vrstic
   Napis "Demo LCD I2C",1,1 ;tekst , vrstica, začetek
   Napis "PCF8574",2,1
   rcall Pavza2S
   Napolni 1,0,20,'*'
   Rcall Pavza200mS
   Napolni 2,0,20,'*'
   Rcall Pavza2S
   Napolni 1,0,20,' '
   Rcall Pavza200mS
   Napolni 2,0,20,' '
   rcall Pavza200mS
   Napis "Prva vrsta",1,1
   rcall Pavza200mS
   Napis "Druga vrsta",2,1 
   rcall Pavza2S
   Napolni 1,0,20,' '
   Napolni 2,0,20,' '
   Polozaj 1,1
   Crkuj 'w'
   Rcall Pavza200mS
   Crkuj 'w'
   Rcall Pavza200mS
   Crkuj 'w'
   Rcall Pavza200mS
   Crkuj '.'
   Rcall Pavza200mS
   Napis "elektronik",1,5
   Napis ".si",2,1
   rcall Pavza2S
   Napolni 2,0,20,' '
   Napis "Reset",2,1
   Crkuj '.'
   rcall Pavza200mS
   Crkuj '.'
   rcall Pavza200mS
   Crkuj '.'
   rcall Pavza200mS
   rjmp Demo

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3359
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Tor Mar 06, 2012 9:24 am    Naslov sporočila:   Odgovori s citatom

Tema je: Kaj trenutno počnete.

Jaz trenutno berem besedno bitko med cigani, ko vsak svojega konja hvali. In mi gre malo na smeh, kot gre na smeh neprizadetem opazovalcu, ki opazuje, kako se otroci ravsajo med samo zaradi časti in ugleda.

Samo eno potpitanje: Če se omejimo na atmel, česa bascom ne more?

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
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.: 18.41

PrispevekObjavljeno: Tor Mar 06, 2012 9:49 am    Naslov sporočila:   Odgovori s citatom

vilko je napisal/a:
Tema je: Kaj trenutno počnete.

Ni več. Temo sem razdelil, ker je bila debata okoli C tam čisto offtopic.

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-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 1, 2, 3  Naslednja
Stran 1 od 3

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


Powered by phpBB © 2001, 2005 phpBB Group