Fórum témák
» Több friss téma |
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
Igen O nak kéne lennie, de nem az, hanem 0. (%x)
C18 v3.40 nem akarok hülyén meghalni A hozzászólás módosítva: 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
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.”
Eppen ezt olvasgatom en is. Jol emlekeztem, hogy ez a const nem igazan megy zokkenomentesen ennek a C18-nak...
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?
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
Nagxon köszönöm!
Azt hiszem az életben nem jóttem volna rá. (... főleg kiváló angoé tudásommal...)
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! ![]()
A GitHubon azt írják, hogy ez a program XC8-hoz készült (tehát nem C18-hoz)!
Í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.
Icserny úgy érti, hogy a két fordítónak nem azonos a szintaktikája, itt ez okozott problémát.
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.
Idézet: Pedig mondtam, hogy a C18 dokumentacioban lesz a megoldas. Meg azt is, hogy a C18 nem szabvanyosan kezeli a const valtozokat... „Azt hiszem az életben nem jóttem volna rá. (... főleg kiváló angoé tudásommal...)”
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.
Ennek is működnie kell.
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.
Ü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.
Megoldottam, nem tudom elsőre miért nem működött.
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 ![]()
Kónya: PIC mikrovezérlők alkalmazástechnikája - PIC programozás C nyelven
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
Próbáld meg úgy hogy #include "pic16f716.h"
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! 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
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.
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?
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
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.
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?
A MC oldalán van "download archive", de parancsolj: Bővebben: Link
A hozzászólás módosítva: 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. |
Bejelentkezés
Hirdetés |