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