Ako zdebugovat interupt v C ?

Jan Waclawek konfera na efton.sk
Sobota Září 9 18:15:32 CEST 2023


[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.


A.


>>> PH



Další informace o konferenci Hw-list