Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
 
Témaindító: histu1985, idő: Feb 11, 2006
Témakörök:
Lapozás: OK   139 / 139
(#) 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 Hé, 11:44 /
 
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 (») Hé, 16:16 /
 
Kónya: PIC mikrovezérlők alkalmazástechnikája - PIC programozás C nyelven
Következő: »»   139 / 139
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu