рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЙрджрд╛рд╣рд░рдг

рдЬрдм рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ, рдореИрдВ, рдмреЗрд╢рдХ, рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ :) рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдХреЛрдб рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рдЪреБрдХрд╛ рдерд╛ред ред рдЕрдм рд╣рдорд╛рд░реА рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдЬреЛ AVR рд╕реНрдЯреВрдбрд┐рдпреЛ (рдЬреЛ рдХрд┐ рдЧреНрд░рд╣рдг рдЖрдзрд╛рд░рд┐рдд рд╣реИ) рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрд╡реАрдЖрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдЫреЛрдЯреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде - "рдХреЗрд╡рд▓ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░" рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдмрд╛рдж рдХреА рдлрд╛рдЗрд▓реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ - рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрдкреЗрдХреНрд╖рд┐рдд .i рдХреЗ рдмрдЬрд╛рдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди .o рдХреЗ рд╕рд╛рдеред рдЦреИрд░, 5 рдорд┐рдирдЯ рдХреА рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдЧрд▓рддрдлрд╣рдореА рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ, рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдареАрдХ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ!

рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдХреБрдЫ рд╕рдВрджреЗрд╢ рд╣реИрдВ - рд▓рдЧрднрдЧ рджреЛ рджрд░реНрдЬрдиред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдирдЧрдгреНрдп рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВ (рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдпрд╣ рджреЛ рдмрд╛рд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕реЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИ (рдФрд░ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ - рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЦреЗрд▓рдирд╛ рдФрд░ рдРрд╕реА рдЬрдЧрд╣реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ)ред

рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯрд╛рдЗрдкреЛ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ enum-a рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рдЕрдиреНрдп enum-a рдХреЗ рдорд╛рди рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╛ рдПрдХ рдЪрд░ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдерд╛)ред

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк, рдЬрд┐рд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдореИрдВ рдпрд╣ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдереА рдПрдХ рдФрд░ рдХреЗрд╡рд▓ "рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рд╕реВрдЪрдХ рд╕реВрдЪрдХ" ...


рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рд╣рдордиреЗ рдлреЙрд░реНрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛

void fun(error_t * perr) { *perr = SUCCESS; ... if (something) { *perr = SOME_ERROR; } } 


рдФрд░ рд╡рд╕реНрддреБрддрдГ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдерд╛:

 void init(void) { error_t err = SUCCESS; ... fun(&err); } 


рдирд┐рдореНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдПрдХ рджрд┐рди рдмрд╛рдж рддрдХ:

 void some_init(void) { error_t *perr = SUCCESS; ... some_fun(perr); } 


рджрд░рдЕрд╕рд▓ рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рднреА рд╢рд╛рдк рджрд┐рдпрд╛ рдерд╛ред рдмреЗрд╢рдХ, 0 рдХрд╛ рдореВрд▓реНрдп рдерд╛ред

рдЬрдм рд╣рдо рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЯрдХрд░рд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рд╕рдордп рдХреЛ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╕реЗрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рддрд╛ рд░рд╣рд╛ред рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдиреЗ рдЗрд╕ рд░реЗрдЦрд╛ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ (рдмрд╣реБрдд рдмрд╛рд░ * perr = SUCCESS рд▓рд╛рдЗрдиреЗрдВ рдХреЛрдб рдореЗрдВ рдлрд╝реНрд▓рд┐рдХрд░ рдХреА рдЧрдИрдВ)ред

рдЙрд╕ рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рд▓рдЧрднрдЧ 30 рджрд┐рди рдмрд╛рдж, рдкрд╣рд▓реА рдмрд╛рд░ рд░рд╛рдд рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░ рдЧрдПред рдкреНрд▓реЗ рдлреЙрд▓ рдирд╣реАрдВ рд╣реБрдЖред

рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдлрд┐рд░ рд╕реЗ рдЧрд┐рд░ рдЧрдПред рдФрд░ рдЕрдзрд┐рдХред рдпрд╣ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдбреНрд░реЙрдк рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдХреЗ рд╣рд░ рддреАрд╕ рд░рди рдХреЗ рдмрд╛рдж рдФрд╕рддрди рд╣реЛрддрд╛ рд╣реИред

рдЯреАрдо рдиреЗ рд▓рдЧрднрдЧ 50 рдШрдВрдЯреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрд╛ред рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖред рд╕рдЪ рд╣реИ, рд╣рдо рдкреНрд░рддрд┐рдмрджреНрдз рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рдм рд╢реБрд░реВ рд╣реБрдЖ - рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рд╡реИрд╕реЗ, рджреЛ рдХрджрдо рдХрдо рдерд╛ред рдлрдВрдХреНрд╢рди some_fun (perr) рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ some_other_fun (perr) рдХрд╣рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдХреБрдЫ some_third_fun (рдкреЗрд░) рдХрд╣рд▓рд╛рддрд╛ рд╣реИред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА some_third_fun (perr) рдореЗрдВ рдПрдХ рдХреЛрдб рдерд╛ рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рдерд╛:

 for(number_of_loops) { some_action(perr); if (*perr != SUCCESS) return; } 


рдпрд╛рдиреА рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ some_action рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ (рдЬреЛ рдХрд╛рдлреА рдЧреИрд░-рддреБрдЪреНрдЫ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдмрд╛рд╣реНрдп рдкрд░рд┐рдзреАрдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╢рд╛рдорд┐рд▓ рдерд╛ - рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд░рдирд╛ рдФрд░ рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рдерд╛), рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ, рдЪрдХреНрд░ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ 0 рдкрддреЗ рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдорд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ (рдПрдореНрдмреЗрдбреЗрдб рдореЗрдВ рд╢реВрдиреНрдп рдкрддрд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдиреВрдиреА рд╣реИ)ред рдФрд░ рднрд╛рд░реА, 0 рдЗрд╕ рдкрддреЗ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рд╛рд░рд╛рдВрд╢: рдПрдХ рддреНрд░реБрдЯрд┐, рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 50 рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдПрдХ рд░рди рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдФрд░ рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛!

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрд╕ рддрд░реНрдХ? рдХрд╛рд╢, рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╣реА рдорд╛рдорд▓рд╛ рд╣реИ: рд╕рдордп рдФрд░ рд╕рд╛рдордЧреНрд░реА рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднреБрдЧрддрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ред рдЪреВрдВрдХрд┐ рдЦреЛрдЬ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП 50 рдШрдВрдЯреЗ рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЕрд░реНрде рд╣реИ рдкреНрд░рддреНрдпрдХреНрд╖ рдиреБрдХрд╕рд╛рди: (((

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реИрд╕реЗ: рдкрд░рд┐рдпреЛрдЬрдирд╛ FreeRTOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рддреЛ, рдЙрд╕рдХреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рднреА рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рдереА!

рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдкреЛрд╕реНрдЯ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд▓рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

Source: https://habr.com/ru/post/In198836/


All Articles