( asch | 2020. 11. 14., szo – 21:15 )

> Szeretnék a PC környezethez közelebb álló rendszert mcu -ra.

Na, ezért van értelme platformfüggetlen programot írni, és megcsinálni hozzá a PC szimulátort is. Én jóideje így csinálom a legkisebb példaprogramokat is. Persze pont a HW illesztést nem tudod ezzel tesztelni, de minden mást igen, és akkor azért eléggé magabiztos lehetsz, hogy a HW-en is éppen úgy fog működni.

Úgy szoktam csinálni, hogy ha a programomnak vannak real time komponensei, ezeket interruptokból valósítom meg. A többit pedig egy main loop-ban, amit szépen leválasztok egy HAL-lal. A kulcskérdés mindig az, hogy melyik ponton vágja el az ember az absztrakciót: ha túl részletes ponton, akkor bonyolult lesz a szimulátor. Ha meg túl absztrakt ponton, akkor túl sok mindent nem tudsz PC-n kimérni.

Ez az amit Buckó kritizált, hogy szerinte felesleges, de szerintem nyúlfarknyinál nagyobb programok esetén megéri.

(Kivétel, amikor nem működött a módszer: például egyszer egy kasztolás hibát elég sokáig kerestem, de ha betartottam volna a MISRA szabályait, akkor nem lett volna ilyen. És ezt statikus ellenőrzővel ki lehet kényszeríteni.)

Ez például egy mikrovezérlőre írott hasonló projekt: egy eszterga szánjaira szerelt mérőlécek értékeit jelzi ki - HTML oldalba ágyazva a mikrovezérlő programot: https://rizsi.com/programs/eszterga/emscripten/lathe.html

A kijelzés minden részletét - a konkrét kishiftelésen kívül - egy böngészőben is tudom tesztelni. Régebben standalone programokat csináltam (Java-ban), ez az első webes megjelenítésű mikrovezérlőre szánt programom, de egyből beleszerettem a technológiába: emscripten-nel fordítom a program HW független részét, a HAL pedig egy JS-hez kapcsolódó illesztő. Ezen a HAL-on keresztül adom át a JS-nek a program belső állapotait, és eszerint vannak frissítve a szimulált hétszegmenses kijelzők. Hasonlóan a gombok is így vannak megoldva, illetve a szánok inputjai is a HTML csúszkáról.

A kvadratúra számlálót ASM-ben írtam meg, és zavart, hogy nem tudom PC-n tesztelni. Poénból csináltam egy Assembler szimulátort ehhez a projekthez, amiben tudtam regressziós teszteket csinálni. Itt vannak: https://rizsi.com/programs/eszterga/quad_decoder_attiny25_custom/

sim_gen.cpp : az program binárisa visszafejtve és abból egy C program generálva. (A visszafejtő+generátor Java-ban van, és azt nem tettem elérhetővé.)

AVR_simulator.cpp : ebben van a processzor szimulálása.

AVR_debugger.cpp : ebben vannak a tesztesetek a futtatókörnyezettel együtt. Tehát formailag nem ilyen Unit tesztek, de lényegében úgy fut mintha az lenne.

quad_decoder.asm : ez maga az ASM program, erről írtam blogposztot is régebben, ezt teszteli a cucc.