Fórum témák
» Több friss téma |
A for-ban lévő változót deklaráljam volatile-nek?
Ahol van for ciklus, ott működik a volatile, mivel van változó, de ahol csak egy nop van, ott nincs mire értelmezni. Ott csak a fenti megoldás működik. Az __attribute egyébként is korrektebbnek tűnik, mert jobban olvasható.
A másik kérdés nyitva maradt, mert mi van, ha egy rutinban csak néhány sort akarunk kiemelni az optimalizálás alól? Valami pragma lesz a megoldás, de nem találom a hogyant.
Ha nincs változó, akkor nop helyett berakhatsz valtozo++;valtozo--; ez pontosan két utasítás. A valtozo legyen volatile. Régóta programozok, de ilyenre még sosem volt szükségem. Bármilyen időzítést meg tudtam oldani interrupttal, nagy pontossággal, esetleg a beépített delay.h-val minden meg lehet oldani. Minek feltalálni a spanyolviaszt, ha már létezik rá megoldás?
A hozzászólás módosítva: Márc 26, 2017
Nem PIC hanem Cortex, de GCC. Így néz ki a nop:
Köszi, kipróbálom, bár ez is egy függvénynek néz ki.
Az én függvényem most így néz ki.
Ha már volt erről szó, akkor elnézést.
Most kezdtem Assemblerről áttérni HI-TECH PIC C-re. A próba progik már lefutnak, hiba nélkül. (PIC 16F628A-al próbálkozom) Próbáltam Pickit2-vel be is égetni a PIC-be. Az is simán lement, de a program nem a memória elejére kerül, hanem a 0x7c2 címen kezdődik. Az első címen egy utasítás található: Goto 0x7c2 A program végén meg ez: Goto 0x00. Ez gyakorlatilag a Program Memória vége. Az előtte lévő rész tök üres. Kérdésem: Mit kell ellenőriznem ill. beállítanom, hogy a progi a pr. memória elejére kerüljön. (úgy, mint az Assembler progik esetében történt) picipic
Magas szintű nyelvek esetében nem kell foglalkozni a program elhelyezésével. Csak, ha már nagyon tele írtad...
A hozzászólás módosítva: Okt 26, 2017
Én egyébként (PIC24 )assemblyben programozok, a C-t messziről kerülöm, de most egy teszthez írtam egy rövidke C (XC16)programot. Hibákat dob rá a fordító, de nem tudom hogy miért. Tudna valaki segíteni?
A C-ben mindent előre kell definiálni.
1: Vidd a main elé a rutin1 függvény blokkját. 2: A function prototype megadása a main előtt:
Kipróbáltam mindkét módot és működnek.
Nagyon szépen köszönöm a segítséget! (PC-n Visual Basic .NET alatt programozok, ott a sorrend nem fontos, ezért nem is gondoltam hogy itt problémát okoz.)
Sziasztok!
Kezdő (amatör) vagyok C-ben, de nagyon lelkes ![]() Találtam a neten egy minta programot de nem működik.
A hiba a
Segítsetek valami iránymutatással! Köszönöm! Ja! Ha fontos C18. A hozzászólás módosítva: Máj 24, 2018
Ravasz fuggveny, de hibas. A for() utan, a 24. sorban miert van a continue_loop = FALSE sor? Az elso beerkezett karakter utan vissza fog terni, raadasul inicializalatlan ertekkel. Ezert mondjuk egy rendes C fordito szolna is...
A konyvek nem feltetlenul javasoljak, de ebben a fuggenyen en siman ugy irnam meg a 17. sort, hogy return responses[i]; Felesleges a response valtozo. Mivel megtalaltad, amit kerestel, teljesen felesleges a for()-nak tovabb mennie. Amugy nem latok benne egyeb logikai hibat. A C18-on szivtam pointerekkel, valami nem rendesen mukodott veluk, de mar nagyon regen volt.
C-ben sem fontos a sorrend, csak elobb deklaralni kell a fuggvenyt (egy prototype-pal), mielott hivatkoznal ra. Ha nem deklaralod elore es ugy hivatkozol ra, akkor int tipusunak fogja implicit modon deklaralni a fordito.
Én még az nem értem, hogy ez hogyan nézné meg minden karakter egyezőségét, ha a so_far[i] értéke mindig 0. Ennyi erővel egy karaktert (a kezdőt) is elég lenne ellenőrizni, de szerintem a for ciklus pont ezért lenne, hogy minden karakter egyezik-e, csak ez nem történik meg, ha jól látom.
A 27,. sor azért van mert még nincs kidolgozva a fgv. Ami a 17. sort illeti igazad lehet, de a bibi nem ott van hanem a 14. sorban. A recived értéke jó , de a strings[i][so_far[i]] -t hibásan értékeli.
A response azért kell hogy a string tekljess hosszát vizsgálja ne csak az első byte-ot (még nem tudom hogymik lesznek, de el tudon képzelni hogy van/lesz ON, OK, OFF stb.
Lép az i-edik, de utána a i is növekszik, ami megint egy 0-ra mutat.
Nem ertem, amit mondasz. Ez a program a 24. sor nelkul mukodne rendesen. A 24. sor azt eredmenyezi, hogy meghivod a fuggvenyt, megvar egyetlen egy karaktert, egyszer vegigfut a for(), majd kilep a while-bol es visszater egy olyan valtozo ertekevel, aminek nem adtal erteket sehol. Ezert mondtam, hogy a program hibas, es hogy a C forditonak illene szolnia, hogy inicializalatlan valtozo erteket hasznalod. Ha a 24. sort kiveszed, akkor addig fog menni a while, amig a hat string kozul valamelyik be nem erkezik. Magyarul azt csinalna, amit te szeretnel. Es ehhez lenne egyszerusites, ha a 17. sorban rogton visszaterne a responses[i] ertekevel, ahelyett, hogy betolti ugyanezt az erteket a response nevu valtozoba majd egy FALSE feltetel miatt kilep a while-bol es utana visszater a response valtozo ertekevel.
Szerintem az eredeti szándék nem csak a kezdő betű detektálása volt, ezért van az egyik tömbben a hossz is letárolva.
A so_far[i] (magyarul: eddig) tomb azt mondja meg, hogy a hat lehetseges string-bol eddig hany karakter erkezett be:
amikor bejon egy O betu, akkor a so_far[0] 1 lesz. Ha bejon egy K, akkor a so_far[0] 2 lesz. Ha bejon egy 'r' betu, akkor so_far[0] 0 lesz, viszont so_far[1] 1-re ugrik. Amikor a so_far[i] == lengths[i], akkor az azt jelenti, hogy az i-edik string jott be karakterenkent. A hozzászólás módosítva: Máj 24, 2018
Persze, hogy nem. Ez a fuggveny addig var, amig a hat string-bol az egyik be nem erkezik teljes egeszeben. Ha bejott, akkor visszaadja a string-hez tartozo kodot a responses tombbol.
Na akkor mégegyszer.
Kivettem a 24. sort, de a jeleségen nem változtat, mivel a 14. sorban az if (strings[i][so_far[i]] == received) mindíg false vagyis nem találja meg. Tanácstalan vagyok. Nem működik. Hogy tudnám kiiratni akár a strings[i] akár a strings[i][so_far[i]] értéket hogy lássam mit nem talál? A hozzászólás módosítva: Máj 24, 2018
Mert hatelemu a tomb. Az 5. sorban van az utolso ket string.
Mert egyenlőre ez a 6 lehetséges válasz van, ebből keresné ki hogy melyik jött, de gondolom a kérdés nem erre vonatkozott
![]()
Azt sajnos nem tudom, hogy hogyan tudod kiiratni. Debugger? Sorosvonal? Kijelzo? Valami csak van, amire lehet karaktereket kuldeni.
Valami remlik, hogy a C18 rosszul kezeli a const-ot. Nem ugyanugy kezeli oket, mint a nem const-okat, es ettol nem is igazi C. Ezt a C18 leirasa taglalja, mar egyszer volt itt rola szo.
Soros portra próbáltam eredménytelenűl...
a kimenet "recived: O strings" |
Bejelentkezés
Hirdetés |