рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рдмрдЪрд╛рд╡ рдХреИрд╕реЗ рдХрд░реЗрдВ (рдХреЛрд░реНрдЯреЗрдХреНрд╕ рдПрдо рдкрд░)?

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

рдЫрд╡рд┐

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдереЛрдбрд╝реА рдЕрд▓рдЧ рджрд┐рдЦрддреА рд╣реИред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рднрд░рд╛ рд╣реБрдЖ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдЪреВрдВрдХрд┐ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрд╕рдЯреАрдПрдо 32 рдХреЗ рддрд╣рдд рдФрд░ рдорд┐рд▓реЗрдВрдбрд░ 1986 рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддрд╛ рд╣реВрдВ - рдореИрдВрдиреЗ рдЙрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред

рдкрд░рд┐рдЪрдп


рдЖрдЗрдП рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ - рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд░рд▓ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреИрдХ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк, рдореЗрд░реА рддрд░рд╣, uVision Keil рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдореЛрд░реА рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдФрд░ рдЕрдЧрд░ рдЖрдк, рдореЗрд░реА рддрд░рд╣, рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд╕реНрдореГрддрд┐ рдХреЛ рдмреБрд░рд╛рдИ рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣:



рд╡реИрд╕реЗ
рдпрджрд┐ рдЖрдк рдвреЗрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
#pragma import(__use_no_heap_region) 

рдпрд╣рд╛рдБ рд╡рд┐рд╡рд░рдг

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

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

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

рдареАрдХ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдХреНрдпрд╛ рдХрд░реЗрдВ?

MPU


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, stm32f407 рдореЗрдВ MPU рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрдИ рдЕрдиреНрдп "рдЬреВрдирд┐рдпрд░" рдПрд╕рдЯреАрдПрдо рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдФрд░ рдорд┐рд▓реИрдВрдбреНрд░реЛрд╡рд╕реНрдХреА 1986VE1 рдореЗрдВ рдпрд╣ рднреА рдирд╣реАрдВ рд╣реИред

рдпрд╛рдиреА рд╕рдорд╛рдзрд╛рди рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рд╕рд╕реНрддреА рдирд╣реАрдВ рд╣реИред

рдореИрдиреБрдЕрд▓ рдирд┐рдпрдВрддреНрд░рдг


рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп, Keil рдПрдХ рдХреЙрд▓ рдЧреНрд░рд╛рдл (рд▓рд┐рдВрдХрд░ рд╡рд┐рдХрд▓реНрдк "--info = рд╕реНрдЯреИрдХ") рдХреЗ рд╕рд╛рде рдПрдХ HTML рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ)ред рдФрд░ рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрдЯреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреА рд╣реИред Gcc рд╡рд╣ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╡рд┐рдХрд▓реНрдк -рд╕реНрдЯреИрдХ-рдЙрдкрдпреЛрдЧ)ред рддрджрдиреБрд╕рд╛рд░, рдЖрдк рдХрднреА-рдХрднреА рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддреА рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ)ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд┐рдкреЛрд░реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдПрдХ рдкрде рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:



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

рдЯреНрд░рд┐рдХреА рд╕реНрдЯреИрдХ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ


рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ред рд▓реЗрдЦ рдЬрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ:



рдЬреАрд╕реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ " рдбрдмрд▓ рд▓рд┐рдВрдХ " рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00020000 { ; load region size_region ER_IROM1 0x08000000 0x00020000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00005000 { ; RW data .ANY (+RW +ZI) } } 

рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рд╕рдВрднрд╡ рд╡рд┐рдХрд▓реНрдкред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЖрд░рдХреНрд╖рд┐рдд рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ - ARM_LIB_HEAP рдФрд░ ARM_LIB_STACKред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкреНрд░рд┐рдп рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП - рд╕реНрдЯреИрдХ рдФрд░ рдвреЗрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рддрд┐рддрд░ рдмрд┐рддрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

рд╕реНрдкреЙрдЗрд▓рд░
 #! armcc -E ; with that we can use C preprocessor #define RAM_BEGIN 0x20000000 #define RAM_SIZE_BYTES (4*1024) #define FLASH_BEGIN 0x8000000 #define FLASH_SIZE_BYTES (32*1024) ; This scatter file places stack before .bss region, so on stack overflow ; we get HardFault exception immediately LR_IROM1 FLASH_BEGIN FLASH_SIZE_BYTES { ; load region size_region ER_IROM1 FLASH_BEGIN FLASH_SIZE_BYTES { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } ; Stack region growing down REGION_STACK RAM_BEGIN { *(STACK) } ; We have to define heap region, even if we don't actually use heap REGION_HEAP ImageLimit(REGION_STACK) { *(HEAP) } ; this will place .bss region above the stack and heap and allocate RAM that is left for it RW_IRAM1 ImageLimit(REGION_HEAP) (RAM_SIZE_BYTES - ImageLength(REGION_STACK) - ImageLength(REGION_HEAP)) { *(+RW +ZI) } } 


рддрдм рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ STACK рдирд╛рдо рдХреА рд╕рднреА рд╡рд╕реНрддреБрдПрдБ REGION_STACK рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рднреА HEAP рд╡рд╕реНрддреБрдПрдБ REGION_HEAP рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ RW_IRAM1 рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реИред рдФрд░ рдЙрд╕рдиреЗ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА - рдСрдкрд░реЗрдЯрд┐рд╡ рдХреА рд╢реБрд░реБрдЖрдд, рдвреЗрд░, рдвреЗрд░, рдмрд╛рдХреА рд╕рдмред рдЧрдгрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреИрдХ рдФрд░ рд╣реАрдк рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдпрд╛рдиреА, STACK рдФрд░ HEAP рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ):

