рдХреНрд╡рд╛рдВрдЯрдо рд▓реАрдкреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдВрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕

рдХреНрд╡рд╛рдВрдЯрдо рд▓реАрдкреНрд╕ рдпрд╛ рдХреНрдпреВрдкреА рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдкрди рд╕реЛрд░реНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рд╣реИред QP рдореБрдЦреНрдп OS (Linux, Windows, FreeRTOS, рдЖрджрд┐) рдпрд╛ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред QP рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ QP рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдИ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ UML рд░рд╛рдЬреНрдпрдЪрд░реНрдЪрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкрд░рд┐рдорд┐рдд рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдПрдкреНрд▓реАрдХреЗрд╢рди рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред





1. рд░реВрдкрд░реЗрдЦрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдЕрдЧрд▓рд╛, Win32 рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрд╕рдбреАрдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХрдВрд╕реЛрд▓ рдореЗрдВ рдбрд╛рдЗрдирд┐рдВрдЧ рджрд╛рд░реНрд╢рдирд┐рдХреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ Win32 API рдФрд░ MFC рдкрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рднреА рд╣реЛрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдмрд╣реБрдд рд╕рд░рд▓ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



2. рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг

рд▓реЛрдбрд░ рдмреЙрдм рдХрдиреНрд╡реЗрдпрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрдХреНрд╕реЗ рдХреЛ рдЧреЛрджрд╛рдо рддрдХ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрдиреНрд╡реЗрдпрд░ рдкрд░ рдПрдХ рдмреЙрдХреНрд╕ рд╣реИ, рддреЛ рдмреЙрдм рдЗрд╕реЗ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдвреЗрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдмреЙрдХреНрд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмреЙрдм рдЦрдбрд╝рд╛ рд╣реИ рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдмреЙрдХреНрд╕ рдХрдиреНрд╡реЗрдпрд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдмреЙрдм рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдВрдЯреА рдмрдЬрддреА рд╣реИред рдЬрдм рдмреАрди рдмреЙрдХреНрд╕ рдЙрдард╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдмрдЯрди рджрдмрд╛рддрд╛ рд╣реИ рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рдмреЙрдХреНрд╕ рдХреЛ рдХрдиреНрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



3. рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ

рд╣рдо рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рджреЛ рдСрдЯреЛрдореЗрдЯрд╛ (рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдПрдВ) рд╣реИрдВред



рдЫрд╡рд┐



рдкрд╣рд▓реА рдмреАрдУрдмреА рдорд╢реАрди рдирд┐: рд╢реБрд▓реНрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдкрдирд╛ рдЬреАрд╡рди рд╢реБрд░реВ рдХрд░рддреА рд╣реИ (рд▓реЛрдбрд░ рдХрд╛рдо рдореЗрдВ рд╡реНрдпрд╕реНрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдмреЙрдХреНрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ)ред BOB рд╕рдордп-рд╕рдордп рдкрд░ рдПрдХ Timeout_sig рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ CONVEYOR рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, CONVEYOR рдХреЛ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдПрдХ рдмреЙрдХреНрд╕ рдХрдиреНрд╡реЗрдпрд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ) рдФрд░ рддреИрдпрд╛рд░ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмреАрдУрдмреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬреЗрдВред рддреИрдпрд╛рд░ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ BOB рдХреЛ WORK рд░рд╛рдЬреНрдп рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдмреЙрдХреНрд╕ рд▓реЗ рд▓рд┐рдпрд╛) рдФрд░ рдЧреЗрдЯ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред Get рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░, CONVEYOR рдСрдмреНрдЬреЗрдХреНрдЯ EMPTY рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред BOB рдЬрдм Timeout_sig рдХреЛ рдореБрдлрд╝реНрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рддреА рд╣реИред



4. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕

QP рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдУрдВ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦрдирд╛ рд╣реИред рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рдЧреНрдирд▓ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рд╛рдордЧреНрд░реА

QP рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

1) рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ - qpbob.h

2) рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб - bsp.h, bsp.cpp

3) рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдПрдВ - bob.cpp, рдХрдиреНрд╡реЗрдпрд░ редpp

4) рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ - main.cpp



