рдПрдВрдмреЗрдбреЗрдб рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбрд┐рдЬрд╛рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж "рдПрдореНрдмреЗрдбреЗрдб рдХреЗ рд▓рд┐рдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг" рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдкрдврд╝рддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдХрд┐рд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВ: "рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдмрдбрд╝рд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдЬреЛ рд╕рдордп рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреА рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред" "рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рд╣реИ?" рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ред рдмреЗрд╢рдХ, рдЕрдЧрд░ рд╣рдо рдмрдбрд╝реЗ, рдЕрддреНрдпрдзрд┐рдХ рднрд░реА рд╣реБрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдмрдбрд╝реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдУрдПрд╕ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдорд╛рдореВрд▓реА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред


рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ RTOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛



рдХреЙрдорд░реЗрдб рдУрд▓реЗрдХ рдиреЗ рдЖрд░рдЯреАрдУрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЙрди рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ - рдореИрдВ RTOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛:


рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг



рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдпрд╣ рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдРрд╕рд╛ рдирд╛рдо рджреЗрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрд╣ рдЫрджреНрдо рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рджреЛ рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рд╣реИрдВред рдкрд╣рд▓реЗ рд╕реЗрдВрд╕рд░ рдХрд╛ рдорддрджрд╛рди рд╕рдордп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ: "рдорддрджрд╛рди рдХрд┐рдпрд╛, рд╣рд╛рдБ, рдареАрдХ рд╣реИ", рдЗрд╕реЗ 0.2 рдПрдордПрд╕ рд╣реЛрдиреЗ рджреЗрдВред рдирд┐рд░реНрдзрд╛рд░рд┐рдд рддрд╛рдкрдорд╛рди рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрд▓рдИрдбреА рдкреНрд░рдХрд╛рд╢ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рджреВрд╕рд░реЗ рд╕реЗрдВрд╕рд░ рдХреА рд░реАрдбрд┐рдВрдЧ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕реЗ рдЬрд┐рддрдиреА рдмрд╛рд░ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреА рдмрд╛рд░ рдкреВрдЫрддрд╛рдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХ рдЕрд╕рддрдд рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдХреВрд▓рд┐рдВрдЧ рдлреИрди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ тАЬ1тАЭ рдкреНрд░рддрд┐ рдкрд┐рди рджреЗрдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рддрд╛рдкрдорд╛рди рдПрдХ рдФрд░ рд╕реАрдорд╛ рддрдХ рдЧрд┐рд░ рдЬрд╛рдП, рддреЛ рдкрдВрдЦреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВред рд╣рд░ 100 рдПрдордПрд╕ рдореЗрдВ, рджреВрд╕рд░реЗ рд╕реЗрдВрд╕рд░ рд╕реЗ рдореВрд▓реНрдп рдХреЛ ROM рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЯрд╛рдЗрдорд░ рдЗрдВрдЯрд░рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреВрд░реНрддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреНрдп рдЕрд╡рд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рддреЗрдЬреА рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░реБрдХрд╛рд╡рдЯ рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЪрд╛рд░ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: UART / SCI) рдЖрдорддреМрд░ рдкрд░ рдЯрд╛рдЗрдорд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рд╛рдкреНрдд / рднреЗрдЬреЗ рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдЙрдиреНрд╣реЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛ред
рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЬрдм рдЯрд╛рдЗрдорд░ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ (рдпрд╛ рд╕реБрдкрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рдмрд┐рдирд╛) рдмрд╛рдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рдЪрд╛рд▓рдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдПрд╕рдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рддрд╛рдкрдорд╛рди рдорд╛рди рдХреЛ рдкрдврд╝рдирд╛ рд╣реИред

рд╕рдВрд░рдЪрдирд╛:
typedef struct { unsigned char SpiCh; //   SPI (A, B, C) unsigned int SpiBrr; //  SPI- unsigned int Value; //    void (*ChipSelect) (unsigned char level_); // Callback    тАж // -  }TSensor; 

рддрд╛рдкрдорд╛рди рдЬрд╛рдВрдЪ рдорддрджрд╛рди рдХрд╛рд░реНрдп:

 void SensorDriver(TSensor *p) { p->ChipSelect(0); //   p->Value = SpiRead(p->SpiCh, p->SpiBrr); //    SPI p->ChipSelect(1); //    } 

рд╣рдорд╛рд░рд╛ рдбреНрд░рд╛рдЗрд╡рд░ рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ #define рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рд╣реИрдВред рд╣рдо рджреЛ рд╕рдВрд░рдЪрдирд╛рдПрдБ рдмрдирд╛рддреЗ рд╣реИрдВред
 TSensor Sensor1; TSensor Sensor2; void Init(void) { Sensor1.ChipSelect = &ChipSelectFunc1; //      Sensor1.SpiCh = 0; //  SPI Sensor1.SpiBrr = 1000; //  SPI Sensor2.ChipSelect = &ChipSelectFunc2; Sensor2.SpiCh = 0; Sensor2.SpiBrr = 1000; } 


рдЪрд╛рд▓рдХ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рддрд╛рдкрдорд╛рди рдХреЛ рдкрдврд╝рдирд╛ рд╣реИред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдмрд╛рд╣рд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо рдПрд▓рдИрдбреА рдкреНрд░рдХрд╛рд╢:

 void SensorLed(void) { if (Sensor1.Value >= SENSOR_LED_LIMIT) LedPin = 1; else If (Sensor1.Value < SENSOR_LED_LIMIT) LedPin = 0; } 

рдПрдХ рдЕрд╕рддрдд рдкреИрд░ рдХреЗ рд╕рд╛рде рдкрдВрдЦреЗ рдХреЛ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░реЗрдВ:

 void SensorCooler(void) { if (Sensor2.Value >= SENSOR_LED_LIMIT) CoolerPin = 1; else if (Sensor1.Value < SENSOR_LED_LIMIT) CoolerPin = 0; } 

рдЕрдЬреАрдм рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реЛ рдЧрдП :)
рд╣рдо рд░реЙрдо рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦреЗрдВрдЧреЗ:
ROM рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ 1 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЪрдХреНрд░реАрдп рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ, рдирд┐рд░реНрджреЗрд╢ "рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ" рдФрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрд┐рд╕ рдкрддреЗ рдкрд░ред рдпрд╛рдиреА рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдХреА рддрддреНрдкрд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

 void SensorValueRecord() { unsigned int Data = Sensor2.Value; //     unsigned int Address = 0; //    if (EepromReady()) //    { //  ,   ,     EepromFunction(Address, Data, WRITE); } } 

рд╣рдордиреЗ рдбреЗрдЯрд╛ рднреЗрдЬрд╛ рдФрд░ рдЬрдм рдореЗрдореЛрд░реА рдбреНрд░рд╛рдЗрд╡рд░ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдФрд░ рдпрд╣ SensorValueRecord рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 100 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ), рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рддреИрдпрд╛рд░ рд╣реИрдВред рдЕрдм рдЙрдиреНрд╣реЗрдВ рдареАрдХ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо 10 kHz (100 ╬╝s) рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдорд░ рдХрд╛ рдПрдХ рд░реБрдХрд╛рд╡рдЯ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХреЙрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╣рдорд╛рд░реА рдЕрдзрд┐рдХрддрдо рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдЖрд╡реГрддреНрддрд┐ рд╣реЛрдЧреАред рд╡рд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛред рд╣рдо рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХрд┐рд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрдм рдЪрд▓рд╛рдирд╛ рд╣реИред

 #define MAIN_HZ 10000 #define TASK0_FREQ 1000 #define TASK1_FREQ 50 #define TASK2_FREQ 10 //    void AlternativeTaskManager(void) { SensorDriver(&Sensor2); //      SensorCooler(); //     Task0_Execute(); //     } //  1 void Task0_Execute(void) { switch (TaskIndex0) { case 0: EepromDriver(&Eeprom); break; case 1: Task1_Execute(); break; case 2: Task2_Execute(); break; } //   if (++TaskIndex0 >= MAIN_HZ / TASK0_FREQ) TaskIndex0 = 0; } //    50  void Task1_Execute(void) { switch (TaskIndex1) { case 0: SensorDriver(&Sensor1); break; case 1: SensorLed(); break; } if (++TaskIndex1 >= TASK0_FREQ / TASK1_FREQ) TaskIndex1 = 0; } //    10  void Task2_Execute(void) { switch (TaskIndex2) { case 0: SensorValueRecord(); break; case 1: break; } if (++TaskIndex2 >= TASK0_FREQ / TASK2_FREQ) TaskIndex2 = 0; } 


рдЕрдм рдпрд╣ рдЯрд╛рдЗрдорд░ рд░реБрдХрд╛рд╡рдЯ рдореЗрдВ рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЖрдк рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

 interrupt void Timer1_Handler(void) { AlternativeTaskManager(); } 

рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдЧрд┐рдпрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░ рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ: рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд┐рдпрд░ рд╕реАрдзреЗ рдореЛрдЯрд░ рд╢рд╛рдлреНрдЯ рдкрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╢реЗрд╖ рдЧрд┐рдпрд░ рдХреЛ рдШреБрдорд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп "рд░рд┐рдВрдЧ рдкрд░" рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЙрд▓ рдХреА рдЬрдЧрд╣ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред Task0_Execute рдлрд╝рдВрдХреНрд╢рди рдХреЛ 10 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдЯрд╛рдЗрдорд░ рдЗрдВрдЯрд░рдкреНрдЯ (рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рдЧрд┐рдпрд░) рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВред рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА рдбрд┐рд╡реАрдЬрди рдЗрд╕рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЯрд╛рд╕реНрдХрдЗрдВрдбреИрдХреНрд╕ 0 рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХрд╛рд░реНрдп рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдЪреБрдиреМрддреА рдХреА рдЖрд╡реГрддреНрддрд┐ 10kHz рд╕реЗ рдХрдо рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рд╣рдо рдЯрд╛рд╕реНрдХ 0_Execute рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП 1 kHz рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдЖрд╡реГрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ 1 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде 10 рдХрд╛рд░реНрдп рдЗрд╕рдореЗрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 #define MAIN_HZ 10000 #define TASK0_FREQ 1000 if (++TaskIndex0 >= MAIN_HZ / TASK0_FREQ) 


рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рд╕рдВрд░рдЪрдирд╛


рдЗрд╕реА рддрд░рд╣ Task1_Execute рдФрд░ Task2_Execute рдХреЗ рд▓рд┐рдПред рд╣рдо рдЙрдиреНрд╣реЗрдВ 1 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╣рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЪрдХреНрд░ рдореЗрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ 50 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ - 10 рд╣рд░реНрдЯреНрдЬред рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдХреНрд░рдорд╢рдГ 20 рдФрд░ 100 рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗред
рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреГрд╖реНрдарднреВрдорд┐ (рдкреГрд╖реНрдарднреВрдорд┐ рд╕реБрдкрд░ рд╕рд╛рдЗрдХрд┐рд▓) рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИред
рдХреЛрдИ рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛ рд╕рдордп рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд░рдЦрдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред

 void main(void) { Init(); while (1) { DoSomething(); } } 

рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рдбреАрдПрд╕реА рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдПрд▓рдИрдбреА рдХреЗ рдкреНрд░рдЬреНрд╡рд▓рди рдХреЗ рд╕рд╛рде, рдХреНрдпрд╛ рдЖрдкрдХреЛ 4-20 рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВред DAC рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЪрд▓рд╛рдПрдВред рд╣рдо SensorLed рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдмрддрд╛рдПрдЧреА рдХрд┐ рдЗрд╕рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реИ рдФрд░ рдбрд┐рд╕реНрдкреИрдЪрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

 void SensorLed(void) { if (Sensor1.Value >= SENSOR_LED_LIMIT) { LedPin = 1; Dac.Value = 20; //     } else If (Sensor1.Value < SENSOR_LED_LIMIT) { LedPin = 0; Dac.Value = 4; //     } } 

 //    50  void Task1_Execute(void) { switch (TaskIndex1) { case 0: SensorDriver(&Sensor1); break; case 1: SensorLed(); break; case 2: DacDriver(&Dac) break; //    } if (++TaskIndex1 >= TASK0_FREQ / TASK1_FREQ) TaskIndex1 = 0; } 


рджреЛ-рдкрдВрдХреНрддрд┐ рд╕рдВрдХреЗрддрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛? рд╕рдорд╕реНрдпрд╛ рднреА рдирд╣реАрдВред рд╣рдо рдЗрд╕рдХреЗ рдЪрд╛рд▓рдХ рдХреЛ 1 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдзреАрдореА рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╣рдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди рд╡рд░реНрдгреЛрдВ рдФрд░ рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЛрдб рд░реЗрдЯрд┐рдВрдЧ



рд▓реЛрдб рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЯрд╛рдЗрдорд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рдЯрд╛рдЗрдорд░ рдХреЗ рд╕рдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдорд░ рдХреА рдЕрд╡рдзрд┐ рдХрд░реАрдм рдирд╣реАрдВ рд╣реИред
рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЯрд╛рдЗрдорд░ рдХрд╛рдЙрдВрдЯрд░ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХрд╛рдо рдХреЗ рдмрд╛рдж, рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЛрдб рд░реЗрдЯрд┐рдВрдЧ рдЯрд╛рдЗрдорд░ рдХреА рдЕрд╡рдзрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЯрд╛рдЗрдорд░ рдХреА рдЕрд╡рдзрд┐ 100 рд╣реИред рдЕрд░реНрдерд╛рдд, рдХрд╛рдЙрдВрдЯрд░ 100 рддрдХ рдЧрд┐рдирд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рд╡реНрдпрд╡рдзрд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдпрджрд┐ рджреВрд╕рд░реЗ рдЯрд╛рдЗрдорд░ (CpuTime) рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ 100 рд╕реЗ рдХрдо рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрджрд┐ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдЦрд░рд╛рдм рд╣реИ: рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рддреИрд░ рдЬрд╛рдПрдЧрд╛ред
 unsigned int CpuTime = 0; unsigned int CpuTimeMax = 0; interrupt void Timer1_Handler(void) { Timer2.TimerValue = 0; //   AlternativeTaskManager(); //  switch-case   CpuTime = Timer2.Value; //    =  if (CpuTime > CpuTimeMax ) //    CpuTime = CpuTimeMax; } 


рдирддреАрдЬрд╛ рдХреНрдпрд╛ рд╣реБрдЖ



рдЖрд░рдЯреАрдУрдПрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдлрд╛рдпрджреЗ рд╣реБрдП рд╣реИрдВ:
- рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЗ рджрдпрдиреАрдп рд╣реЛрдиреЗ рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧред
- рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдВрдЧрдарди, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ: рдХрд╣рд╛рдВ рдЪрд▓рдирд╛ рд╣реИред рдХреЛрдИ рд╕реЗрдорд╛рдлреЛрд░, рдореНрдпреВрдЯреЗрдХреНрд╕ рдЖрджрд┐ рдирд╣реАрдВ рд╣реИрдВред RTOS рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреА-рдкреЗрдЬ рдореИрдиреБрдЕрд▓ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдлрд╛рдпрджрд╛ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреНрдпрд╕реНрдд рд╣реВрдВред
- рдХреЛрдб рдХреЛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдирд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдиреБрдХрд╕рд╛рди:
- рдХреЙрдореНрдкреНрд▓реАрдХреЗрд╢рди рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ред рдпрджрд┐ рдЖрд░рдЯреАрдУрдПрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ, рддреЛ рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдпрд╛ рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧреАред рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯ "рдЧрд┐рдпрд░ рдХреЗ рдЖрдВрджреЛрд▓рди" рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддрдирд╛ рд╣реА рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдПрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ (рд╕реНрдЯреЗрдЯ рдорд╢реАрди) рдЪрд░рдгреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдХреЗрддрдХ рдЪрд╛рд▓рдХ рддреБрд░рдВрдд рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рдЗрди рд╕реЗ рд▓рд╛рдЗрди:
1) рд╕реНрдЯреНрд░реЛрдм рд╕реЗрдЯ рдХрд░реЗрдВ, рд╢реАрд░реНрд╖ рдкрдВрдХреНрддрд┐ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛, рдмрд╛рдПрдВ;
2) рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛, рд╕реНрдЯреНрд░реЛрдм рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдЕрдХреНрд╖рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВ, рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗред
рдпрджрд┐ рдХреБрдЫ рд╡рд┐рдХрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рдореИрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХрдИ рд╡рд┐рдХрд╛рд╕, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЖрд░рдЯреАрдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдорд┐рд▓рд╛ред

Updред рдореИрдВ RTOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рдХрд┐ RTOS рдЦрд░рд╛рдм рд╣реИ рдФрд░ рд╕рднреА рдХреЛ рдЗрд╕реЗ рддреБрд░рдВрдд рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрддрд╛рдпрд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рдкрд░ рдирд╣реАрдВ рдереЛрдкрддрд╛ред рдпрд╣ рд▓реЗрдЦ рдПрдВрдмреЗрдбреЗрдб рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реБрдЖ, рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ рдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ, рдФрд░ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

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


All Articles