рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдирд┐рд░реНрдорд╛рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ CDP1802 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИред рдореБрдЦреНрдп рдмреЛрд░реНрдб рдХреЛ рдХрд╛рдЧрдЬ рдкрд░ рдФрд░ рдкреНрд░реЛрдЯрд┐рдпрд╕ рдореЗрдВ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдмрд╣реБрдд рдЬрд▓реНрдж рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрдардиреЗ рд▓рдЧрд╛ рдХрд┐: рдкреНрд░реЛрдЯрд┐рдпрд╕ рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдХрдИ рд╕рдВрд╕рд╛рдзрди
рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕реА ++ рдореЙрдбрд▓ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк C ++ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдлреНрд▓рд╛рдИ рдкрд░ рдореЙрдбрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдФрд░ рдореИрдВ рдмрд╕ рдореЙрдбрд▓рд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдХрд░рдирд╛ред
рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдореЙрдбрд▓ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ - рд▓реВрдЖ рдкрд░ред
рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдХрдЯ (2Mb gifs) рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред

рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ?
рдпрджрд┐ рдЖрдк рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рджреЗрд╢реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЙрдбрд▓ рд▓рд┐рдЦрдирд╛, рддреЛ рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрджрдд рдЦреЛ рджреА рд╣реИ - рдореИрдВрдиреЗ рд╕реЗрдВрд╕рд░ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдмрдЧ рд╕реЗ рдЬреЛрдбрд╝рд╛, рдореЗрд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдПрдХ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк, рдПрдХ рдорд▓реНрдЯреАрдореАрдЯрд░, рдЬреЗрдЯреАрдЬреА / рдпреВрдПрдЖрд░рдЯреА рдФрд░ рдЦреБрдж рдХреЛ рдбреАрдмрдЧ рдХрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди рдЬрдм рдЬреАрдкреАрдПрд╕ / рдЧрддрд┐ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреЛ рдореБрдЭреЗ рдПрдХ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдЬреАрдкреАрдПрд╕ рдЗрдореНрдпреВрд▓реЗрд╢рди рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред
рдЬрдм KWP2000 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдЯреЗрд▓реАрдореЗрдЯреНрд░реА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреЛ рд▓рд╛рдЗрд╡ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЦрддрд░рдирд╛рдХ рдерд╛ред рд╣рд╛рдБ, рдФрд░ рдЕрдЧрд░ рдПрдХ - рдУрд╣ рдХрд┐рддрдирд╛ рдЕрд╕рд╣рдЬред
рд╕рдбрд╝рдХ рдкрд░ рдбрд┐рдмрдЧ / рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдпрд╛ рдХрд╣реАрдВ рдкрд░ рдкреВрд░реЗ рд╕рдЬреНрдЬрди рдХрд┐рдЯ рдХреЛ рдЕрдкрдиреЗ рд╕рд╛рде рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╕ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ (рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╢реМрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ) рдПрдХ рдЕрдЪреНрдЫреА рдорджрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╣реИред
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реА ++ рдФрд░ рдЬреАрд╕реАрд╕реА
рдореИрдВ рдЬреАрд╕реАрд╕реА рдХреЗ рддрд╣рдд рд╕рднреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рддрд╣рдд рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╡рд┐рдХрд╕рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐ рдПрдордПрд╕рд╡реАрдПрд╕ рдХреЗ рддрд╣рдд рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ mingw32 DLL рддреНрд░рд┐рд╢рдВрдХреБ рдкреНрд░реЛрдЯреАрди рдХреЗ рддрд╣рдд рдЗрдХрдЯреНрдареЗ рд╣реБрдПред __Thiscall рдФрд░ рдХрд╛рдорд░реЗрдб рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЛрдбрд╝ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ, рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЙрд▓ рд╣реИрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд┐рд╢рд╛рд▓ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдПрдХ
рдореВрдВрдЧрд▓реЛ рджреЛрд╕реНрдд рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдФрд░ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C рдореЗрдВ C ++ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ, "рдЙрддреНрдкрд╛рджрди рд╕реЗ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рдмрд┐рдирд╛" рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХреЛрдбрд╛рдВрддрд░рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ, рдлреЛрд░рдЯреНрд░рд╛рди рдкрд░ рднреА рдореЙрдбрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ - рдПрдХ рдЗрдЪреНрдЫрд╛ рд╣реЛрдЧреАред
C ++ рдХреЗ рддрд╣рдд рдирдХрд▓
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрднрд╛рд╕реА рд╡рд░реНрдЧреЛрдВ рдХреЗ "рдЕрдиреБрдХрд░рдг" рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдореВрд▓ C ++ рд╡рд░реНрдЪреБрдЕрд▓ рдХреНрд▓рд╛рд╕ рд╣реЗрдбрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
class IDSIMMODEL { public: virtual INT isdigital ( CHAR* pinname ) = 0; virtual VOID setup ( IINSTANCE* instance, IDSIMCKT* dsim ) = 0; virtual VOID runctrl ( RUNMODES mode ) = 0; virtual VOID actuate ( REALTIME time, ACTIVESTATE newstate ) = 0; virtual BOOL indicate ( REALTIME time, ACTIVEDATA* newstate ) = 0; virtual VOID simulate ( ABSTIME time, DSIMMODES mode ) = 0; virtual VOID callback ( ABSTIME time, EVENTID eventid ) = 0; };
рдФрд░ рдпрд╣рд╛рдВ рд╕реА рд╕рдВрд╕реНрдХрд░рдг рд╣реИ; рдпрд╣ рд╣рдорд╛рд░рд╛ рдЫрджреНрдо рд╡рд░реНрдЧ рдФрд░ рдЗрд╕рдХреА рдЖрднрд╛рд╕реА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ
struct IDSIMMODEL { IDSIMMODEL_vtable* vtable; };
рдЕрдм рд╣рдо рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддреЗ рд╣реИрдВ (рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ)
struct IDSIMMODEL_vtable { int32_t __attribute__ ( ( fastcall ) ) ( *isdigital ) ( IDSIMMODEL* this, EDX, CHAR* pinname ); void __attribute__ ( ( fastcall ) ) ( *setup ) ( IDSIMMODEL* this, EDX, IINSTANCE* inst, IDSIMCKT* dsim ); void __attribute__ ( ( fastcall ) ) ( *runctrl ) ( IDSIMMODEL* this, EDX, RUNMODES mode ); void __attribute__ ( ( fastcall ) ) ( *actuate ) ( IDSIMMODEL* this, EDX, REALTIME atime, ACTIVESTATE newstate ); bool __attribute__ ( ( fastcall ) ) ( *indicate ) ( IDSIMMODEL* this, EDX, REALTIME atime, ACTIVEDATA* data ); void __attribute__ ( ( fastcall ) ) ( *simulate ) ( IDSIMMODEL* this, EDX, ABSTIME atime, DSIMMODES mode ); void __attribute__ ( ( fastcall ) ) ( *callback ) ( IDSIMMODEL* this, EDX, ABSTIME atime, EVENTID eventid ); };
рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ "рд╡рд░реНрдЧ" рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
IDSIMMODEL_vtable VSM_DEVICE_vtable = { .isdigital = vsm_isdigital, .setup = vsm_setup, .runctrl = vsm_runctrl, .actuate = vsm_actuate, .indicate = vsm_indicate, .simulate = vsm_simulate, .callback = vsm_callback, }; IDSIMMODEL VSM_DEVICE = { .vtable = &VSM_DEVICE_vtable, };
рдФрд░ рдЗрд╕реА рддрд░рд╣, рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред рдЪреВрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЖрд╡рд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдереАрдВ, рдЧрд╛рдпрдм рдереАрдВ, рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рднреА, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕реА рдирдИ рдЪреАрдЬреЗрдВ рдЬреЛрдбрд╝реАрдВ, рдЬреЛ рджреВрд╕рд░реА рддрд░рдл рд╕реЗ рдХрд╛рдо рдереАрдВред
"рдЗрд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рди рдирд╣реАрдВред"
рдирддреАрдЬрддрди, рдХреЛрдб рдмрдврд╝рддрд╛ рдЧрдпрд╛ рдФрд░ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдмрдврд╝реЗрдЧреА: рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдПрдореБрд▓реЗрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрдо рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖред рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЙрдбрд▓ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХреБрдЫ рдХреЛ рдмрджрд▓рдирд╛, рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рд▓рдЧрд╛рддрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдореБрдЭреЗ рд╣рд░ рдЫреЛрдЯреА рдЪреАрдЬ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдерд╛, рдФрд░ рд╕реА рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдерд╛ред рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ рдЬреЛ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рднреА рд╕реА рд╕реЗ рдбрд░рддреЗ рдереЗ (рдХреЛрдИ
рдЯрд░реНрдмреЛ рдкрд╛рд╕реНрдХрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ
рдХреНрдпреВ рдмреЗрд╕рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред
рдореБрдЭреЗ рд▓реБрдЖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рдЖрдпрд╛: рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реА рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реИ, рдпрд╣ рддреЗрдЬ, рдХреЙрдореНрдкреИрдХреНрдЯ, рджреГрд╢реНрдп, рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ - рдпрд╣ рд╕рдм рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рд▓реБрдЖ рдореЗрдВ рд╕рднреА рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдорд╛рди рдирд╛рдореЛрдВ рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛, рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрддреНрдордирд┐рд░реНрднрд░ рддрд░реАрдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдПрдХ dll рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ Lua рдкрд░ рдХрд┐рд╕реА рднреА рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЛ рд░реЛрдХрдиреЗ, рдкрд╛рда рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд▓реБрдЖ рдореЗрдВ рдореЙрдбрд▓рд┐рдВрдЧ
рдореБрдЦреНрдп рдкрд░реАрдХреНрд╖рдг рдкреНрд░реЛрдЯреАрди 7 рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди 8 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЦрд░реЛрдВрдЪ рдФрд░ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ред
рд╣рдо рдХреБрдЫ рд╕рд░рд▓ рдореЙрдбрд▓ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЪрд┐рддреНрд░рдордп рдореЙрдбрд▓ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ
рдпрд╣рд╛рдБ рдФрд░
рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд
рд╣реИ , рдЗрд╕рд▓рд┐рдП рдореИрдВ рд▓реЗрдЦрди рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред
рдпрд╣рд╛рдВ 3 рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИрдВ рдЬреЛ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдирд┐рдорд┐рд╖ рдПрд▓рдИрдбреА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╕реНрдд рдерд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдерд╛ред
рдЖрдЗрдП A_COUNTER рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:

рдпрд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдШрдбрд╝реА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмрд╛рдЗрдирд░реА рдХрд╛рдЙрдВрдЯрд░ рд╣реИ, рдЗрд╕рдХреЗ рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ DLL рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдФрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА dll рдореЙрдбрд▓ рд╕рдорд╛рди рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рддреЛ, рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдПрдБ:
рдореЙрдбрд▓ рд╡рд┐рд╡рд░рдг
device_pins = { {is_digital=true, name = "A0", on_time=100000, off_time=100000}, {is_digital=true, name = "A1", on_time=100000, off_time=100000}, {is_digital=true, name = "A2", on_time=100000, off_time=100000}, {is_digital=true, name = "A3", on_time=100000, off_time=100000},
device_pins рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд┐рди рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗрд╡рд▓ рдбрд┐рдЬрд┐рдЯрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдирд╛рд▓реЙрдЧ рдФрд░ рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
is_digital - рд╣рдорд╛рд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗрд╡рд▓ рддрд╛рд░реНрдХрд┐рдХ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЗрд╡рд▓ рд╕рдЪ рд╣реА рд╕рдВрднрд╡ рд╣реИ
рдирд╛рдо - рдЧреНрд░рд╛рдлрд┐рдХ рдореЙрдбрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдирд╛рдоред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдкреНрд░реЛрдЯреАрди рдХреЗ рдЕрдВрджрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдмрдВрдзрди рдирд╛рдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИред
рд╢реЗрд╖ рджреЛ рдХреНрд╖реЗрддреНрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддреЗ рд╣реИрдВ - рдкрд┐рди рдкрд┐рдХреЛрд╕реЗрдХрдВрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордпред
рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рд╕рдЦреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рдбрдореА рдореЙрдбрд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ
device_simulate рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рддрдм рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдиреЛрдбреНрд╕ (рдХрдВрдбрдХреНрдЯрд░) рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд░реНрдХ рд╕реНрддрд░ рдмрджрд▓рддрд╛ рд╣реИред рдПрдХ
device_init рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЗрд╕реЗ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж (рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреЗрдЯ рдХреЛ рдХрд┐рд╕реА рдПрдХ рд╕реНрддрд░ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
set_pin_state рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдкрд╣рд▓рд╛ рддрд░реНрдХ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рд░рд╛рдЬреНрдп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SHI, SLO, FLT рдФрд░ рдЗрд╕реА рддрд░рд╣
рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдПрдХрд▓-рд▓рд╛рдЗрди / рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд╛рд░реНрдХрд┐рдХ 0 рдореЗрдВ рд╣реИрдВ
рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
A0 , рдФрд░ рдЗрд╕рдХреЗ рдирд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ
"A0" рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░реНрдпрд╛рд╡рд░рдг рддрд╛рд▓рд┐рдХрд╛ _G рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
function device_init() for k, v in pairs(device_pins) do set_pin_state(_G[v.name], SLO) end end
рдЕрдм рд╣рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдЪрд▓реЛ рдорд╛рд╕реНрдЯрд░ рдСрд╕рд┐рд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ
рдЯрд╛рдЗрдорд░_рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рджреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рд╕рдордп рдФрд░ рдШрдЯрдирд╛ рд╕рдВрдЦреНрдпрд╛ред
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж device_init рдореЗрдВ рдирд┐рдореНрди рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ:
set_callback(NOW, PC_EVENT)
PC_EVENT рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХ рдЪрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдИрд╡реЗрдВрдЯ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ (рд╣рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)
рдЕрдм рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рд╕реЗ 0 picoseconds рдХреЗ рдмрд╛рдж рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк
рдореЗрдВ рдПрдХ рд╕реЗрдХрдВрдб
рдХрд╛ рдПрдХ рдЪрд┐рддреНрд░ рд▓реЗрддрд╛ рд╣реИ)
рдФрд░ рдпрд╣рд╛рдБ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВрдбрд▓рд░ рд╣реИ
function timer_callback(time, eventid) if eventid == PC_EVENT then for k, v in pairs(device_pins) do set_pin_bool(_G[v.name], get_bit(COUNTER, k) ) end COUNTER = COUNTER + 1 set_callback(time + 100 * MSEC, PC_EVENT) end end
рдПрдХ рдШрдЯрдирд╛ рдкрд░,
set_pin_bool рдлрд╝рдВрдХреНрд╢рди рдХреЛ
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ - 1/0ред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, set_callback рдлрд┐рд░ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЧреИрд░-рдЖрд╡рдзрд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рддрд╛ рд╣реИред рд╕рдордп рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЕрдВрддрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ set_callback рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдордп рдХреЗ рдЕрдВрддрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░
рд╕рдордп рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рд┐рд╕реНрдЯрдо рд╕рдордп рд╢рд╛рдорд┐рд▓ рд╣реИ
рддреЛ рд╡рд╣реА рд╣реБрдЖ device_pins = { {is_digital=true, name = "A0", on_time=100000, off_time=100000}, {is_digital=true, name = "A1", on_time=100000, off_time=100000}, {is_digital=true, name = "A2", on_time=100000, off_time=100000}, {is_digital=true, name = "A3", on_time=100000, off_time=100000}, {is_digital=true, name = "A4", on_time=100000, off_time=100000}, {is_digital=true, name = "A5", on_time=100000, off_time=100000}, {is_digital=true, name = "A6", on_time=100000, off_time=100000}, {is_digital=true, name = "A7", on_time=100000, off_time=100000}, {is_digital=true, name = "A8", on_time=100000, off_time=100000}, {is_digital=true, name = "A9", on_time=100000, off_time=100000}, {is_digital=true, name = "A10", on_time=100000, off_time=100000}, {is_digital=true, name = "A11", on_time=100000, off_time=100000}, {is_digital=true, name = "A12", on_time=100000, off_time=100000}, {is_digital=true, name = "A13", on_time=100000, off_time=100000}, {is_digital=true, name = "A14", on_time=100000, off_time=100000}, {is_digital=true, name = "A15", on_time=100000, off_time=100000}, } PC_EVENT = 0 COUNTER = 0 function device_init() for k, v in pairs(device_pins) do set_pin_state(_G[v.name], SLO) end set_callback(0, PC_EVENT) end function timer_callback(time, eventid) if eventid == PC_EVENT then for k, v in pairs(device_pins) do set_pin_bool(_G[v.name], get_bit(COUNTER, k) ) end COUNTER = COUNTER + 1 set_callback(time + 100 * MSEC, PC_EVENT) end end
рдмрд╛рдХреА рд╕рдм рдХреБрдЫ - рдШреЛрд╖рдгрд╛, рдореЙрдбрд▓ рдЖрд░рдВрднреАрдХрд░рдг, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рддрд░рдл рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рднреА рд╕рдорд╛рди рд╕реА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд▓реБрдЖ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рд╕рдорд╛рди рд╣реИрдВред
рд╣рдо рд╕рд┐рдореБрд▓реЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЗ рдХрд╛рдо рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ

рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдореЙрдбрд▓ рдХреЗ рд▓реЗрдЦрди рдФрд░ рдЙрдирдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ
рдкрд╛рда рд╕рдВрджреЗрд╢
рд╕рдВрджреЗрд╢ рд▓реЙрдЧ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рдлрд╝рдВрдХреНрд╢рди, рдкрд┐рдЫрд▓реЗ рджреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рд░реЛрдХ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╣реИрдВ
out_log("This is just a message") out_warning("This is warning") out_error("This is error") out_fatal("This is fatal error")

рд▓реБрдЖ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ, рдЖрд╕рд╛рдиреА рд╕реЗ, рдЬрд▓реНрджреА рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
out_log("We have "..#device_pins.." pins in our device")
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рджреВрд╕рд░реЗ рдореЙрдбрд▓ - рд░реЛрдо рдЪрд┐рдкреНрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ
рдкреЙрдк-рдЕрдк
рд╣рдо рдЕрдкрдиреЗ рд░реЙрдо рдХреЛ рдореЙрдбрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЪрд▓рд╛рдПрдВрдЧреЗред
рдпрд╣рд╛рдВ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреА рдШреЛрд╖рдгрд╛рдПрдВ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛрдХрд┐рд░рд┐рдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ - рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдореЗрдореЛрд░реА рдбрдВрдк рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛:

рдпрд╣ рдореЙрдбрд▓ рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
{рдлрд╝рд╛рдЗрд▓ = "рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓", FILENAME, FALSE ,, рдЫрд╡рд┐ / *ред BIN}
рдЕрдм рдЗрд╕реЗ рдРрд╕рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдк рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рдереЗ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕рдХреА рдореЗрдореЛрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА, рдкрддрд╛ рдмрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА, рдбреЗрдЯрд╛ рдмрд╕ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордпред рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдореЛрд░реА_рдкреЙрдк рд╣реИред
function device_init() local romfile = get_string_param("file") rom = read_file(romfile) mempop, memid = create_memory_popup("My ROM dump") set_memory_popup(mempop, rom, string.len(rom)) end function on_suspend() if nil == debugpop then debugpop, debugid = create_debug_popup("My ROM vars") print_to_debug_popup(debugpop, string.format("Address: %.4X\nData: %.4X\n", ADDRESS, string.byte(rom, ADDRESS))) dump_to_debug_popup(debugpop, rom, 32, 0x1000) elseif debugpop then print_to_debug_popup(debugpop, string.format("Address: %.4X\nData: %.4X\n", ADDRESS, string.byte(rom, ADDRESS))) dump_to_debug_popup(debugpop, rom, 32, 0x1000) end end
рдкреЛрдЬрд╝ рдХреЗ рджреМрд░рд╛рди on_suspend рдлрд╝рдВрдХреНрд╢рди
рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрджрд┐ рд╡рд┐рдВрдбреЛ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдирд╛рдПрдВред
рд╕реНрдореГрддрд┐ рдХреЛ рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╕рдм рдХреБрдЫ рд▓реБрдЖ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рд╣рдо рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ
рдбрд┐рдмрдЧ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБрдЧреЗ рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдорд╛рд╕реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдо рдСрдлрд╕реЗрдЯ 0,1000 рд╕реЗ 32 рдмрд╛рдЗрдЯреНрд╕ рдбрдВрдк рдХрд░реЗрдВрдЧреЗ:

рдЕрдВрдд рдореЗрдВ, рд╣рдо OE, VPP рдФрд░ рдЕрдиреНрдп CE рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП, ROM рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ
function device_simulate() for i = 0, 14 do if 1 == get_pin_bool(_G["A"..i]) then ADDRESS = set_bit(ADDRESS, i) else ADDRESS = clear_bit(ADDRESS, i) end end for i = 0, 7 do set_pin_bool(_G["D"..i], get_bit(string.byte(rom, ADDRESS), i)) end end

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ "рдбрд┐рдмрдЧрд░" рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░реЗрдВ:
рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ UART рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рдмрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ device_pins = { {is_digital=true, name = "D0", on_time=1000, off_time=1000}, {is_digital=true, name = "D1", on_time=1000, off_time=1000}, {is_digital=true, name = "D2", on_time=1000, off_time=1000}, {is_digital=true, name = "D3", on_time=1000, off_time=1000}, {is_digital=true, name = "D4", on_time=1000, off_time=1000}, {is_digital=true, name = "D5", on_time=1000, off_time=1000}, {is_digital=true, name = "D6", on_time=1000, off_time=1000}, {is_digital=true, name = "D7", on_time=1000, off_time=1000}, {is_digital=true, name = "TX", on_time=1000, off_time=1000}, }

рдЙрддреНрдкрд╛рджрдХрддрд╛
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЪрд┐рдВрддрд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ 4040 рдмрд╛рдЗрдирд░реА рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдореЙрдбрд▓ рд▓рд┐рдпрд╛ рдЬреЛ рдкреНрд░реЛрдЯреАрд╕ 7 рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛ред
рдкрд▓реНрд╕ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕рдиреЗ рджреЛрдиреЛрдВ рдореЙрдбрд▓реЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП 100 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреНрдбреЗрд░ рдЦрд┐рд▓рд╛рдпрд╛
рдкреНрд░реЛрдЯреАрди рдХрд╛ 4040 = 15-16% рд╕реАрдкреАрдпреВ рд▓реЛрдб
C = 25-28% CPU рд▓реЛрдб рдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд▓реБрдЖ 5.2 = 98-100% рд╕реАрдкреАрдпреВ рд▓реЛрдб
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд▓реБрдЖ 5.3a = 76-78% рд╕реАрдкреАрдпреВ рд▓реЛрдб
рдореИрдВрдиреЗ рд╕реНрд░реЛрддреЛрдВ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 5.3 рдореЗрдВ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЛ рдмрд╣реБрдд рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ред рдлрд┐рд░ рднреА, рдпрд╣ рдХрд╛рдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд╣рд┐рд╖реНрдгреБ рд╣реИред
рдФрд░ рдореИрдВрдиреЗ рдЕрдиреБрдХреВрд▓рди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рднреА рдирд╣реАрдВ рдХреАред
рдпрд╣ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╕рд╣рдЬ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрджрд╛ рд╣реБрдИ рдереА, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рддрддреНрдХрд╛рд▓ рдпреЛрдЬрдирд╛
- рдХреЛрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХреАрдбрд╝реЗ рдХреЛ рдареАрдХ рдХрд░реЗрдВ
- рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд░реЗрдВ
- рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛрдб Doxygen рдХреЗ рддрд╣рдд
- рд╢рд╛рдпрдж luaJIT рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
- рдПрдирд╛рд▓реЙрдЧ рдФрд░ рдорд┐рд╢реНрд░рд┐рдд рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
- рдЖрдИрдбреАрдП рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЙрди рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдм рдЙрди рд▓рдХреНрд╖реНрдпреЛрдВ рдФрд░ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рд╡рд┐рдЬреНрдЮрд╛рдкрди рдФрд░ рдПрд╕рдПрдордПрд╕ рдХреЗ рдмрд┐рдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдХреЛрдб рдХреЗ рд╕рд╛рде
рднрдВрдбрд╛рд░ ред
рдЬреАрдбреАрдмреА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рддреАрдХ
рдпрд╣рд╛рдВ рд╣реИрдВ ред