Ako zdebugovat interupt v C ?

Jan Waclawek konfera na efton.sk
Pondělí Září 11 18:41:27 CEST 2023


[preposielam]


Ahoj,

skusim nad tym Tvojim pristupom porozmyslat. Hlavne nad tou pasazou o
zruseni tych dvoch buffrov. Ja som ich tam dal kvoli tomu, ze jeden
potrebujem na pripravu  dat na zobrazovanie. Do toho buffru maju pristup
viacere funkcie formatovania a zobrazovania dat. Ide o funkcie zobrazovania
vo formate hex, "inteligentny" decimal a znamienkove  cisla. A v nich sa v
tom buffri dost modifikuje. Takze v mojom programe to nie je trivialne
zrusit. Ale porozmyslam nad tym ako to urobit inak, aby sa tam neobjavovali
zase nejake dalsie ine neziaduce efekty.

Ten register MUX_Data moze byt aj lokalny. To ma naozaj nenapadlo. Takze to
si v tej rutine opravim. Dakujem.

No a este jedna taka poznamka, toto leto som pochopil, preco sa s
procesorom za 50kc zo suflika velmi nebastli. Tento rok totiz som sa
uz pytal tuna
C - Ako funguje konverzia cisel? (hw.cz)
<https://list.hw.cz/pipermail/hw-list/2023-July/562458.html>
na fungovanie rutiny, ktora je formalne v poriadku, ale ona obcas zblbla
tiez ako ten interrupt s displejom. A pomohlo dopisanie formalnej kontroly
parametrov. Tak neviem, ci to s tym interruptom nebude tiez nieco podobne.
A chudak mcu si vypyta sam robustne programovanie so vsetkym co k tomu
patri. Ale najprv si treba premysliet system zobrazovania chyb a dat na
jednom 4miestnom displeji.

V kazdom pripade dakujem vsetkym za prispevky a rady. Aj ked som si
nemyslel, ze by na tuto temu mohlo byt nieco konstruktivne, predsa len sa
ukazala prakticka skusenost diskutujucich v konfere, za co by som sa rad
vsetkym zucastnenym podakoval.

A.

>>>
Já bych prostě celou tu synchronizační část zrušil. Třeba jen tak, že

bych zakomentoval celou MUX_7Seg_Display_Write_Data()
A všechny výskyty jejího použití,
v obsluze přerušení bych zakomentoval celej ten
if((MUX_Position == 0) && (MUX_Sync ...
A pak bych s pomocí search/replace sjednotil
MUX_RawData a RawData

Protože když to obsluha přerušení nemodifikuje, tak to nemá žádnej smysl
a může klidně zobrazovat data se kterejma program něco dělá. Mě by
prostě iritovalo, že je tam úplně zbytečná a ne úplně triviální část
programu, která dělá složitosti okolo kopírování 4 bajtů, který vůbec
není potřeba:-)

Ještě je zajímavý MUX_Data, proč není lokální v tom přerušení. Udělal
bych z něj lokální. A vlastně ani nemusí bejt static. Po odstranění tý
synchronizace se totiž dá řádek
MUX_Data = MUX_RawData.Byte[MUX_Position];
přehodit na začátek obsluhy přerušení

Jo a když už je to globální, neleze do toho někde něco, do občas udělá
ten diskutovanej problém?

Jinak teda jestli jsou ty komplikovaný přístupy k výstupním bitům a
nepoužití více parametrů funkcí jenom kvůli procesoru za pár kaček ze
šuplíku ... vrátil bych ho do šuplíku a nechal ho tam čekat na program,
kterej v plné verzi nemá zabírat víc jak 1 obrazovku. Vánoční blikátko,
nebo tak něco:-)

PH



Další informace o konferenci Hw-list