рдПрдВрдмреЗрдбреЗрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░: рдЕрдореЗрдЬрд╝реЕрди рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛

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



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

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

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

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

рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдгрд╛рд▓реА, Amazon FreeRTOS, "AWS IoT Core рдпрд╛ AWS IoT Greengrass рдЬреИрд╕реЗ Amazon Web Services рдХреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рддреИрдирд╛рдд рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдореЗрдЬрд╝рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

рдЪреЗрдХ рдХрд╛ рдХреЛрд░реНрд╕


рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ - рдЪреЗрдХ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ C, C ++, C #, рдФрд░ Java рдореЗрдВ рд▓рд┐рдЦреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

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

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

рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдХрдерд╛ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рд╣реИред

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

FreeRTOS рдХреНрдпрд╛ рдЫреБрдкрд╛рддрд╛ рд╣реИ


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореБрдЭреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереА: рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдПред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд╣рд╛рде рд░рдЧрдбрд╝ рд░рд╣рд╛ рдерд╛? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ FreeRTOS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рджреЛ рд░рд╕рджрд╛рд░ рдХреАрдбрд╝реЗ (рдЬреИрд╕реЗ рд╕реАрдбрдмреНрд▓реНрдпреВрдИ -457 ) рдХреА рдЦреЛрдЬ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рд╡рд┐рд░рд▓ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рдФрд░ ... рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХреА рдЧрдИ рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ FreeRTOS рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдереАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ 64-рдмрд┐рдЯ рдЦрд╛рдорд┐рдпрд╛рдВ рдереАрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕рд╛рдЗрдЬрд╝рд┐рдВрдЧ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ_ рдХреЛ uint32_t ред рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐ рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХрд╛ рдорддрд▓рдм рдРрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде 32 рдмрд┐рдЯреНрд╕ рд╕реЗ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рд╕рднреА V1027 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рд╣реИ рдЬреЛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИрдВ рдХрд┐ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реВрдЪрдХ рд╣реИрдВред рдпрджрд┐ рдврд▓реА рд╣реБрдИ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдВрд░реЗрдЦрдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдРрд╕реА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдПрдХ рдЧрд▓рддреА рд╣реИред рдФрд░ рдореБрдЭреЗ рдПрдХ рднреА рдЦрддрд░рдирд╛рдХ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ!

рдЕрдиреНрдп рд╕рднреА рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рди рдпрд╛ рддреЛ рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рд╕реЗ рдЬреБрдбрд╝реЗ рдереЗ рдпрд╛ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдХрд░реНрдордЪрд╛рд░реА рдереЗ рдЬреЛ рдпрд╣ рд╕рдордЭрд╛рддреЗ рдереЗ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдереАред

рдЗрд╕рд▓рд┐рдП рдореИрдВ FreeRTOS рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдЕрдкреАрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рджреЛрд╕реНрддреЛрдВ, рддреБрдо рдХрдорд╛рд▓ рд╣реЛ! рд╣рдордиреЗ рдЖрдкрдХреЗ рдЬреИрд╕реА рд╕реНрд╡рдЪреНрдЫ рдФрд░ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╢рд╛рдпрдж рд╣реА рджреЗрдЦрд╛ рд╣реЛред рдФрд░ рдпрд╣ рд╕рд╛рдл, рд╕реНрд╡рдЪреНрдЫ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд╢реА рдереАред рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд▓рд╛рдоред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрд╕ рджрд┐рди рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рдмрдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХреВрдВрдЧрд╛ред рдореИрдВ рдЗрд╕ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдШрд░ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЕрдореЗрдЬрд╝реЕрди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ 100% рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рдФрд░ рдХрд▓ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреАрдбрд╝реЗ рдЙрдард╛рдКрдВрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдореИрдВ рд╕рд╣реА рдерд╛ред

Amazon FreeRTOS рдХреНрдпрд╛ рдЫреБрдкрд╛рддрд╛ рд╣реИ


рдЕрдореЗрдЬрд╝реЕрди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдХрд▓рд╛ ... рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ, рдереЛрдбрд╝рд╛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХреА рд╡рд┐рд░рд╛рд╕рдд рд╕рд╛рдл рд░рд╣реА, рдЬрдмрдХрд┐ рдирдП рд╕реБрдзрд╛рд░реЛрдВ рдиреЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдореБрджреНрджреЛрдВ рдХреЛ рдЫреБрдкрд╛ рджрд┐рдпрд╛ред

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

рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдкрд░рд┐рдЪрдп рдХреЗ рд╕рд╛рде рдХрд╕ рджрд┐рдпрд╛ рд╣реИред рдЪрд▓реЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХреЛ рддреЛрдбрд╝рдирд╛


рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рдереАред рд╕рдВрджрд┐рдЧреНрдз рд╕рд░рдгреА рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЖрдПрдЧрд╛:

/** * @brief Pool of request and associated response buffers, * handles, and configurations. */ static _requestPool_t _requestPool = { 0 }; .... static int _scheduleAsyncRequest(int reqIndex, uint32_t currentRange) { .... /* Set the user private data to use in the asynchronous callback context. */ _requestPool.pRequestDatas[reqIndex].pConnHandle = &_connHandle; _requestPool.pRequestDatas[reqIndex].pConnConfig = &_connConfig; _requestPool.pRequestDatas[reqIndex].reqNum = reqIndex; _requestPool.pRequestDatas[reqIndex].currRange = currentRange; _requestPool.pRequestDatas[reqIndex].currDownloaded = 0; _requestPool.pRequestDatas[reqIndex].numReqBytes = numReqBytes; .... _requestPool.pRequestDatas->scheduled = true; .... } 

PVS-Studio рдиреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рджреЛ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА:

  • V619 рд╕рд░рдгреА '_requestPool.pRequestDatas' рдХреЛ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред iot_demo_https_s3_download_async.c 973
  • V574 '_requestPool.pRequestDatas' рдкреЙрдЗрдВрдЯрд░ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 931, 973ред iot_demo_https_s3_download_async.c 973

рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ: рд╕рд░рдгреА рдХрд╛ рдирд╛рдо рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ _requestPool.pRequestDatas рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИ, _requestPool.pRequestDatas [i] .scheduled i рд╕рд░рдгреА рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд╕реВрдЪрд┐рдд рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдХрд▓рди рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо _requestPool.pRequestDatas-> рд╢реЗрдбреНрдпреВрд▓ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрд░реНрдерд╛рддреН рдкрд╣рд▓реА рд╕рд░рдгреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдлрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЕрдВрд╢ рдореЗрдВ, рдпрд╣реА рд╣реЛрддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ, рдкрд╣рд▓реА рд╕рд░рдгреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреЗрд╡рд▓ рд╕рджрд╕реНрдп рдХрд╛ рдорд╛рди рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдРрд╕реА рдкрд╣реБрдВрдЪ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдорд╛рдорд▓рд╛ рдФрд░ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ: _requestPool.pRequestDatas рд╕рд░рдгреА рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреВрд░реЗ рд╢рд░реАрд░ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЛ рднреБрд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛, рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:

 _requestPool.pRequestDatas[reqIndex].scheduled = true; 