рд╣рдо рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЙрди рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣реИрдВ рдФрд░ qpbob.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред



#ifndef qpbob_h

#define qpbob_h

//(1)

enum DPPSignals {

READY = Q_USER_SIG,

GET,

TIMEOUT,

TERMINATE_SIG,

MAX_PUB_SIG,

MAX_SIG

};



//(2)

extern QActive * const AO_BOB;

extern QActive * const AO_CONVEYOR;



#endif



* This source code was highlighted with Source Code Highlighter .








рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

1) рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдХреЗрдд рдирд┐рд░рдВрддрд░ Q_USER_SIG рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЧрдгрдирд╛ рдореЗрдВ рдХрдИ рд╕рд░реНрд╡рд┐рд╕ рд╕рд┐рдЧреНрдирд▓ рд╣реЛрддреЗ рд╣реИрдВ: TERMINATE_SIG - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рдВрдХреЗрдд; рд░рд╕реАрдж рдкрд░, рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдП; MAX_PUB_SIG - рдЗрд╕рдХреЗ рдмрд╛рдж рдШреЛрд╖рд┐рдд рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕реАрдзреЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рд╕рд┐рдЧреНрдирд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ; MAX_SIG - рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╕рд┐рдЧреНрдирд▓ рд╕рдВрдЦреНрдпрд╛ред TIMEOUT_SIG рд╕рдВрдХреЗрдд рдпрд╣рд╛рдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рдХреНрд░рд┐рдп рдмреЙрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

2) рд╕рдХреНрд░рд┐рдп рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрдХреЗрддред рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдкреНрд░рд╛рд░рдВрднрд┐рдХред



рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдХреЛрдб рд▓рд┐рдЦрдирд╛

рдХреНрдпреВрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрдирдХреА рдмрд╛рддрдЪреАрдд рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдХреЛрдб рдЬреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЕрд▓рдЧ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдХреНрд░рд┐рдп рдСрдмреНрдЬреЗрдХреНрдЯ bsp.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЦреБрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ



#ifndef bsp_h

#define bsp_h

//(1)

#define BSP_TICKS_PER_SEC 1

//(2)

void BSP_init( int argc, char *argv[]);

void BSP_print( char const *str);

#endif // bsp_h



* This source code was highlighted with Source Code Highlighter .








рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

1) рд╣рдо рдЖрдВрддрд░рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдорд░ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

2) BSP_init рдлрд╝рдВрдХреНрд╢рди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред BSP_print рдлрдВрдХреНрд╢рди рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рдХрдИ рджрд╕рд╡реЗрдВ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдо рд╕реНрдЯреИрдореНрдк рд▓рдЧрд╛рдХрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди bsp.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред



#include "qp_port.h"

#include "qpbob.h"

#include "bsp.h"



#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <time.h>



Q_DEFINE_THIS_FILE



//(1)

unsigned int TimeCounter;

//(2)

void BSP_timeStamp()

{

printf( "%d - " ,TimeCounter);

}



//(3) idle-

static uint8_t l_running;

//(4) idle-

static DWORD WINAPI idleThread(LPVOID par) {

TimeCounter=0;

( void )par;

l_running = (uint8_t)1;

while (l_running) {

Sleep(100);

TimeCounter++;

//(5) Esc

if (_kbhit()) {

if (_getch() == '\33' ) {

QF::publish(Q_NEW(QEvent, TERMINATE_SIG));

BSP_print( "Esc exit" );

}

}



}

return 0;

}

//(6)

void BSP_init( int argc, char *argv[]) {

HANDLE hIdle;

//(7)

QF_setTickRate(BSP_TICKS_PER_SEC);

//(8) idle

hIdle = CreateThread(NULL, 1024, &idleThread, ( void *)0, 0, NULL);

Q_ASSERT(hIdle != (HANDLE)0);

SetThreadPriority(hIdle, THREAD_PRIORITY_IDLE);



printf( "QP example"

"\nQEP %s\nQF %s\n"

"Press ESC to quit...\n" ,

QEP::getVersion(),

QF::getVersion());

}

//............................................................................

void QF::onStartup( void ) {

}

//(9)..........................................................................

void QF::onCleanup( void ) {

l_running = (uint8_t)0;

}



