рдПрдХ 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 рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрдпреВрдкреА рдХреЗ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:
рдХреЗрд╡рд▓ рдХреЛрдб;
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡реА.рдПрд╕.