ChibiOS: рд▓рд╛рдЗрдЯрд╡реЗрдЯ RTOS


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдУрдПрд╕ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рдХрд╛ рдкрд░рд┐рдЪрдп рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЪрд┐рдмреЛрд╕ред

рд▓рд╛рдЗрд╕реЗрдВрд╕


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЪрд┐рдмреЛрд╕ рдореБрдХреНрдд рдЖрд░рдЯреАрдУрдПрд╕ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдЬреАрдкреАрдПрд▓ 3.0, рдЬреАрдкреАрдПрд▓ 3.0 рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЬрдм рд▓рд┐рдВрдХрд┐рдВрдЧ рдФрд░ рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ред
рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛрдб рдХреЛ Apache-2.0 рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рднреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╕реНрддреБрдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╢реМрдХреАрдиреЛрдВ, рд╕рд╛рде рд╣реА рдЙрди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдВрд░рдЪрдирд╛


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рдЙрдк-рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рд╕рдм рдХреБрдЫ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдкрд░ рдХрдИ рдРрдб рд╣реИрдВред
ChibiOS рдЦреБрдж C рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди C ++ рдХреЗ рд▓рд┐рдП рдЖрд╡рд░рдг рднреА рд╣реЛрддреЗ рд╣реИрдВред

рдХреЛрд░


ChibiOS, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕реНрд╡рд╛рднрд┐рдорд╛рдиреА RTOS рдХреА рддрд░рд╣, рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджреЛ рдХрд╛рдордХрд╛рдЬреА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

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

ChibiOS (2.x) рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдорд░ рдХреА рдЕрд╡рдзрд┐ (рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЪрд░рдг рдореЗрдВ) рддрдп рдХреА рдЧрдИ рд╣реИред
рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг (3.0) рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрд╡рдзрд┐рдХ рд░реБрдХрд╛рд╡рдЯреЛрдВ (рдЯрд┐рдХ рд░рд╣рд┐рдд рд╢реЗрдбреНрдпреВрд▓рд░) рдХреЗ рдмрд┐рдирд╛ рдХрд░реНрдиреЗрд▓ рдХреЗ рдХрд╛рдордХрд╛рдЬ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред

рдХрд░реНрдиреЗрд▓ рдЕрдкрдиреЗ рдЖрдк рд╣реА рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬреЗрд╢рди (рдореНрдпреВрдЯреЗрдХреНрд╕, рд╕реЗрдорд╛рдлреЛрд░), рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯ (рд╣реАрдк, рдореЗрдордкреВрд▓), рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди рдЖрджрд┐рдо (mbox рдФрд░ рдЗрд╡реЗрдВрдЯреНрд╕ рд╕рд╣рд┐рдд) рдФрд░ рдХреЛрд░реНрд╕ рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдЯреВрд▓реНрд╕ рдХреЗ рдореВрд▓ рддрддреНрд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
ChibiOS рдореЗрдВ рд╕реНрдЯреЗрдЯрд┐рдХ рдФрд░ рдбрд╛рдпрдирд╛рдорд┐рдХ рджреЛрдиреЛрдВ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред

рдЙрдкрдХрд░рдг рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛


ChibiOS рдХреА рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░: ARMv5-7 (LPC1x, LPC2x, STM32), STM8, PPC, MSP430, MegaAVRред
рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ, Mips32 (qemu, pic32mx), AVR32, Coldfire рдФрд░ NiosII рдХреЛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмреЗрд╢рдХ, рдпрд╣ рд╕реВрдЪреА рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдирдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЬреЛрдбрд╝рдирд╛ рдЙрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

HAL рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕реЗрдЯ рдореЗрдВ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ: ADC, CAN, DMA, TMR, I2C, I2S, ICU, GPIO, PWM, RTC, SPC, UART, USBред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдзреБрдирд┐рдХ SoC рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХред
рдПрдЪрдПрдПрд▓ рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рдШрдЯрдХреЛрдВ (рдпреВрдПрд╕рдмреА рдПрд╕реАрдПрдо, рдПрдордПрдорд╕реА / рдПрд╕рдкреАрдЖрдИ рдФрд░ рдЕрдиреНрдп) рдХреЗ рд▓рд┐рдП рдХрдИ рдРрдб-рдСрди рд╣реИрдВ, рдЬреЛ рдореИрдВ рдЗрд╕ рдкрд░рдд рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдКрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╣реБрдЖред

рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ


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

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

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

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

рдЙрджрд╛рд╣рд░рдг


рдФрд░ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдЖрд░рдВрднреАрдХрд░рдг рдФрд░ рд╢реЗрд▓ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЬрд╛рдирдмреВрдЭрдХрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
#include "ch.h" #include "hal.h" #include "shell.h" #include "chprintf.h" static void oNotifySD1(GenericQueue *qp) { msg_t b; b = sdRequestDataI(&SD1); if (b != Q_EMPTY) sd_lld_putc(&SD1, b); } #define SHELL_WA_SIZE THD_WA_SIZE(1024) static void cmd_test(BaseSequentialStream *chp, int argc, char *argv[]) { chprintf(chp, "ChibiOS test suite\n"); TestThread(chp); } static const ShellCommand shCmds[] = { {"test", cmd_test}, {NULL, NULL} }; static const ShellConfig shCfg = { (BaseSequentialStream *)&SD1, shCmds }; int main(void) { Thread *sh = NULL; halInit(); chSysInit(); { const SerialConfig sc = { .sc_baud = SERIAL_DEFAULT_BITRATE, .sc_rxirq = EIC_IRQ_UART1_RX, .sc_port = _UART1_BASE_ADDRESS }; sdObjectInit(&SD1, NULL, oNotifySD1); sdStart(&SD1, &sc); } shellInit(); for (;;) { if (!sh) sh = shellCreate(&shCfg, SHELL_WA_SIZE, NORMALPRIO); else if (chThdTerminated(sh)) { chThdRelease(sh); sh = NULL; } chThdSleepMilliseconds(1000); } 


рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рд▓рдЧрднрдЧ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рдореБрдЦ рдФрд░ рддрд╛рдирд╛рд╢рд╛рд╣ рд╢реНрд░реА рдЬрд┐рдпреЛрд╡рд╛рдиреА рдбреА рд╕рд┐рд░рд┐рдпреЛ рд╣реИрдВред
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ: ChibiOs ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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


All Articles