рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдорд╛рдЗрдХрд▓ рдЬреЗред рдкреЛрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдкреБрд╕реНрддрдХ "рдкреИрдЯрд░реНрди рд╕рдордп-рдЯреНрд░рд┐рдЧрд░ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП - www.safetty.net/publications/pttes
рдореИрдВ рдпрд╣рд╛рдВ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:
- рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдПрдХрд▓ рдЖрд╡рдзрд┐рдХ рд░реБрдХрд╛рд╡рдЯ рд╣реИ - рдЯрд┐рдХ;
- рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХреЛрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ;
- рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЗрд╕ рд╕реЗрдЯ рдХреЛ рд╕рд╣рдХрд╛рд░реА рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХ (рд╕рд╣рдХрд╛рд░реА рдЕрдиреБрд╕реВрдЪрдХ) рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕рд┐рдХ RTOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рд╢реЗрдбреНрдпреВрд▓рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдЦрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реИ, рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рд▓рд╛рдЧрдд рдФрд░, рдЪрд╛рд╣реЗ рдХрд┐рддрдирд╛ рднреА рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реЛ, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ред
рдиреБрдХрд╕рд╛рди рдЕрдзрд┐рдХ рдЧрд╣рди рдбрд┐рдЬрд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рд╣реЛ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрджрд┐ рдпрд╣ рд░реБрдХрд╛рд╡рдЯ рдХреА рдЕрд╡рдзрд┐ рд╕реЗ рдХрд╛рдлреА рдХрдо рд╣реИред
рд╕реНрдпреВрдбреЛрдХреЛрдб рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред
void main(void) { scheduler_init(); add_task(Function_A, 2); add_task(Function_B, 10); add_task(Function_C, 15); scheduler_start(); while(1) { dispatch_tasks(); } }
рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╣рдо рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЯрд┐рдХреНрд╕реЗрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╢реЗрдбрд░ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдЕрдВрддрд╣реАрди рдЪрдХреНрд░ рдкрд░ рдЬрд╛рдПрдВред
рд╕рдВрд░рдЪрдирд╛ рдЬреЛ рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ:
typedef struct { void (* pTask)(void); uint32 Period; uint32 PeriodCur; uint8 RunMe; } task_descriptor_t;
рджрд░рдЕрд╕рд▓, рдЖрд░рдЯреАрдУрдПрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, "рдУрд╡рд░рд╣реЗрдб" рдмрд╣реБрдд рдХрдо рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ, рд▓реЙрдиреНрдЪ рдХреА рдЖрд╡реГрддреНрддрд┐, рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп - рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдЯрд┐рдХ, рдФрд░ рдХрд┐рддрдиреА рдмрд╛рд░ рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
task_descriptor_t all_task_list[MAX_TASKS];
рдХрд╛рд░реНрдп рд╕реВрдЪреА рдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА рд╣реИред
рд╢реЗрдбреНрдпреВрд▓рд░ рд╕реНрд╡рдпрдВ рдЯрд╛рдЗрдорд░ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЖрд╡реГрддреНрддрд┐ рдкрд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1 рдПрдордПрд╕ - рдПрдХ рд╣реА рдЯрд┐рдХред
void scheduler_update(void) interrupt { foreach (task in all_task_list) { task.PeriodCur--; if (task.PeriodCur == 0) { task.PeriodCur = task.Period; task.RunMe++; } } }
рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рд▓реЙрдиреНрдЪ рд╕реЗ рдкрд╣рд▓реЗ рд╢реЗрд╖ рдЯрд┐рдХреЛрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ 0 рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ - рдбрд┐рд╕реНрдкреИрдЪрд░ред рдЬреЛ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рдШреВрдорддрд╛ рд╣реИред
void dispatch_tasks(void) { foreach (task in all_task_list) { if (task.RunMe > 0) { task.pTask(); task.RunMe--; } } }
рд╣рдо рдЕрднреА рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдХрд╛рд░реНрдп рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕реАрдзреЗ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдШрдЯрд╛рддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ!
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╣реАрдВ рднреА рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реЗрдорд╛рдлреЛрд░реЗрд╕-рдХреНрдпреВрдЬрд╝-рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд╕реЗрдХреНрд╢рди рдЬреИрд╕реЗ рдХреЛрдИ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИред
- рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдорддрджрд╛рди рдореЛрдб рдореЗрдВ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЬреЛ рдЕрдкрдиреА рд╕реАрдорд╛рдПрдВ рд▓рдЧрд╛рддрд╛ рд╣реИред рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
- рдХрд╛рд░реНрдп рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдУред рдпрд╛рдиреА рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реВрдЪреА рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдордп рдлрд┐рд░ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИред
- рдпрджрд┐ рдХрд┐рд╕реА рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо рдПрдХ рддрдХ рди рдкрд╣реБрдВрдЪреЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╣рдХрд╛рд░реА рдореЛрдб рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЛ рдбрд┐рд╕реНрдкреИрдЪрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!
- рдХрд┐рд╕реА рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкрд░ рд╕реАрдорд╛ред рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реИрдЦрд┐рдХ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЛ рдмрд╛рдбрд╝ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдЦрд┐рд░реА рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдХрд┐рддрд╛рдм рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рдЙрджрд╛рд╣рд░рдг рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╣рд╛рдБ shedulers рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреБрд╕реНрддрдХ рдХрд╛ рджреЛ-рддрд┐рд╣рд╛рдИ рднрд╛рдЧ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдореВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдЬреЛ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рдкреБрд╕реНрддрдХ рд╕реЗ SPI рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
/*------------------------------------------------------------------*- SPI_X25_Write_Byte() Store a byte of data on the EEPROM. -*------------------------------------------------------------------*/ void SPI_X25_Write_Byte(const tWord ADDRESS, const tByte DATA) { // 0. We check the status register SPI_X25_Read_Status_Register(); // 1. Pin /CS is pulled low to select the device SPI_CS = 0; // 2. The 'Write Enable' instruction is sent (0x06) SPI_Exchange_Bytes(0x06); // 3. The /CS must now be pulled high SPI_CS = 1; // 4. Wait (briefly) SPI_Delay_T0(); // 5. Pin /CS is pulled low to select the device SPI_CS = 0; // 6. The 'Write' instruction is sent (0x02) SPI_Exchange_Bytes(0x02); // 7. The address we wish to read from is sent. // NOTE: we send a 16-bit address: // - depending on the size of the device, some bits may be ignored. SPI_Exchange_Bytes((ADDRESS >> 8) & 0x00FF); // Send MSB SPI_Exchange_Bytes(ADDRESS & 0x00FF); // Send LSB // 8. The data to be written is shifted out on MOSI SPI_Exchange_Bytes(DATA); // 9. Pull the /CS pin high to complete the operation SPI_CS = 1; }
рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реИрдЦрд┐рдХ рдХреЛрдб, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА:
- SPI_Exchange_Bytes () рдЕрдВрджрд░ рдкрд░рд┐рдзреАрдп рддрддреНрдкрд░рддрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдЕрд╡рд░реБрджреНрдз рдЪрдХреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдорддрджрд╛рди рд╣реИ, рдпрд╛рдж рд╣реИ? (рдореИрдВ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдмрд╕ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рд╣реИрдВ)ред рдФрд░ рддрдм рд╕реЗ рдкрд░рд┐рдзреАрдп рдЕрдЪрд╛рдирдХ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ; рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордпрдмрд╛рд╣реНрдп рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдЬреЛ рдЗрд╕ рдлрдВрдХреНрд╢рди рдореЗрдВ 5 ms рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ! рдирддреАрдЬрддрди, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд╕рдкреАрдЖрдИ рдмрд╛рдЗрдЯ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╛рдВрдЪ рдХреЙрд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, 5 рдПрдордПрд╕ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдЬреЛ рдХрд╛рд░реНрдп рдПрдХ рдЯрд┐рдХ рдХреЗ рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╕рдордп рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1 рдПрдордПрд╕ рд╣реИ)? рддреЛ рдХреНрдпрд╛, рдЕрдм SPI EEPROM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп, рдореБрдЭреЗ рдПрдХ рдЬрдЯрд┐рд▓ рд░рд╛рдЬреНрдп рдорд╢реАрди рд▓рд┐рдЦрдирд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯ рдПрдХ рдХреЙрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рди рд╣реЛ? рдФрд░ рдлрд┐рд░ рднреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ SPI_Exchange_Bytes () рдореЗрдВ рдПрдХ рдХреЙрд▓ 5 рдПрдордПрд╕ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рджреЗрд░реА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрд╕рдкреАрдЖрдИ_ExchangeBytes () рдХреЛ рднреА рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ 5 рдПрдордПрд╕ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рд╣реЛ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде 100 ╬╝s рдХреЗ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ? рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: "рдХреНрдпрд╛ рд╡реЗ рдЧрдВрднреАрд░ рд╣реИрдВ?"
- рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ SPI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ FLASH рддрдХ 1 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдпрджрд┐ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдкрд░ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИ, рдФрд░ рдПрдХ рдХреЙрд▓ рдореЗрдВ рдореИрдВ 1 рдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ - рдореИрдВ 1 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЛ рдХрд┐рддрдиреЗ рд╕рдордп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реВрдВрдЧрд╛? рдмреЗрд╢рдХ, рдЖрдк рдПрдХ рдмрд╛рдЗрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдФрд░ рднреА рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреБрд▓ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп, 300 ╬╝s рд╕реЗ рдЕрдзрд┐рдХ рди рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреА рдЪреБрдиреМрддреА рдЯрд┐рдХ рд╕реЗ рдХрдо рд╣реЛ, рдЕрднреА рднреА рд╡реИрдз рд╣реИ!
- рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрджрд┐ рдПрд╕рдкреАрдЖрдИ рд╕реЗ рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдХреЛ рдФрд░ рднреА рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдореИрдВ рд╕рд┐рд░реНрдл рдмрдлрд░ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рднреЗрдЬрддрд╛ рд╣реВрдВ, рдФрд░ рдмреАрдЪ рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдмрдлрд░ рд╕реЗ рдЕрдЧрд▓рд╛ рдмрд╛рдЗрдЯ рднреЗрдЬрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рдкреВрд░рд╛ рд╣реЛ рд╕рдХреЗред рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджреВрд╕рд░рд╛ рд╡реНрдпрд╡рдзрд╛рди рдЯрд╛рдЗрдо рдЯреНрд░рд┐рдЧрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдиреАрдВрд╡ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдЦреИрд░, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдПрд╕рдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджрд┐рдпрд╛, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЕрдиреБрдХреВрд▓ред рднрдпрднреАрдд, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред
рддрдерд╛рдХрдерд┐рдд рддрдерд╛рдХрдерд┐рдд рд╣рд╛рдЗрдмреНрд░рд┐рдб рд╢реЗрдбреНрдпреВрд▓рд░, рдЬрдм рдПрдХ рдФрд░ рдЕрд╡рд░реЛрдз рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдкреБрд╕реНрддрдХ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рд╕реНрдЯрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдЯрд┐рдХ рдХреЗ рд▓рд┐рдП рд░реБрдХрд╛рд╡рдЯреЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдПрдХ рдЯрд┐рдХ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╛рд╣рд░реА рд░реБрдХрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдорд╛рд╕реНрдЯрд░ рдЕрдкрдиреЗ рд░реБрдХрд╛рд╡рдЯ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдЬреАрдкреАрдЖрдИрдУ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реЗрд╖ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдмрд╛рд╣рд░реА рдЗрдирдкреБрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рднреА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╢рд╛рдпрдж рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рдХрд╣реАрдВ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдЬреЛ 99% рд╕рдордп рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд╛рд╣рд░реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕рдордп рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣рд╛рдВ рд╕реБрдкрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рд╡реНрдпрд╡рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдЕрдзрд┐рдХ рдШрдЯрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд╣рд╛рдВ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреА рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдореИрдВ рдЕрднреА рднреА рдЖрд░рдЯреАрдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдердХ рд╣реВрдВред рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рддрддрд╛ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ рдХреЗ рд╕рдХреНрд╖рдо рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рджреЗрдВ - рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд╕рдЦреНрдд рдЕрд▓рдЧрд╛рд╡ рд╕реЗ рд▓рд╛рдн рдЕрднреА рднреА рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред