[elektro] C18 kérdés
elight at gmail.hu
elight at gmail.hu
Wed Sep 18 15:21:43 CEST 2013
Szia,
IF-ELSEIF -el?
C-ben nekem se sikerült..
vagya 'case' az egyedi esetekre,
'case' a rövid tartományok felsorolásával
és IF-el a hosszú tartományokat..
Üdv István
2013-09-18 15:05 keltezéssel, Tibor Kovács írta:
> 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