<html><body>Trošku odbočím, i když to s tím souvisí a někteří mě za to asi umlátí :-)<div>Je až s překvapením kolik věcí se dá napsat bez použití přerušení, včetně</div><div>přesného časovače a tak podobně. Byl jsem nucen kolegou, že musím</div><div>tu aplikaci napsat bez použití přerušení, právě kvůli vzniku problému,</div><div>přišel mi ten požadavek dost úchylnej a zbytečný nakonec jsem zjistil, že</div><div>to až takový problém není, a to tam byla I2C komunikace, obsluha síťové</div><div>karty, časovač, komunikace s hradlovým polem, jeho cílem bylo aby to </div><div>nebylo náchylné na nějaký kousanec kvůli přerušení a světe div se opravdu,</div><div>s tím za čtrnáct let nebyl problém. Nedělám si iluze, že i s přerušením by</div><div>to chodilo bez chyby, ale byla to zajímavá škola, co vše lze udělat bez</div><div>použití přerušení, když člověk musí. Tím samozřejmě nenabádám to přepsat,</div><div>ale občas je k zamyšlení že ke "sčítání dvou čísel" někdo potřebuje</div><div>použít přerušení :-) Jinak ano většina mých aplikací používá přerušení a u seriáku</div><div>je to většinou skoro nutnost když nechci zasekat procesor. Ale třeba I2C tam</div><div>slave s klidem počká než se rozmyslím co chci dělat...</div><div><br></div><div>Jinak to teda bylo na 8bit AVR od atmelu.</div><div><br></div><div>Zdeněk Aster</div><div><br><p>---------- Původní zpráva ----------<br>Od: Ondřej Janovský <ondrej.janovsky@alarex.cz><br>Komu: HW-news <hw-list@list.hw.cz><br>Datum: 16. 11. 2016 13:34:01<br>Předmět: Re: Opět jsem v PICu(i)</p><br><blockquote>No to tu není, protože by to bylo dlouhé. Kompilátor XC8 dělá dost <br>zajímavý kód, který je roztahaný.<br><br>Jinak mám problém s tím, že jsem si chtěl ověřit, že se mi zakazuje <br>přerušení jak má, tak jsem si umazal povolení přerušení .... kód místo <br>toho, aby přestal obsluhovat I2C a Timer, tak fungoval dál. Udělal jsem <br>5 překladů a náhrání do procesoru a nic. Po 6 to najednou zase fungovalo <br>jak má. Tak tu buď straší, nebo dělám jednu botu za druhou.<br><br>A nakonec jsem ještě zkusil vypnout přerušení a udělat porovnání 2x po <br>sobě a výsledek je, že se opravdu ty porovnání vyhodnotily rozdílně. A <br>podotýkám, proměnné, které porovnávám se nenastavují ani v jednom přerušení.<br><br>On 11/16/2016 13:24, Jan Waclawek wrote:<br>> No a kde je to slubovane zakazovanie prerusenia pocas citania premennej<br>> ktora sa meni v preruseni?<br>><br>> wek<br>><br>><br>> ----- Original Message ---------------<br>>> Tak to tu mám. Vypadá to, ľe někdy se střetne přeruąení od I2C s<br>>> vyhodnocením podmínky a je zle.<br>>> Zakázal jsem i přeruąení, počkal 8 x NOP a teprve pak vyhodnocoval, ale<br>>> občas (za daleko deląí dobu) se chyba stane také.<br>>><br>>> Line Address Opcode Label DisAssy<br>>> 65498 1FFB2 0100 MOVLB 0x0<br>>> 65499 1FFB4 EFDC GOTO 0x1FFB8<br>>> 65500 1FFB6 F0FF NOP<br>>> 65501 1FFB8 0E68 main MOVLW 0x68<br>>> 65502 1FFBA 6E02 MOVWF a, ACCESS<br>>> 65503 1FFBC 0EEC MOVLW 0xEC<br>>> 65504 1FFBE 6E03 MOVWF 0x3, ACCESS<br>>> 65505 1FFC0 0E06 MOVLW 0x6<br>>> 65506 1FFC2 6E04 MOVWF 0x4, ACCESS<br>>> 65507 1FFC4 0E00 MOVLW 0x0<br>>> 65508 1FFC6 6E05 MOVWF 0x5, ACCESS<br>>> 65509 1FFC8 0E70 MOVLW 0x70<br>>> 65510 1FFCA 6E06 MOVWF b, ACCESS<br>>> 65511 1FFCC 0EED MOVLW 0xED<br>>> 65512 1FFCE 6E07 MOVWF 0x7, ACCESS<br>>> 65513 1FFD0 0E06 MOVLW 0x6<br>>> 65514 1FFD2 6E08 MOVWF 0x8, ACCESS<br>>> 65515 1FFD4 0E00 MOVLW 0x0<br>>> 65516 1FFD6 6E09 MOVWF 0x9, ACCESS<br>>> 65517 1FFD8 5006 MOVF b, W, ACCESS<br>>> 65518 1FFDA 5C02 SUBWF a, W, ACCESS<br>>> 65519 1FFDC 5007 MOVF 0x7, W, ACCESS<br>>> 65520 1FFDE 5803 SUBWFB 0x3, W, ACCESS<br>>> 65521 1FFE0 5008 MOVF 0x8, W, ACCESS<br>>> 65522 1FFE2 5804 SUBWFB 0x4, W, ACCESS<br>>> 65523 1FFE4 5009 MOVF 0x9, W, ACCESS<br>>> 65524 1FFE6 5805 SUBWFB 0x5, W, ACCESS<br>>> 65525 1FFE8 A0D8 BTFSS STATUS, 0, ACCESS<br>>> 65526 1FFEA D002 BRA 0xFFF0<br>>> 65527 1FFEC 0E01 MOVLW 0x1<br>>> 65528 1FFEE D001 BRA 0xFFF2<br>>> 65529 1FFF0 0E00 MOVLW 0x0<br>>> 65530 1FFF2 6E01 MOVWF __pcstackCOMRAM, ACCESS<br>>> 65531 1FFF4 EF00 GOTO 0x0<br>>> 65532 1FFF6 F000 NOP<br>>><br>>><br>>> A v "c"<br>>><br>>> unsigned long a = 453736UL;<br>>> unsigned long b = 454000UL;<br>>> unsigned char x = (a >= b);<br>>><br>> _______________________________________________<br>> HW-list mailing list - sponsored by www.HW.cz<br>> Hw-list@list.hw.cz<br>> http://list.hw.cz/mailman/listinfo/hw-list<br><br><br>_______________________________________________<br>HW-list mailing list - sponsored by www.HW.cz<br>Hw-list@list.hw.cz<br>http://list.hw.cz/mailman/listinfo/hw-list</blockquote></div></body></html>