Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   19 / 153
(#) trudnai válasza Bell hozzászólására (») Jún 22, 2010 /
 
Hirtelen ezt a kodot vadasztam le a netrol:

  1. float x=20.1234; //lets assume you want to display 4 decimal digits
  2. unsigned int x_int, x_dec;
  3.  
  4. x_int = (unsigned int)x;
  5. x_dec = (unsigned int)(((float)x - (float)x_int) * 10000);
  6.  
  7. sprintf("num is: %d.%04d", x_int, x_dec);

Tudom, szebb lenne, ha C18 tamogatna a float-okat, de szegeny ember vizzel foz
(#) watt válasza Bell hozzászólására (») Jún 22, 2010 /
 
Írsz egy függvényt, és máris csak egy utasítás.
(#) trudnai válasza watt hozzászólására (») Jún 22, 2010 /
 
Aaa, az fuggveny hivas, az nem jo MOVFF USART, "Hello World!" -re gondoltam...

Bocs, csak vicc akart lenni, semmi offenziva!
(#) watt válasza trudnai hozzászólására (») Jún 22, 2010 /
 
Idézet:
„MOVFF USART, "Hello World!"”

Ez jópofa! Bár ha a függvényt így nevezem el, akkor talám még hasonlót is lehet csinálni!
(#) Bell válasza trudnai hozzászólására (») Jún 22, 2010 /
 
Köszönöm!
Néhány hete kezdtem ismerkedni a C nyelvvel egyszerű kiváncsiságból, így elég alapvető dolgokkal nem vagyok még tisztában. És persze vannak túl egyszerű kérdéseim.
Például:
  1. #pragma romdata akarmi=0x1210
  2.  rom unsigned char abc[]="ABC";
  3.  
  4. void main(void){
  5.  int *ptr=&abc;
  6.  char b; ...}

Hogyan lesz itt b értéke 'A'?
(#) Bell válasza watt hozzászólására (») Jún 22, 2010 /
 
Igen, kb. eddig a felimerésig jutottam, de azt hiszem jó úton járok...
(#) potyo válasza Bell hozzászólására (») Jún 22, 2010 /
 
Itt sehogyan sem, maximum az inicializálás hiánya miatt lesz b értéke 'A'
(#) Bell válasza potyo hozzászólására (») Jún 23, 2010 /
 
Nem volt pontos a kérdés. Mit kell tennem, hogy b karakter tipusú változó értéke egyenlő legyen abc[] rom tömb első elemével?
Hm... lehet, hogy a pointernek is rom tipusnak kell lennie....
(#) Bell válasza Bell hozzászólására (») Jún 23, 2010 /
 
Igen, ennyi volt, köszönet...
(#) Norberto válasza Bell hozzászólására (») Jún 23, 2010 /
 
És miként sikerült megoldani?

Ha char b; -t így magába hagyod a végén, az szerintem még mindig nem az igazi megoldás. Ugyanis a 739273 hozzászólásodban ott a char b; vonatkozásában a deklaráción kívül mást nem csináltál, tehát inicializálás, értékadás művelet nem látszik.

Javítsanak ki engem a téma nagyobb tudorjai, ha nem jól gondolom.
(#) MolnarG hozzászólása Jún 23, 2010 /
 
Sziasztok!
Lenne egy amatőr kérésem. Most kezdek el PIC-el foglalkozni, a Kónya fél könyv alapján. Telepítettem az Mplab 8.20a-t és a C18 fordítót, 18F4550-el szeretnék bűvészkedni, létrehoztam a projektem, de nem találom a linkert... mondjuk a könyv azt írja, hogy az újabb verziókban már nem kell hozzáadni a *.gld fájlt. Ha a bulid all-ra kattintok a következőt dobja ki:

...
MPLINK 4.30.01, Linker
Copyright (c) 2009 Microchip Technology Inc.
Error - could not find file 'c018i.o'.
Errors : 1
...
(#) Norberto válasza MolnarG hozzászólására (») Jún 23, 2010 /
 
Első körben a friss telepítő használatát ajánlom. Jelenleg 8.53-nál tart a verziószám. :yes:
Egyébként ha jól emlékszek, akkor telepítéskor kell kiválasztani a C18 települését, bár lehetséges, hogy ez fixen integrálva van.


Egyébként magát a C18 meglétét a Project menün belül a Set Language Tool Locations-ön belül ellenőrizheted, mégpedig a Microchip C18 Toolsuite / Executables lehetőségen belül. Ha ott mind a 4 fájlhoz van rendelve 1-1 elérési út /Location/, akkor működnie kéne szerintem a fordítónak.
(#) icserny válasza MolnarG hozzászólására (») Jún 23, 2010 /
 
Telepítés után az MPLAB még nem szokta tudni az elérési útvonalak egy részét, ezért gondosan be kell állítani a Projects/Set Language Toolset Location menüben (Include, Library és Linker script útvonalakat is!). Utána pedig minden új projektet a Project Wizard-dal hozz létre (amíg rá nem jössz, hogy a Notepad editorral gyorsabban megy egy meglevő projekt átszerkesztése ).

Ha PIC18F4550-nel akarsz foglalkozni, akkor a Kónya könyv helyett/mellett inkább a PICCOLO projektet nézegesd!

Tudtommal .gld fájl a C30-nál van. C18-nál .lkr a nyerő!
(#) MolnarG válasza icserny hozzászólására (») Jún 23, 2010 /
 
Most hozzáadtam a 18f4550.lkr-t, megnéztem az elérési utakat, azok jók voltak, de még mindig hiba van. Egyelőre a könyv alapján mennék, amíg egyszerűen átírhatók a könyv programjai 18f-re. Amit próbáltam fordítani az a könyvben mindjárt első program a hello world... de nem

error.PNG
    
(#) El_Pinyo válasza MolnarG hozzászólására (») Jún 23, 2010 /
 
A Project/Build Options, Directories fülön a legördülő menüben nincs beállítva helyesen a Library Search Path. Ez legyen: a telepítés helye\MCC18\lib. (Nálam: C:\MCC18\lib) Egyébként nem célszerű a projektet ékezeteket tartalamazó mappákba rakosgatni, volt már akinél ez gond volt.
(#) potyo válasza El_Pinyo hozzászólására (») Jún 23, 2010 /
 
Meg túl hosszú útvonalra sem. Egyébként sem értem ezt a Microsoft baromságot, hogy a dokumentumok mappát miért oda rakja alapból, ahová. Én egyszerűen D:\pic\projektek alatt tárolom a projekteket.
(#) El_Pinyo válasza potyo hozzászólására (») Jún 23, 2010 /
 
Igen, a hosszú útvonal sem célszerű, bár ebben az esetben még nem volt kritikus. Én is a C:\PIC mappába rakosgatom a projekteket, meg a fordítót is az alapértelmezett C:\MCC18 helyre telepítettem, biztos ami biztos alapon.
(#) icserny válasza MolnarG hozzászólására (») Jún 23, 2010 /
 
Idézet:
„Egyelőre a könyv alapján mennék, amíg egyszerűen átírhatók a könyv programjai 18f-re.”
Már át vannak írva PIC18-ra! Bővebben: Link

Letöltés: PicKit3_kieg.zip
(#) trudnai válasza El_Pinyo hozzászólására (») Jún 23, 2010 /
 
En mikor meg csupasz windows-on dolgoztam a SUBST paranccsal rendeltem egy meghajto betujehez a project konyvtarat, es meghagytam az eredeti file-okat a My Documents-ben -- igy nem kellett figyelnem arra, hogy backupkor mas konyvtarakat is le kell mentenem, megis kicsi maradt az MPLAB szamara a projectek eleresi utvonala.

Mar par eve Linux a host gep es a VirtualBox-nal a shared folderrel jatszom hasonlo trukkoket, igy minenki boldog
(#) potyo válasza trudnai hozzászólására (») Jún 23, 2010 /
 
Én meg nem tartok a C-n olyan cuccokat, amit le kellene menteni, Dokumentumok mappa is át van rakva a D-re és csókolom


Amúgy régebben volt olyan, hogy subst-al létrehozott meghajtóról akartam telepíteni az MPLAB-ot, és valamilyen hibaüzenettel leállt a telepítő. Aztán áttettem a telepítőfájlokat sima meghajtóra, onnan már hajlandó volt települni. Máig nem értem, hogy mi köze volt hozzá, de tény, hogy nem ment.
(#) MolnarG válasza El_Pinyo hozzászólására (») Jún 23, 2010 /
 
Oké, holnap megpróbálom.
(#) MolnarG válasza icserny hozzászólására (») Jún 23, 2010 /
 
Köszi, ez jól lesz.
(#) Bell válasza Norberto hozzászólására (») Jún 23, 2010 /
 
A pointerekkel ismerkedem, de nem működtek úgy, ahogyan elképzeltem. Ezért az értékadás lett volna a kérdés.
Konkrétan rom karaktertömb tartalmát Morse jelekké alakítom. Tudom nem elég tömör, mert a szokásos szintaktika valamiért hibásan működik:
  1. #pragma romdata akarmi=0x1250
  2. rom unsigned char abc[]="ABCde fghij klmno pqrst uvwxyz ,...!=?/ 0123456789";
  3. ..
  4. void main(void){
  5.         // romból Morse
  6.         morse_rom(&abc);
  7. }
  8. void morse_rom(int cim){
  9.         int rom *romptr=cim;
  10.         unsigned char c,b;
  11.         unsigned int *ramC=&c;
  12.         *ramC=*romptr;
  13.         b=0x00;
  14.         while(c>31){
  15.                 morse(c);
  16.                 jel(2); // 2 szünet a karakter után
  17.                 if(b==0){
  18.                         *ramC=*romptr >> 8; }
  19.                 else {
  20.                         *romptr++;
  21.                         *ramC=*romptr;
  22.                         }
  23.                 if(b==0){
  24.                 b=0xFF;}
  25.                 else {
  26.                 b=0x00;}
  27.         }
  28. }
(#) pipi válasza Bell hozzászólására (») Jún 23, 2010 /
 
hát ha tudnánk mit kéne csinálni, és mi a hibajelenség...
elég tisztességtelen a két char változóra int-ként hivatkozni, szerintem nem garantálható, hogy egymás után helyezkednek el, definiálj int változót, és hivatkozz rá karakteres módon.
szerintem a morse_rom(&abc); sem jó, ez az abc pointer címe lesz, csak morse_rom(abc); kellene.
pointer átadásra inkább unsigned int-et használnék
(#) Bell válasza pipi hozzászólására (») Jún 23, 2010 /
 
Norberto kérdése volt, hogyan sikerült megoldanom a felvetett problémát azt részleteztem.
A főprogramból a rom tömb címét adom át egyszerű egészként, amiből a morse_rom -ban lesz pointer. Lehet hogy szokatlan, de ez így működik. Valóban unsigned a korrekt.
(#) trudnai válasza Bell hozzászólására (») Jún 24, 2010 /
 
Ez tobb sebbol verzik. Nem ertem miert probalod a 8 bites unsigned chart 8 bittel leshiftelni? Valahogy igy kellene kineznie a kodnk:

  1. const rom char abc[]="ABCde fghij klmno pqrst uvwxyz ,...!=?/ 0123456789";
  2. ..
  3. void main( void ) {
  4.     // romból Morse
  5.     morse_rom( abc );
  6.  
  7.     while(1) { /* itt szepen megallitjuk a vegrehajtast,
  8.     mivel a main() -nek ugysincs hova vissza ternie */ }
  9. }
  10. void morse_rom ( static char rom *romptr ) {
  11.     overlay char c;
  12.     while ( '\0' != ( c = *romptr++ ) ) {
  13.         morse( c );
  14.         jel( 2 ); // 2 szünet a karakter után
  15.     }
  16. }
Hozza tennem, hogy nem probaltam meg leforditani, ahhoz mar tul faradt vagyok. Ezt a feladatot Rad bizom
(#) Bell válasza trudnai hozzászólására (») Jún 24, 2010 /
 
Azért kellett shiftelni, mert adott pointer értékhez int tipusú eredmény tartozott. Így minden második karakter kimaradt volna. Előbb az alsó, majd a felső byte-ot küldtem ki.
Amit írtál nagyon szép és jól működik, köszönöm!
Megpróbálom helyretenni magamban:
Tehát a main-ból az abc globális változót (objektumot, pointert?) adjuk át a morse_rom függvénynek. Ott karakter tipusú rom pointerként értelmezzük, ami más modulból nem látszik (static). Az overlay char c pedig azt jeleni, hogy felülíródik a korábbi érték. Az overlay nélkül ez nem így lenne?
Ez a két utóbbi elsősorban takarékosság miatt kell?
Mivel a pointer char tipusú, akkor ez csak max 256 karakterig használható?
(NEM. Azt hiszem akkor ez inkább romban elhelyezett karakterre mutató int pointer...)
(#) edison14 hozzászólása Jún 24, 2010 /
 
Helló!

lehúztam a CCS C fordítót de sajnos nem kompatibilis a PICkit2-es programozóval. Nincsen véletlenül valamilyen kiegészítő vagy valamilyen más C fordító amely kezeli a PICkit2-es programozót?

A választ köszönöm.
(#) vilmosd válasza edison14 hozzászólására (») Jún 24, 2010 /
 
Hali
Le kell tolteni a CCS-tol egy programot ami a CCS C-t beilleszti a MPLAB-ba. Utana a MPLAB alol tudod hasznalni a forditot, es onnan tudod hasznalni a PK2-t is.
Udv Vili
(#) edison14 válasza vilmosd hozzászólására (») Jún 24, 2010 /
 
Aha erről tudtam csak a CCS C fejlesztőkörnyezetben ami egy külön program nem volt PICkit2 csak ICD.

Na mindegy akkor használom majd az MPLAB alól.
Következő: »»   19 / 153
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem