[elektro] C18 kérdés
Info
info at kiralyelektronika.hu
Wed Sep 18 15:18:28 CEST 2013
Pascalban meg basicben. C-ben nincs. C#-ban se.
> Azt szeretném megkérdezni hogy, a Switch - Case szerkezetben meg lehet e
> adni érték tartományokat? pl. a basic-nél amit eddig használtam meg
> lehetett ugy adni hogy "Case 1-10:", vagyis ha a vizsgált érték 1 és 10
> között van akkor hajtódik végre. Na ilyet hogy tudok C-ben megoldani?
> köszi
> 2013. szeptember 13. 8:02 hg12345 írta, <hg12345 at freemail.hu>:
>> Hi,
>> nem értek túlzottan hozzá, de mindenki arról cikkez, hogy az új "ipari
>> szabvány" a ARM lesz. Hogy ki mit használ azt maga dönti el.
>> uC vonalon, a PIC32-nek egy elönye van, hogy hasonló a periféria készlete
>> a többi PIC-hez, de ezek igen gyenge képességüek egy normális hasonló
>> perifériához. (Trabi és modern autó, mind a kettő megy), de ez a nagy
>> hátránya is két egy forma PIC perifériával még nem találkoztam :-( A MIPS
>> mint önálló cég megszünt, szétszedve adták el, és kérdéses lesz honnan
>> licenszelni a következő MIPS magot. (Igérték de nem hozták kia következő
>> nagyobb teljesítményű magot....) (A PIC nagyon jó volt egy ideig, de
>> személy szerint túl sokáig használtam :-(
>> Áraban már szerintem egyértelmű az elöny..... $1 kapsz 16K/2K M0 uC
>> 32lábbal 5V-os kivitelben, de $0.5 kaphatóak már az alap kivitelű M0/M0+
>> 3.3V eszközök, nézz körűl.
>>
>>
>> Az ARM vonalon nagyobb az élénkség és licenselt CORTEX M magokkal nagyon
>> sok cég gyárt uC, a PIC-hez képest elképtelhetetlen mennyiségű
>> periférákkal. Az induló fejlesztő eszközök $10-20 megvannak ezek már
>> tartalmazzák a teljes értékű programozót és debuggert is.
>> -M0 ajálják a 8/16 bites uC helyettesítésére
>> -M0+ ugyan ez de gyorsabb és kisebb fogyasztású
>> -M3 teljes értékű, de a fentieknél 30% tömörebb kód és gyorsabb
>> -M4 M3+DSP funkció
>> de erről inkább olvass a neten, (a perifériékat eltekintve a magasabb
>> sorszámuak felülről kompatibilisak kódban)
>> Már többen irtak van ingyenes fejlesztő környezet COOCOX, de 32K ig a KEIL
>> is használható szabadon, hasonlók a többi cég IDE rendszerei általában.
>>
>> Maga a futtató környezet, ténylég C barát, relativ cimzéssel müködik, maga
>> a C erre alapú PC+relativ szedi be a konstansokat és SP relativvel kezeli a
>> lokális változókat és a függyvény paraméter és visszatérő érték adatok.
>>
>> ---------------------------
>> Egyébként ez nem hit kérdése mint valamikor volt PIC-ATMEL háborusdi, ez
>> is csak egy rendszer valakinek tetszik másoknak, itt is megoldható a
>> feladat és a másikon is , a legfontosabb hogy mennyi idő alatt lehet a
>> terméket megbizhatóan elöállítani. Ez mindenki maga dönti el.
>>
>>
>> Zsolt <zsoltlevlistalaptop at gmail.com> írta:
>> >Ha már itt tartunk:>
>> Én megragadtam a pic 18-as sorozatnál. >
>> 1.Szeretnék továbblépni 32 bites irányba, de nem tudom merre induljak el.
>> PIC32, vagy más. Jó lenne LCD, meg esetleg android. >
>> 2.Mi a különbség a munkában, amit zongorázni lehet a 18 és a 32 bit
>> között? Más a fejlesztőeszköz(bár az ugye nem bitfüggő), vagy mire
>> gondolsz?>
>> >
>> Zsolt>
>> >
>> > -----Original Message----->
>> > From: elektro-bounces at tesla.hu [mailto:elektro-bounces at tesla.hu] On>
>> > Behalf Of hg12345>
>> > Sent: Thursday, September 12, 2013 7:45 PM>
>> > To: elektro at tesla.hu>
>> > Subject: Re: [elektro] C18 kérdés>
>> > >
>> > Hi,>
>> > Ez a CRC16 (8bites) számítás gyors és legtömörebb kivitele. (Tisztán C->
>> > ben)>
>> > >
>> > static void Calc_CRC( uint16_t* CRC,uint8_t C)
>> //folyamatos>
>> > ellenörzö összeg számító program>
>> > { register uint16_t i,x;>
>> >
>> /*----- RTU : CRC>
>> > ---*///http://www.dattalo.com/technical/software/pic/crc16.asm>
>> > { i= (C ^ *CRC) & 0x00FF;>
>> > x= i ^ (i>>4);>
>> > //atmeneti byte paritás számítása>
>> > x= x ^ (x>>2);>
>> > x= (x ^ (x>>1)) & 0x0001 ;>
>> > x= x ? 0xC001 : 0x0000;>
>> > *CRC = ((*CRC)>>8) ^ x ^ (i<<6) ^ (i<<7);>
>> > }>
>> > }>
>> > >
>> > static int GenIdenCRC(uint8_t* Array, int Lenght) { int i;>
>> > uint16_t CRC=0xFFFF;>
>> > *(uint32_t*)Array= FixIdenArray[(IdenArray[6]>>2)&0x0F]; //adathalmaz>
>> > kiegészítése>
>> > for(i=0;i<Lenght;i++)>
>> > { Calc_CRC((uint16_t*)&CRC,*Array++); //következö>
>> > elem értékének generálása>
>> > }>
>> > *Array++=CRC&0xFF;>
>> > *Array =CRC>>8;>
>> > return CRC;>
>> > }>
>> > >
>> > generáláshoz ellenörzéshez jó, csak a buffer-ben mindig legyen 2byte>
>> > tartalék>
>> > >
>> > Amúgy kár erőltetni a 8 és 16 bites uC, árban tudásban könnyen lehet>
>> > kényelmesebb eszközt találni a 32 bitesek között... Dolgozni meg>
>> > zongorázni lehet a különbséget>
>> > >
>> > "Tibor Kovács" <kovacs.tibor7909 at gmail.com> írta:>
>> > >a hibaüzenet - Error: syntax error>>
>> > >>
>> > hogy tudom akkor ezt a dolgot megoldani? ha nem tudom pontosan melyik>>
>> > bankba teszi a változót akkor hogy állítsam? vagy a c-ben meg lehet azt>>
>> > mondani neki hogy hova tegye a változót deklaráláskor?>>
>> > >>
>> > egyébként azért van asm-ben ez a rész mert a kommunikációs csatorna>>
>> > tulvégén egy pici proc van amibe sehogy sem férnék bele ha C-ben írnám>
>> > a> programját... itt pedig nem akartam bajlódni ennek az átírásával.>>
>> > >>
>> > >>
>> > 2013. szeptember 12. 14:33 hg12345 írta, <hg12345 at freemail.hu>:>>
>> > >>
>> > > Mert azt a linker kezeli.>>
>> > >>>
>> > >>>
>> > > "Tibor Kovács" <kovacs.tibor7909 at gmail.com> írta:>>
>> > > >Így már majdnem lefordul, csak a BANKSEL-t nem tudom vele>
>> > > >megetetni...>>>
>> > > >>>
>> > > void Crc8bit(void)>>>
>> > > {>>>
>> > > _asm>>>
>> > > BANKSEL iobyte>>>
>> > > MOVF iobyte, 0, 0>>>
>> > > MOVWF b_crcv4, 0>>>
>> > > CLRF b_crcv2, 0>>>
>> > > BSF b_crcv2, 3, 0>>>
>> > > crc8c:>>>
>> > > MOVF b_crcv4, 0, 0>>>
>> > > XORWF b_crc8, 0, 0>>>
>> > > MOVWF b_crcv3, 0>>>
>> > > RRCF b_crcv3, 1, 0>>>
>> > > MOVF b_crc8, 0, 0>>>
>> > > BTFSC STATUS, 0, 0>>>
>> > > XORLW c_crc8c>>>
>> > > MOVWF b_crcv3, 0>>>
>> > > RRCF b_crcv3, 1, 0>>>
>> > > MOVWF b_crc8, 0>>>
>> > > RRCF b_crcv4, 1, 0>>>
>> > > DECFSZ b_crcv2, 1, 0>>>
>> > > GOTO crc8c>>>
>> > > BANKSEL PORTA>>>
>> > > RETURN 0>>>
>> > > _endasm>>>
>> > > }>>>
>> > > >>>
>> > > >>>
>> > > 2013. szeptember 12. 13:04 Tibor Kovács írta,>
>> > > <kovacs.tibor7909 at gmail.com>>
>> > > >:>>>
>> > > >>>
>> > > >>>>
>> > > > Egy ujabb buktató.>>>
>> > > > Van neküknk régebbről, még asm-es korból egy jól bevált crc-r>
>> > > > rutin,>>
>> > > amit>>>
>> > > > eddig basicbe be tudtam szúrni, de itt C-ben az istennek sem fogadja>
>> > > > el.>> Syntax error-t dob vissza... esetleg nem jól használom az asm>
>> > > > beszúrást?>>>
>> > > >>>>
>> > > > void Crc8bit(void)>>>
>> > > > {>>>
>> > > > _asm>>>
>> > > > BANKSEL iobyte>>>
>> > > > MOVF iobyte,W>>>
>> > > > MOVWF b_crcv4>>>
>> > > > CLRF b_crcv2>>>
>> > > > BSF b_crcv2,3>>>
>> > > > crc8c:>>>
>> > > > MOVF b_crcv4,W>>>
>> > > > XORWF b_crc8,W>>>
>> > > > MOVWF b_crcv3>>>
>> > > > RRCF b_crcv3,1>>>
>> > > > MOVF b_crc8,W>>>
>> > > > BTFSC STATUS,0>>>
>> > > > XORLW c_crc8c>>>
>> > > > MOVWF b_crcv3>>>
>> > > > RRCF b_crcv3,W>>>
>> > > > MOVWF b_crc8>>>
>> > > > RRCF b_crcv4,1>>>
>> > > > DECFSZ b_crcv2,1>>>
>> > > > GOTO crc8c>>>
>> > > > BANKSEL porta>>>
>> > > > RETURN>>>
>> > > > _endasm>>>
>> > > > }>>>
>> > > >>>>
>> > > >>>>
>> > > > 2013. szeptember 11. 15:37 Tibor Kovács írta, <>>
>> > > kovacs.tibor7909 at gmail.com>>>>
>> > > > :>>>
>> > > >>>>
>> > > >> köszi!>>>
>> > > >>>>>
>> > > >> így már ugy működik ahogy szerettem volna. kezdem kapizsgálni... a>>
>> > > minap>>>
>> > > >> kezdtem el a C-ben létezni, és vannak még dolgok bőven amik meg>
>> > > >> tudnak>> kavarni.>>>
>> > > >>>>>
>> > > >>>>>
>> > > >> 2013. szeptember 11. 15:27 Lajos Rancz írta,>
>> > > >> <lajos.rancz at gmail.com>:>>>
>> > > >>>>>
>> > > >> igen mert a pData_2 elé nem kell a csillag ha az nem lokális hanem>>
>> > > vmilyen>>>
>> > > >>> globális. Mivel ez itt értékadás nem pedig deklaráció. Tehát>>>
>> > > >>>>>>
>> > > >>> *Eset 1, globális:*>>>
>> > > >>>>>>
>> > > >>> char *pData_2 = NULL;>>>
>> > > >>> ....>>>
>> > > >>> void MyPrint(..)>>>
>> > > >>> {>>>
>> > > >>> pData_2 = data_2; // Globalis ertekadas>> for (...) ....>> }>>>
>> > > >>>>>>
>> > > >>> *Eset 2, lokális:*>>>
>> > > >>>>>>
>> > > >>> ...>>>
>> > > >>> void MyPrint(....)>>>
>> > > >>> {>>>
>> > > >>> char *pData_2 = data_2; // Lokalis deklaracio + ertekadas>> for>
>> > > >>> (...) ..>> }>>>
>> > > >>>>>>
>> > > >>> Üdv>>>
>> > > >>>>>>
>> > > >>>>>>
>> > > >>> 2013. szeptember 11. 15:22 Tibor Kovács írta, <>>>
>> > > >>> kovacs.tibor7909 at gmail.com>:>>>
>> > > >>>>>>
>> > > >>> > próbáltam így: *pData_2 = data_2;>> de hibával fordul...>>>
>> > > >>> >>>>
>> > > >>> >>>>
>> > > >>> > 2013. szeptember 11. 15:21 Lajos Rancz írta,>
>> > > >>> > <lajos.rancz at gmail.com>>
>> > > >:>>>
>> > > >>> >>>>
>> > > >>> > > Hi!>>>
>> > > >>> > >>>>
>> > > >>> > > Úgy, hogy a ptr változót mindig az elejére állítod a for>
>> > > >>> > > ciklus>>>
>> > > >>> előtt.>>>
>> > > >>> > >>>>
>> > > >>> > > Üdv>>>
>> > > >>> > >>>>
>> > > >>> > >>>>
>> > > >>> > > 2013. szeptember 11. 14:56 Tibor Kovács írta, <>>>
>> > > >>> > kovacs.tibor7909 at gmail.com>>>
>> > > >>> > > >:>>>
>> > > >>> > >>>>
>> > > >>> > > > szuper!>>>
>> > > >>> > > >>>>
>> > > >>> > > > Ez működik, viszont azt hogy csináljam hogy ha ezt:>>>
>> > > >>> > > >>>>
>> > > >>> > > > for (i = 0; i < 18; ++i)>>>
>> > > >>> > > > {>>>
>> > > >>> > > > ptr += sprintf(ptr, "%02x ", S2buffer[i]);>> }>>>
>> > > >>> > > >>>>
>> > > >>> > > > többször is meg akarom hívni akkor ne fűzze mindíg az előző>>
>> > > állapot>>>
>> > > >>> > > > végéhez. Mert jelenleg ez van...>>>
>> > > >>> > > >>>>
>> > > >>> > > >>>>
>> > > >>> > > > 2013. szeptember 11. 14:37 Lajos Rancz írta, <>>>
>> > > >>> lajos.rancz at gmail.com>:>>>
>> > > >>> > > >>>>
>> > > >>> > > > > Helló!>>>
>> > > >>> > > > >>>>
>> > > >>> > > > > Hogy akarod kiírni mint hexa számok mint decimális számok>
>> > > >>> > > > > vagy>>>
>> > > >>> mint>>>
>> > > >>> > > > > karakterek?>>>
>> > > >>> > > > >>>>
>> > > >>> > > > > hexában és decimálisan:>>>
>> > > >>> > > > > int i;>>>
>> > > >>> > > > > char *ptr = data_2;>>>
>> > > >>> > > > > for (i = 0; i < 18; ++i)>> {>> ptr += sprintf(ptr, "%02x>
>> > > >>> > > > > ", pS2buffer[i]); // Decimalisan a>>>
>> > > >>> format>>>
>> > > >>> > > > string:>>>
>> > > >>> > > > > "%d ">>>
>> > > >>> > > > > }>>>
>> > > >>> > > > >>>>
>> > > >>> > > > > Üdv>>>
>> > > >>> > > > >>>>
>> > > >>> > > > >>>>
>> > > >>> > > > > 2013. szeptember 11. 13:58 Tibor Kovács írta, <>>>
>> > > >>> > > > kovacs.tibor7909 at gmail.com>>>
>> > > >>> > > > > >:>>>
>> > > >>> > > > >>>>
>> > > >>> > > > > > Sziasztok!>>>
>> > > >>> > > > > >>>>
>> > > >>> > > > > > Egy ujabb C-s kérdés merült fel bennem..>> Mégpedig van>
>> > > >>> > > > > > egy bejövő soros adatom amit egy tömb-be>>>
>> > > >>> letárolok (18>>>
>> > > >>> > > > > byte),>>>
>> > > >>> > > > > > ezzel eddig nincs is gondom, viszont ahoz hogy ezt ki>
>> > > >>> > > > > > tudjam>>>
>> > > >>> írni>>>
>> > > >>> > > > LCD-re>>>
>> > > >>> > > > > át>>>
>> > > >>> > > > > > kell tennem egy string-be formázottan. Van egy módszer>>
>> > > amivel>>>
>> > > >>> > > sikerűlt>>>
>> > > >>> > > > de>>>
>> > > >>> > > > > > túl hosszúnak találom, és az lenne a kérdésem hogy lehet>
>> > > >>> > > > > > ezt>> leegyszerűsíteni.>>>
>> > > >>> > > > > >>>>
>> > > >>> > > > > > pl.: (ez csak 6 byte-ra vonatkozik, nekem ugye 18>
>> > > >>> > > > > > kellene)>> sprintf(data_2, "%c%c%c%c%c%c",>>>
>> > > >>> > > > > >>>>
>> > > >>> > > >>>>
>> > > >>> >>>>
>> > > >>>>>
>> > > s2buffer[0],s2buffer[1],s2buffer[2],s2buffer[3],s2buffer[4],s2buffer[5>
>> > > ]);>>>
>> > > >>> > > > > >>>>
>> > > >>> > > > > > gondoltam egy ilyenre, de ez nem működik...>>>
>> > > >>> > > > > >>>>
>> > > >>> > > > > > pData_2 = &data_2[0];>>>
>> > > >>> > > > > > pS2buffer = &s2buffer[0];>> for (i=0; i < 18; i++)>> {>>>
>> > > >>> > > > > > sprintf(*pData_2, "%2x", *pS2buffer);>> pData_2++;>>>
>> > > >>> > > > > > pS2buffer++;>>>
>> > > >>> > > > > > }>>>
>> > > >>> > > > > >>>>
>> > > >>> > > > > > előre is köszi!>>>
>> > > >>> > > > > > ----------------------------------------->>>
>> > > >>> > > > > > elektro[-flame|-etc]>>>
>> > > >>> > > > > >>>>
>> > > >>> > > > > ----------------------------------------->>>
>> > > >>> > > > > elektro[-flame|-etc]>>>
>> > > >>> > > > >>>>
>> > > >>> > > > ----------------------------------------->>>
>> > > >>> > > > elektro[-flame|-etc]>>>
>> > > >>> > > >>>>
>> > > >>> > > ----------------------------------------->>>
>> > > >>> > > elektro[-flame|-etc]>>>
>> > > >>> > >>>>
>> > > >>> > ----------------------------------------->>>
>> > > >>> > elektro[-flame|-etc]>>>
>> > > >>> >>>>
>> > > >>> ----------------------------------------->>>
>> > > >>> elektro[-flame|-etc]>>>
>> > > >>>>>>
>> > > >>>>>
>> > > >>>>>
>> > > >>>>
>> > > ----------------------------------------->>>
>> > > elektro[-flame|-etc]>>>
>> > >>>
>> > >>>
>> > > ----------------------------------------->>
>> > > elektro[-flame|-etc]>>
>> > >>>
>> > ----------------------------------------->>
>> > elektro[-flame|-etc]>>
>> > >
>> > >
>> > ----------------------------------------->
>> > elektro[-flame|-etc]>
>> >
>> ----------------------------------------->
>> elektro[-flame|-etc]
>>
>> -----------------------------------------
>> elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list