рдЕрдЧрд▓реА рддреНрд░реБрдЯрд┐ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрдВрдЧрд╛:

 /* Return true if the string " pcString" is found * inside the token pxTok in JSON file pcJson. */ static BaseType_t prvGGDJsoneq( const char * pcJson, const jsmntok_t * const pxTok, const char * pcString ) { uint32_t ulStringSize = ( uint32_t ) pxTok->end - ( uint32_t ) pxTok->start; BaseType_t xStatus = pdFALSE; if( pxTok->type == JSMN_STRING ) { if( ( uint32_t ) strlen( pcString ) == ulStringSize ) { if( ( int16_t ) strncmp( &pcJson[ pxTok->start ], // <= pcString, ulStringSize ) == 0 ) { xStatus = pdTRUE; } } } return xStatus; } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V642 [CWE-197] 'strncmp' рдлрдВрдХреНрд╢рди рд░рд┐рдЬрд▓реНрдЯ рдХреЛ 'рд╢реЙрд░реНрдЯ' рдЯрд╛рдЗрдк рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реЗрд╡ рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рддрд░реНрдХ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред aws_greengrass_discovery.c 637

рдЖрдЗрдП strncmp рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 int strncmp( const char *lhs, const char *rhs, size_t count ); 

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, int рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо, рдЬреЛ рдЖрдХрд╛рд░ рдореЗрдВ 32 рдмрд┐рдЯреНрд╕ рд╣реИ, рдХреЛ int16_t рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ "рд╕рдВрдХреАрд░реНрдг" рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде, рд▓реМрдЯреЗ рдореВрд▓реНрдп рдХреЗ рдкреБрд░рд╛рдиреЗ рдмрд┐рдЯ рдЦреЛ рдЬрд╛рдПрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ strncmp рдлрд╝рдВрдХреНрд╢рди 0x00010000 рджреЗрддрд╛ рд╣реИ, рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рдЗрдХрд╛рдИ рдЦреЛ рдЬрд╛рдПрдЧреА, рдФрд░ рд╕реНрдерд┐рддрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧреАред

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

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╕рдВрдХреЗрдд


рдпрд╣рд╛рдБ рдПрдХ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг рдЖрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ:

 static void _networkReceiveCallback(....) { IotHttpsReturnCode_t status = IOT_HTTPS_OK; _httpsResponse_t* pCurrentHttpsResponse = NULL; IotLink_t* pQItem = NULL; .... /* Get the response from the response queue. */ IotMutex_Lock(&(pHttpsConnection->connectionMutex)); pQItem = IotDeQueue_PeekHead(&(pHttpsConnection->respQ)); IotMutex_Unlock(&(pHttpsConnection->connectionMutex)); /* If the receive callback is invoked * and there is no response expected, * then this a violation of the HTTP/1.1 protocol. */ if (pQItem == NULL) { IotLogError(....); fatalDisconnect = true; status = IOT_HTTPS_NETWORK_ERROR; goto iotCleanup; } .... iotCleanup : /* Report errors back to the application. */ if (status != IOT_HTTPS_OK) { if ( pCurrentHttpsResponse->isAsync && pCurrentHttpsResponse->pCallbacks->errorCallback) { pCurrentHttpsResponse->pCallbacks->errorCallback(....); } pCurrentHttpsResponse->syncStatus = status; } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 [CWE-690] рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'pCurrentHttpsResponse' рдХреА рдбреАрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред iot_https_client.c 1184

рдЖрдЦрд┐рд░реА рдЕрдЧрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдбреАрд░реЗрдлреЗрд░реЗрдВрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рди pCurrentHttpsResponse рдФрд░ pQItem рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ NULL рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдЪрд░ IOT_HTTPS_OK рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рд╕рд╣реА рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ pQItem рдХреЛ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, IotDeQueue_PeekHead рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдбрдмрд▓-рд▓рд┐рдВрдХреНрдб рдХрддрд╛рд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, IotDeQueue_PeekHead рдлрд╝рдВрдХреНрд╢рди NULL рд▓реМрдЯреЗрдЧрд╛ :

 static inline IotLink_t* IotDeQueue_PeekHead (const IotDeQueue_t* const pQueue) { return IotListDouble_PeekHead(pQueue); } .... static inline IotLink_t* IotListDouble_PeekHead (const IotListDouble_t* const pList) /* @[declare_linear_containers_list_double_peekhead] */ { IotLink_t* pHead = NULL; if (pList != NULL) { if (IotListDouble_IsEmpty(pList) == false) { pHead = pList->pNext; } } return pHead; } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рд╛рд▓рдд pQItem == NULL рд╕рдЪ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рдЪрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЧреЛрдЯреЛ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕рдордп рддрдХ, pCurrentHttpsResponse рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд░рд╣реЗрдЧрд╛, рдЬрдмрдХрд┐ рд╕реНрдерд┐рддрд┐ IOT_HTTPS_OK тАЛтАЛрдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЙрд╕реА рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдБрдЪреЗрдВрдЧреЗ рдпрджрд┐ рд╢рд╛рдЦрд╛, рдФрд░ ... рдмреВрдо! рдареАрдХ рд╣реИ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ dereference рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рдЙрджрд╛рд╣рд░рдг рдерд╛ред рдЕрдм рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 int PKI_mbedTLSSignatureToPkcs11Signature (uint8_t * pxSignaturePKCS, uint8_t * pxMbedSignature ) { int xReturn = 0; uint8_t * pxNextLength; /* The 4th byte contains the length of the R component */ uint8_t ucSigComponentLength = pxMbedSignature[ 3 ]; // <= if( ( pxSignaturePKCS == NULL ) || ( pxMbedSignature == NULL ) ) { xReturn = FAILURE; } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] 'pxMbedSignature' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 52, 54. iot_pki_utils.c 52

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ uint8_t рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЛ NULL рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ - рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рддреБрд░рдВрдд рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ: рд╕рдордп pxMbedSignature рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдКрдкрд░ рдХрд╛ рд╣реЛрдЧрд╛ред рдЯрд╛-DAA!

рд╕рдЯреНрдЯрд╛ рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:

 CK_RV vAppendSHA256AlgorithmIdentifierSequence ( uint8_t * x32ByteHashedMessage, uint8_t * x51ByteHashOidBuffer ) { CK_RV xResult = CKR_OK; uint8_t xOidSequence[] = pkcs11STUFF_APPENDED_TO_RSA_SIG; if( ( x32ByteHashedMessage == NULL ) || ( x51ByteHashOidBuffer == NULL ) ) { xResult = CKR_ARGUMENTS_BAD; } memcpy( x51ByteHashOidBuffer, xOidSequence, sizeof( xOidSequence ) ); memcpy( &x51ByteHashOidBuffer[ sizeof( xOidSequence ) ], x32ByteHashedMessage, 32 ); return xResult; } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V1004 [CWE-628] 'x51ByteHashOidBuffer' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╢рдХреНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 275, 280. iot_pkcs11.c 280
  • V1004 [CWE-628] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'x32ByteHashedMessage' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 275, 281. iot_pkcs11.c 281

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

рдкрд░рд┐рдгрд╛рдо: NULL рдХреЛ рдореЗрдорд╕реАрдкреА рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЖ рд╕рдХрддрд╛ рд╣реИ? рдореВрд▓реНрдпреЛрдВ рдХреА рдирдХрд▓ рдХрд╣рд╛рдВ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдХреМрди рд╕реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдЕрдиреБрднрд╛рдЧ 1 рджреЗрдЦреЗрдВ)ред

рдЪрд┐рддреНрд░ 3


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

рд╕рддреНрдп! = рез


рдкреИрдЯрд░реНрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдХреНрд╕рд░ рдЕрдирджреЗрдЦреА рдХреА рдЬрд╛рддреА рд╣реИрдВред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмреВрд▓ рдкреНрд░рдХрд╛рд░ (C ++ рд╕реЗ) BOOL рдкреНрд░рдХрд╛рд░ (рдЖрдорддреМрд░ рдкрд░ C рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд) рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдкрд╣рд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ ( int , long , рдФрд░ рдЕрдиреНрдп) рдХрд╛ рдЯрд╛рдЗрдк рд╣реИред 0 рдорд╛рди рдЗрд╕рдХреЗ рд▓рд┐рдП "рдЭреВрдард╛" рд╣реИ, рдФрд░ рд╢реВрдиреНрдп рд╕реЗ рднрд┐рдиреНрди рдХреЛрдИ рдЕрдиреНрдп рдорд╛рди "рд╕рддреНрдп" рд╣реИред

рдЪреВрдВрдХрд┐ рд╕реА рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреВрд▓рд┐рдпрди рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 #define FALSE 0 #define TRUE 1 

рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

 int mbedtls_hardware_poll(void* data, unsigned char* output, size_t len, size_t* olen) { int lStatus = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; HCRYPTPROV hProv = 0; /* Unferenced parameter. */ (void)data; /* * This is port-specific for the Windows simulator, * so just use Crypto API. */ if (TRUE == CryptAcquireContextA( &hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { if (TRUE == CryptGenRandom(hProv, len, output)) { lStatus = 0; *olen = len; } CryptReleaseContext(hProv, 0); } return lStatus; } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V676 [CWE-253] TRUE рдХреЗ рд╕рд╛рде BOOL рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИред aws_entropy_hardware_poll.c 48
  • V676 [CWE-253] TRUE рдХреЗ рд╕рд╛рде BOOL рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИред рд╕рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ: 'FALSE! = CryptGenRandom (hProv, len, output)'ред aws_entropy_hardware_poll.c 51

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА? рд╕рдВрджреЗрд╣ рди рдХрд░реЗрдВ, рдпрд╣ рдпрд╣рд╛рдБ рд╣реИ :) CryptAcquireContextA рдФрд░ CryptGenRandom рдлрд╝рдВрдХреНрд╢рди wincrypt.h рд╣реЗрдбрд░ рд╕реЗ рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рд╡реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ ред рддреЛ, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╢реВрдиреНрдп рд╕реЗ рдЕрд▓рдЧ рдХреЛрдИ рднреА рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: 1 , 314 , 42 , 420 ред

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

рдХрд┐рддрдиреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ TRUE == CryptGenRandom (....) рдХреА рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрдЧреА? рдХрд╣рдирд╛ рдХрдард┐рди рд╣реИред рд╢рд╛рдпрдж, CryptGenRandom рдЕрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 1 рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ 1 рд╣реА рд▓реМрдЯреЗред рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ: рдЗрд╕ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╢реНрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЖрдБрдЦреЛрдВ рд╕реЗ рдЫрд┐рдкрд╛ рд╣реИ :)

рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдРрд╕реА рддреБрд▓рдирд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:

 if (TRUE == GetBOOL()) 

рдХреЛрдб рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 if (FALSE != GetBOOL()) 

рдЕрдиреБрдХреВрд▓рди рд╕рдорд╕реНрдпрд╛рдУрдВ


рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 int _IotHttpsDemo_GetS3ObjectFileSize(....) { .... pFileSizeStr = strstr(contentRangeValStr, "/"); .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V817 рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп '/' рд╡рд░реНрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред iot_demo_https_common.c 205

рдпрд╣ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рд╣реИ, рд╣реИ рдирд╛? рд╕реНрдЯреНрд░реИрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдг рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдпрд╣ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдореЗрдВ рд╣реИ)ред

рдпрд╣ рд╕реНрдерд╛рди рд╕реНрдЯреНрд░реИрдЪ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реИрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 int _IotHttpsDemo_GetS3ObjectFileSize(....) { .... pFileSizeStr = strchr(contentRangeValStr, '/'); .... } 

рдЗрд╕ рддрд░рд╣, рдЦреЛрдЬ рдереЛрдбрд╝реА рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред рдПрдХ рдЫреЛрдЯреА рд╕реА, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред

рдареАрдХ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдПрдХ рдФрд░ рд╕реНрдерд╛рди рднреА рдкрд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 void vRunOTAUpdateDemo(void) { .... for (; ; ) { .... xConnectInfo.cleanSession = true; xConnectInfo.clientIdentifierLength = (uint16_t)strlen(clientcredentialIOT_THING_NAME); xConnectInfo.pClientIdentifier = clientcredentialIOT_THING_NAME; .... } } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V814 рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдореАред рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░ 'рд╕реНрдЯреНрд░реИрд▓реЗрди' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред aws_iot_ota_update_demo.c 235

рд╣рдореНрдо ... рд▓реВрдк рдХреЗ рдЕрдВрджрд░, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реНрдЯреНрд░рд▓реЗрди рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ :)

рдЪрд▓реЛ clientcredentialIOT_THING_NAME рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦреЗрдВ :
 /* * @brief Host name. * * @todo Set this to the unique name of your IoT Thing. */ #define clientcredentialIOT_THING_NAME "" 

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

рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмреЙрдбреА рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рд╕реНрдЯреНрд░реЗрд▓реЗрди рд▓реЗрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдУрд╣, рд╕реА ++ рд╕реЗ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдХреНрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣рд╛рдВ рд╕реВрдЯ рдХрд░реЗрдЧрд╛ ...

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

MISRA рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж


PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд╛рд╕ MISRA C рдФрд░ MISRA C рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдореВрд╣ рд╣реИред рдпреЗ рдорд╛рдирдХ рдХреНрдпрд╛ рд╣реИрдВ?

MISRA рдЕрддреНрдпрдзрд┐рдХ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рдирд┐рдпрдореЛрдВ рдФрд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпреЗ рдирд┐рдпрдо рдХрд╛рдлреА рд╣реИрдВ, рдФрд░ рд╡реЗ рди рдХреЗрд╡рд▓ рдЧрдВрднреАрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╡рд┐рднрд┐рдиреНрди "рдХреЛрдб рдЧрдВрдз" рдкрд░ рднреА рд╣реИрдВред рдпрд╣ рднреА рд╕рдмрд╕реЗ рд╕рдордЭрджрд╛рд░ рдФрд░ рдкрдардиреАрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд MISRA рдорд╛рдирдХ рди рдХреЗрд╡рд▓ рдЧрд▓рддрд┐рдпреЛрдВ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдХреЛрдб рдореЗрдВ рдЙрдирдХреЗ рджрд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред

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

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

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

рдореИрдХреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

 #define FreeRTOS_ms_to_tick(ms) ( ( ms * configTICK_RATE_HZ + 500 ) / 1000 ) 

 #define SOCKETS_htonl( ulIn ) ( ( uint32_t ) \ ( ( ( ulIn & 0xFF ) << 24 ) | ( ( ulIn & 0xFF00 ) << 8 ) \ | ( ( ulIn & 0xFF0000 ) >> 8 ) | ( ( ulIn & 0xFF000000 ) >> 24 ) ) ) 

 #define LEFT_ROTATE( x, c ) ( ( x << c ) | ( x >> ( 32 - c ) ) ) 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V2546 [MISRA C 20.7] рдореИрдХреНрд░реЛ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 'FreeRTOS_ms_to_tick' рдореИрдХреНрд░реЛ рдХреЗ 'ms' рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред FreeRTOS_IP.h 201
  • V2546 [MISRA C 20.7] рдореИрдХреНрд░реЛ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 'SOCKETS_htonl' рдореИрдХреНрд░реЛ рдХреЗ 'ulIn' рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред iot_secure_sockets.h 512
  • V2546 [MISRA C 20.7] рдореИрдХреНрд░реЛ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 'LEFT_ROTATE' рдореИрдХреНрд░реЛ рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкреИрд░рд╛рдореАрдЯрд░ 'x', 'c' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред iot_device_metrics.c 90

рд╣рд╛рдВ, рдпрд╣реА рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред рдЗрди рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмреНрд░реИрдХреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдЧрд▓рддреА рд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦ тАЛтАЛрджреЗрддрд╛ рд╣реИ

 val = LEFT_ROTATE(A[i] | 1, B); 

рдореИрдХреНрд░реЛ рдХрд╛ рдРрд╕рд╛ "рдХреЙрд▓" рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛:

 val = ( ( A[i] | 1 << B ) | ( A[i] | 1 >> ( 32 - B ) ) ); 

рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдпрд╛рдж рд░рдЦреЗрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рд╢рд┐рдлреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА - рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ "рдпрд╛"ред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рддрд░реНрдХ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ " x + y " рдореИрдХреНрд░реЛ FreeRTOS_ms_to_tick рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдП ? MISRA рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рд╣реИред

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

рдореБрдЭреЗ Amazon FreeRTOS рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рджреЗрдВ: PVS-Studio рдиреЗ 12 рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рдкрд╛рдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдирд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :)

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк MISRA рдЙрд▓реНрд▓рдВрдШрди:

 /** * @brief Callback for an asynchronous request to notify * that the response is complete. * * @param[in] 0pPrivData - User private data configured * with the HTTPS Client library request configuration. * @param[in] respHandle - Identifier for the current response finished. * @param[in] rc - Return code from the HTTPS Client Library * signaling a possible error. * @param[in] status - The HTTP response status. */ static void _responseCompleteCallback(void* pPrivData, IotHttpsResponseHandle_t respHandle, IotHttpsReturnCode_t rc, uint16_t status) { bool* pUploadSuccess = (bool*)pPrivData; /* When the remote server response with 200 OK, the file was successfully uploaded. */ if (status == IOT_HTTPS_STATUS_OK) { *pUploadSuccess = true; } else { *pUploadSuccess = false; } /* Post to the semaphore that the upload is finished. */ IotSemaphore_Post(&(_uploadFinishedSem)); } 

рдХреНрдпрд╛ рдЖрдк рд╕реНрд╡рдпрдВ рдмрдЧ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ?

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V2537 [MISRA C 2.7] рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: 'рдЖрд░рд╕реА'ред iot_demo_https_s3_upload_async.c 234

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рднреА, рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдХреНрд╕рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЯреВрдЯреЗ рд╣реБрдП рддрд░реНрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдлрдВрдХреНрд╢рди рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрд░реНрдЯрд┐рдХрд▓ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореБрдЭреЗ 10 рдЕрдиреНрдп рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдорд┐рд▓реЗред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

рд╕рдВрджреЗрд╣ рд╕реЗ, рд╡реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдХрдВрдкрд╛рдЗрд▓рд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВред

рдЪрд┐рддреНрд░ 1


рдирд┐рд╖реНрдХрд░реНрд╖


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

рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЕрдЧрд▓реЗ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ: рдбреА

PS рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рдпрд╣ рд▓реЗрдЦ 31 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣реИрд▓реЛрд╡реАрди, рджреЛрд╕реНрддреЛрдВ рдФрд░ рд▓рдбрд╝рдХрд┐рдпреЛрдВ!

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


All Articles