Re: Opět jsem v PICu(i)
Ondřej Janovský
ondrej.janovsky na alarex.cz
Středa Listopad 16 13:18:13 CET 2016
Tak to tu mám. Vypadá to, že někdy se střetne přerušení od I2C s
vyhodnocením podmínky a je zle.
Zakázal jsem i přerušení, počkal 8 x NOP a teprve pak vyhodnocoval, ale
občas (za daleko delší dobu) se chyba stane také.
Line Address Opcode Label DisAssy
65498 1FFB2 0100 MOVLB 0x0
65499 1FFB4 EFDC GOTO 0x1FFB8
65500 1FFB6 F0FF NOP
65501 1FFB8 0E68 main MOVLW 0x68
65502 1FFBA 6E02 MOVWF a, ACCESS
65503 1FFBC 0EEC MOVLW 0xEC
65504 1FFBE 6E03 MOVWF 0x3, ACCESS
65505 1FFC0 0E06 MOVLW 0x6
65506 1FFC2 6E04 MOVWF 0x4, ACCESS
65507 1FFC4 0E00 MOVLW 0x0
65508 1FFC6 6E05 MOVWF 0x5, ACCESS
65509 1FFC8 0E70 MOVLW 0x70
65510 1FFCA 6E06 MOVWF b, ACCESS
65511 1FFCC 0EED MOVLW 0xED
65512 1FFCE 6E07 MOVWF 0x7, ACCESS
65513 1FFD0 0E06 MOVLW 0x6
65514 1FFD2 6E08 MOVWF 0x8, ACCESS
65515 1FFD4 0E00 MOVLW 0x0
65516 1FFD6 6E09 MOVWF 0x9, ACCESS
65517 1FFD8 5006 MOVF b, W, ACCESS
65518 1FFDA 5C02 SUBWF a, W, ACCESS
65519 1FFDC 5007 MOVF 0x7, W, ACCESS
65520 1FFDE 5803 SUBWFB 0x3, W, ACCESS
65521 1FFE0 5008 MOVF 0x8, W, ACCESS
65522 1FFE2 5804 SUBWFB 0x4, W, ACCESS
65523 1FFE4 5009 MOVF 0x9, W, ACCESS
65524 1FFE6 5805 SUBWFB 0x5, W, ACCESS
65525 1FFE8 A0D8 BTFSS STATUS, 0, ACCESS
65526 1FFEA D002 BRA 0xFFF0
65527 1FFEC 0E01 MOVLW 0x1
65528 1FFEE D001 BRA 0xFFF2
65529 1FFF0 0E00 MOVLW 0x0
65530 1FFF2 6E01 MOVWF __pcstackCOMRAM, ACCESS
65531 1FFF4 EF00 GOTO 0x0
65532 1FFF6 F000 NOP
A v "c"
unsigned long a = 453736UL;
unsigned long b = 454000UL;
unsigned char x = (a >= b);
On 11/15/2016 21:19, Miroslav Draxal wrote:
> Můžete poslat disasemler oné podmínky, která hází problémy?
> Míra
>
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Ondřej
> Janovský
> Sent: Tuesday, November 15, 2016 8:37 PM
> To: HW-news
> Subject: Re: Opět jsem v PICu(i)
>
> A opět nové kolo. Přidal jsem I2C komunikaci a je opět zle.
>
> Používám dvě unsigned long cas, sepni proměnné a když je porovnávám cas ==
> sepni , vše chodí skvěle.
> V okamžiku porovnání "cas >= sepni" nebo "cas>sepni" je výraz často
> pravdivý i když je ve skutečnosti cas < sepni .
>
> Zajímavé je, když udělám výraz "(sepni<cas || sepni==cas), tak to funguje
> jak potřebuji.
>
> A nejsem sám, stejný problém http://www.microchip.com/forums/m726589.aspx
>
> Jen nemohu nikde v dokumentaci najít, proč to tak je.
>
> Oja
>
>
>
>
> On 11/14/2016 16:13, Ondřej Janovský wrote:
>> No jo, stárnu a hloupnu. Po vyčlenění kódu do nové aplikace vše chodí
>> jak má, takže problém bude někde v jiné části.
>> Děkuji všem za pomoc.
>> Oja
>>
>>
>> On 11/11/2016 10:36, Ondřej Janovský wrote:
>>> Zdravim,
>>>
>>> koukám jako jelen, když mi PIC18 porovnává dva prvky pole unsigned
>>> long, jsou v nich 0 a on tvrdí, že jeden prvek je větší než druhý.
>>> Tvrdí to občas, ale netuším, jak na to přijde. Ze zoufalství jsem
>>> doplnit typy i do If, ale nic to nepomáha.
>>>
>>> signed char ret = 0;
>>> if ((unsigned long)a[0] > (unsigned long)b[0]) {
>>> ret = 2;
>>> } else if ((unsigned long)a[0] < (unsigned long)b[0]) {
>>> ret = -2;
>>> } else {
>>>
>>> if ((unsigned long)a[1] > (unsigned long)b[1]) {
>>> ret = 1;
>>> } else if ((unsigned long)a[1] < (unsigned long)b[1]) {
>>> ret = -1;
>>> }
>>> }
>>> return ret;
>>>
>>>
>>> Oja
>>>
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list