[elektro] C18 kérdés
Tibor Kovács
kovacs.tibor7909 at gmail.com
Thu Sep 12 14:23:35 CEST 2013
Í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]
>>>
>>
>>
>
More information about the Elektro
mailing list