Fórum témák
» Több friss téma |
Idézet: „inkább az asm kódodat kéne bővíteni.” Pont ezt akartam megúszni...
Hűű... ez megint valami számomra kínai dolog ez a "könyvtári eljárás hívása", de letöltöm ezt a "float könyvtárat" a Michrochip től és kipróbálom.
Azt a kis programot ami a számítást végzi milyen nyelven gondoltad megírni? ASM vagy C...? Bármilyen művelet jó? pl 2 db 8 bites szám összeadása aminek az eredménye is elfér 8 biten, ez talán még megy..... Bocs ha esetleg hülyeséget kérdezek de ezek teljesen ismeretlen területek nekem. Köszi
Szia!
Mondjuk megírod C -ben két 16 bites változóra az összeadást és kivonást:
Lefordítod C -ből assemblyre, megnézed milyen kódot generált. Aztán jöhetnek az összetettebb számítások. Csodák nem lesznek (sajnos), a kontroller csak a gépi kódot érti, arra fordít a C is...
"Értem"(?), tehát C ből gépi kódba (ASM be), és ezt a generált kódot illesszem be a eredeti ASM kódomba... És ehhez kell ez a Float könyvtár..a MChip től? Jól értem?
Ok, csak ne szaladjunk ennyire előre, még azt sem tudom hogyan lehet új változókat deklarálni C ben, hogyan határozom meg a helyüket a memóriában...stb. Egyelőre csak a lehetőségeket kóstolgatom, hogy jövök ki leg egyszerűbben ebből az éles kanyarból..
A
Pedig ez az volt ( ráadásul 16 bitesként!) !
Steve
Sőt! még kezdőértéket is adhatsz a deklaráláskor...
És honnét derül ki ebből a pár karakteres programsorból, hogy a deklarált változó 16 bites ?
Azt hiszem megint előveszem a Kopják féle C könyvet és neki szaladok újra, mert ez nekem olyan magas mint hörcsögnek a cirkuszkerítés..
Ebből akkor derülne ki, ha tudnánk, hogy milyen C fordítót használsz. CCS C esetén pl. csak 8bites. Ráadásul ez előjeles. Nyilvánvalóan meg kellene adni az ábrázolandó szám tartományát, de kell kompatibilitást biztosítani a "hagyományos" C-s megnevezésekkel is. Csatolok egy kis példát.
Akkor lennének a változók 8 bitesek ha így deklarálom? :
Ezt most lestem ki az említett könyvből, de lehet rosszul értelmezek megint valamit...
Köszi, ez a CCS C egy újabb fekete folt nekem, bár többször rákérdeztem már a C és a CCS c közti különbségekre de még nem kaptam infót róla..Én HitechC compilert használok az MPLAB alatt
Üdv, bocs, hogy így belebarmolok a beszélgetésbe, de ezt a topicot láttam megfelelőnek a kérdésem feltevésére. Profibuszról érdekelne a lehető legtöbb dolog, ami csak lehet. Ha csak egy jó weblap-cimet dobtok azt is köszönöm (Próbáltam a guglit, de ha van valakinek egy bevált oldala, jöhet)!
Ez az értékadás "a=10," hex ben értendő vagy decimálisan? Tehát nem kell az üres regisztereket feltöltögetnem még + 2 utasítással mint ASM ben, mert már a deklaráláskor megadhatom milyen érték kerüljön bele...Ez így egyre jobban tetszik..
Az ANSI C megadja az alapokat. A CCS C egy compiler. Itt a manualja: www.ccsinfo.com/downloads/ccs_c_manual.pdf
Több okból is vannak eltérések. Gondolom azért mert itt mikrokontrollerre fejlesztesz, nem egy PC-re, oprendszerrel. Más a hw és a perifériák.
valamiért nekem a linkre ez töltődik be...de látom hogy az eredeti hivatkozás a: www.ccsinfo.com/downloads/ccs_c_manual.pdf . Köszi átolvasom ezt is.
Javítottam a linket. A CCS honlapján találsz további infókat is.
Ja, hogy ez közel 400 oldal...Akkor inkább megkérdem melyik compiler való inkább a kontrollerekhez..? A CCS C vagy az Hitech C? Mert PC re én tuti nem fogok semmit fejlesztgetni...
Heló!
Szeretnék egy fájlt csinálni SD kártyára. Megnézi létezik-e már fájl, ha igen, akkor a neve eggyel nagyobb szám lesz. (A fájlnevek csak számok lehetek) Ez a kódrészlet(ami nem működik, nem tudom mi a hiba):
MikroC Pro For Pic v5.4es fordítót használok. A segítséget előre is köszönöm!
Valóban, elég sok oldalon találok PC s "Hello word" projecteket a ANSI C nyelvezeten. Na most akkor mi legyen HitechC vagy CCS C ? Melyik "jobb"? Nem értem én ezt egyelőre.
Megyek olvasgatni a témában mert így full tudatlanul még kérdezni is csak hülyeségeket tudok.
Erdemes vegigolvasni a C nyelv alapjait. Az ertekadasok, a valtozok tipusai, a jelolesuk mind mind egy elegge kotott forma szerint vannak leirva. De.. mivel a leirasok nagyresze a PC-re ertelmezendo, nem fog stimmelni a PIC (AVR, ARM egyeb uC) korokben hasznalatos forditokra. Az alapok naggyabol ugyanazok, de az implementalas a HW korlatok miatt masok lesznek. Ezek a konkret forditok leirasaibol kiderulnek. Ugye mas meretuek az Int, a long, a float tipusok a PC-ben es a PIC-ben. Erdemes beirni a gugliba a c nyelv alapok kereso kifejezest es mindjart jon egy par 100000 talalat. Ezeket a leirasokat tanulmanyozva feny derul sok sotet foltra. Mellesleg nagyon hasznos az ASM programozas, mert konnyebben megismeri az ember a HW elemeket, es utana mar konnyebb atterni a magasabb szintu nyelvekre. Erdemes szetnezni pl a vicsys baratunk altal emlitett CCS oldalan, mert sok peldat talalhatsz HW es SW programozasrol C nyelven.
En sok evig programoztam PIC-et ASM-ben es nem bantam meg. Sokkal kisebb programokat lehet irni mint C, vagy mas magasszintu nyelven. Viszont a bonyolultabb szamitasokat ezeken a nyelveken sokkal konnyebb implementalni. Peldaul egy nem linearis eszkoz linearizalasat ( pl hoelem, PT100 ellenallashomero) ASM-ben megirni lehetseges, de mazochizmus. Mellekelek egy gyujtemenyt ami ASM es C peldakat tartalmaz kb ugyanarra a peldakra.. Igaz a kommentek spanyolul vannak, de azert hasznos lehet.
Decimálisban, ha hexa kellene akkor a 250 -et 0xFA alakban írd.
Egyébként elírtam a deklarációt:
Üdv!
Delay-t csak ilyen kacifántosan lehet csinálni assemblyben, vagy van egyszerűbb is? Bővebben: Link Pl. egy pontos 1sec-os késleltetést, hogy lehet létrehozni? Ahogy elnézem a programot ez valamennyit késleltet, de nem tudni mennyit. Meg valaki megmondaná, hogy ebben a programban, hogy kell értelmezni a DECFSZ T3,f utasítást? Az "f" az mit jelent benne? Annyit értek, hogy csökkenti T3-at amíg az nem lesz 0 majd átugorja a GOTO utasítást, de mi az az f?
Szia! Az f az a célt jelöli. F esetén az eredmény visszakerül a file regiszterbe, ha "w" van az "f" helyén, akkor a munka reg be.
Köszönöm. Nem ismétlem önmagam mert írtam már, de én is pont ezért váltanák C re. Már a bináris számrendszerben nehézkesen elvégezhető számítási műveletek miatt (pl 8 bites kontrollerrel 32 bites számokkal való számítások, eredendően ez az amin elakadtam. ) De csakis ezért, mert egyébként nekem semmi bajom az ASM el..! Jelenleg a Kónya - Kopják féle C könyvet olvasgatom, pont azért mert amit a neten infókat találok erről, azok főleg PC - s példákra ("hello word" ki íratása monitorra..pl...stb) vannak kihegyezve. Én sem bántam meg az ASM et, bár abból is jócskán volna mit tanulgatnom, de ott pl egy egyszerűbb soros port kezelés már nem okoz gondot, C ben azt se tudnám hogy álljak neki. Van egy szépen ketyegő ASM ben megírt GSM / GPS es programom, kezel hardveres soros port átkapcsolást a két modul között, megszakítás...stb, semmi gondom vele tökéletesen működik, bár egy profi tuti másképp írta volna meg. A meglévő program mellé most "csak" egy egyszerű koordináta átváltás rutint kellene biggyesztenem, és ahogy említetted kb. a mazochizmus kategória megírni ezt az egyszerű átváltást. Mert 8 bites a kontroller, és a koordináta adatok (melyek eleve törtszámok...) csak 16 - 32 biten ábrázolhatóak a számítások során. Nekem magas a léc....ekkor jött a C mint ötlet, "lidi" fórumtársunk részéről. C ben viszont a program már meglévő ASM ben megírt részét nem tudom egyelőre megírni, tehát ez egyelőre a 22 es csapdája...
Köszönöm a gyűjteményt, (bár a kommentek spanyolul lehet fejvakarást okoznak majd.. ) remélem sikerül a lényeget kihámoznom belőlük és meglátni a párhuzamot az azonos funkciójú de két nyelven megírt kódok között...
Bővebben: Link Ezt már láttad? Szerintem sokat segíthet.
Köszi, ez is jó lecke lehet nekem, direkt jó hogy így alakult... Ezek szerint ha nem abc sorrendben adom meg a változókat akkor az nem fog működni? Vagy mi vele a gond..? És azt is megtudtam közben hogy ha nem adok a változónak értéket akkor a változó aktuális memóriacíme kerül bele a regiszterbe értékként. Amit nem értek...itt nincs megadva a váltózók kezdőcíme ( 0x070, az int nél pl 0x04 címet hogy kell megadni C ben?...stb), C ben milyen memória címre kerül az elsőnek deklarált változó? És egy regiszter törlése (ami ASM ben pl... "CLRF PORTB" ) hogy néz ki...?
Hűű de sok kérdésem lesz még....meg fogtok unni hamar.
Igen de ettől azért idegenkedem kissé mert 18F re épül az egész leírás, és én 10 - 12 - 16 F ekkel dolgozom(tam) max. Bár ki tudja, lehet egyszer eljutok a 18F ig is ha már 2012 - őt írunk...
Nekem mindig az volt a bajom, hogy vagy lábszám (I/O), vagy a hely, vagy periféria volt kevés. Aztán váltottam.
Persze a kicsi projekthez, kicsiket használok. Viszont a 18-as széria néha olcsóbb. |
Bejelentkezés
Hirdetés |