
рдирдорд╕реНрддреЗ рдпрд╣ FreeRTOS рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдореНрдпреВрдЯреЗрдХреНрд╕ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдВрдХ:
Mutexesред
рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди (рдкреЛрд░реНрдЯ, рдореЗрдореЛрд░реА рдПрд░рд┐рдпрд╛, рдХреБрдЫ рд╡реИрд░рд┐рдПрдмрд▓) рддрдХ рд╕рд╛рдЭрд╛ рдкрд╣реБрдВрдЪ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдпреВрдирд┐рдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рдХрд╛рд░реНрдп рдЬреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд▓рд╛рдЗрди рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реЗрдорд╛рдлреЛрд░ рдЖрддрд╛ рд╣реИ - рдореНрдпреВрдЯреЗрдХреНрд╕ (рдореНрдпреВрдЯреЗрдХреНрд╕)ред рдпрд╣ рдЕрдореВрд░реНрдд рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЯреЛрдХрди рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╣реЛрдиреЗ рдкрд░, рдХрд╛рд░реНрдп рдХреА рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ "рдЯреЛрдХрди" рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдЗрд╕ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
рдЪрд┐рддреНрд░ 1 рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ 3 рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЪрд┐рддреНрд░ 2 рдЯрд╛рд╕реНрдХ рдмреА - "рдЯреЛрдХрди" (рдореНрдпреВрдЯреЗрдХреНрд╕) рд▓рд┐рдпрд╛ред
рдЪрд┐рддреНрд░ 3 рдЯрд╛рд╕реНрдХ рдмреА рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 4 рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЯрд╛рд╕реНрдХ рдмреА рдЯреЛрдХрди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореНрдпреВрдЯреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
xSemaphoreHandle xSemaphoreCreateMutex( void );
рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдореГрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрдирд╛рдпрд╛ рдореНрдпреВрдЯреЗрдХреНрд╕, рдпрд╛ NULL рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:
if( xSemaphoreTake( xMutex, portMAX_DELAY ) == pdTRUE ) {
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдбред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рддрд░реНрдХ рдХреЗ рджреМрд░рд╛рди, рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЦрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдп рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдРрд╕реЗ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд░реНрдЯ рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╣реИ)ред рдЗрд╕рдХреЗ рд▓рд┐рдП, FreeRTOS рд╡рд┐рд╢реЗрд╖ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
taskENTER_CRITICAL(); {
рдХреЛрдб рдХреЗ рдЗрд╕ рдЦрдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛рдиреА, рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдп рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛), рд▓реЗрдХрд┐рди рдиреЗрд╕реНрдЯреЗрдб рд╡реНрдпрд╡рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде FreeRTOS рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд░реБрдХрд╛рд╡рдЯреЗрдВ рдЖ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рдЬреЛ
MMM_SYSCALL_INTERRUPT_PRIORITY рдирд┐рд░рдВрддрд░рддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдбреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдирд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб, рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡реНрдпрд╡рдзрд╛рдиреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЕрдиреБрднрд╛рдЧ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧ, рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рдирд┐рд▓рдВрдмрди рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рд╕реЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 2 API рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
void vTaskSuspendAll(); {
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди
xTaskResumeAll () рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди
; taskYIELD () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордЬрдмреВрд░ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
;рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдЙрд▓рдЯрд╛ рдФрд░ рдореГрдд рдЕрдВрддред
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдкреНрд░рд╛рдердорд┐рдХ рд░реВрдк рд╕реЗ рдЧреЗрдЯрдХреАрдкрд░ рдХрд╛рд░реНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдПрдХ рдореГрдд рдЕрдВрдд рддрдХ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рдореИрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред
рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрд▓рдЯрд╛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ
рдЯрд╛рд╕реНрдХ рдмреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ
рдЯрд╛рд╕реНрдХ рдП рдХреА рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ рд╡рд╣ рдЯреЛрдХрди (рдореНрдпреВрдЯреЗрдХреНрд╕) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдереЗред
рдЧрддрд┐рд░реЛрдз - рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЬрд┐рд╕рдореЗрдВ 2 рдХрд╛рд░реНрдп рдПрдХ рджреВрд╕рд░реЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рджреВрд╕рд░реЗ рдХреЛ "рдЯреЛрдХрди" рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рдЯрд╛рд╕реНрдХ рдП "рдХрд╛рдЙрдВрдЯрд░" рдПрдХреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдФрд░ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИред
- рдЯрд╛рд╕реНрдХ рдП рдирд┐рд╖реНрдкрд╛рджрди рдЯрд╛рд╕реНрдХ рдмреА рджреНрд╡рд╛рд░рд╛ рдмрд╛рдзрд┐рдд рд╣реИред
- рдЯрд╛рд╕реНрдХ рдмреА "рдХрд╛рдЙрдВрдЯрд░" рдПрдХреНрд╕ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ, "рдХрд╛рдЙрдВрдЯрд░" рдПрдХреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЬрд┐рд╕реЗ рдЕрдм рдЯрд╛рд╕реНрдХ рдП рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЯрд╛рд╕реНрдХ рдмреА рдЯрд╛рд╕реНрдХ рдП рдХреА рдЙрдореНрдореАрдж рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред
- рдЯрд╛рд╕реНрдХ рдП рдХреЛ рдЪрд▓рд╛рдирд╛ рдЬрд╛рд░реА рд╣реИ, рдФрд░ "рдЯреЛрдХрди" рд╡рд╛рдИ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯрд╛рд╕реНрдХ рдмреА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рднреА рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред
"рдореГрдд рд╕рд┐рд░реЛрдВ" рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ "рдЯреЛрдХрди" рдорд┐рд▓реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рдП рдкрд╣рд▓реЗ, рдлрд┐рд░ рдмреА, рдЖрджрд┐ред
рд╢рд╛рдпрдж рдпрд╣ рд╕рдм, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рдЪрдХреНрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╕реБрдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореВрд▓ рдореИрдиреБрдЕрд▓ "рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛" рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдереА, рд╕рд╛рде рд╣реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рднреАред