Ako zdebugovat interupt v C ?

Pavel Hudeček edizon na seznam.cz
Sobota Září 9 22:51:23 CEST 2023


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

Dne 09.09.2023 v 18:15 Jan Waclawek napsal(a):
> [preposielam]
>
>
> Ahoj,
>
>>>> Mě na tom programu spousta věcí není jasná.
> - Např. jestli věci jako SEG_CA3 jsou makra, nebo obyčejný definy a co v
> nich je.
>
> su to obycajne definy a je v tom len #define SEG_CA3 RD2, aby sa
> program lahsie cital, priradenie logickych mien ku io-pinom.
>
>
>>>> - Proč jsou tam 4 setdigit místo jednoho se dvěma parametry.
>
> Mne to prislo jednoduchcsie, mat tam nastavenie kazdej segmentovky
> zvlast, a potom PIC16 je lepsie mat len jednoparametrove rutiny, ako
> rutiny s viacerymi parametrami; to je ta nestastna architektura, ktoru
> vylepsili az inspiraciou sa AVR. Novy PIC18F47K42 si nechavam do
> dalsej verzie.
>
>
>>>> - A hlavně proč je tam ta věc s MUX_RawData, RawData, MUX_Data,
> MUX_Sync_Flag, MUX_7Seg_Display_Write_Data a to čarování s unionem? Asi
> je to nějaká snaha o synchronizaci zobrazení a přepisu zobrazovaných
> dat, ale proč? Nikdy jsem nic takovýho u segmentovýho displeje nepoužil,
> takže tuhle část bych prostě bez náhrady zrušil:-)
>
> To zobrazovanie ma dva buffre. Jeden RawData, v ktorom sa nastavuju
> jednotlive segmenty a segmentovky, ktore maju svietit. Primarne sluzi
> na formatovanie vystupneho retazca. Druhy buffer MUX_RawData sluzi len
> ako kopia toho prveho a jeho cielom je len poskytovat data do
> multiplexu v interupte od casovaca. A to carovanie s unionom je tam
> preto, aby to zase vygenerovalo kratky kod z cecka. Zial verzia XC8
> Free je taka dost divna. Stara verzia PicC PRO generovala uplne iny
> kod, ktory bol prehladny a jasny. A neporovnatelne rychlejsi.
>
>
>>>> Vlastně je to až na dva rozdíly podobný mýmu obvyklýmu uspořádání:
> - Ta strašně krkolomná práce s výstupy, přes milion ifů. Nechápu proč,
> ale budiž.
>
>
> MUX_Data je len pomocny register, podla ktoreho sa nastavuju segmenty
> v danej segmentovke. Tuto konstrukciu som pouzil preto, lebo som sa
> inspiroval p.Cinom z Amaterskeho radia. Ja si obcas precitam aj
> listingy, ktore zverejnuje v odbornom casopise s cervenou obalkou a
> zltym vystraznym trojuholnikom. A tato konstrukcia sa mi zdala byt
> dostatocne robustna na chyby.
>
>>>> - Ta divná synchronizace. Tu bych komplet zrušil a třeba problém zmizí:-)
>     prostě tam dát jen volatile unsigned char dispData[DISP_len] a tam se
> bude zapisovat v setDigit i číst při zobrazování.
>     Určitě by tím zmizelo aspoň "rutina potrebuje malu pauzu na
> synchronizaciu s displejom neviem preco..." :-)
>
> Pointa je v tom, ze moj realny procesor bez tej synchronizacie a malej
> casovej konstante nezobrazoval vobec. Jednoducho sa sekol a nic
> nezobrazoval na displeji. A ta synchronizacia to vyriesila aspon na
> 99,9%.
>
> Tento zdrojak s multiplexom som doslova zlepil preportovanim starsej
> verzie s displejom s MM5450 za tri dni. Vsetko funguje az na ten
> displaj. Proste raz za x-dni pretecie nejaky bit a zblbne zobrazenie.
> Matematika kupodivu funguje spravne, takze tam snad treba dopisat len
> nejake kontroly indexov pri vyberani znakov z flash-pamati mcu. A
> najhorsie na tom je to, ze sa ku tomu dostanem serioznejsie az niekedy
> v oktobri-novembri. Ale to prepisem uz asi na novo uplne vsetko.


Další informace o konferenci Hw-list