рд╕реНрдкреЙрдЗрд▓рд░
 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp Heap_Size EQU 0x00000200 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit PRESERVE8 THUMB 


рдареАрдХ рд╣реИ, рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ? рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реИред рдЕрдм, рд╕реНрдЯреИрдХ рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдкрд░, рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдореЛрд░реА рдХреЛ рд▓рд┐рдЦрдиреЗ (рдпрд╛ рдкрдврд╝рдиреЗ) рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдФрд░ STM32 рдкрд░, рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╡реНрдпрд╡рдзрд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ - рд╣рд╛рд░реНрдбрдлреЙрд▓реНрдЯред

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

рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреЛрдИ рдУрд╡рд░рд╣реЗрдб рд░рдирдЯрд╛рдЗрдо рдирд╣реАрдВ! рд╡рд╛рд╣ред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдпрд╣ рдорд┐рд▓реЗрдВрдбрд░ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдВред рдмреЗрд╢рдХ, рдорд┐рд▓рдВрджреНрд░рд╛ рдкрд░ (рдореБрдЭреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ 1986BE1 рдФрд░ BE91 рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ), рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдЕрд▓рдЧ рджрд┐рдЦрддрд╛ рд╣реИред STM32 рдореЗрдВ, рдСрдкрд░реЗрдЯрд┐рд╡ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдСрдкрд░реЗрдЯрд┐рд╡ рд╕реЗ рдкрд╣рд▓реЗ рдорд┐рд▓рдВрджреНрд░рд╛ рдкрд░, рдмрд╛рд╣рд░реА рдмрд╕ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдирд┐рд╣рд┐рдд рд╣реИред

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

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

рддреЛ рдПрд╕рдЯреАрдПрдо рдкрд░ рднреА рдпрд╣ рд╣реИрдХ рдХреА рддрд░рд╣ рд╣реИ, рдмрд╕ рдмрд╣реБрдд рдЧрдВрджрд╛ рдирд╣реАрдВ рд╣реИред

рддреЛ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рдФрд░ рддрд░реАрдХреЗ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдПрдХреНрд╕реЗрд╕ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ


рдЕрдЧрд░ рд╣рдо рд╕реНрдЯреИрдХ рдХреЛ рд░реИрдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯреИрдХ рдХрд╛ рд╕реАрдорд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрдЧрд╛ - 0x20000000ред рдФрд░ рд╣рдо рд╕рд┐рд░реНрдл рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдПрдХ рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ .ini рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдЯреЛрд░рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 // breakpoint on stackoverflow BS Write 0x20000000, 1 

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

рдЧрддрд┐рд╢реАрд▓ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕рдВрд░рдХреНрд╖рдг


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

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

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

рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдкреА рдирд┐рдпрдВрддреНрд░рдг


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

рдФрд░ рднреА рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХреЗрдЗрд▓ рдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЬреАрд╕реАрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреЙрдкреА рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ "--gnu_instrument" ( рд╡рд┐рд╡рд░рдг ) рдирд╛рдо рдХреЗ рддрд╣рдд рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

рд╕реНрдкреЙрдЗрд▓рд░
 //   ,    //   ,         scatter- extern unsigned int Image$$REGION_STACK$$RW$$Base; //    ,   static const uint32_t stack_lower_address = (uint32_t) &( Image$$REGION_STACK$$RW$$Base ); //         extern "C" __attribute__((no_instrument_function)) void __cyg_profile_func_enter( void * current_func, void * callsite ) { (void)current_func; (void)callsite; ASSERT( __current_sp() >= stack_lower_address ); } //   -   extern "C" __attribute__((no_instrument_function)) void __cyg_profile_func_exit( void * current_func, void * callsite ) { (void)current_func; (void)callsite; } 


рдФрд░ рд╡реЛрдЗрд▓рд╛! рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди (рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рд╕рд╣рд┐рдд) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдкрд░, рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдореБрдЦрд░ рд╣реЛрдЧрд╛ред

рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
  • рд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдХреБрдЫ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ "рдХреВрдж" рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реИред
  • рдЫрд╡рд┐ $ $ REGION_STACK $ $ RW $ $ рдЖрдзрд╛рд░ рд▓рд┐рдВрдХрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬрд╛рджреВ рд╣реИред рд╡рд┐рд╡рд░рдг (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕рдордЭрджрд╛рд░ рдирд╣реАрдВ рд╣реИ)ред


рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╕рд╣реА рд╣реИ? рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред

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

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

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

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЗрдирд╛


рдпрд╣ stm32 рдХреЗ рд▓рд┐рдП рдФрд░ рдорд┐рд▓реЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХреЗ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

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

рдФрд░ рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдЕрдкрдиреЗ рд▓рд┐рдП (рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП) рдпрд╣ рдЕрдХреНрд╕рд░ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВ - Google рдореЗрдВ 5 рдорд┐рдирдЯ рдмрд┐рддрд╛рдиреЗ рдФрд░ рдПрдХ рддреБрдЪреНрдЫ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп - рдореИрдВ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд░рд╣ рд░рд╣рд╛ рд╣реВрдВред

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

UPD: рдпрджрд┐, рдПрдХ рд╕реНрдХреИрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, Keil рдПрдХ рдЕрд╕рдВрдЧрдд рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ "AppData \ Local \ Temp \ p17af8-2 (33): рдЪреЗрддрд╛рд╡рдиреА: # 1-D: рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдирдИ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ" - рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рд╣реИ рдЦреБрд▓рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рд╣реИ, рддреЛ рдмрд╕ рддрд┐рддрд░ рдмрд┐рддрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдЬреЛрдбрд╝реЗрдВред

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


All Articles