Slažem se sa tobom da je teško reći šta je pravilno napisan program. Možda bi to bio program koji radi ono što treba na maksimalno efikasan način, što je opet, samo po sebi, veoma nedefinisano. Slažem se da je programiranje veoma kreativan proces i da ga ne treba šablonizovati, ali ipak mislim da postoje neka osnovna pravila koja treba ispoštovati od kojih će da zavisi kojim putem će programer da krene. Npr. po meni, pre početka pisanja treba što bolje analizirati šta će sve tu da se dešava i na osnovu toga odrediti šta ide u inicijalizaciju, da li koristiti interapte ili ne, gledati da interapt bude što kraći, zatim da li je proces takav da je bolje upotrebiti stejt mašinu ili ne, da li neki deo programa koji se izvršava više puta staviti u potprogram ili ne (zavisno od potrebne brzine izvršavanja tog dela) i sl. Na to sam mislio kada sam pomenuo pravilno pisanje.
Što se tiče petlji, da prvo obradim FOR.
Za program gde je i bajt tip:
Code:
for i=0 to 3
....
next
kompajler prvi sledeći kod:
Code:
CLRF i
L1
MOVLW 0x04
SUBWF i, W
BTFSC STATUS, C
GOTO for_kraj
....
INCFSZ i, f
GOTO L1
kraj_for
koji je, koliko vidim, saasvim korektan i u principu nemam zamerki, mada imam utisak da je naredba INCFSZ stavljena kao neka vrsta "osigurača". Možda logika autora kompajlera u ovom slučaju izlazi na videlo kada se u FOR petlji za promenljivu tipa bajt stavi vrednost veća od 255. Umesto da kompajler javi grešku i onemogući kompajliranje, on to bez problema prevede, mada malo drugačije, gde navedena naredba upravo deluje kao zaštita da se program ne zaglavi u mrtvoj petlji. Program:
Code:
for i=254 to 257
....
next
PBP će da prevede u:
Code:
MOVLW 0xE6
MOVWF i
L1
....
INCFSZ i, f
GOTO L1
for_kraj
Ovakva petlja će uvek da se izvrši bar jednom, ili više puta i to sve dok promenljiva "i" ne predje sa 255 na 0. Zaista neobično i prilično bezvezno.
Toliko za danas, ostatak sutra, nemam sad vremena za ostale petlje.
Pozdrav.
Sinisha