Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   139 / 153
(#) killbill válasza whalaky hozzászólására (») Máj 24, 2018 /
 
Es a "%c", strings[0][0] mit mond? Annak ugye nagy 'O'-nak kell lennie. Sot, jobb lenne a %d, mert azt mindig ertelmezni tudjuk, akar 0, akar 234.
A hozzászólás módosítva: Máj 24, 2018
(#) whalaky válasza killbill hozzászólására (») Máj 24, 2018 /
 
Igen O nak kéne lennie, de nem az, hanem 0. (%x)
  1. sprintf( buffer, "recived: %c strings %X \r\n", received, strings[0][0] )

C18 v3.40

nem akarok hülyén meghalni
A hozzászólás módosítva: Máj 24, 2018
(#) whalaky válasza Hp41C hozzászólására (») Máj 24, 2018 /
 
Valami olyasmi, de ez a mutatős dolog mindig megkavarja a lelkivilágomat. Delphi-hez szoktam.
A hozzászólás módosítva: Máj 24, 2018
(#) Hp41C válasza whalaky hozzászólására (») Máj 24, 2018 /
 
C18 User's Guide: 2.7.3 String Constants
...
Idézet:
„When using MPLAB C18, a string table in program memory canbe declared as:
rom const char table[][20] = { "string 1", "string 2", "string 3", "string 4" };
rom const char *rom table2[] = { "string 1", "string 2", "string 3", "string 4" };
The declaration of table declares an array of four strings that are each 20 characters
long, and so takes 80 bytes of program memory. table2 is declared as an array of
pointers to program memory. The rom qualifier after the * places the array of pointers
in program memory as well. All of the strings in table2 are 9 bytes long, and the array
is four elements long, so table2 takes (9*4+4*2) = 44 bytes of program memory.
Accesses to table2 may be less efficient than accesses to table, however, because
of the additional level of indirection required by the pointer.”
(#) killbill válasza Hp41C hozzászólására (») Máj 24, 2018 /
 
Eppen ezt olvasgatom en is. Jol emlekeztem, hogy ez a const nem igazan megy zokkenomentesen ennek a C18-nak...
(#) Hp41C válasza killbill hozzászólására (») Máj 24, 2018 /
 
table2 helyfoglalása (9*4+4*2) byte. Miért?
4 darab 9 karakter hosszú szöveg --- 9 * 4 byte. Eddig rendben. De ezek az értékek.
Mi lehet a 4*2 byte?
Ez egy 4 elemű mutatókból (rom memóriára, feltehetőleg csak 64k -t kezel a memória modell) álló tömb.
Szóval a table2 -ből a 2 című elemet egy mutatón keresztül lehet előszedni.

Minek az a csillag a deklarációba?
  1. rom const unsigned char strings[6][10] = {"OK", "ready", "FAIL", "no change", "Linked", "Unlink"};

Létrehozná a rom memóriában a strings nevű karakter tömböt, elemei 10 karakter hosszúak lennének és (a legfontosabb) a szövegeket tartalmaznák.

A (régi) MpLab -ban meg kellene nézni a listát (alig merem leírni: a disassambly listát) milyen kódot fordított.... Még szimulálni is lehetne...
A hozzászólás módosítva: Máj 24, 2018
(#) whalaky válasza Hp41C hozzászólására (») Máj 24, 2018 /
 
Nagxon köszönöm!
Azt hiszem az életben nem jóttem volna rá. (... főleg kiváló angoé tudásommal...)
  1. [b]rom[/b] unsigned const char * strings[6] = {"OK", "ready", "FAIL", "no change", "Linked", "Unlink"};

Ez volt a megoldás bár fogalmam sincs hogy miért, de múgy tűnik működik, lehet finomítani a dolgot.
Mégegyszer hálás köszönet érte!
(#) icserny válasza whalaky hozzászólására (») Máj 24, 2018 /
 
A GitHubon azt írják, hogy ez a program XC8-hoz készült (tehát nem C18-hoz)!
(#) whalaky válasza icserny hozzászólására (») Máj 24, 2018 /
 
Így van! de kiindulási alapnak egész jó és ötletes. Persze lehet rajta finomitami, de azt majd.....
C18 -am van, XC8 csak a free de nem nyerte meg a tetszésemet, és ki tudja mekkora lesz még a kód..... Mindenképpen szerencsésebb ha optimalizálva van.
(#) Wezuv válasza whalaky hozzászólására (») Máj 24, 2018 /
 
Icserny úgy érti, hogy a két fordítónak nem azonos a szintaktikája, itt ez okozott problémát.
(#) killbill válasza Hp41C hozzászólására (») Máj 24, 2018 /
 
table2 azert 9*4 + 4*2, mert table2 egy 4 elemu pointer tomb a ROM-ban. Minden eleme egy ROM-ba mutato pointer. Es a negy string is a ROM-ban van, a pointerek azokra mutatnak.
(#) killbill válasza whalaky hozzászólására (») Máj 24, 2018 /
 
Idézet:
„Azt hiszem az életben nem jóttem volna rá. (... főleg kiváló angoé tudásommal...)”
Pedig mondtam, hogy a C18 dokumentacioban lesz a megoldas. Meg azt is, hogy a C18 nem szabvanyosan kezeli a const valtozokat...
(#) Hp41C válasza killbill hozzászólására (») Máj 24, 2018 /
 
  1. rom const unsigned char * strings[6] = {"OK", "ready", "FAIL", "no change", "Linked", "Unlink"};

Akkor Te szerinted is eltesz a * miatt még 6 pointert is... Egyetértünk. De akkor minek is kell a * a sorban. Elegendő lenne a 6 szöveg.
  1. rom const unsigned char strings[6][10] = {"OK", "ready", "FAIL", "no change", "Linked", "Unlink"};

Ennek is működnie kell.
(#) killbill válasza Hp41C hozzászólására (») Máj 24, 2018 /
 
Igen, a program ugy is mukodne, csak ugy fixen lefoglalna minden szovegnek egy csomo felesleges ROM-ot. De a futasidoben jobb, foleg egy 8 bites PIC-en.
(#) usane hozzászólása Júl 11, 2018 /
 
Üdv!
Van két 8 bites tömböm. Elemek száma lényegtelen. Példának legyen 3.
a[3] = {1,2,3};
b[3] = {0,0,0};
ciklus nélkül hogyan tudom "a" elemeit átmásolni "b"-be.
Tehát a végeredmény b[3] = {1,2,3} legyen.
A naygszerű XC32-ben nem találtam memcpy parancsot, de lehet csak vak vagyok.
(#) usane válasza usane hozzászólására (») Júl 11, 2018 /
 
Megoldottam, nem tudom elsőre miért nem működött.
(#) abacs hozzászólása Júl 16, 2018 /
 
Sziasztok!
Már alap szinten foglalkoztam PIC-el és alap programozási tudásom is van viszont nem találtam olyan könyvet amiben részletesen le vannak írva a dolgok az alapoktól példa programokkal. A segítséget előre is köszönöm
(#) Hp41C válasza abacs hozzászólására (») Júl 16, 2018 /
 
Kónya: PIC mikrovezérlők alkalmazástechnikája - PIC programozás C nyelven
(#) Zsiroskenyer hozzászólása Júl 28, 2018 /
 
Sziasztok!
Az XC8 fordítóval küzdök már egy ideje, de nem jutok egyről a kettőre.
MPLAB IDE V8.92, és Win7 64bit van fent a gépemen. Eddig assemblyben programoztam, de most szeretnék áttérni a C nyelvre, mert adódott egy feladat, amit könnyebbnek látok C-ben megírni.
A suliban tanultuk mindkét nyelvet, de ott 18f-es PIC-et használtunk C18 fordítóval. Na most én egy PIC16F716-ot szeretnék programozni, de ahhoz nem jó a C18 fordító. Letöltöttem az XC8 ingyenes verzióját, feltelepítettem, nagy nehezen beállítottam, hogy ez legyen a fordító, de nem akar fordítani.
Akármit csinálok, mindig azt írja:

C:\Program Files (x86)\Microchip\xc8\v2.00\pic\bin\picc +FM 001.c +DF +LN +T +A +M -Z +Y=9
(902) no chip name specified; use "PICC --CHIPINFO" to see available chip names
(908) exit status = 1

Lehet, hogy valami még rosszul van beállítva?
Ha valaki megmondaná, mit rontottam el/ felejtettem ki, nagyon hálás lennék.
Csatolok egy képet az egész projektről. Egyelőre csak egy primitív pár soros tesz programot írtam, hogy biztos jó legyen.
A hozzászólás módosítva: Júl 28, 2018
(#) bbatka válasza Zsiroskenyer hozzászólására (») Júl 29, 2018 /
 
Próbáld meg úgy hogy #include "pic16f716.h"
(#) bbb válasza bbatka hozzászólására (») Júl 29, 2018 /
 
Az benne van neki, ahogy a képen is láthatod.
Viszont a hibaüzenet szerint a projektedben nem állítottál be mikrovezérlőt. A projekt tulajdonságainál válaszd ki, hogy éppen melyikre szeretnél fordítani!
(#) Hp41C válasza bbb hozzászólására (») Júl 29, 2018 /
 
Idézet:
„Az benne van neki, ahogy a képen is láthatod.”

A <Program Files>\Microchip\xc8\vx.yy\include\ mappában nincs p16f716.h csak pic16f716.h

Ezenkívül a pic16f716.h -ban szerepel egy ilyen részlet:
Idézet:
„#ifndef __XC8
#warning Header file pic16f716.h included directly. Use #include <xc.h> instead.
#endif”

... instead --- helyett.
A hozzászólás módosítva: Júl 29, 2018
(#) Zsiroskenyer válasza bbatka hozzászólására (») Júl 29, 2018 /
 
Eddig ezeket a formátumokat próbáltam a pic nevére:

#include "p16f716.h"
#include "pic16f716.h"
#include <p16f716.h>
#include <pic16f716.h>

de egyik se vált be.
(#) Zsiroskenyer válasza bbb hozzászólására (») Júl 29, 2018 /
 
Ha erre gondolsz: Configure -> Select device -> legördülő menüből PIC16f716 kiválaszt és OK,
akkor az megvolt.
Egyébként a fordítás gyorsgomb mellett jobbra van egy ilyen, hogy: Checksum: 0x18cf, ez elvileg az adott PIC nevére vonatkozhat, mert minden PIC-nél más ez a szám.

PIC név.png
    
(#) Zsiroskenyer válasza Hp41C hozzászólására (») Júl 29, 2018 /
 
Ez rendben van, de akkor mit kéne átírnom? A #include <xc.h> benne van a kódban.
Egyébként lehetséges, hogy a fordító rossz helyre van beállítva? Mert a fordító kiválasztásánál a legördülő menüben nem találtam xc8-at csak xc16-ot meg xc32-t, úgyhogy a ccs c compiler-t választottam ki és tallóztam az xc8.exe-t. Lehet, hogy ez nem tetszik neki?
(#) Hp41C válasza Zsiroskenyer hozzászólására (») Júl 29, 2018 /
 
A CCS C nem fogja megérteni az XC8 -hoz készült incude állományt (xc8.h).
Fel van telepítve rendesen az az XC8?
Az új MpLabX és a régebbi XC8 nem érti egymást. pl. MpLabX 3.45 nem kompatibilis az XC 1.33 -mal, de az XC8 1.42 -vel jól működik.
A hozzászólás módosítva: Júl 29, 2018
(#) Hp41C válasza Hp41C hozzászólására (») Júl 29, 2018 /
 
Fordítva is igaz:
Az MpLab 8.92 nem működik együtt az XC8 1.42 vagy újabb fordítóval, de a az XC1.33 -mal jól működik.
(#) Zsiroskenyer válasza Hp41C hozzászólására (») Júl 29, 2018 /
 
Tehát akkor csak nem kompatibilisek egymással.
Az MPLAB X-et nem használtam még, egyelőre maradnék a sima MPLAB IDE-nél.
Tudnál esetleg adni egy linket, ahonnan le tudom szedni az XC1.33-at?
(#) usane válasza Zsiroskenyer hozzászólására (») Júl 29, 2018 /
 
A MC oldalán van "download archive", de parancsolj: Bővebben: Link
A hozzászólás módosítva: Júl 29, 2018
(#) Zsiroskenyer válasza usane hozzászólására (») Júl 29, 2018 /
 
Köszi! Ezzel végre működik.
Egyébként az normális, hogy 24 fájlt csinál egy projekthez? Assembliben csak 10 fájl volt.
Következő: »»   139 / 153
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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