
рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХ рдЪрд┐рдк рдкрд░ рдПрди-рдХреЛрд░ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд┐рдз рдУрдПрд╕ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд▓рд┐рдирдХреНрд╕ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд░рдЯреАрдУрдПрд╕ рд╣реИред Linux рдХреЗ рдХрдВрдзреЗ рдкрд░ рд╣реЗрд╡реАрд╡реЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрдЯреИрдХ рд╣реИрдВ, рдЬрдмрдХрд┐ RTOS рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЧрдарди рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЖрдВрддрд░рд┐рдХ рдкрд░рдорд╛рдгреБ рд╡рд┐рдирд┐рдордпред рдпрджрд┐ рдЖрдк OpenMCAPI рдУрдкрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд┐рд╕реА рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕реАрдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреА рджрд░реНрдЬрдиреЛрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝реНрд▓рд┐рдк рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдереНрд░реВрдкреБрдЯ рд╕рдВрдЦреНрдпрд╛рдПрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдЖрдВрддрд░рд┐рдХ рдореЗрдореЛрд░реА рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд╛ рдХрд╛рд░реНрдп рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреА рдЕрдкрдиреА рдкрд░рдд рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореЛрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реНрдирд▓ рдиреНрдпреВрдХреНрд▓рд┐рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕
API рдХреЛ рдорд╛рдирдХреАрдХреГрдд рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд▓реНрдЯреАрдХреЛрд░ рдПрд╕реЛрд╕рд┐рдПрд╢рди (MCA) рдиреЗ MCAPI (рдорд▓реНрдЯреАрдХреЛрд░ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рдВрд╕ рдПрдкреАрдЖрдИ) рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдФрд░ рдЬрд▓реНрдж рд╣реА рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдкреНрд░рд╢реНрди рдореЗрдВ рдУрдкрдирдПрдорд╕реАрдПрдкреАрдЖрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдорд╕реАрдПрдкреАрдЖрдИ 2.0 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рдореЗрдВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЙрд░реНрдкреЛрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдореБрдХреНрдд рдмреАрдПрд╕рдбреА / рдЬреАрдкреАрдПрд▓ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЙрдиреНрдЪ рдФрд░ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рднреА рд╣реИред
OpenMCAPI рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢реБрд░реВ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдпрд╛ рд╢реЗрдпрд░реНрдб рдореЗрдореЛрд░реА (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ mpc85xx рдФрд░ mv78xx0 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
рдУрдкрдирдПрдорд╕реАрдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдФрд░ рдЖрд░рдЯреАрдУрдПрд╕ рдХреА рдмрд╛рддрдЪреАрдд рдХреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдореВрд░реНрдд рд╕реНрддрд░реЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ (рдЪрд┐рддреНрд░ 1 рджреЗрдЦреЗрдВ):
рдЪрд┐рддреНрд░рд╛ред 1. рдУрдкрдирдПрдорд╕реАрдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдФрд░ рдЖрд░рдЯреАрдУрдПрд╕ рдХреА рдмрд╛рддрдЪреАрдд рдХреА рд╕рдВрд░рдЪрдирд╛рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- MCAPI рдЬреЗрдиреЗрд░рд┐рдХ рдмрд╛рд╣реНрдп MCAPI API рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
- OS рд▓реЗрдпрд░ рдЬреЗрдиреЗрд░рд┐рдХ MCAPI рд▓реЗрдпрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рднрд╛рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ libmcapi / mcapi / linux / mcapi_os.c рдФрд░ рдЗрд╕рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ:
- рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рдПрдХ рдЕрдореВрд░реНрдд рдкрд░рдд рд╣реИ рдЬреЛ рдпреВрдЬрд░ рд╕реНрдкреЗрд╕ рд╕реНрддрд░ рдкрд░ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ libmcapi / shm / shm.c рдФрд░ libmcapi / shm / linux / shm_os.c рдлрд╛рдЗрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ:
- рдУрдПрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ libmcapi / shm / linux / kmod рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ:
рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд░рд┐рд╡рд╣рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рддрдЪреАрдд рдХреЗ рддрдВрддреНрд░ рдХреА рдкреВрд░реА рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕реЗ рдУрдкрдирдПрдорд╕реАрдПрдкреАрдЖрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдВрддрд░рд┐рдХ рдореЗрдореЛрд░реА рддрдВрддреНрд░ рдФрд░ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЖрдЧреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ mpc85xx рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (
рдлреНрд░реАрд╕реНрдХреЗрд▓ рдХреЗ P1020 рдЪрд┐рдк ) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░: рдкреИрдЪ рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 2.6.35, рдЬреЛ рдХрд┐ рдлреНрд░реАрд╕реНрдХреЗрд▓ QorIQ_SDK_V1_03 рд╡рд┐рдХрд╛рд╕ рдХрд┐рдЯ (рдПрд╕рдбреАрдХреЗ) (рдЙрдирдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдЙрдкрд▓рдмреНрдз рд╣реИ) рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ,
RTEMS рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (RTOS) рдХреЗ рд░реВрдк
рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ git рдкрд░ git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: //git.rtems.org/rtems.git
рдЖрдВрддрд░рд┐рдХ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреНрд░реАрд╕реНрдХреЗрд▓ рдХрдо рд╕реЗ рдХрдо рджреЛ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдВрдЯрд░рдкреНрдЯреНрд╕ (IPIs) - рдЗрдВрдЯреНрд░рд╛рдХреНрд▓рд┐рдпрд░ рдЗрдВрдЯрд░рдкреНрдЯ, рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде 4 рдЯреБрдХрдбрд╝реЗ рддрдХред
- рд╕рдВрджреЗрд╢ рдЗрдВрдЯрд░рдкреНрдЯреНрд╕ (MSGRs) - рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╕рдордп рд╡реНрдпрд╡рдзрд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдЖрдВрддрд░рд┐рдХ рд╕рдВрджреЗрд╢, 8 рдЯреБрдХрдбрд╝реЗ рддрдХред
Openmcapi рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП OS рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MSGRs рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред
рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдЪрд┐рддреНрд░ 2 рджреЗрдЦреЗрдВ):
рдЪрд┐рддреНрд░рд╛ 2. рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдЕрдВрддрд░рд┐рдХреНрд╖ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░ рдХреЛ рджреЛ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдкрд╣рд▓рд╛ рдмреНрд▓реЙрдХ - SHM_MGMT_BLOCK рдХреНрд╖реЗрддреНрд░, рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
struct _shm_drv_mgmt_struct_ { shm_lock shm_init_lock; mcapi_uint32_t shm_init_field; struct _shm_route_ shm_routes[CONFIG_SHM_NR_NODES]; struct _shm_buff_desc_q_ shm_queues[CONFIG_SHM_NR_NODES]; struct _shm_buff_mgmt_blk_ shm_buff_mgmt_blk; };
рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд▓реЙрдХ shm_init_lock рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдЭрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрди-рдХреЛрд░ рдХреА рдкрд╣реБрдВрдЪ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╡реИрд░рд┐рдПрдмрд▓ shm_init_field рдореЗрдВ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдВрдб рдХреБрдВрдЬреА рд╣реИ, рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ SHM_INIT_COMPLETE_KEY рдорд╛рди рд▓реЗрддрд╛ рд╣реИред
- Shm_routes - рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЪрд╛рд░ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЯреЗрдмрд▓ рдореЗрдВ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЛрд░ (рдиреЛрдбреНрд╕) рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ CONFIG_SHM_NR_NODES рд╕рдВрдЪрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 2 рдиреЛрдбреНрд╕ред
- Shm_queues - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЛрдб рд╕реЗ рдЬреБрдбрд╝реА рд╕рдВрджреЗрд╢ рдХрддрд╛рд░реЗрдВ, CONFIG_SHM_NR_NODES рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 2 рд▓рд╛рдЗрдиреЗрдВред
- Shm_buff_mgmt_blk - рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрдлрд░ рдкреНрд░рдмрдВрдзрди рд╕рдВрд░рдЪрдирд╛ (SHM_BUFFER)ред
- рджреВрд╕рд░рд╛ рдХреНрд╖реЗрддреНрд░ , рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░, SHM_BUFF_COUNT (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 128) SHM_BUFFER рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВред рдпрд╣ рдХреНрд╖реЗрддреНрд░ рд╕реАрдзреЗ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред SHM_BUFFER рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ MCAPI_MAX_DATA_LEN рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдВрдЪрд╛рд░ рддрдВрддреНрд░ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдЖрд░реЗрдЦ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рддрдВрддреНрд░ OpenMCAPI рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдВрдЬреАрд░ рджреЗрдЦреЗрдВ 3):
рдЪрд┐рддреНрд░рд╛ред 3. рд╕рд╛рдЭрд╛ рд╕реНрдореГрддрд┐ (рдУрдкрдирдПрдорд╕реАрдПрдкреАрдЖрдИ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░ рдХреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рддрдВрддреНрд░ рдХреЗ рдПрд╕рдбреАрдПрд▓ рдЖрд░реЗрдЦредрдЖрд░реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
- "HW- рдЕрдзрд┐рд╕реВрдЪрдирд╛" - рдЖрд░реЗрдЦ рдХрд┐рд╕реА рджреВрд░рд╕реНрде рдпрд╛ рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рдХреЛ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ:
- рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░реНрдиреЗрд▓ рдХреА рдЖрдИрдбреА рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ (рдУрдкрдирдореЗрдХрдкреА_рд╢рдо_рдиреЛрдЯрд┐рдлрд╛рдИ рдлрдВрдХреНрд╢рди)ред
- рдпрджрд┐ рдЕрдзрд┐рд╕реВрдЪрдирд╛ "рд▓рдХреНрд╖реНрдп рдЖрдИрдбреА" рджреВрд░рд╕реНрде рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рддреЛ рдПрдХ рджреВрд░рд╕реНрде рд╕рдВрджреЗрд╢ MSGRs рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ (рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ) рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди рдХреЗ рд╕рд╛рде (рдмреНрд▓реЙрдХ 3 рджреЗрдЦреЗрдВ), рдЕрдиреНрдпрдерд╛ рдмрд╛рдзрд╛_рд╣реИрдВрдбрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ("HW-Receive" рдЖрд░реЗрдЦ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред ), рдмреНрд▓реЙрдХ 4 рджреЗрдЦреЗрдВред
- "HW-Receive" - тАЛтАЛрдЖрд░реЗрдЦ рдХрд┐рд╕реА рджреВрд░рд╕реНрде рдпрд╛ рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ:
- Interrupt_handle рдПрдХ рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░ рд╣реИ рдЬрд┐рд╕реЗ MSGRs рдкрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдмреНрд▓реЙрдХ 2-6 рдореЗрдВ, рд╕рднреА MSGRs рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдБрдЪреА рдЬрд╛рддреА рд╣реИ; рдпрджрд┐ MSGR рд╕рдВрджреЗрд╢ рдХрд╛ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб 0 рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реНрдЯреНрд░реАрдо рдЕрдирд▓реЙрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдмреНрд▓реЙрдХ 7-8 рдореЗрдВ, рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ("рдЗрдВрдЯрд░рдкреНрдЯ_рд╣реИрдВрдбрд▓рд░") рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХреЙрд▓ рдПрдХ рдмрд╛рдзрд╛ рдореЗрдВ рдерд╛, рддреЛ MSGR рд╕рдВрджреЗрд╢ рдЙрдкрд╕реНрдерд┐рддрд┐ рдзреНрд╡рдЬ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
RTEMS рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╡рд┐рд╡рд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрд╕ OS рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред
RTEMS (рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдПрдХреНрдЬреАрдХреНрдпреВрдЯрд┐рд╡) рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ RTOS, рдлреБрд▓-рдлреАрдЪрд░реНрдб рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдУрдкрди рд╕реНрдЯреИрдВрдбрд░реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ (APIs), POSIX рдорд╛рдирдХ рдФрд░ BSD рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдпрд╣ рдЕрдВрддрд░рд┐рдХреНрд╖, рдЪрд┐рдХрд┐рддреНрд╕рд╛, рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдХрдИ рдЕрдиреНрдп рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИред RTEMS рдореЗрдВ ARM, PowerPC, Intel, Blackfin, MIPS, Microblaze рдЖрджрд┐ рдЬреИрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ tcp / ip, http, ftp, telnet рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реНрдЯреИрдХ рд╣реЛрддрд╛ рд╣реИред рдЖрд░рдЯреАрд╕реА, рдирдВрдж, UART рдФрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХреАрдХреГрдд рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЪрд▓рд┐рдП OpenMCAPI рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд▓рд┐рдВрдХ рдкрд░ рд╕реНрдерд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ [1] рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- OS рдкрд░рдд рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдлрд╛рдЗрд▓реЗрдВ:
- libmcapi / mcapi / rtems / mcapi_os.c;
- libmcapi /include/rtems/mgc_mcapi_impl_os.h
- рд╕рдВрдЧрдд рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдлрд╝рд╛рдЗрд▓:
- libmcapi / shm / rtems / shm_os.cред
- OpenMCAPI рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рдлрд╝ -рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред
рдЪреВрдВрдХрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо P1020 (рдкрд╛рд╡рд░рдкреАрд╕реА, 500 рд╡реА 2) рдФрд░ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдЖрд░рдЯреАрдУрдПрд╕ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдХрд░реНрдиреЗрд▓ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдкреГрдердХреНрдХрд░рдг рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
- libmcapi / рд╢рд╛рдорд┐рд▓ / arch / powerpc / atomic.h;
- libmcapi / shm / rtems / kmod /ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, OS рд▓реЗрдпрд░ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ RTEMS POSIX- рд╕рдВрдЧрдд рдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдлрд╛рдЗрд▓реЗрдВ mcapi_os.c рдФрд░ mgc_mcapi_impl_os.h рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдХреЙрдкреА рдХреА рдЧрдИ рдереАрдВред
рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ shm_os.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдЬреЗрдирд░рд┐рдХ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд▓реЗрд╡рд▓ (рдлрд╝рд╛рдЗрд▓ libmcapi / shm / shm.c) рд╕реЗ рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдФрд░ MSGR рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдЪреЗрдВрдЬ рддрдВрддреНрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп:
1) mcapi_status_t openmcapi_shm_notify (mcapi_uint32_t unit_id, mcapi_uint32_t рдиреЛрдб_id) - рдлрд╝рдВрдХреНрд╢рди рджреВрд░рд╕реНрде рдХреЛрд░ (рдУрдВ) рдХреЛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЖрд░реЗрдЦ (рдЪрд┐рддреНрд░ 3 рджреЗрдЦреЗрдВ) рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
mcapi_status_t openmcapi_shm_notify(mcapi_uint32_t unit_id, mcapi_uint32_t node_id) { mcapi_status_t mcapi_status = MCAPI_SUCCESS; int rc; rc = shm_rtems_notify(unit_id); if (rc) { mcapi_status = MGC_MCAPI_ERR_NOT_CONNECTED; } return mcapi_status; } static inline int shm_rtems_notify(const mcomm_core_t target_core) { struct mcomm_qoriq_data *const data = &mcomm_qoriq_data; if (target_core == mcomm_qoriq_cpuid()) { _mcomm_interrupt_handler(NO_IRQ, data); } else { mcomm_qoriq_notify(target_core); } return 0; } static int _mcomm_interrupt_handler(rtems_vector_number irq, struct mcomm_qoriq_data *data) { register int i; void *mbox = data->mbox_mapped; for (i = 0; i < data->nr_mboxes; i++) { int active; switch (data->mbox_size) { case 1: active = readb(mbox); break; case 4: active = readl(mbox); break; default: active = 0; } if (active) { LOG_DEBUG("%s: waking mbox %d\n", __func__, i); (void) rtems_event_send( data->rid, MMCAPI_RX_PENDING_EVENT ); } mbox += data->mbox_stride; } if (irq != NO_IRQ) { mcomm_qoriq_ack(); } return 0; }
2) mcapi_uint32_t openmcapi_shm_schedunitid (рд╢реВрдиреНрдп) - рдлрд╝рдВрдХреНрд╢рди рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЕрд░реНрдерд╛рдд, рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд░реНрдиреЗрд▓
) рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдкрдврд╝рдХрд░ tialially рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
mcapi_uint32_t openmcapi_shm_schedunitid(void) { return (mcapi_uint32_t) ppc_processor_id(); }
3) mcapi_status_t openmcapi_shm_os_init (рд╢реВрдиреНрдп) - рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕реНрдЯреНрд░реАрдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ rtems_task_create рдФрд░ rtems_task_start рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
mcapi_status_t openmcapi_shm_os_init(void) { struct mcomm_qoriq_data *const data = &mcomm_qoriq_data; rtems_id id; rtems_status_code sc; if( RTEMS_SELF != data->rid ) { return MCAPI_ERR_GENERAL; } sc = rtems_task_create( rtems_build_name( 'S', 'M', 'C', 'A' ), MMCAPI_RX_TASK_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id); if( RTEMS_SUCCESSFUL != sc ) { return MCAPI_ERR_GENERAL; } data->rid = id; sc = rtems_task_start( id, mcapi_receive_thread, 0 ); if( RTEMS_SUCCESSFUL != sc ) { perror( "rtems_task_start\n" ); return MCAPI_ERR_GENERAL; }; return MCAPI_SUCCESS; } static rtems_task mcapi_receive_thread(rtems_task_argument argument) { int rc; do { rc = shm_rtems_wait_notify(MCAPI_Node_ID); if (rc < 0) { perror("shm_rtems_wait_notify"); break; } MCAPI_Lock_RX_Queue(); shm_poll(); MCAPI_Unlock_RX_Queue(0); } while (1); printk("%s exiting!\n", __func__); } static inline int shm_rtems_wait_notify(const mcapi_uint32_t unitId) { rtems_event_set event_out; int ret = 0; while(1) { LOG_DEBUG("mcomm_mbox_pending start\n"); (void) rtems_event_receive( MMCAPI_RX_PENDING_EVENT, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &event_out ); LOG_DEBUG("rtems_event_receive\n"); ret = mcomm_mbox_pending(&mcomm_qoriq_data, (mcomm_mbox_t)unitId); LOG_DEBUG("mcomm_mbox_pending end ret=%d\n", ret); if(ret != 0) { return ret; }; } return 0; }
4) mcapi_status_t openmcapi_shm_os_finalize (рд╢реВрдиреНрдп) - рдлрд╝рдВрдХреНрд╢рди rtems_task_delete рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдЯреНрд░реАрдо рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
mcapi_status_t openmcapi_shm_os_finalize(void) { struct mcomm_qoriq_data *const data = &mcomm_qoriq_data; rtems_id id = data->rid; rtems_status_code sc; sc = rtems_task_delete(id); if( RTEMS_SUCCESSFUL != sc ) { return MCAPI_ERR_GENERAL; } return MCAPI_SUCCESS; }
5) void * openmcapi_shm_map (рд╢реВрдиреНрдп) - MSGRs рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп, рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рддреИрдпрд╛рд░ рдХрд░рдирд╛ред рд╕реНрд░реЛрдд рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
void *openmcapi_shm_map(void) { void *shm; int rc; size_t shm_bytes;
6. void openmcapi_shm_unmap (void * shm) - рдлрд╝рдВрдХреНрд╢рди MSGRs рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░рджреНрдж рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
void openmcapi_shm_unmap(void *shm) { shm_rtems_deinit_device();
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдирд┐рдореНрди-рд╕реНрддрд░ рдкреНрд░рд╛рдкреНрдд рд╕реНрдЯреНрд░реАрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ mcapi_receive_thread (рдКрдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦреЗрдВ)ред рдЬрдм рдХреЛрдИ рдереНрд░реЗрдб рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, rtems_event_receive рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рдЗрд╕реЗ рдЗрд╡реЗрдВрдЯ рд╕реНрдЯреИрдВрдбрдмрд╛рдп рдореЛрдб (RTEMS рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЗрд╡реЗрдВрдЯ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд) рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░, рдЬрдм рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯ рдЗрд╡реЗрдВрдЯ рдЖрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЗрдВрдЯрд░рдкреНрдЯ_рд╣реИрдВрдбрд▓рд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЪрд┐рддреНрд░ 3 рджреЗрдЦреЗрдВ, "HW-Receive" рдЖрд░реЗрдЦ), рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рдУрдкрдирдореЗрдХреНрдкреА рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди - shm_oll) () рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд░реЛрдз рдХреЗ рд╕рд╛рдеред рдереНрд░реЗрдб рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрддрд╛ рд╣реИред
рдУрдкрдирдПрдорд╕реАрдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдФрд░ рдЖрд░рдЯреАрдИрдПрдордПрд╕ рдХреА рдмрд╛рддрдЪреАрдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдмреЗрдВрдЪ рдПрдХ рд╕реНрдерд╛рдкрд┐рдд P1020 рдкреНрд░реЛрд╕реЗрд╕рд░ (2 рдХреЛрд░) рдХреЗ рд╕рд╛рде рдлреНрд░реАрд╕реНрдХреЗрд▓ P1020RDB-PB рд╕реЗ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рд╣реИред рдЖрд╡реГрддреНрддрд┐: рдХреЛрд░ рдЖрд╡реГрддреНрддрд┐ - 800 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ, DDR2 - 400 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ, CCB - 400 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬред рдЧреБрдард▓реА рдкрд░ 0/1, рд▓рд┐рдирдХреНрд╕ / RTEMS рдХреНрд░рдорд╢рдГ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдереЗред рдПрдХреНрд╕рдЪреЗрдВрдЬ рджреЛ-рддрд░рдлрд╝рд╛ рдерд╛, 10,000 рджреЛ-рддрд░рдлрд╝рд╛ рдкрд╛рд░реНрд╕рд▓ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреЛ рдорд╛рдкрд╛ред рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдкрд┐рдд рд╣реИрдВ:
рд╕рдВрдЦреНрдпрд╛
| рдЯреЗрд╕реНрдЯ рд╡рд┐рд╡рд░рдг
| рдПрдХ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рд╕рдордп, рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб
|
1
| 512 рдмрд╛рдЗрдЯ рд╕рдордорд┐рдд рдкреИрдХреЗрдЯ
| 37.5
|
2
| рд╕рдордорд┐рдд рдкреИрдХреЗрдЯ 52430 рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░
| 121
|
3
| 100 kB рд╕рдордорд┐рдд рдкреИрдХреЗрдЯ
| 346
|
4
| 1k / 100k-linux / rtems рдЕрд╕рдордорд┐рдд рдкреИрдХреЗрдЬ
| 185
|
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕реЗ, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдУрдкрдирдПрдорд╕реАрдПрдкреАрдЖрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдорд╕реАрдПрдкреАрдЖрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЧреНрдп рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддреА рд╣реИ; рдкреЛрд░реНрдЯрд┐рдВрдЧ (рдкрд╛рд╡рд░рдкреАрд╕реА рдФрд░ рдЖрд░реНрдо рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо) рдХреЗ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг; рдПрдХ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рджрд░реНрд╢рдиред
[!] рдкреНрд░рд╢реНрди рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рд░реБрд╕реНрд▓рд╛рди
рдлрд┐рд▓реАрдкреЛрд╡рд┐рдЪ ,
рдкреНрд░реЛрдорд╡рдб рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдбрд┐рдЬрд╛рдЗрди рд╕реЗрдВрдЯрд░ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред