Fórum témák
» Több friss téma |
Programból nem. Adj nekik nagyobb feszt...
Vagy csak kisebb előtétellenállást és így nagyobb áramot.
Hello!
XC8 telepítésekor van az "update existing c18 project" opció. Be szoktátok kapcsolni? Mit rondít el ha bekapcsolom. A leírás azt mondja az XC8-at fogja használni C18 kompatibilis módban. Ez mit jelent? Mennyire kompatibilis? A hozzászólás módosítva: Szept 29, 2014
Elméletileg teljesen kompatibilis. Gyakorlatilag meg azért a C18 az jobban optimalizált emlékeim szerint, mint az XC8. Fordulni úgy rémlik, hogy fordult a régi projekt is az XC8-al probléma nélkül.
Értem, akkor elvileg megy, de ha lehet nem keverem össze. Feláll a hátamon a szőr az ilyen csalamádés dolgoktól.
Elfelejtettem, hogy kell azt csinálni, hogy van egy pl. var változóm, ami 16 bites. El szeretném érni az alsó és felső bájtját is a következő módon: var.hi, var.lo Ez működik. Viszont a 16 bitesen nem szeretném a var.value -t használni, csak a "var"-t. Ebben kérném a segítséget.
A hozzászólás módosítva: Szept 30, 2014
Szia! Erre gondolsz?
A hozzászólás módosítva: Okt 1, 2014
Én úgy emlékeztem, hogy ezt 1 lépésben az unionon belül valahogy meg lehet oldani #define var_int var.value nélkül, de lehet, sőt valószínű, hogy rosszul emlékszem.
Mindegy, ez a megoldás is jó, köszi! A hozzászólás módosítva: Okt 1, 2014
Meg lehet, de akkor nem típust deffiniálsz, amit sokszor lehet példányosítani, hanem sima uniont és alatta ott lehet a define is. Az direkt uniontos deklarálás megoldást nem teheted h-ba, hanem csak c-be, de lehet, hogy rosszul emlékszem. Ennek több előnye van, több c-ben tudod példányosítani a típust, ha nem csak egy c állományod van és több helyen hasonló struktúra kell, illetve könnyű mozgatni más projectekbe. Leginkább flageknél előnyös, de bármikor jól jöhet ez a módszer.
A hozzászólás módosítva: Okt 1, 2014
Köszönöm.
Hello!
Akadt egy kis gondom. Illetve csak kérdés. Ha a főprogramban definiálok valamit (#define) akkor azt nem kellene átvennie a header fájloknak is? Kicsit régen hsználtam a C-t, ha lehet asm-ben programozok, de muszáj leszek visszaszokni. USB kommunikáció macerás asm-ben és az egyéb a projekthez tartozó MC könyvtárak is C-ben vannak.
Nem. Ha azt akarod, hogy több helyen is látható legyen, készíts egy közös headert és include-old be mindegyik c-be amiben használni akarod. Ebbe a h-ba mehetnek a PIC-re vonatkozó inc-ek is, ha mindegyikbe becsatolod.
Alapvetően minden .c fájlt külön fordít a fordító, azért a #define csak az utána következő sortól kezdve létezik. Az include meg kb. úgy működik, hogy az #include "xxx.h" helyére bemásolja a fordító az xxx.h tartalmát, és úgy fordítja a .c fájlt. Ha a .h fájlban ott van a define, akkor a fordító látni fogja, ha nincs, akkor nem. Így már gondolom érthető, hogy miért nem létezik az a define másik forrásfájlokban.
Olyat lehet csinálni, hogy a projekt beállításainál adsz meg define-t, akkor az minden forrásfájlban létezni fog.
Értem. Sajnos a fordító lelkivilágát annyira nem ismerem. Akkor még egy kérdésem van a leírtakkal kapcsolatban. Mi van, ha a #define az #include előtt van? Akkor beleszámolja a headerbe vagy nem, mert ugye akkor a "bemásolt" programlészlet már utána van? Nem próbáltam ki csak kérdezem.
Idézet: „Alapvetően minden .c fájlt külön fordít a fordító, azért a #define csak az utána következő sortól kezdve létezik. Az include meg kb. úgy működik, hogy az #include "xxx.h" helyére bemásolja a fordító az xxx.h tartalmát” Általában az #include-okat szoktuk előre írni. Arra vonatkozott a kérdés, mi van ha fordítva van és a #define előbb van.Közben akadt időm kipróbálni, így működik.
Mit is csinál az a program? Kell-e a működéséhez 4k szó program memória, 256 byte RAM és EEprom, A/D átalakító, komparátor és a timer1. A 16F84 1k szó program memóriával, 64 byte RAM -mal és EEprom -mal rendelkezik.
Igen, akkor "beleszamolja". Pontosan, mert elobb van a #define, utana az, ami az include-olt file-ban.
A fordító sorban veszi a szövegeket, teljesen érthető módon. Az include semmi mást nem csinál, mint szöveget szúr be, mint ha helyette oda írtad volna ami a fájlban van. Tehát ha ez elé bármit írsz, az hamarabb lessz értelmezve, azaz él.
Akadt egy újabb kérdésem. Nem szeretem, ha minden össze van ömlesztve ezért külön include könyvtárat használok. Addig nincs is baj amíg főkönyvtáras header fájlt kell behívni, de akadt olyan MC-s ami ujabb könyvtárban van és meghívja egy másik header file. Tudok valamit kezdeni vele, vagy ömlesszem a fő project könyvtárba és ott megtalálja.
Érthetőség kedvéért. #include "Includes/xy.h" -ezt hívom meg. De ha ebben van pl: #include "valami/ezmegaz.h" akkor ha a valami könyvtárat az Includes könyvtárba teszem nem találja meg. Hiába adtam meg az MpLab X-nek a header fileokat akkor sem.
A beállításoknál kell megadni az összes path-ot! (zöld kis fogaskerék ikon)
Hogy ez nem jutott eszembe. Az includes-t megadtam, de az Includes/valamit nem.
Köszönöm, így megtalálja.
Minden kezdet nehéz. Nem a C nehéz, hanem ez a sok hűhó!
Az bizony. Nem szoktam az MC-s könyvtárakat használni, de most egyszerűbb mint megírni a saját algoritmusaimat, bár már kezdek benne kételkedni , már a hajam égnek áll tőle, hogy hol ebbe hol abba fájlba kell belenyúlni, vagy épp kihámozni mi micsoda.
Egyetértünk. Nemrég I2C rutinokat írtam meg "újra", mert lazán belefagy a gyáriakba a folyamat, ha leszakad egy eszköz a vonalról. Szinte semmit nem használok a gyáriakból, kivéve a matekos dolgokat, de az más. Így sem érzem, hogy lassabb haladni, mint asm-ben, mert ráadásul gyorsabb!
A gyáriakból indultam ki, csak kiegészítettem timeoutokkal. A gyáriak is működnek, csak fapadosak. Találtam gyári példaprogramot is régebben, előkeresem, ha megvan felteszem...
Meg is van: A hozzászólás módosítva: Okt 3, 2014
|
Bejelentkezés
Hirdetés |