[elektro] C18 kérdés

Zsolt zsoltlevlistalaptop at gmail.com
Fri Sep 13 07:41:42 CEST 2013


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]



More information about the Elektro mailing list