рдореИрдВ рдПрдореНрдмреЗрдбреЗрдб рдореЗрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпреЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реБрдкрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЖрд░рдЯреАрдУрдПрд╕ (рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдСрдкрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо, рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╣рд╛рдиреА рдХреЗ рджреМрд░рд╛рди рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рди рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рджреВрд╕рд░реЗ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдЬреЛ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХреБрддреНрддреЗ рдХреЛ рдПрдореНрдмреЗрдбреЗрдб рдореЗрдВ рдЦрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ)ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░, рдереЛрдбрд╝реА рдореЗрдореЛрд░реА рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдзреАрдп рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдПрдирд╛рд▓реЙрдЧ-рдЯреВ-рдбрд┐рдЬрд┐рдЯрд▓ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕, рдЯрд╛рдЗрдорд░, рдИрдерд░рдиреЗрдЯ, рдпреВрдПрд╕рдмреА, рдПрд╕рдкреАрдЖрдИ - рдпрд╣ рд╕рдм рдмрд╣реБрдд рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рд╣рд▓ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЗрдВрд╕рд░ рдХреЛ рдПрдбреАрд╕реА рдЗрдирдкреБрдЯ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░, рдЬреЛ рдЬрдм рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рддрд╛рдкрдорд╛рди рдХреЛ рдЗрд╕ рдПрдбреАрд╕реА рджреНрд╡рд╛рд░рд╛ рдорд╛рдкрд╛ рд╡реЛрд▓реНрдЯреЗрдЬ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ, рдЬрд┐рд╕реЗ GPIO (рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрд▓рдИрдбреА рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдореЛрдЯрд░ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рд▓реЗрдХрд┐рди рдПрдХ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред
SPI, RS232, USB, рдЖрджрд┐ред рдирд┐рдпрдВрддреНрд░рдХ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рднреЗрдЬрдирд╛ред
90% рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рд╕реА ++ рдпрд╛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдХреНрд╕рд░ рдХреБрдЫ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╣рд╛рдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ: рдлреНрд▓реИрд╢ рдирд┐рдпрдВрддреНрд░рдХ (рдПрдХ рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХ рдХреЗ рдЕрдиреБрд░реВрдк) рдХрд╛ рдЖрдХрд╛рд░ 16-256 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╣реИ, рд░реИрдо рдХрд╛ рдЖрдХрд╛рд░ 64-25 рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╣реИ! рдФрд░ рдРрд╕реЗ рдорд╛рд╣реМрд▓ рдореЗрдВ, рди рдХреЗрд╡рд▓ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдмрд▓реНрдХрд┐ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рднреА рд╣реИ!
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рд╣реИрдВ, рдХрднреА-рдХрднреА рд╕реА рдХреЗ рд╕рдорд╛рди рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛, рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
рддреЛ, "рд╕реБрдкрд░ рд╕рд╛рдЗрдХрд┐рд▓" рджреГрд╖реНрдЯрд┐рдХреЛрдгред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ:
int main() { while(1) { doSomething(); doSomethingElse(); doSomethingMore(); } }
рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ (рдмрд╣реБрдд ADCs, SPI, GPIO, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рдмрд╛рд╣рд░реА рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдкреВрдЫрддрд╛рдЫ рдХрд░рдирд╛ рдпрд╛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RS232 рдХрдВрд╕реЛрд▓ рд╕реЗ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рддреЛ рд╣рдо рд╕рдордп-рд╕рдордп рдкрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЪрд░рд┐рддреНрд░ рд╣реИ рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо RS232 рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗ рдЬреЛ рдПрдХ рдирдпрд╛ рдкреНрд░рддреАрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рддрд╛рдкрдорд╛рди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдПрд▓рдИрдбреА рдХреЛ рдкреНрд░рдХрд╛рд╢ рджреЗрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
int main() { init_adc(); init_gpio_as_out(); while (1) { int temperature = readTemperature(); if (temperature > TEMPERATURE_LIMIT) { turnLedOn(); } else { turnLedOff(); } }
рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред (рдореИрдВ рддрд╛рдкрдорд╛рди рдкрдврд╝рдиреЗ рдФрд░ рдПрд▓рдИрдбреА рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдирд╣реАрдВ рджреВрдВрдЧрд╛ - рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рд╣реИ)ред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рджреА рдЧрдИ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рддрд╛рдкрдорд╛рди рдХреЛ рдЬрд┐рддрдиреА рдмрд╛рд░ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдЧрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреВрд╕рд░реА рдмрд╛рд░ рдПрдХ рдПрд▓рдИрдбреА рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╛ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рд╕реЗрдВрд╕рд░ рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░реЗрдВ?
рдлрд┐рд░ рдЯрд╛рдЗрдорд░ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ (рдЬреЛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдкрд╛рд╕ рд╣реИ)ред рд╡реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рдкрд▓рдХ рдЭрдкрдХрддреЗ рдПрд▓рдИрдбреА рдлрд┐рд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧреА:
volatile int interrupt_happened = 0; interrupt void timer_int_handler() { interrupt_happened = 1; clear_interrupt_condition(); } int main() { init_timer(1_SECOND_INTERVAL, timer_int_handler); while (1) { if (interrupt_happened) { ledToggle(); interrupt_happened = 0; } } }
рдЗрдВрдЯрд░рдкреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ (рдХреЛрдб рдЬреЛ рдмрд╛рдзрд┐рдд рд╣реЛрдиреЗ рдкрд░ рддреБрд░рдВрдд рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛) рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЖрдо рд╕рдорд╛рдзрд╛рди рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдзреНрд╡рдЬ рдЪрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ (рд╣рд╛рдБ, рдХрд╣реАрдВ рднреА рдХреЛрдИ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдирд╣реАрдВ рд╣реИ, рдЕрдлрд╕реЛрд╕), рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ рдЬрд╛рдВрдЪреЗрдВ, рдФрд░ рдЬрдм рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореВрд▓ рдХрд╛рд░реНрдп рдХрд░реЗрдВред
рдЗрд╕ рд╕рдмрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдЕрд╕реНрдерд┐рд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрдиреНрдпрдерд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗрд╡рд▓ рдЙрд╕ рдХреЛрдб рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рджреЛ рдПрд▓рдИрдбреА рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдПрдХ рдкрд▓ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЭрдкрдХреА рдЖрдП, рдФрд░ рджреВрд╕рд░рд╛ - рддреАрди рдмрд╛рд░? рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рджреЛ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЯрд╛рдЗрдорд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЯрд╛рдЗрдорд░ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╣рдо рд╡рд┐рднрдХреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
volatile uint millisecond_counter = 0; interrupt void timer_int_handler() { ++millisecond_counter; clear_interrupt_condition(); } int main() { init_timer(1_MILLISECOND_INTERVAL, timer_int_handler); while (1) { uint timestart1 = millisecond_counter; uint timestart2 = millisecond_counter; if (millisecond_counter тАУ timestart1 > 1000)
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ RS232 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрдВрд╕реЛрд▓ рд▓рд╛рдЧреВ рд╣реИ (рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рд╕рдорд╛рдзрд╛рди рдПрдореНрдмреЗрдбреЗрдб рд╣реИ)ред рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬреЛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ COM рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ)ред рдФрд░ рдЙрд╕реА рд╕рдордп, рд╣рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдХ рд╕реЗрдВрд╕рд░ рд╕реЗ рдХрдбрд╝рд╛рдИ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ (рдЙрд╕реА рд╕рдордп рдЙрдЪреНрдЪ) рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдкреВрдЫрддрд╛рдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдФрд░ рдпрд╣рд╛рдВ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рднреЛрдЬ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЬреИрд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди
void sendString(char * str) { foreach (ch in str) { put_ch(ch); } }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реЗрдВрд╕рд░ рдХреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреВрдЫрддрд╛рдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рд╕рдм рдПрдХ рдмрдбрд╝реЗ рдЪрдХреНрд░ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛рдж рд╣реИ? рдФрд░ рдХрдВрд╕реЛрд▓ рдПрдХ рдзреАрдорд╛ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рд▓рд╛рдЗрди рдЖрдЙрдЯрдкреБрдЯ рд▓рдЧрд╛рддрд╛рд░ рд╕реЗрдВрд╕рд░ рдЪреБрдирд╛рд╡реЛрдВ рдХреЗ рдмреАрдЪ рдЖрд╡рд╢реНрдпрдХ рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ!
int main { while (1) { тАж if (something) { send_string("something_happened"); } тАж if (10_millisecond_timeout()) { value = readADC(); } } }
рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдпрджрд┐ рдЖрдк рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЕрдзрд┐рднрд╛рд░ рд╕рдВрд░рдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рд╡рд░реНрддрдорд╛рди рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдПрдбреАрд╕реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдФрд░ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдкрд┐рдВрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рд░рд┐рд▓реЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдУрд╡рд░рд▓реЛрдб рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рд╕реБрд░рдХреНрд╖рд╛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдХрд╛рдо рдХрд░реЗ (рдЕрдиреНрдпрдерд╛ рд╕рдм рдХреБрдЫ рдмрд╕ рдЬрд▓рдХрд░ рд░рд╛рдЦ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЪрдХреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд╕рдЦреНрддреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЪрдХреНрд░ рдХреЗ рдПрдХ рдЪрд▓рдирд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЗрд╕ рдЪрдХреНрд░ рдореЗрдВ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдмрд╕ рдЗрддрдирд╛ рд╣реА рд╣реИ, рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░рд┐рдПрдХреНрд╢рди рдЯрд╛рдЗрдо рдХреЛ рдмрд╛рдХреА рд╕рдм рдЪреАрдЬреЛрдВ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛ред
рдФрд░ рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдЗрд╕ рдЪрдХреНрд░ рдореЗрдВ рдХрд╣реАрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдЖ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА "рдЧрд┐рд░ рдЬрд╛рдПрдЧреА"ред рдЕрдзрд┐рднрд╛рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд╣рд┐рдд (рдЬреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпрд╛ рдЖрдк?)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХрд┐рд╕реА рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
int position = 0; int send_string(char * str) { if (position < strlen(str) { put_ch(str[position]; ++position; return 1; } else { return 0; } }
рдФрд░ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:
int main { while (1) { тАж if (something) { do_print = 1; position = 0; } if (do_print) { do_print = send_string("something_happened"); } тАж if (10_millisecond_timeout()) { value = readADC(); } } }
рдирддреАрдЬрддрди, рд╣рдордиреЗ рдЙрд╕ рд╕рдордп рдХреЛ рдШрдЯрд╛рдпрд╛ рдЬрдм рдПрдХ рдПрдХрд▓ рд╡рд░реНрдг рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдореЗрдВ рдПрдХ рдкреВрд░реА рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЖрджрд┐рдо рдХреА рдЬрдЧрд╣ рдФрд░ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдХреНрд▓рд┐рдпрд░ рд▓рд╛рдЗрди рдЖрдЙрдЯрдкреБрдЯ рдлрдВрдХреНрд╢рди рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЛ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХреЛ рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП (рдкреЛрдЬрд╝рд┐рд╢рди рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдФрд░ рджреВрд╕рд░рд╛ рдЦреБрдж рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдЕрдм рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдЧрд▓реЗ рдХреБрдЫ рдЪрдХреНрд░реЛрдВ рдореЗрдВред рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓, рдЧрдВрджреЗ рдХрд╛рд░реНрдп рдЬреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬреИрд╕реЗ, рдЕрджреНрднреБрдд рдЪреАрдЬреЗрдВ рдЬреЛ рдХреЛрдб рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрдкреЗрдЧреЗрдЯреА рдореЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХ рд╕рд╛рде рдПрдХ рджрд░реНрдЬрди рд╕реЗрдВрд╕рд░ рд╕реЗ рдЪреБрдирд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдорд╛рдВрдб рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЖрддреА рд╣реИ, рдбрд┐рдмрдЧ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рджрд░реНрдЬрдиреЛрдВ рд╕рдВрдХреЗрддрдХ рдпрд╛ рдореИрдирд┐рдкреБрд▓реЗрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдФрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВред рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрдХреНрд░ рдореЗрдВ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рд╛рд▓ рдмрд╛рдж рдпрд╣ рд╕рдм рдХрд░рдирд╛ рд╣реИ, рдореИрдВ рдИрд░реНрд╖реНрдпрд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
"рд╕рд╛рдорд╛рдиреНрдп рдЪрдХреНрд░" рдбрд┐рдЬрд╛рдЗрди рдХреА рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдб рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдб рд╣реИ:
interrupt void external_interrupt_handler() { interrupt_happened = 1; clear_interrupt_condition(); } int main() { while (1) { if (interrupt_happened) { doSomething(); interrupt_happened = 0; } } }
рд╕рд┐рд╕реНрдЯрдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд░реБрдХрд╛рд╡рдЯ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред рдФрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ - рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд┐рддрдиреЗ рд╡реНрдпрд╡рдзрд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреА рд╣реИ? 100 рдИрд╡реЗрдВрдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд┐рддрдирд╛ рд╡реНрдпрд╕реНрдд рд╣реЛрдЧрд╛?
рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╛рдкрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЗрд╡реЗрдВрдЯреНрд╕ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЪрд░ "рдХрд┐рддрдирд╛ рдХреЛрдИ рд╡реНрдпрд╡рдзрд╛рди рд╣реИ?" рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕рдм рдХреБрдЫ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ!
рдФрд░ рдпрд╣рд╛рдБ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдмрдЪрд╛рд╡ рдХрд╛ рдЖрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧред
рдЗрд╕рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ: рдПрдХ рд╕реЗрдВрд╕рд░ рдХрд╛ рдПрдХ рд╕рд╛рде рдорддрджрд╛рди рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХ рд▓рдВрдмреА рдбрд┐рдмрдЧ рд▓рд╛рдЗрди рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ред
void SensorPollingTask() { while (1) { value = SensorRead(); if (value > LIMIT) { doSomething(); } taskDelay(10_MILLISECOND_DELAY); } } void DebugTask() { dbg_task_queue = os_queue_create(); while (1) { char * str = os_queue_read(dbg_task_queue); foreach (ch in str) { put_ch(ch); } } } void OtherTask() { other_task_init(); тАж while(1) { тАж
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдм рдПрдХ рдореБрдЦреНрдп рдЕрдирдВрдд рд▓реВрдк рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЕрдирдВрдд рд▓реВрдк рд╣реЛрддрд╛ рд╣реИред (рд╣рд╛рдБ, os_start_sheduler () рдлрд╝рдВрдХреНрд╢рди; рдХрднреА рднреА рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛!)ред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рд╣реИрдВред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЦреБрдж рдХреЛ рд╡рд╣ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рддрд╛рдХрд┐ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде - рдХреЗрд╡рд▓ рддрдм рдЬрдм рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛред
рдФрд░ рдЕрдЧрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдордп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реБрдкрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рд░реБрдХрд╛рд╡рдЯ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреВрд░реЗ рдЪрдХреНрд░ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рд░реБрдХрд╛рд╡рдЯ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рддреБрд░рдВрдд, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдУрдПрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдордп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ (рдЬреЛ рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рддреБрд░рдВрдд рд╣реЛрддрд╛ рд╣реИ!)ред рдпрд╛рдиреА рд░реБрдХрд╛рд╡рдЯ рдПрдХ рдХрд╛рд░реНрдп рдореЗрдВ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рддреБрд░рдВрдд рд╣рдо рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдкрд░ рдЪрд▓реЗ рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ, рд░реБрдХрд╛рд╡рдЯ рд╕реЗ "рдЯреНрд░рд┐рдЧрд░" рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
interrupt void overcurrent_handler() { os_semaphore_give(overcurrent_semaphore); clear_interrupt_condition(); } void OvercurrentTask() { os_sem_create(overcurrent_semaphore); while (1) { os_semaphore_take(overcurrent_semaphore); DoOvercurrentActions(); } }
рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХреА рдорд╛рдк рдХреЗ рд▓рд┐рдП, рддреЛ OS рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд▓рд╛ рдпрд╣ рдХрд╛рд░реНрдп рддреБрдЪреНрдЫ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдУрдПрд╕ рдореЗрдВ рд╕рдмрд╕реЗ рдЧреНрд▓реВрдЯреЛрдирд╕ (рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕рдмрд╕реЗ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛) рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд╛рд░реНрдп рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЦрд╛рд▓реА рдЕрдВрддрд╣реАрди рд▓реВрдк рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдп рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЖрдЗрдбрд▓ рдореЗрдВ рдмрд┐рддрд╛рдП рд╕рдордп рдХреА рдЧрдгрдирд╛, рдЖрдорддреМрд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рдХреА рдЧрдИред рдпрд╣ рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рд╕рд╛рде рд╣реА, рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдЖрдкрдХреЛ рдХреБрдЫ рддреНрд░реБрдЯрд┐ "рдиреЛрдЯрд┐рд╕" рдирд╣реАрдВ рдЖрддреА рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рд╡рд╣ рдХрд╛рд░реНрдп рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛрдЧреА, "рдЧрд┐рд░рд╛рд╡рдЯ" (рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рднреА рдХрд╛рд░реНрдп рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рднреА рд╣реЛрдВ), рд▓реЗрдХрд┐рди рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдиреНрдпреВрдирддрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рднрд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ред
рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рдирд╛ рд╣реИ: рдпрджрд┐ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдордп рддрдХ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдирд┐рдВрджрдиреАрдп рд╣реИ, рддреЛ рдЗрд╕реЗ "рд╕реБрдкрд░ рд╕рд╛рдЗрдХрд┐рд▓" рдХрд╛ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдмрдбрд╝рд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдЬреЛ рд╕рдордп рдореЗрдВ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдлрд┐рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд▓рд╕ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╕реЗ рдмрдЪрддреЗ рд╣реБрдП, рд╕реБрдкрд░ рдорд╢реАрди рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдЕрдиреНрдп рдХрдЪрд░рд╛)ред
рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реНрдерд╛рди, рд╕реНрдореГрддрд┐, рдЕрдиреБрднрд╡ рдФрд░ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ)ред рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рд╣реЛрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд, рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
"рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓" рдХреЗ рд▓рд┐рдП рдЖрдк рдлреНрд░реА рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╛рдлреА рд╕реНрдерд┐рд░ рдФрд░ рд╕реАрдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдирд╣реАрдВред