//............................................................................

void BSP_print( char const *str)

{

BSP_timeStamp();

printf( "%s\n" , str);

}

//(10)

void Q_onAssert( char const Q_ROM * const Q_ROM_VAR file, int line) {

fprintf(stderr, "Assertion failed in %s, line %d" , file, line);

exit(0);

}





* This source code was highlighted with Source Code Highlighter .








рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

1) рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЪрд░ред

2) рд╕рдордп рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

3) рдЬрдмрдХрд┐ рдЪрд░ рдХрд╛ рдорд╛рди 0 рдирд╣реАрдВ рд╣реИ, рдирд┐рд╖реНрдХреНрд░рд┐рдп рдереНрд░реЗрдб рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

4) рдХреАрдмреЛрд░реНрдб рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдмреЗрдХрд╛рд░ рдзрд╛рдЧрд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

5) рдЬрдм Esc рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ TERMINATE_SIG рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

6) рдлрд╝рдВрдХреНрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред

7) рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдорд░ рдХреА рдЖрд╡реГрддреНрддрд┐ред

8) рдмреЗрдХрд╛рд░ рдХреА рдзрд╛рд░рд╛ рд╢реБрд░реВ рдХрд░рдирд╛ред

9) рд╕рд┐рд╕реНрдЯрдо рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рд╖реНрдХреНрд░рд┐рдп рдзрд╛рд░рд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред

10) рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реВрдЪрдирд╛ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред



рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк

рд╕рд┐рд╕реНрдЯрдо main.cpp рдлрд╝рд╛рдЗрд▓ рдХреЗ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



#include "qp_port.h"

#include "qpbob.h"

#include "bsp.h"



//(1)

static QEvent const *l_bobQueueSto[10];

static QEvent const *l_conQueueSto[10];

//(2)

static QSubscrList l_subscrSto[MAX_PUB_SIG];

//(3) ,

static union SmallEvents {

void *min_size;



} l_smlPoolSto[10];



int main( int argc, char *argv[]) {



//(4) BSP

BSP_init(argc, argv);



//(5)

QF::init();



//(6)

QS_FILTER_ON(QS_ALL_RECORDS);

QS_FILTER_OFF(QS_QF_INT_LOCK);

QS_FILTER_OFF(QS_QF_INT_UNLOCK);

QS_FILTER_OFF(QS_QF_ISR_ENTRY);

QS_FILTER_OFF(QS_QF_ISR_EXIT);

QS_FILTER_OFF(QS_QF_TICK);

QS_FILTER_OFF(QS_QK_SCHEDULE);



//(7)

QS_OBJ_DICTIONARY(l_smlPoolSto);



//(8)

QF::psInit(l_subscrSto, Q_DIM(l_subscrSto));



//(9)

QF::poolInit(l_smlPoolSto, sizeof (l_smlPoolSto), sizeof (l_smlPoolSto[0]));



//(10)

AO_CONVEYOR->start(2,

l_conQueueSto, Q_DIM(l_conQueueSto),

( void *)0, 1024, (QEvent *)0);

AO_BOB->start(3,

l_bobQueueSto, Q_DIM(l_bobQueueSto),

( void *)0, 1024, (QEvent *)0);





//(11)

QF::run();



return 0;

}



* This source code was highlighted with Source Code Highlighter .








рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

1) рдкреНрд░рддреНрдпреЗрдХ рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

2) рд╣рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╕реНрддреБ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдПред

3) рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреВрд▓ (рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

4) рд╣рдо рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред

5) рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред

6) рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрдЕрдкред

7) рдИрд╡реЗрдВрдЯ рдкреВрд▓ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред

8) рд╣рдо рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред

9) рд╣рдо рдИрд╡реЗрдВрдЯ рдкреВрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред

10) рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪрд▓рд╛рдПрдВред

11) рд╣рдо рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рд╕рдХреНрд░рд┐рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реИред



рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдУрдВ

рд╕рдХреНрд░рд┐рдп рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЖрдЗрдП рдмреЙрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, bob.cpp рдлрд╝рд╛рдЗрд▓ред рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБрдПрдВ QActive рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВред



#include "qp_port.h"

