рдХреЛрд░реНрдЯреЗрдХреНрд╕-рдПрдо рдкрд░ рдкреЛрд╕реНрдЯрдорд╛рд░реНрдЯрдо рдбрд┐рдмрдЧрд┐рдВрдЧ

рдкреГрд╖реНрдарднреВрдорд┐:
рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрдкрднреЛрдХреНрддрд╛ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рд╡рд░реНрдЧ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдПрдЯрд┐рдкрд┐рдХрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдмреЙрдХреНрд╕ рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рд╕реНрд▓реАрдк рдореЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд░реНрд╡рд░ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рд╡рд╛рдкрд╕ рд╕реЛ рдЬрд╛рдПрдВред
рдЬрд▓реНрджреА рд╕реЗ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдбреАрдмрдЧрд░ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рдЧрд╣рд░реА рдиреАрдВрдж рдореЛрдб рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЕрдкрдиреА рд╢рдХреНрддрд┐ рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЯреЗрд╕реНрдЯ рдореЛрдб рдореЗрдВ рдмреЙрдХреНрд╕ рдбрд┐рдмрдЧрд░ рдХреЗ рдмрд┐рдирд╛ рдерд╛ рдФрд░ рдореЗрд░реЗ рдмрд┐рдирд╛ рдкрд╛рд╕ рдФрд░ рдХрднреА-рдХрднреА рдпрд╣ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдереАред рд▓рдЧрднрдЧ рд╣рд░ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рдмрд╛рд░ред
рдбрд┐рдмрдЧрд┐рдВрдЧ UART рдиреЛрдЬрд▓ рдкрд░ рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рд▓реЙрдЧ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рдЬреЛрд░рджрд╛рд░ рд╣рдорд▓рд╛ рд╣реБрдЖ рдФрд░ рдпрд╣ рд╕рдм рд╣реБрдЖред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЦрд░ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:#define USER_ASSERT( statement ) \ do \ { \ if(! (statement) ) \ { \ DEBUG_PRINTF_ERROR( "Assertion on line %d in file %s!\n", \ __LINE__, __FILE__ ); \ \ __disable_irq(); \ while(1) \ { \ __BKPT(0xAB); \ if(0) \ break; \ } \ } \ } while(0)
__BKPT(0xAB)
рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╣реИ; рдпрджрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рддрд╣рдд рдЕрднрд┐рдХрдерди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбрд┐рдмрдЧрд░ рд╕рдорд╕реНрдпрд╛ рд░реЗрдЦрд╛ рдкрд░ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдХреБрдЫ рдХрдердиреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реБрдЖ - рдХреНрдпреЛрдВрдХрд┐ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореБрдЦрд░ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореБрдЦрд░рддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рд╕рд░рдгреА рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣рд┐рдд рдереА - рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╕рд░рдгреА рдХреЗ рдКрдкрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЖрд╡рд░рдг, рдЬреЛ рдмрд╛рд╣рд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо "super_array.h" рдФрд░ рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рдереАред рдФрд░ рдХреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░рдгреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЖрд╕рдкрд╛рд╕ рдХреЗ рд▓реЙрдЧ рдореЗрдВ рд╕реЗ, рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
рдмреЗрд╢рдХ, рдХреЛрдИ рднреА рдЧреЛрд▓реА рдХреЛ рдХрд╛рдЯ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛, рдФрд░ рдлрд┐рд░ рд▓реЗрдЦ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдЪреВрдВрдХрд┐ рдореИрдВ рдЖрд░реНрдордк рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде uVision Keil 5 рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рддрд╣рдд рдЖрдЧреЗ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдереАред рдореИрдВрдиреЗ C ++ 11 рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 2019 рдпрд╛рд░реНрдб рдореЗрдВ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордп рд╣реИред
рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕
рдмреЗрд╢рдХ, рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ, рдЙрд╕реЗ рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдореБрдЦрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреЗрдбреАрдкреАрд╡реА рдкрд░ред рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╕реЗ, рдЖрдк рдЖрдорддреМрд░ рдкрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓ рдХреЗ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реБрдИред
рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рднреА рдПрдХ рдЧреБрдкреНрдд рдЯреНрд░реИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП?
рд╢рд╛рдпрдж рдЕрдЧрд░ рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдХрдЯреМрддреА рдХреА рдЬрд╛рдПрдЧреА?
рд╣рдо рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрдХрдбрд╝ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ; рд╣рдо тАЬ _sys_exit
тАЭ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ _sys_exit
рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╡рд╛рд░реА рдирд╣реАрдВ, рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рд╕рднреА рддрд░реАрдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо- execinfo.h
(рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ), рдкреЛрд╕рд┐рдХреНрд╕ рдХреЗ рддрд╣рдд рдЬреАрд╕реАрд╕реА рдХреЗ рд▓рд┐рдП backtrace()
рдФрд░ execinfo.h
ред рдХрд╛рд▓реЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рдереАред рд╣рдо рдорддрд▓рдмреА рдЖрдВрд╕реВ рдЧрд┐рд░рд╛рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдЪрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдвреЗрд░ рдореЗрдВ рдЪрдврд╝рддреЗ рд╣реИрдВ
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
- рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдПрд▓рдЖрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реИ, рд╕реНрдЯреИрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдХрд╛ рдкрддрд╛ (рд╕реНрдЯреИрдХ рдореЗрдВ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рдЕрд░реНрде рдореЗрдВ) рдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдХрдорд╛рдВрдб рдХрд╛ рдкрддрд╛ рдкреАрд╕реА рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реИред
- рдХрд┐рд╕реА рддрд░рд╣, рд╣рдо рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХрд╛ рдЖрдХрд╛рд░ рдкрд╛рддреЗ рд╣реИрдВ, рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЗрддрдиреА рджреВрд░реА рдкрд░ рдХрджрдо рд░рдЦрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕реА рдкрддрд╛ рдвреВрдВрдвреЗрдВ рдФрд░ рдЗрд╕реЗ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдПрдВ рдЬрдм рддрдХ рд╣рдо рд╕реНрдЯреИрдХ рд╕реЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рдЬрд╛рддреЗред
- рдХрд┐рд╕реА рддрд░рд╣ рд╣рдо рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рд░рд┐рдЯрд░реНрди рдкрддреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП - рдореБрдЭреЗ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХрд╛ рдЖрдХрд╛рд░ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛?
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ - рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдХреБрдЫ рднреА рдирд╣реАрдВ, рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ "рдкреНрд░реЛрд▓реЙрдЧ" рдФрд░ "рдЙрдкрд╕рдВрд╣рд╛рд░" рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдорд╛рдВрдб рдореЗрдВ рдЬреЛ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрд░реНрдордХ рдХреЗ рдкрд╛рд╕ рд╡рд┐рдХрд▓реНрдк --use_frame_pointer
, рдЬреЛ рдлрд╝реНрд░реЗрдо рдкреЙрдЗрдВрдЯрд░ рдХреЗ рддрд╣рдд R11 рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рддред рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХред рдорд╣рд╛рди, рдЕрдм рдЖрдк рд╕рднреА рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм - рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХрд╛ рдорд┐рд▓рд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ?
рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ, рдлрд┐рд░ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВред рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдлреНрд▓реИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рднреНрдп рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИ)ред рдХреНрдпрд╛ Cale рдЙрд╕реЗ рдЕрднреА рднреА рд╡рд╣рд╛рдВ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рд╣рдо рдЖрд╣реЗрдВ рднрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдИрдорд╛рдирджрд╛рд░ рд╕реНрдЯреИрдХреНрд░реЗрд╕ - рдЬреИрд╕реЗ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рддреБрд░рдВрдд рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ - рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЖрдк рдкрддреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░реЛрдВ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрднреА рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рджреБрдЦрдж рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ .map рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрдмреНрдЬрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдЗрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдб рд╡рд╛рд▓реА рдбрд┐рд╕рд╛рдЗрдб рдХреЛрдб рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред рд╕реНрдХреЛрд░ рдХрд░рдиреЗ рдХреА рддреАрд╡реНрд░ рдЗрдЪреНрдЫрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рджреЗрдЦ --use_frame_pointer
рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдордп рдореЗрдВ рд╣рд╛рд░реНрдбрдлреЙрд▓реНрдЯ рдореЗрдВ рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореНрдоред
рдареАрдХ рд╣реИ, рдЖрдЧреЗ рд╕реЛрдЪреЗрдВред
рдбрд┐рдмрдЧрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?
рд▓реЗрдХрд┐рди рдбрд┐рдмрдЧрд░ рдХрд┐рд╕реА рддрд░рд╣ frame pointer'a
рдмрд┐рдирд╛ рднреА рдХреЙрд▓ рд╕реНрдЯреИрдХ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЦреИрд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐, рдЖрдИрдбреАрдИ рдХреЗ рдкрд╛рд╕ рд╕рднреА рдбрд┐рдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрддреЗ рдФрд░ рдирд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рдореНрдоред
рдЙрд╕реА рд╕рдордп, рдПрдХ рд╣реА рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ - рдорд┐рдиреАрдбрдореНрдк - рдЬрдм рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рддрдм рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХреНрд░реИрд╢ рдХреЗ рд╕рдордп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЖрдк рд╕рднреА рдЪрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрд░рд╛рдо рд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ рдПрдЪ.рдПрдо.
рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдмрд╕ рдЬрд░реВрд░рдд рд╣реИ рд╣рд░ рджрд┐рди рдирд┐рддрдВрдмреЛрдВ рдореЗрдВ рдПрдХ рдореЛрдЯреА рд╕реЛрд╡рд┐рдпрдд рдирд┐рд░рдВрддрд░рддрд╛ рд░рдЧрдбрд╝реЗрдВ рд╕реНрдЯреИрдХ рдХреЛ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдмрд╛рдж рдХрд░реЗрдВ рдЬреЛ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рд╕рдордп рдереЗ рдФрд░, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рд╕рдм, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ?
рдлрд┐рд░, рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЙрдк-рдореБрдЦреМрдЯреЗ рдореЗрдВ рддреЛрдбрд╝ рджреЗрдВред
- рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░, рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдПрд╕рдкреА рдореВрд▓реНрдп рдФрд░ рд╕реНрдЯреИрдХ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░, рдЖрдкрдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- IDE рдореЗрдВ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ "minidump" рд╕реЗ рд╕рднреА рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рд╡рд╛рдкрд╕ рдзрдХреЗрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдореВрд▓реНрдп рднреАред
рд╕рдкрд╛ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
рдЕрдзрд┐рдорд╛рдирддрдГ, рдХреЛрдбрд╛рдВрддрд░рдХ рдкрд░ рд╣рд╛рде рдирд╣реАрдВ рдорд╛рд░рдирд╛ред Cale рдореЗрдВ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп (рдЖрдВрддрд░рд┐рдХ) рд╣реИ - __current_sp()
ред Gcc рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рд╕реНрдЯреИрдХ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдкрддрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдУрд╡рд░рдлреНрд▓реЛ (рдЬреЛ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛) рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдореЗрд░рд╛ рд╕реНрдЯреИрдХ рдПрдХ рдЕрд▓рдЧ рд▓рд┐рдВрдХрд░ рдЦрдВрдб рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ REGION_STACK
рдХрд╣рд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрддреЗ рдХреЛ рд▓рд┐рдВрдХрд░ рдореЗрдВ рдирд╛рдореЛрдВ рдореЗрдВ рдбреЙрд▓рд░ рдХреЗ рд╕рд╛рде рдЕрдЬреАрдм рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдирд╛рдо рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ - Image$$REGION_STACK$$ZI$$Limit
, рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрдпрд╣ рдПрдХ рдЬрд╛рджреВ рдХрд╛ рдкреНрд░рддреАрдХ рд╣реИ рдЬреЛ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╕реНрдЯреЗрдЬ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛, рдпрд╣ рд╕рдВрдХрд▓рди рдЪрд░рдг рдХрд╛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ dereferencing рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
extern unsigned int Image$$REGION_STACK$$ZI$$Limit; using MemPointer = const uint32_t *;
рдпрджрд┐ рдЖрдк рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХрд╛ рдорди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╕ рд╕реНрдЯреИрдХ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдХрдо рдмрджрд▓рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдХреЙрд▓ рд╕реНрдЯреИрдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рднреА рдХреЙрд▓ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕реНрдЯрдм рджреЗрдЦрддреЗ рд╣реИрдВред
рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╛рди рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдореИрдВрдиреЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рдорд┐рдиреАрдкрдВрдк рдХрд╛ рдЙрддреНрдкрд╛рджрди рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рд░рдЬрд┐рд╕реНрдЯрд░ (рдПрд▓рдЖрд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди, рдПрд╕рдкреА рд╕реЗ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдирд┐рдкрдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рдЙрдВрдЯрд░ (рдкреАрд╕реА), рдЬреЛ рд╡рд░реНрддрдорд╛рди рдХрдорд╛рдВрдб рдХреЗ рдкрддреЗ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
рджреЛрдмрд╛рд░рд╛, рдореБрдЭреЗ рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдкреАрд╕реА рдХреЗ рд▓рд┐рдП __current_pc()
: __return_address()
LR рдФрд░ __current_pc()
рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВред
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдпрд╣ рд╕реНрдЯреИрдгреНрдб рдкрд░ рдорд┐рдиреАрдбрдореНрдк рд╕реЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред
рдореЗрдореЛрд░реА рдореЗрдВ рдорд┐рдиреАрдбрдВрдк рдХреИрд╕реЗ рд▓реЛрдб рдХрд░реЗрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ LOAD рдбрд┐рдмрдЧрд░ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рдЬреЛ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ .hex рдпрд╛ .bin рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдорд╛рди рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд▓реЛрдб RAM рдореЗрдВ рдорд╛рди рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред
рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЗрд╢рд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрд┐рди рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ, рдмрд┐рди рдХреЛ рд╣реЗрдХреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ ...
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Cale рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╣реИ, рдФрд░ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреБрдЫ рдордирд╣реВрд╕ C- рдЬреИрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ! _WBYTE
_WDWORD
рдФрд░ _WBYTE
рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИрдВред рд╣рдо рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдПрдХ рдвреЗрд░ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рднреА рдХреЛрдб: #define USER_ASSERT( statement ) \ do \ { \ if(! (statement) ) \ { \ DEBUG_PRINTF_ERROR( "Assertion on line %d in file %s!\n", \ __LINE__, __FILE__ ); \ \ print_minidump(); \ __disable_irq(); \ while(1) \ { \ __BKPT(0xAB); \ if(0) \ break; \ } \ } \ } while(0)
рдорд┐рдиреАрдбрдореНрдк рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХред Ini рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ __load_minidump
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдСрдЯреЛрд░рди - Project -> Options for Target -> Debug
рдФрд░ рдЗрд╕ .ini рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗрдХреНрд╢рди рдореЗрдВ "рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝рд╛рдЗрд▓" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рдЕрдм рд╣рдо рдмрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛, рдХрдорд╛рдВрдб рд╡рд┐рдВрдбреЛ рдореЗрдВ __load_minidump()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ print_minidump
, рд╣рдо рдЙрд╕ рд▓рд╛рдЗрди рдкрд░ print_minidump
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреЗрд▓реАрдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреАрд╕реА рдХреЛ рдмрдЪрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ Callstack + рд▓реЛрдХрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЖрдк рдХреЙрд▓ рд╕реНрдЯреИрдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдиреЛрдЯ:рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╕рд┐рдореБрд▓реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдХрд╛ рдирд╛рдо рдЧрд▓рддреА рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдореЗрдВ рдирд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ Cale рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕реА ++ рдорд╛рдирдХ рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдорд┐рд▓рд╛рди рдирд╛рдореЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡рд╣ рд╕рдм рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдорд┐рдиреАрдбрдореНрдк рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡реНрдпрд╡рдзрд╛рди рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ setjmp/longjmp
рдпрд╛ alloca
рд╕рд╛рде рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ - рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред
рдЬреЛ рд╣реБрдЖ рдЙрд╕рд╕реЗ рдореИрдВ рдХрд╛рдлреА рдкреНрд░рд╕рдиреНрди рд╣реВрдБ; рдереЛрдбрд╝рд╛ рдХреЛрдб, рдЙрдкрд░рд┐ - рдореБрдЦрд░ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕реВрдЬрд╛ рд╣реБрдЖ рдореИрдХреНрд░реЛред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреИрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкрд░ рд╕рднреА рдЙрдмрд╛рдК рдХрд╛рдо рдЖрдИрдбреАрдИ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЧрд┐рд░ рдЧрдП, рдЬрд╣рд╛рдВ рдпрд╣ рд╣реИред
рдлрд┐рд░ рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЧреБрдЧрд▓реА рдХреА рдФрд░ рдЬреАрд╕реАрдмреА рдФрд░ рдЬреАрдбреАрдмреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдЪреАрдЬрд╝ рдкрд╛рдИ - рдХреНрд░реИрд╢рдЪреИрдХрд░ ред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдирдпрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдиреБрд╕реНрдЦрд╛ рдХреЛ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЦреЛрдЬ рд╕рдХрд╛ред рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ рдЕрдЧрд░ рд╡реЗ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред