Sada je: 18 tra 2024, 10:43.
C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
jura je lijepo iskomentirao kod, svaka čast :thmbs-up

Ja bi u funkciji morse na početku napravila test da li je slovo iz područja velikih slova i ako je konvertirala ga u malo. To bi pridonjelo isključivo čitljivosti koda pa nebi imao
Kod: Označi sve
if (letter == 'A' || letter == 'a')

nego
Kod: Označi sve
if (letter == 'a')

tj u tom slučaju bi pisala switch case umjesto if. Al velim, to je samo malko uredniji kod, nipošto se ne može reći točniji.

Kad se odlučiš pisati sljedeći program za arduino, slobodno piši tu ideje pa ti pomognem ako zapneš.

Vidim da imaš nekog doticaja sa php-om, iako su C i php vrlo slični, velika je razlika pisati kod za embedded sistem kao što je arduino ili php kod za server. Razlika u resursima je ogromna i kod web aplikacija skoro nitko ne pazi na veličine varijabli, brzinu izvođenja itd. Dok je upravo veličina programa i količina dostupne memorije ključ kod pisanja programa za npr arduino. Npr dok u php-u nitko neće ni trepnut dal definirat varijablu kao char ili int, kod arduina se vrlo lako dogodi da nemaš mjesta za int.
Avatar
Site Admin
Postovi: 2074
Site Admin
Postovi: 2074
Pridružen/a: 07 pro 2007, 16:30
Lokacija: Zagreb
Podijelio/la zahvalu: 174 puta
Primio/la zahvalu: 278 puta
Spol: Ž
OS: ubuntu 12.04
Ništa, gcc -S i usporediti assembler kod u if vs switch! Primam opklade na PP, minimalni ulog 100 kuna.
Es gibt keinen Gott, kein Universum, keine menschliche Rasse, kein irdisches Leben, keinen Himmel, keine Hölle. Es ist alles ein Traum - ein grotesker und dummer Traum. Nichts existiert außer dir. Und du bist nur ein Gedanke - ein vagabundierender Gedanke, ein nutzloser Gedanke, ein heimatloser Gedanke, der verloren in der leeren Ewigkeit wandelt!
Avatar
Moderator
Postovi: 10322
Moderator
Postovi: 10322
Pridružen/a: 07 pro 2007, 18:07
Podijelio/la zahvalu: 181 puta
Primio/la zahvalu: 313 puta
Spol: Y
OS: utuntu 19.10
shrike je napisao/la:Ništa, gcc -S i usporediti assembler kod u if vs switch! Primam opklade na PP, minimalni ulog 100 kuna.

Hvala na poticaju! Isprobao na Arduinu. IF je začudo bolji, kraći i elegantniji a SWITCH izgleda prilično loše - ni blizu onako kako bi ga čovjek pisao ručno. Onda sam kasnije naletio na tekst gdje majstor kaže "ne koristite switch u embedded programiranju jer compilerova implementacija jako ovisi o poretku podataka u CASE te mjesečevim mijenama."

https://embeddedgurus.com/stack-overflo ... tatements/

Postoje neka osnovna pravila ponašanja ali nema čarobne formule nego isplaniraj, radi, testiraj pa opet preradi. :-D
Avatar
Postovi: 1907
Postovi: 1907
Pridružen/a: 16 tra 2011, 08:34
Lokacija: i grupa Film
Podijelio/la zahvalu: 45 puta
Primio/la zahvalu: 342 puta
Spol: M
OS: Mint 10 LXDE itd...
Nemojte samo na jednom primjeru odlučivat dal je if-else ili switch-case bolji. U nekim situacijama će se if-else optimalnije prevest, u drugima će bolji biti switch-case.

A kod embedded programiranja ionako treba pregledat prevedeni kod u assebmleru ako vam je cilj brže izvođenje i manji kod. Neki compileri tako suludo optimiraju kod da nakon kompajliranja doslovno fale djelovi koda. Ne jednom smo gubili dane tražeći zašto se program ne odvija kako je zamišljen da bi na kraju u assembleru vidjeli da su neki djelovi izbačeni jer je eto compiler mislio da su ti djelovi zabunom nutra??
Avatar
Site Admin
Postovi: 2074
Site Admin
Postovi: 2074
Pridružen/a: 07 pro 2007, 16:30
Lokacija: Zagreb
Podijelio/la zahvalu: 174 puta
Primio/la zahvalu: 278 puta
Spol: Ž
OS: ubuntu 12.04
nicky je napisao/la:Nemojte samo na jednom primjeru odlučivat dal je if-else ili switch-case bolji. U nekim situacijama će se if-else optimalnije prevest, u drugima će bolji biti switch-case.

A kod embedded programiranja ionako treba pregledat prevedeni kod u assebmleru ako vam je cilj brže izvođenje i manji kod. Neki compileri tako suludo optimiraju kod da nakon kompajliranja doslovno fale djelovi koda. Ne jednom smo gubili dane tražeći zašto se program ne odvija kako je zamišljen da bi na kraju u assembleru vidjeli da su neki djelovi izbačeni jer je eto compiler mislio da su ti djelovi zabunom nutra??


Slažem se totalno. A ono gore je bilo konkretno u onom Arduino slučaju, trebao sam to navesti.
Što se tiče nedostajućeg koda nakon kompilacije, to nije tako neobično. Optimizacija jako preuređuje kod, ovisno o stupnju i uključenim opcijama. Potpuno izbacivanje bi se desilo, recimo, ako zaboraviš označiti kao "volatile" ulazne portove ili globalne varijable koje su dijeljene s interruptom. Kompajler ne može znati da se te variable mijenjaju iz vanjskog svijeta ili interruptom nego vidi samo varijable koje se nikad ne mijenjaju. I tako ih optimizira kao da su konstante, posve izbacujući suvišni kod.
Avatar
Postovi: 1907
Postovi: 1907
Pridružen/a: 16 tra 2011, 08:34
Lokacija: i grupa Film
Podijelio/la zahvalu: 45 puta
Primio/la zahvalu: 342 puta
Spol: M
OS: Mint 10 LXDE itd...

Na mreži
Trenutno korisnika/ca: / i 5 gostiju.