#include "qpbob.h"

#include "bsp.h"



Q_DEFINE_THIS_FILE



class Bob : public QActive {



private :

//(1)

QTimeEvt m_timeEvt;

public :

Bob();



private :

//(2)

//

static QState initial(Bob *me, QEvent const *e);

static QState free(Bob *me, QEvent const *e);

static QState work(Bob *me, QEvent const *e);

};



static Bob l_Bob;



#define TIMEOUT_TIME 1



//(3)

enum InternalSignals {

TIMEOUT_SIG = MAX_SIG

};



QActive * const AO_BOB = &l_Bob;



//............................................................................

Bob::Bob() : QActive((QStateHandler)&Bob::initial),

m_timeEvt(TIMEOUT_SIG){ //(4)







}

//............................................................................

QState Bob::initial(Bob *me, QEvent const *) {



BSP_print( "Bob initial" );

//

QS_OBJ_DICTIONARY(&l_Bob);

QS_OBJ_DICTIONARY(&l_Bob.m_timeEvt);

//

QS_FUN_DICTIONARY(&QHsm::top);

QS_FUN_DICTIONARY(&Bob::initial);

QS_FUN_DICTIONARY(&Bob::free);

QS_FUN_DICTIONARY(&Bob::work);

//



QS_SIG_DICTIONARY(READY, me);

QS_SIG_DICTIONARY(TIMEOUT_SIG, me);

//(5)



me->subscribe(READY);

me->subscribe(TERMINATE_SIG);



//(6)

me->m_timeEvt.postIn(me, TIMEOUT_TIME);



//(7)

return Q_TRAN(&Bob::free);

}

//............................................................................

QState Bob::free(Bob *me, QEvent const *e) {



BSP_print( "Bob free" );

//(8)

switch (e->sig) {

//(9)

case Q_ENTRY_SIG: {



return Q_HANDLED();

}

//(10)



case READY:

{

BSP_print( "O my box READY. Going work" );



return Q_TRAN(&Bob::work);

}

case TIMEOUT_SIG:

{

BSP_print( "Tick Free - Bob" );

//(11)

me->m_timeEvt.postIn(me, TIMEOUT_TIME);

//(12)

QEvent* be=Q_NEW(QEvent,TIMEOUT);

QF::publish(be);





return Q_HANDLED();

}

//(13)

case TERMINATE_SIG: {

BSP_print( "Bob terminate.----------------------------------------------" );

QF::stop(); //(14)

//(15)

return Q_HANDLED();

}

}

return Q_SUPER(&QHsm::top);

}



QState Bob::work(Bob *me, QEvent const *e) {



BSP_print( "Bob work" );



switch (e->sig) {



case Q_ENTRY_SIG: {

QEvent* be=Q_NEW(QEvent,GET);

QF::publish(be);

BSP_print( "Bob public GET" );





return Q_HANDLED();

}



case TIMEOUT_SIG:

{

BSP_print( "Tick Work - Bob" );

BSP_print( "I am going to free." );

me->m_timeEvt.postIn(me, TIMEOUT_TIME);

QEvent* be=Q_NEW(QEvent,TIMEOUT);

QF::publish(be);



return Q_TRAN(&Bob::free);

}



case TERMINATE_SIG: {

BSP_print( "Bob terminate.----------------------------------------------" );

QF::stop();

return Q_HANDLED();

}

}

return Q_SUPER(&QHsm::top);

}



* This source code was highlighted with Source Code Highlighter .








рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг

1) рдмреЙрдм рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдПрдХ TIMEOUT_SIG рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

2) рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╣реЛрддреА рд╣реИред рдЬрдм рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд░рд╛рдЬреНрдп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВред рдПрдХ рдмреЙрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЛ рд░рд╛рдЬреНрдп рд╣реЛрддреЗ рд╣реИрдВ, FREE рдФрд░ WORK, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

3) рдЖрдВрддрд░рд┐рдХ рдЯрд╛рдЗрдорд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рд┐рдЧреНрдирд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

4) рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЯрд╛рдЗрдорд░ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

5) рд╡рд╕реНрддреБ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдХреЗрддреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

6) рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмрд╛рдж рдПрдХ рд╕рд┐рдЧреНрдирд▓ TIMEOUT_SIG рднреЗрдЬрддрд╛ рд╣реИред

7) рдкреНрд░рд╛рдВрддреАрдп рд░рд╛рдЬреНрдп рд╕реЗ рд╣рдо рд╡рд╕реНрддреБ рдХреЛ рдореБрдХреНрдд рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

8) рдореБрдлрд╝реНрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдлреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

9) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕рдВрдХреЗрдд рд╣реИрдВред

10) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, WORK рд╕реНрдерд┐рддрд┐ рдкрд░ рдЬрд╛рдПрдВред

11) TIMEOUT_SIG рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЯрд╛рдЗрдорд░ рдХреЛ рд░рд┐рдЪрд╛рд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдВрддрд░рд╛рд▓ рдкрд░ TIMEOUT_SIG рдХреЛ рднреЗрдЬ рд╕рдХреЗред

12) рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХ рдЦреБрд▓рд╛ рд╕рдВрдХреЗрдд рднреА рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдХреЗрдд рдХрдиреНрд╡реЗрдпрд░ рд╡рд╕реНрддреБ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

13) рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдЫ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯреЙрдк рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБ рдЬреЛ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЪрд▓рд╛рдпреА рдЧрдпреА рдереА (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмреЙрдм) рдХреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

14) рд╕рд┐рд╕реНрдЯрдо рд╢рдЯрдбрд╛рдЙрдиред

15) рдпрджрд┐ рд╕рдВрдХреЗрдд рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдзреНрд╡рдЬ рдХреЛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдХрдиреНрд╡реЗрдпрд░ рд╕реЗ рдХрдиреНрд╡реЗрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯ .pp рдлрд╝рд╛рдЗрд▓ рд╕рд░рд▓ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред



#include "qp_port.h"

#include "qpbob.h"

#include "bsp.h"



Q_DEFINE_THIS_FILE



class Conveyor : public QActive {



private :



public :

Conveyor();



private :

//

static QState initial(Conveyor *me, QEvent const *e);

static QState empty(Conveyor *me, QEvent const *e);

static QState full(Conveyor *me, QEvent const *e);

};



static Conveyor l_Conveyor;



QActive * const AO_CONVEYOR = &l_Conveyor;



//............................................................................

Conveyor::Conveyor() : QActive((QStateHandler)&Conveyor::initial)

{



}

//............................................................................

QState Conveyor::initial(Conveyor *me, QEvent const *) {



BSP_print( "Conveyor initial" );



QS_OBJ_DICTIONARY(&l_Conveyor);





QS_FUN_DICTIONARY(&QHsm::top);

QS_FUN_DICTIONARY(&Conveyor::initial);

QS_FUN_DICTIONARY(&Conveyor::empty);

QS_FUN_DICTIONARY(&Conveyor::full);



QS_SIG_DICTIONARY(GET, me);

QS_SIG_DICTIONARY(TIMEOUT, me);



me->subscribe(GET);

me->subscribe(TIMEOUT);



return Q_TRAN(&Conveyor::empty);

}

//............................................................................

QState Conveyor::empty(Conveyor *me, QEvent const *e) {



BSP_print( "Conveyor empty" );



switch (e->sig) {





case TIMEOUT:

{

BSP_print( "Tick Empty - Conveyor" );

BSP_print( "Conveyor going to full." );





return Q_TRAN(&Conveyor::full);

}



}

return Q_SUPER(&QHsm::top);

}



QState Conveyor::full(Conveyor *me, QEvent const *e) {



BSP_print( "Conveyor full" );



switch (e->sig) {

//(1)



case Q_ENTRY_SIG: {

QEvent* be=Q_NEW(QEvent,READY);

QF::publish(be);

BSP_print( "Conveyor READY." );

}



case GET:

{

BSP_print( "Bob GET box." );

return Q_TRAN(&Conveyor::empty);

}



}

return Q_SUPER(&QHsm::top);

}





* This source code was highlighted with Source Code Highlighter .








QP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ QP рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрдпреВрдкреА рдХреЗ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:

рдХреЗрд╡рд▓ рдХреЛрдб;

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡реА.рдПрд╕.



All Articles