Fórum témák
» Több friss téma |
Én bár nem vagyok annyira jártas a C programozásban, de úgy tudom hogy a CCS Compilerrel is lehet rá fejleszteni!
Sziasztok!
Köszi a hozzászólást. Igen, de úgy látom, hogy a Microchip oldalról letölthető C18 és C30 nem használható a PIC16F887-hez. Legalábbis a header fileja nincs ezekbe a fordítókba. Amúgy a fél óra, egy nap volt ![]() Úgyhogy az első nehézségeken túl vagyok. Olvasgatom a Kónya-Kopják könyvet. Ott van egy fejezet ami arról szól hogy mi a különbség a C30-as illetve a Hitec fordító között. De azért gondolom egy két kivétel tekintetében úgyanúgy kell programot írni mindkettőben ?! Üdv.: Feri
A C18 a PIC18 (16 bites programmemória, 8 bites adatút) mikrovezérlőkhöz való.
A C30 a PIC24, dsPIC30, és dsPIC33 (24 bites programmemória, 16 bites adatút) mikrovezérlőkhöz és jelvezérlőkhöz való. A HiTech fordító PIC16F887-hez való használatához a Kónya-Kopják könyv szerintem túl sok segítséget nem fog adni...
Hali!
MPLAB-ban, van egy C program, viszont én asm kódot akarok beszúrni, (nem értek céül szinte semennyire) amiben van ugrás is egy cimkére (az asm kódon belül), de a fordító syntax hibát ír ki arra a sorra ahol van az _asm utasítás, meg a W-t nem ismeri fel hogy az a work lenne.
Szóval nem fogad minden asm kódot? ![]()
Melyik C fordító?
Az már elhangzott itt párszor, hogy ADCON0 egyes bitjének van szép neve, tessék azt használni, különben nem vagyunk hajlandóak kódot bogarászni.
Uhh, tényleg :hide: Ezért már warnt érdemelnék
![]() A fordító az Microchip C18 Toolsite (azthiszem ez a a fordító...) vagyis: C:\MCC18\bin\mcc18.exe.
Az nagy baj lenne, ha ezt C-ben tennéd be?
A GO és a DONE elnevezés ugyanazt az egyes bitet jelenti, csak egyik helyen ez a beszédesebb, másik helyen az.
Köszi, azthiszem lassan meg kell tanulnom a C-t is... PIC-re meg PC-re is.
![]() Szerintetek is? ![]()
A legjobb ismerni C-t és asm-et is, és akkor el lehet dönteni, hogy melyiket használja az ember a feladattól függően. Mivel most neked C-be kellett volna az asm betét, ezért ajánlottam inkább, hogy tedd ezt be normál C utasításokkal. Egyébként nézd meg, hogy mit fordított a fordító ebből (View->Disassembly listing).
Ez a Disassembly listing ablak jól jön majd ha C-ben van a forráskód, illetve ha elkezdek C-ben is írkálni.
Idézet: A címke után kettőspontot kell tenni! - mondja a MPLAB C18 C COMPILER USER'S GUIDE„asm kódot akarok beszúrni, (nem értek céül szinte semennyire) amiben van ugrás is egy cimkére” C nyelven meg így is írhatod (itt a jobbra/balra igazítástól függetlenül helyiérték-helyesen olvassuk ki az eredményt!):
Egyébként a C18-hoz van gyári perifériakönyvtár. Ebben az általad kívánt művelet csatornakiválasztással kiegészítve így néz ki:
Köszi, először az alapokat is próbálom majd lefektetni. :yes:
Még egy utólagos észrevétel: rossz helyre akartál visszaugratni. Csak a BTFSS utasításra kell visszamenni!
![]()
Attól függ, hogy végtelen ciklus lesz-e, hogy pontosan mikor billen át nullára a GODONE bit. Ha már a BTFSS után, de még a BSF előtt, akkor végtelen ciklus lesz. De ha a BSF után és a BTFSS előtt, akkor viszont kilép a ciklusból.
Sziasztok!
Elkezdtem próbálkozni a C-vel és vannak részek, amelyek nem tiszták: a képen látható, hogy asm-ben írtam egy egyszerű késleltetést és a fordításkor betett egy pár felesleges NOP-ot ( a GOTO IDE után )! Ez miért van? Előre is kösz a segítséget! Steve
Vedd elő az adatlapot és nyálazd át a GOTO utasítás leírását, ott lesz a magyarázat arra, hogy miért van ott a NOP.
Amúgy mi köze ennek a C-hez, ha te is írod, hogy az asm betétbe tette be?
Aha, értem... akkor cserélhetem BRA-ra... Azt hittem nem optimalizál kellőképpen!
Bocs, hogy ideírtam, de az én fejemben ez most egy 'C-projekt' ! ![]() Köszi! Steve
Persze, kicserélheted BRA-ra, de azzal nem tudsz akkorát ugrani. Ha meg tudod, hogy nem is kell, akkor eleve nem GOTO-t használsz, mert pazarlás a két bájtos mivolta miatt.
A C fordítótól elvárod, hogy az asm betétedet is olptimalizálja? ![]()
Nem vártam el, csak most állok át 18-asra és noha találkoztam már a BRA-val, kapásból nem ugrott be a dolog
![]() ![]() Mindenesetre köszönöm a segítséget, biztos nem felejtem el ![]() Steve
Nem, azok a NOP-ok mas miatt vannak ott. A GOTO a 18F-en ket szavas, hogy nagyobb cimtartomanyt le tudjun fedni (hogy bele ferjen az utasitasba a hosszabb cim...) Na es a masodik szo ugy van ossze allitva, hogy ha veletlen oda kerulne a vezerles, akkor az egy NOP utasitaskent hajtodjon vegre. Magaran nehogy veletlen valami nagy marhasagot csinaljon ha oda kerul a vezerles. Es pl egy BTFSS ugye egy utasitast ugrik at, ez valojaban egy szo atugrasat jelenti. Emiatt pl ha BTFSS moge egy GOTO0t raksz akkor nem lenne kivanatos az eredmeny hisz egy adat reszre kerulne a program vezerles. Emiatt az ugy van megcsinalva, hogy az ott mindenkepp NOP-nak hajtodik vegre. Es ezt latod a disassembly ablakban...
Sziasztok!
Miért nem akar ez működni C18 alatt, PIC18F4450-en ( 4 bites üzemmód, 20 MHz, több soros üzemmód )?Csak a 'H'-t írja ki!?
Köszi! Steve
Ez az XLCD ez mit takar? Nem is tudtam, hogy C18-ban(microchip?) van ilyen rutin!
Én úgy látom, hogy van, el is fogadta ( nézd meg a doksiját, lenne még sok hasznos dolog), de mivel még most kezdem a C-t, ezért valamit biztos én rontok el. Azt láttam, hogy a"putrsXLCD( szoveg )" egy mutatót vár, próbáltam putrsXLCD( &szoveg ), putrsXLCD( "Hello" ), ill. már putrsXLCD( *szoveg ) módon is, de egyelőre nem ment!
Már második napja nézegetem, gyanús volt néhány dolog (pl. 18 ciklusos késleltetést is kért a kijelző kezeléséhez, holott oda tudomásom szerint 100 us kell, de hiába javítottam ). Az első karaktert veszi, utána történik valami gubanc, de ha nem lesz ötlet, akkor "megszkópozom" ![]() Én úgy gondolom, hogy paraméterként egy sztringmutatóhoz jónak kellett volna lennie a &szoveg-nek, de nem működött, ezért kínlódtam mindenféle variációval és tettem fel a kérdést a rutinosabb kollégáknak! Steve
A legtöbb esetben nekem bonyolultabbnak tűnik megérteni a rutinok működését, mint megírni az egészet. Ha lesz időm megnézem ezt a rutint.
Azt nézted, hogy a mutató milyen típusú? Flash-ből, vagy eepromból várja az adatot?
Én úgy láttam, hogy a putrsXLCD ROM mutatót vár, míg a putsXLCD lenne a RAM-os!
Jól adom meg a mutatót a "&szoveg"-el?
Szimulátorban nézted, hogy a beállított mutatókhoz ugrik-e a programszál?
Igen, az & a változó címét adja át, de hogy a rutin mit kér...
Szimulátorban jónak tűnt, de már nem emlékszem melyik verziónál, de akkor sem működött jól..ezért gondoltam, hogy meg kell szkópoznom, mert az időzítéseket nem mértem, meg a busy flag-et nézi, amit nyilván nem szimulál!
Csak gondoltam, hogy aki használja, az kapásból kiszűri a hibámat, de ha nem, akkor kiderítem ![]() Steve |
Bejelentkezés
Hirdetés |