{"id":335020,"date":"2022-06-27T03:00:12","date_gmt":"2022-06-27T03:00:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=335020"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=335020","title":{"rendered":"<span>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ToolChain(\u0430) \u0434\u043b\u044f Win10+GCC+MakeFile+ARM Cortex-M+GDB<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Toolchain(\u0430) \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u043f\u043e\u0434 STM32. x86-64, Win, Eclipse, GCC, Make, GDB, ST-LinkV2<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u043e\u043a\u043e\u0439 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0438 \u043a\u0430\u043a \u0441\u0432\u0430\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u043a\u043e\u043f\u0430\u044e \u0442\u0435\u043c\u0443 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c ToolChain \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Cortex-M \u0447\u0438\u043f\u0430\u0445. \u042d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442, \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 IDE (IAR, Keil, CodeComposerStudio, CodeVisionAVR \u0438 \u043f\u0440.). <\/p>\n<p><strong>\u0427\u0442\u043e \u0436\u0435 \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043a\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 DeskTop \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 STM32?<br \/><\/strong>\u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0442\u0438\u043b\u0438\u0442 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0434\u043b\u044f \u0447\u0438\u043f\u043e\u0432 STM32<strong>.<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\"><strong>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\/\u0423\u0442\u0438\u043b\u0438\u0442\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">STM32 ST-LINK Utility.ex\u0435\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">GUI \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a \u043f\u043e SWD\/JTAG<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">ST-LINK_CLI.exe  <\/p>\n<\/td>\n<td>\n<p align=\"left\">CLI  \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a \u043f\u043e SWD\/JTAG<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Putty \/TeraTerm\/HTerm  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b Serial \u043f\u043e\u0440\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">STM Studio  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u044f\u0447\u0435\u0435\u043a RAM \u043f\u0430\u043c\u044f\u0442\u0438 <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Cygwin  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0431\u043e\u0440 Unix \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f Windows<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">pdf reader  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0440\u0430\u0443\u0437\u0435\u0440 PDF \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">python  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u044f\u0437\u044b\u043a\u0430 Python<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">git-bash.exe<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 + \u0443\u0434\u043e\u0431\u043d\u044b Unix CLI \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">WinMerge  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">ST-LINK_gdbserver.exe  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">GNU Tools ARM Embedded<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f ARM<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Atollic TrueStudio  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Tor Browser<\/p>\n<\/td>\n<td>\n<p align=\"left\">Web Browser \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u0437 \u0441\u0430\u043d\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Jenkins  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0435\u0440\u0432\u0435\u0440 \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">hexdump \/hexedit  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">grep  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">find<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u0438\u0441\u043a \u0444\u0430\u0439\u043b\u0430 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0434\u043b\u044f \u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">STM32CubeMX  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">clang format  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Eclipse IDE for C\/C++ Developers\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0424\u0430\u0437\u0430 1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430<\/h2>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u044d\u0442\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442, \u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e Eclipse IDE for C\/C++ Developers \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0435\u0433\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 HotKeys.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dfc\/6d5\/cc1\/dfc6d5cc1d630015bf516409a34e7ca3.png\" width=\"558\" height=\"585\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dfc\/6d5\/cc1\/dfc6d5cc1d630015bf516409a34e7ca3.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043b\u044e\u0441 \u0432 Eclipse \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0441\u0438\u043d\u0435\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dac\/551\/365\/dac55136595e5a53b28a83fe331964f7.png\" width=\"622\" height=\"232\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dac\/551\/365\/dac55136595e5a53b28a83fe331964f7.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0449\u0435 Eclipse \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u041a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u044b\u0448\u043a\u043e\u0439. \u0412 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043c\u044b\u0448\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. Eclipse \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Eclipse IDE for C\/C++ Developers \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u044e\u0434\u0430<br \/>https:\/\/www.eclipse.org\/downloads\/packages\/<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0441\u043a\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e. \u0412 \u041e\u0421 Windows \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c Eclipse \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0438\u0441\u043a\u0430 \u0421.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <strong>eclipse.exe<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1db\/787\/f65\/1db787f6515f4d457c7cebce0fe029bf.png\" width=\"1065\" height=\"425\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1db\/787\/f65\/1db787f6515f4d457c7cebce0fe029bf.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 Eclipse \u043d\u0430\u0434\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043f\u0430\u043f\u043a\u0443 (workspace). \u0412 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 Eclipse \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b.<\/p>\n<p><strong>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Eclipse<\/strong><\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 .project, .cproject. \u0412\u0430\u0436\u043d\u043e \u0441\u043d\u044f\u0442\u044c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0441 \u043f\u0443\u043d\u043a\u0442\u0430 Makefile generation.\u00a0\u0412 \u043f\u043e\u043b\u0435 Build location \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 Makefile.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b5\/b82\/2b8\/5b5b822b80d1b0c51fbd633e3df0c725.png\" width=\"1312\" height=\"721\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b5\/b82\/2b8\/5b5b822b80d1b0c51fbd633e3df0c725.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0446\u0438\u043a\u043b ToolChain(\u0430). \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Behavior<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/772\/280\/66b\/77228066b80ca6e3b282a59169fb751c.png\" width=\"891\" height=\"863\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/772\/280\/66b\/77228066b80ca6e3b282a59169fb751c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u0440\u044f\u0447\u0435\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 Ctrl+B.<\/p>\n<h2>\u0424\u0430\u0437\u0430 2. \u041d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 ToolChain(\u0430) GCC \u043f\u043e\u0434 ARM \u0434\u043b\u044f Cross \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430 Win10<\/h2>\n<p>\u041d\u0443\u0436\u0435\u043d ToolChain: \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (cpp), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 ASM(as), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0421 (gcc),\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0421++(g++), \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a(ld), \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a(gdb). \u041d\u0443\u0436\u043d\u044b binutils(\u044b) \u0434\u043b\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432(nm, size, readelf), \u0430\u0440\u0445\u0438\u0432\u0430\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a(ar), \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 (*.\u0441, *.h) \u0432 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b (*.hex *.bin *.map *.elf *.out \u0444\u0430\u0439\u043b\u0438\u043a\u0438).<\/p>\n<p>ToolChain \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443<\/p>\n<p>C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin\\<\/p>\n<p>\u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 GCC ARM. \u0412\u0441\u0435\u0433\u043e 28 \u0443\u0442\u0438\u043b\u0438\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2eb\/9d0\/a56\/2eb9d0a56f1c717c4e626651d628ecad.png\" width=\"2115\" height=\"1654\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2eb\/9d0\/a56\/2eb9d0a56f1c717c4e626651d628ecad.png\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 3 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Windows Build Tools binaries (Make, cp, rm, echo, sh&#8230;)<\/strong> <\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0421(\u044f\u0445) \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 Make \u0444\u0430\u0439\u043b\u044b. \u041d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e \u0443\u0434\u0438\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438\u0437 make. \u0412 1970\u0435 \u0433\u043e\u0434\u0430 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0430 make \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0443\u0447\u0435\u043d\u044b\u0435 \u0441\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u044f\u043c\u0438 \u0434\u043e\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u0443\u043a. \u0422\u043e\u0433\u0434\u0430 \u0443 \u0448\u043a\u043e\u043b\u043e\u0442\u044b \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u0438\u0445 \u0434\u043e\u0440\u043e\u0433\u043e\u0432\u0438\u0437\u043d\u044b. \u0412 197x \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u043b\u044e\u0434\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b-\u0448\u0435\u0434\u0435\u0432\u0440\u044b \u043a\u0430\u043a make, grep, find, sort \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Make \u0444\u0430\u0439\u043b\u0430\u043c\u00a0 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0431\u043e\u0440\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043e-\u043f\u043e\u043b\u043d\u043e\u0439. \u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0442\u0435\u043d \u0441\u0431\u043e\u0440\u043e\u043a. \u042d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a\u0438\u043c GUI(\u043d\u044f\u043c) \u043a\u0430\u043a IAR \u0441 Keil, \u0433\u0434\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u0438\u0440\u0430\u0442\u044c \u0434\u044b\u0440\u044b \u0432 \u043a\u043e\u0432\u0440\u0438\u043a\u0435 \u0434\u043b\u044f \u043c\u044b\u0448\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0432 make \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u0432 *.mk. \u0412\u043e\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u0430 Make \u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\"><strong>\u0423\u0442\u0438\u043b\u0438\u0442\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">make<\/p>\n<\/td>\n<td>\n<p align=\"left\">build automation tool<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">sh<\/p>\n<\/td>\n<td>\n<p align=\"left\">Unix shell interpreter<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">busybox<\/p>\n<\/td>\n<td>\n<p align=\"left\">a software suite that provides several Unix utilities<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">echo<\/p>\n<\/td>\n<td>\n<p align=\"left\">Echo the STRING(s) to standard output.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">cp<\/p>\n<\/td>\n<td>\n<p align=\"left\">Copy SOURCEs to DEST<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">mkdir<\/p>\n<\/td>\n<td>\n<p align=\"left\">Create DIRECTORY<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">rm<\/p>\n<\/td>\n<td>\n<p align=\"left\">Remove (unlink) FILEs<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u0413\u0434\u0435 \u0436\u0435 \u043c\u043d\u0435 \u0432\u0437\u044f\u0442\u044c <strong>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439<\/strong> MakeFile \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043d\u043e\u0433\u043e-\u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432? \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u044d\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c STM32CubeMX \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c MakeFile \u043f\u0440\u043e\u0435\u043a\u0442. \u0414\u0430\u043b\u0435\u0435 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u0440\u0431\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0434 \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438.<\/p>\n<pre><code class=\"bash\">mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) $(info Build  $(mkfile_path) )  BUILD_DIR = build  #@echo $(error SOURCES_C= $(SOURCES_C)) INCDIR := $(subst \/cygdrive\/c\/,C:\/, $(INCDIR)) #@echo $(error INCDIR=$(INCDIR)) SOURCES_C := $(subst \/cygdrive\/c\/,C:\/, $(SOURCES_C)) #@echo $(error SOURCES_C=$(SOURCES_C)) SOURCES_ASM := $(subst \/cygdrive\/c\/,C:\/, $(SOURCES_ASM)) LDSCRIPT := $(subst \/cygdrive\/c\/,C:\/, $(LDSCRIPT)) #@echo $(error SOURCES_ASM=$(SOURCES_ASM))  # binaries PREFIX = arm-none-eabi- # The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) # either it can be added to the PATH environment variable. ifdef GCC_PATH   CC = $(GCC_PATH)\/$(PREFIX)gcc   AS = $(GCC_PATH)\/$(PREFIX)gcc -x assembler-with-cpp   CP = $(GCC_PATH)\/$(PREFIX)objcopy   SZ = $(GCC_PATH)\/$(PREFIX)size else   CC = $(PREFIX)gcc   AS = $(PREFIX)gcc -x assembler-with-cpp   CP = $(PREFIX)objcopy   SZ = $(PREFIX)size endif HEX = $(CP) -O ihex BIN = $(CP) -O binary -S   # CFLAGS #https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/ARM-Options.html FPU =  FPU += -mfpu=fpv4-sp-d16  FLOAT-ABI = -mfloat-abi=hard  MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)  CSTANDARD = -std=c11  AS_DEFS =   AS_INCLUDES =  OPT += -Os      ifeq ($(DEBUG), Y)     #@echo $(error DEBUG=$(DEBUG))     CFLAGS += -g3 -gdwarf-2 -ggdb endif  ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections  CFLAGS += $(MCU) $(OPT) $(INCDIR) -Wall -fdata-sections -ffunction-sections $(CSTANDARD)   # Generate dependency information CFLAGS += -MMD -MP -MF\"$(@:%.o=%.d)\"  # LDFLAGS  # libraries LINKER_FLAGS += -Xlinker --gc-sections  ifeq ($(MBR), Y)     #@echo $(error MBR=$(MBR))     LIBS += -lnosys else     LIBS += -lnosys      LINKER_FLAGS += -u _scanf_float     LINKER_FLAGS += -u _printf_float endif  ifeq ($(LIBC), Y)     #@echo $(error LIBC=$(LIBC))     LIBS += -lc endif  ifeq ($(MATH), Y)     #@echo $(error MATH=$(MATH))     LIBS += -lm  endif   #@echo $(error LDSCRIPT=$(LDSCRIPT)) LIBDIR =   LDFLAGS += $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)\/$(TARGET).map,--cref -Wl,--gc-sections $(LINKER_FLAGS)  # default action: build all all: $(BUILD_DIR)\/$(TARGET).elf $(BUILD_DIR)\/$(TARGET).hex $(BUILD_DIR)\/$(TARGET).bin   # build the application # list of objects OBJECTS = $(addprefix $(BUILD_DIR)\/,$(notdir $(SOURCES_C:.c=.o))) vpath %.c $(sort $(dir $(SOURCES_C))) # list of ASM program objects OBJECTS += $(addprefix $(BUILD_DIR)\/,$(notdir $(SOURCES_ASM:.S=.o))) vpath %.S $(sort $(dir $(SOURCES_ASM)))  $(BUILD_DIR)\/%.o: %.c Makefile | $(BUILD_DIR)  $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)\/$(notdir $(&lt;:.c=.lst)) $&lt; -o $@  $(BUILD_DIR)\/%.o: %.S Makefile | $(BUILD_DIR) $(AS) -c $(CFLAGS) $&lt; -o $@  $(BUILD_DIR)\/$(TARGET).elf: $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) -o $@ $(SZ) $@  $(BUILD_DIR)\/%.hex: $(BUILD_DIR)\/%.elf | $(BUILD_DIR) $(HEX) $&lt; $@  $(BUILD_DIR)\/%.bin: $(BUILD_DIR)\/%.elf | $(BUILD_DIR) $(BIN) $&lt; $@  $(BUILD_DIR): mkdir $@  # clean up clean: -rm -fR $(BUILD_DIR)    # dependencies -include $(wildcard $(BUILD_DIR)\/*.d)  # *** EOF ***<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 make \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430<\/p>\n<pre><code class=\"bash\">$(info IWDG_MK_INC=$(IWDG_MK_INC) ) ifneq ($(IWDG_MK_INC),Y)     IWDG_MK_INC=Y          mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))     $(info Build  $(mkfile_path) )          IWDG_DIR = $(WORKSPACE_LOC)bsp\/bsp_stm32f4\/iwdg     #@echo $(error IWDG_DIR=$(IWDG_DIR))     IWDG=Y     INCDIR += -I$(IWDG_DIR)     OPT += -DHAS_IWDG      SOURCES_C += $(IWDG_DIR)\/iwdg_drv.c      ifeq ($(CLI),Y)         ifeq ($(IWDG_COMMANDS),Y)             OPT += -DHAS_IWDG_COMMANDS             SOURCES_C += $(IWDG_DIR)\/iwdg_commands.c         endif     endif endif <\/code><\/pre>\n<p>\u0410 \u044d\u0442\u043e MakeFile \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<pre><code class=\"bash\">MK_PATH:=$(dir $(realpath $(lastword $(MAKEFILE_LIST)))) #@echo $(error MK_PATH=$(MK_PATH)) WORKSPACE_LOC:= $(MK_PATH)..\/..\/ INCDIR += -I$(MK_PATH) INCDIR += -I$(WORKSPACE_LOC)  include $(MK_PATH)components.mk include $(MK_PATH)cli_config.mk include $(MK_PATH)diag_config.mk include $(MK_PATH)test_config.mk include $(WORKSPACE_LOC)code_base.mk include $(WORKSPACE_LOC)rules.mk <\/code><\/pre>\n<p> \u0412 Makefile \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c Include guard \u043f\u043e\u0434\u043e\u0431\u043d\u043e *.h \u0444\u0430\u0439\u043b\u0430\u043c \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<pre><code class=\"bash\">$(info FILE_MK_INC=$(FILE_MK_INC)) ifneq ($(FILE_MK_INC),Y)     FILE_MK_INC=Y endif<\/code><\/pre>\n<p>\u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041e\u0434\u0438\u043d Makefile \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e *.mk \u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n<p>Windows Build Tools binaries \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435\u00a0<\/p>\n<p><a href=\"https:\/\/github.com\/xpack-dev-tools\/windows-build-tools-xpack\/releases\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/xpack-dev-tools\/windows-build-tools-xpack\/releases\/<\/u><\/a><\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b Windows Build Tools\u00a0 \u0432 \u043f\u0430\u043f\u043a\u0443 <\/p>\n<p>C:\\xpack-windows-build-tools-4.3.0-1\\bin<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/149\/92c\/1dd\/14992c1dda47a15ac2401b8c20a52c75.png\" width=\"1717\" height=\"731\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/149\/92c\/1dd\/14992c1dda47a15ac2401b8c20a52c75.png\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 4 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0430 (Linker(\u0430)). (*.ld \u0444\u0430\u0439\u043b)<\/strong><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 *.\u0441 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 *.o \u0444\u0430\u043b\u043e\u0432. \u0418\u0445 \u043d\u0430\u0434\u043e \u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u0438\u043d *.bin \u0444\u0430\u0439\u043b. \u042d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 arm-none-eabi-<strong>ld<\/strong>.exe. \u041a\u0430\u043a \u0438 \u043b\u044e\u0431\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u0435 \u043d\u0443\u0436\u0435\u043d \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e *.ld \u0444\u0430\u0439\u043b. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430.<\/p>\n<pre><code class=\"cpp\"> \/* Entry Point *\/ ENTRY(Reset_Handler)  \/* Highest address of the user mode stack *\/ _estack = ORIGIN(RAM) + LENGTH(RAM);    \/* end of RAM *\/ \/* Generate a link error if heap and stack don't fit into RAM *\/ _Min_Heap_Size  = 0x200; \/* required amount of heap  *\/ _Min_Stack_Size = 0x900; \/* required amount of stack *\/  \/* Specify the memory areas *\/ MEMORY { RAM (xrw)  : ORIGIN = 0x20000000, LENGTH = 320K FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K }  \/* Define output sections *\/ SECTIONS {   \/* The startup code goes first into FLASH *\/   .isr_vector :   {     . = ALIGN(4);     KEEP(*(.isr_vector)) \/* Startup code *\/     . = ALIGN(4);   } >FLASH    \/* The program code and other data goes into FLASH *\/   .text :   {     . = ALIGN(4);     *(.text)           \/* .text sections (code) *\/     *(.text*)          \/* .text* sections (code) *\/     *(.glue_7)         \/* glue arm to thumb code *\/     *(.glue_7t)        \/* glue thumb to arm code *\/     *(.eh_frame)      KEEP (*(.init))     KEEP (*(.fini))      . = ALIGN(4);     _etext = .;        \/* define a global symbols at end of code *\/   } >FLASH    \/* Constant data goes into FLASH *\/   .rodata :   {     . = ALIGN(4);     *(.rodata)         \/* .rodata sections (constants, strings, etc.) *\/     *(.rodata*)        \/* .rodata* sections (constants, strings, etc.) *\/     . = ALIGN(4);   } >FLASH    .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH   .ARM : {     __exidx_start = .;     *(.ARM.exidx*)     __exidx_end = .;   } >FLASH    .preinit_array     :   {     PROVIDE_HIDDEN (__preinit_array_start = .);     KEEP (*(.preinit_array*))     PROVIDE_HIDDEN (__preinit_array_end = .);   } >FLASH   .init_array :   {     PROVIDE_HIDDEN (__init_array_start = .);     KEEP (*(SORT(.init_array.*)))     KEEP (*(.init_array*))     PROVIDE_HIDDEN (__init_array_end = .);   } >FLASH   .fini_array :   {     PROVIDE_HIDDEN (__fini_array_start = .);     KEEP (*(SORT(.fini_array.*)))     KEEP (*(.fini_array*))     PROVIDE_HIDDEN (__fini_array_end = .);   } >FLASH    \/* used by the startup to initialize data *\/   _sidata = LOADADDR(.data);    \/* Initialized data sections goes into RAM, load LMA copy after code *\/   .data :    {     . = ALIGN(4);     _sdata = .;        \/* create a global symbol at data start *\/     *(.data)           \/* .data sections *\/     *(.data*)          \/* .data* sections *\/      . = ALIGN(4);     _edata = .;        \/* define a global symbol at data end *\/   } >RAM AT> FLASH       \/* Uninitialized data section *\/   . = ALIGN(4);   .bss :   {     \/* This is used by the startup in order to initialize the .bss secion *\/     _sbss = .;         \/* define a global symbol at bss start *\/     __bss_start__ = _sbss;     *(.bss)     *(.bss*)     *(COMMON)      . = ALIGN(4);     _ebss = .;         \/* define a global symbol at bss end *\/     __bss_end__ = _ebss;   } >RAM    \/* User_heap_stack section, used to check that there is enough RAM left *\/   ._user_heap_stack :   {     . = ALIGN(4);     PROVIDE ( end = . );     PROVIDE ( _end = . );     . = . + _Min_Heap_Size;     . = . + _Min_Stack_Size;     . = ALIGN(4);   } >RAM    \/* Remove information from the standard libraries *\/   \/DISCARD\/ :   {     libc.a ( * )     libm.a ( * )     libgcc.a ( * )     libnosys.a ( * )   }    .ARM.attributes 0 : { *(.ARM.attributes) } } <\/code><\/pre>\n<p><strong>\u0424\u0430\u0437\u0430 5 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434.<\/strong><\/p>\n<p>\u0414\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main() \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:<\/p>\n<p>1 \u041f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f SP \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0435\u043a\u0430 \u043f\u0435\u0440\u0432\u044b\u043c qWord(\u043e\u043c) \u0431\u0438\u043d\u0430\u0440\u044f<\/p>\n<p>2 \u041f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 RAM \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0438\u043d\u0430\u0440\u044f. (\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b rwdata)<\/p>\n<p>3 \u041e\u0431\u043d\u0443\u043b\u0438\u0442\u044c \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 RAM (\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b bss)<\/p>\n<p>4 \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044f\u0434\u0440\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 FPU<\/p>\n<p>5 \u041f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043c\u0435\u0441\u0442\u043e\u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439<\/p>\n<p>6 \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0432\u043d\u0435\u0448\u043d\u044e\u044e Off-Chip RAM \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p> \u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 Assembler \u0432 *.S \u0444\u0430\u0439\u043b\u0435. \u041a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main(). \u042d\u0442\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0430\u0439\u043b startup_stm32f413xx.S<\/p>\n<p><strong>\u0424\u0430\u0437\u0430 6 \u041d\u0443\u0436\u043d\u044b \u0441\u043e\u0440\u0446\u044b \u043e\u0442 Vendor(\u043e\u0432) \u0447\u0438\u043f\u0430.<\/strong><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u0446\u0435\u043b\u0430\u044f \u043a\u0443\u0447\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430. \u042d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442 \u0438\u043b\u0438 System Software. \u0412 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u044f\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f(TIM, RCC, RTC), \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (CAN, SPI, I2S, I2C, UART, USB, GPIO, SDIO, SAI, Ethernet), \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 (FLASH, SRAM, DMA, MPU, IWDG, RNG, FPU, NVIC), \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 (DAC, PWM). \u042d\u0442\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043d\u0434\u043e\u0440\u044b \u0447\u0438\u043f\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0430 STM32 \u0443 \u043d\u0430\u0441 \u043f\u043e \u0441\u0443\u0442\u0438 \u0434\u0432\u0430 \u0432\u0435\u043d\u0434\u043e\u0440\u0430: \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f ARM \u0438 \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f STMicroelectronic.<\/p>\n<p>\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f ARM \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 CMSIS(Common Microcontroller Software Interface Standard). \u042d\u0442\u043e \u0421 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0434\u043b\u044f ASM \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e\u0434 Cortex-M \u0447\u0438\u043f\u044b. \u0422\u0430\u043a \u0436\u0435 *.ld \u0444\u0430\u0439\u043b\u0438\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0430. \u042d\u0442\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0438\u0445 \u0441\u0430\u0439\u0442\u0430  https:\/\/silver.arm.com\/browse\/CMSIS \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0a2\/ede\/754\/0a2ede754a6974e90c5fe31c82ee3470.png\" width=\"1875\" height=\"912\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0a2\/ede\/754\/0a2ede754a6974e90c5fe31c82ee3470.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f STMicroelectonic \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442 HAL Drivers &#8212; \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0435\u0439\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0438 STM32CubeMX \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https:\/\/www.st.com\/en\/development-tools\/stm32cubemx.html \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d12\/fed\/6c1\/d12fed6c12f0aca818ebae6b070e0b75.png\" width=\"832\" height=\"728\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d12\/fed\/6c1\/d12fed6c12f0aca818ebae6b070e0b75.png\"\/><figcaption><\/figcaption><\/figure>\n<p> STM32CubeMX \u0441\u0430\u043c \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u0440\u0446\u044b \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0430\u043f\u043a\u0443 STM32F4xx_HAL_Driver. \u0422\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 Tor browser \u0442\u0430\u043a \u043a\u0430\u043a \u0420\u0424 \u0443 ST \u0447\u0438\u0441\u043b\u0438\u0442\u0441\u044f \u0441\u0430\u043d\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0435\u0439. \u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0440\u0446\u043e\u0432 STM32F4xx_HAL_Driver \u043e\u0442 \u0432\u0435\u043d\u0434\u043e\u0440\u0430 <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d47\/c05\/5d5\/d47c055d57fb1be11235052ce0f7fe23.png\" width=\"3754\" height=\"1860\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d47\/c05\/5d5\/d47c055d57fb1be11235052ce0f7fe23.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (*.\u0430) \u043a\u0430\u043a \u0443 Texas Instruments. \u0427\u0438\u0441\u0442\u044b\u0435 \u0441\u043e\u0440\u0446\u044b (*.c *.h \u0444\u0430\u0439\u043b\u0438\u043a\u0438).<\/p>\n<h4>\u0424\u0430\u0437\u0430 7 \u041a\u0430\u043a \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443?\u00a0<\/h4>\n<p>\u041d\u0430\u043a\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043d\u0430 \u0447\u0438\u043f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 ST-Link \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 SWD\/JTAG \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b STM32 ST-LINK Utility.exe. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u043e\u0442 ST, \u043a\u0430\u043a \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 Nucleo_f4XXXxx<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/225\/236\/3af\/2252363af40febdf87fb504f7bf1729c.png\" width=\"1217\" height=\"894\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/225\/236\/3af\/2252363af40febdf87fb504f7bf1729c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435 Generic *.bin \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442(\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435), \u0442\u043e \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u0432 On-Chip Nor Flash \u043f\u0430\u043c\u044f\u0442\u0438. \u0417\u0430\u043f\u0438\u0441\u044c *.hex \u0444\u0430\u0439\u043b\u043e\u0432 <strong>\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435 <\/strong>\u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0444\u0430\u0439\u043b\u0435. \u0421\u0442\u043e\u0438\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u043c qword \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 RAM (\u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0435\u043a\u0430) \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c QWORD \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 Flash (Reset_Handler).\u00a0<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (*.bin) \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 <strong>hexdump<\/strong>.exe.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1c6\/4b0\/628\/1c64b06280a52cd76aa0572711a8a89f.png\" width=\"680\" height=\"478\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c6\/4b0\/628\/1c64b06280a52cd76aa0572711a8a89f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f. \u041d\u0430\u043a\u0430\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u043f\u043b\u0430\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u043b\u0430. \u041d\u0435\u00a0 \u043c\u0438\u0433\u0430\u0435\u0442 heartbeat LED. \u041a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 ST-Link. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u0435 STM32 ST-LINK Utility.exe \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 ST-LINK <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/da1\/9ca\/fca\/da19cafca9863cdff99adc6868ac8f97.png\" width=\"1220\" height=\"896\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da1\/9ca\/fca\/da19cafca9863cdff99adc6868ac8f97.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f. \u042f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0414\u0430\u0436\u0435 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438 \u043d\u0435 \u043c\u0438\u0433\u0430\u044e\u0442. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u041f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430.<\/p>\n<p><strong>\u0424\u0430\u0437\u0430 8 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Debug Server<\/strong><\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c GDB Server. \u042d\u0442\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0430-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0434\u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0447\u0438\u043f \u043f\u043e SWD \u0438\u043b\u0438 JTAG, \u0430 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 TCP \u0441\u043e\u043a\u0435\u0442 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a arm-none-eabi-gdb.exe \u043a \u043f\u043e\u0440\u0442\u0443 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c 61234.\u00a0<\/p>\n<p>\u042d\u0442\u0443 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0443\u0442\u0438\u043b\u0438\u0442 \u043e\u0442 Atollic TrueSTUDIO. Atollic TrueSTUDIO(R) for STM32 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u0441\u0430\u0439\u0442\u0430 ST.com.<\/p>\n<p><a href=\"https:\/\/www.st.com\/en\/development-tools\/truestudio.html\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/www.st.com\/en\/development-tools\/truestudio.html<\/u><\/a><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d53\/189\/eeb\/d53189eeb55c47a1848b8a2be5c29085.png\" width=\"818\" height=\"697\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d53\/189\/eeb\/d53189eeb55c47a1848b8a2be5c29085.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u00a0\u041d\u0430\u0434\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 st.com.\u00a0\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 en.TrueSTUDIO_V9.3.exe.exe \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>Tor Browser<\/strong> \u0442\u0430\u043a \u043a\u0430\u043a \u0420\u0424 \u0443 ST \u0447\u0438\u0441\u043b\u0438\u0442\u0441\u044f, \u043a\u0430\u043a \u0441\u0430\u043d\u043a\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/060\/7cc\/951\/0607cc9510bec86888097fc77a808e77.png\" width=\"745\" height=\"580\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/060\/7cc\/951\/0607cc9510bec86888097fc77a808e77.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/33b\/544\/7a0\/33b5447a03233b71c9dba2f1c5251e87.png\" width=\"747\" height=\"578\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33b\/544\/7a0\/33b5447a03233b71c9dba2f1c5251e87.png\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>ST-LINK_gdbserver<\/strong> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432\u00a0<\/p>\n<p>C:\\Program Files (x86)\\Atollic\\TrueSTUDIO for STM32 9.3.0\\Servers\\ST-LINK_gdbserver\\ST-LINK_gdbserver.exe<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e Path \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 binutils \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a\u00a0<\/p>\n<p>C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin\\<\/p>\n<p>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Eclipse \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Run->External Tools->External Tools Configurations\u2026 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c GDB server (\u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043b\u0430\u0434\u043a\u0438) \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0443<\/p>\n<p>C:\\Program Files (x86)\\Atollic\\TrueSTUDIO for STM32 9.3.0\\Servers\\ST-LINK_gdbserver<\/p>\n<p>\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u00a0 <strong>ST-LINK_gdbserver.bat.<\/strong><\/p>\n<p>\u201cC:\\Program Files (x86)\\Atollic\\TrueSTUDIO for STM32 9.3.0\\Servers\\ST-LINK_gdbserver\\<strong>ST-LINK_gdbserver.bat\u201d<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/336\/0f8\/483\/3360f8483ac39cc4fafed6de7515affc.png\" width=\"1311\" height=\"694\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/336\/0f8\/483\/3360f8483ac39cc4fafed6de7515affc.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0430 ST-Link \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0432\u0435\u0442\u0438\u0442\u044c\u0441\u044f <strong>\u0437\u0435\u043b\u0435\u043d\u044b\u043c<\/strong> \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434. \u041f\u0440\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c &#8212; <strong>\u043a\u0440\u0430\u0441\u043d\u044b\u043c<\/strong>.<\/p>\n<h3>\u0424\u0430\u0437\u0430 9 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Debug \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438<\/h3>\n<p>\u041d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e Eclipse \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0442\u0435\u043c \u0436\u0435 IAR \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0412 Eclipse \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c Ctrl+3 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/634\/3d7\/da6\/6343d7da63fb50a8691cd25fbbcf92f7.png\" width=\"1206\" height=\"674\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/634\/3d7\/da6\/6343d7da63fb50a8691cd25fbbcf92f7.png\"\/><figcaption><\/figcaption><\/figure>\n<p> \u0438 \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043c Debug Configuration. \u041d\u0430\u0434\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043a *.elf \u0444\u0430\u0439\u043b\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa1\/982\/2b1\/fa19822b1dce9dcfef61bb7f21e52b3e.png\" width=\"1175\" height=\"716\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fa1\/982\/2b1\/fa19822b1dce9dcfef61bb7f21e52b3e.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Debugger \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u043e\u0442 ARM GCC<\/p>\n<p>C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin\\arm-none-eabi-gdb.exe<\/p>\n<p>\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0440\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 localhost:61234<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c0f\/d0a\/aaa\/c0fd0aaaac6adf2ba39ea6c52328d15b.png\" width=\"1463\" height=\"735\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c0f\/d0a\/aaa\/c0fd0aaaac6adf2ba39ea6c52328d15b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Startup \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main(). \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 Reset_Handler \u0438\u043b\u0438 SystemInit()<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f5e\/3ed\/6f9\/f5e3ed6f9d55a6a33d61f7a817d9bef9.png\" width=\"1260\" height=\"1019\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f5e\/3ed\/6f9\/f5e3ed6f9d55a6a33d61f7a817d9bef9.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/664\/a0c\/ab1\/664a0cab1d505ead1ac1fcf7f28b5b47.png\" width=\"1260\" height=\"1016\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/664\/a0c\/ab1\/664a0cab1d505ead1ac1fcf7f28b5b47.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0431\u043e\u0440\u043a\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 ST-LINK_gdbserver.bat \u0432 \u043f\u0430\u043f\u043a\u0435\u00a0<\/p>\n<p>C:\\Program Files (x86)\\Atollic\\TrueSTUDIO for STM32 9.3.0\\Servers\\ST-LINK_gdbserver<\/p>\n<p>\u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437-\u043f\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0438 \u0432\u0438\u0434\u043d\u044b \u043b\u043e\u0433\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/336\/0f8\/483\/3360f8483ac39cc4fafed6de7515affc.png\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/336\/0f8\/483\/3360f8483ac39cc4fafed6de7515affc.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u0443\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u0441 \u043e\u043f\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u00a0 -g3 -gdwarf-2 -ggdb\u00a0<\/p>\n<p><strong>\u0411\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u0430 Toolchain(\u0430)<\/strong><\/p>\n<p>\u0412\u0441\u0435 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043e\u0434\u043d\u043e\u0439 \u0431\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u044b (Helicopter view) \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043b\u0438\u0441\u0442\u043e\u0447\u043a\u0435. \u0422\u0430\u043a\u043e\u0432\u0430 \u043e\u0431\u0449\u0430\u044f \u043a\u0430\u043d\u0432\u0430. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36d\/17d\/bf5\/36d17dbf51ebae2b791546c1453581fe.png\" width=\"1654\" height=\"2339\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/36d\/17d\/bf5\/36d17dbf51ebae2b791546c1453581fe.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438 *.ld, *.c, *.h,\u00a0*.S, *.cproject, *.project, *.Makefile, *.mk \u0438\u0445 \u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044e \u0432 GIT. \u00a0 \u0410\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438 *.o, *.bin, *.hex, *.map, *.elf, *.out, *.d, *.a. \u041e\u0442\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b *.bin, *.hex, *.map, *.elf. \u042d\u0442\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.\u00a0<\/p>\n<h3>UART CLI \u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438\u00a0<\/h3>\n<p>\u041b\u044e\u0431\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0412\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 CLI \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u043e\u0444\u0442\u0430 \u0438 \u0436\u0435\u043b\u0435\u0437\u0430.\u00a0 \u041a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0443 \u043b\u043e\u0433\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 (\u043a\u0440\u0430\u0441\u043d\u044b\u0439) \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u0445 (\u0436\u0435\u043b\u0442\u044b\u0439). \u0414\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u043b\u043e\u0433\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u043e. \u041f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c UART-CLI \u043b\u043e\u0433\u0438 \u043c\u043e\u0436\u043d\u043e \u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u0435 TeraTerm \u0438\u043b\u0438 PuTTY<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/31e\/755\/f9a\/31e755f9a8c7885dae1aa6ddc6ba1946.png\" width=\"1172\" height=\"791\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/31e\/755\/f9a\/31e755f9a8c7885dae1aa6ddc6ba1946.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 UART, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434 CLI \u0434\u043b\u044f RunTime \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 UART \u0438\u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u043c TCP\/UDP.<\/p>\n<p><strong>\u0422\u0440\u044e\u043a\u0438 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a<\/strong><\/p>\n<p>\u2013\u0412\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main. \u041c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u043a \u0437\u0430\u043f\u0438\u0441\u0430\u043b Generi\u0441 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f Bootloader \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main \u0447\u0442\u043e \u043e\u043d \u043b\u0435\u0436\u0438\u0442 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0441\u0435\u043a\u0442\u043e\u0440\u0435 NorFlash.<\/p>\n<p>\u2013\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 FlashFs. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0431\u043e\u0440\u043e\u043a.<\/p>\n<p>\u2013\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 HeartBeat LED. \u0422\u0430\u043a \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u043b\u0430 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043c\u0438\u0433\u0430\u043d\u0438\u044f.<\/p>\n<p>\u2013\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 GPIO +Oscilloscope +DMM \u0434\u043b\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. <\/p>\n<p>&#8212;\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0439\u0442\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043a\u043e\u0434. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0430 LapTop(\u0435).<\/p>\n<p>&#8212;\u041f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442\u044c, \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f. \u0421 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c \u0432\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0433\u0430\u0434\u0436\u0435\u0442\u0430 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u043e 3\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c UART.<\/p>\n<p>\u2013\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 SWD\/JTAG \u0434\u043b\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u0447\u0438\u043d \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u0439<\/p>\n<p>\u2013\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 STM Studio \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u0438\u0445 \u0430\u0434\u0434\u0435\u0440\u043c\u0443 \u0432 RAM.<\/p>\n<p>&#8212;\u041f\u043e\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0441\u043a\u0440\u0435\u043f\u044b). \u042d\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439. \u041f\u043b\u044e\u0441 \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u0435\u0442 \u044f\u0432\u043d\u044b\u0439 \u0434\u0435\u0444\u0438\u0446\u0438\u0442 <strong>\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445<\/strong> \u0441\u043a\u0440\u0435\u043f.<\/p>\n<p><strong>\u0412\u044b\u0432\u043e\u0434<\/strong><\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 ToolChain(\u044b)  (IAR, Keil). \u0422\u0443\u0442 \u0436\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u043d\u0430 STM32. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 make, \u0442\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442\u0435 \u0431\u044b\u0442\u044c \u0440\u0430\u0431\u043e\u043c IDE \u0441 \u0438\u0445 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438. \u041f\u043b\u044e\u0441 \u043c\u043e\u0436\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c 3500 EUR \u043d\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u044f \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<\/p>\n<p><strong>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043f\u043e\u0441\u0442\u044b<\/strong><\/p>\n<p>STM32 + CMSIS + STM32CubeIDE<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/481478\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/481478\/<\/a><\/p>\n<p>ARM-\u044b \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445: \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/191058\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/191058\/<\/a><\/p>\n<p>STM32 \u043d\u0430 MAC OS<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/205028\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/205028\/<\/a><\/p>\n<p>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 STM32 \u0432 \u0441\u0440\u0435\u0434\u0435 Eclipse+GCC<br \/> <a href=\"http:\/\/we.easyelectronics.ru\/STM32\/otladka-stm32-v-srede-eclipsegcc.html\" rel=\"noopener noreferrer nofollow\">http:\/\/we.easyelectronics.ru\/STM32\/otladka-stm32-v-srede-eclipsegcc.html<\/a><\/p>\n<p>ARM-\u044b \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445: \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430-2, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438 hello world!<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/194816\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/194816\/<\/a><\/p>\n<p>STM32 + CMSIS + STM32CubeIDE<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/481478\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/481478\/<\/a><\/p>\n<p>ARM-\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b STM32F. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 c STM32-Discovery<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/128734\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/128734\/<\/a><\/p>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f STM32<br \/> <a href=\"https:\/\/bravikov.wordpress.com\/2016\/09\/11\/%D1%80%D0%B0%D0%B7%D0%B2%D0%B5%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D1%80%D0%B5%D0%B4%D1%8B-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8-%D0%B4%D0%BB%D1%8F-stm32\/\" rel=\"noopener noreferrer nofollow\">https:\/\/bravikov.wordpress.com\/2016\/09\/11\/\u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435-\u0441\u0440\u0435\u0434\u044b-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438-\u0434\u043b\u044f-stm32\/<\/a><\/p>\n<p>STM32CubeMX \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f STM32<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/213561\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/213561\/<\/a><\/p>\n<p>Eclipse \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 (STM32) + FreeRTOS Task Aware Debugge<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/441810\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/441810\/<\/a><\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0437 online \u0432 offline IDE \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 Nucleo-F401RE<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/243395\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/243395\/<\/a><\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c Cortex-M \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 STM32<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/216843\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/216843\/<\/a><\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b stm32 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 QtCreator<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/222877\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/222877\/<\/a><\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044f\u0434\u0440\u0430 ARM \u043f\u043e\u0434 Windows 10<br \/> <a href=\"https:\/\/habr.com\/ru\/post\/325450\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/325450\/<\/a><\/p>\n<p>Tutorial: Makefile Projects with Eclipse<br \/> <a href=\"https:\/\/mcuoneclipse.com\/2017\/07\/22\/tutorial-makefile-projects-with-eclipse\/\" rel=\"noopener noreferrer nofollow\">https:\/\/mcuoneclipse.com\/2017\/07\/22\/tutorial-makefile-projects-with-eclipse\/<\/a><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <\/p>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0438\u0437 Make \u0444\u0430\u0439\u043b\u043e\u0432?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             30%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:30%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             70%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             7           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:70%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 10 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c Eclipse?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             25%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:25%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             75%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             9           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:75%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 12 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0434\u043b\u044f \u041c\u041a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c GCC?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             66.67%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             6           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:66.67%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             33.33%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:33.33%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 9 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 2 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432 Windows?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             75%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             9           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:75%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             25%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:25%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 12 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0438\u0437 \u0421Make \u0444\u0430\u0439\u043b\u043e\u0432?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             45.45%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             5           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:45.45%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             54.55%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             6           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:54.55%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 11 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438\u0437 IDE IAR?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             25%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:25%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             75%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             9           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:75%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 12 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             83.33%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             10           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:83.33%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             16.67%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             2           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:16.67%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 12 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             36.36%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             4           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:36.36%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             63.64%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             7           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:63.64%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 11 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0441\u044f 1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Jenkins) \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             18.18%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             2           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:18.18%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             81.82%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             9           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:81.82%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 11 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u043a\u043e\u0434 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             27.27%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:27.27%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             72.73%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             8           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:72.73%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 11 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/673522\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 GIT?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             83.33%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span> <span class=\"tm-article-poll__answer-votes\">             10           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:83.33%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             16.67%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span> <span class=\"tm-article-poll__answer-votes\">             2           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:16.67%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 12 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0441\u044f 1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.      <\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/673522\/\"> https:\/\/habr.com\/ru\/post\/673522\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Toolchain(\u0430) \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u043f\u043e\u0434 STM32. x86-64, Win, Eclipse, GCC, Make, GDB, ST-LinkV2<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u043e\u043a\u043e\u0439 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0438 \u043a\u0430\u043a \u0441\u0432\u0430\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u043a\u043e\u043f\u0430\u044e \u0442\u0435\u043c\u0443 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c ToolChain \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Cortex-M \u0447\u0438\u043f\u0430\u0445. \u042d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442, \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 IDE (IAR, Keil, CodeComposerStudio, CodeVisionAVR \u0438 \u043f\u0440.). <\/p>\n<p><strong>\u0427\u0442\u043e \u0436\u0435 \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043a\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 DeskTop \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 STM32?<br \/><\/strong>\u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0442\u0438\u043b\u0438\u0442 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0434\u043b\u044f \u0447\u0438\u043f\u043e\u0432 STM32<strong>.<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\"><strong>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\/\u0423\u0442\u0438\u043b\u0438\u0442\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">STM32 ST-LINK Utility.ex\u0435\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">GUI \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a \u043f\u043e SWD\/JTAG<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">ST-LINK_CLI.exe  <\/p>\n<\/td>\n<td>\n<p align=\"left\">CLI  \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a \u043f\u043e SWD\/JTAG<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Putty \/TeraTerm\/HTerm  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b Serial \u043f\u043e\u0440\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">STM Studio  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u044f\u0447\u0435\u0435\u043a RAM \u043f\u0430\u043c\u044f\u0442\u0438 <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Cygwin  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0431\u043e\u0440 Unix \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f Windows<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">pdf reader  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0440\u0430\u0443\u0437\u0435\u0440 PDF \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">python  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u044f\u0437\u044b\u043a\u0430 Python<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">git-bash.exe<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 + \u0443\u0434\u043e\u0431\u043d\u044b Unix CLI \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">WinMerge  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">ST-LINK_gdbserver.exe  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">GNU Tools ARM Embedded<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f ARM<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Atollic TrueStudio  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Tor Browser<\/p>\n<\/td>\n<td>\n<p align=\"left\">Web Browser \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u0437 \u0441\u0430\u043d\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Jenkins  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0435\u0440\u0432\u0435\u0440 \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">hexdump \/hexedit  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">grep  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">find<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u0438\u0441\u043a \u0444\u0430\u0439\u043b\u0430 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0434\u043b\u044f \u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">STM32CubeMX  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">clang format  <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"223\" width=\"223\">\n<p align=\"left\">Eclipse IDE for C\/C++ Developers\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0424\u0430\u0437\u0430 1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430<\/h2>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u044d\u0442\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442, \u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e Eclipse IDE for C\/C++ Developers \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0435\u0433\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 HotKeys.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043b\u044e\u0441 \u0432 Eclipse \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0441\u0438\u043d\u0435\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435. <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0449\u0435 Eclipse \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u041a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u044b\u0448\u043a\u043e\u0439. \u0412 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043c\u044b\u0448\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. Eclipse \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Eclipse IDE for C\/C++ Developers \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u044e\u0434\u0430<br \/>https:\/\/www.eclipse.org\/downloads\/packages\/<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0441\u043a\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e. \u0412 \u041e\u0421 Windows \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c Eclipse \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0438\u0441\u043a\u0430 \u0421.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <strong>eclipse.exe<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 Eclipse \u043d\u0430\u0434\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043f\u0430\u043f\u043a\u0443 (workspace). \u0412 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 Eclipse \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b.<\/p>\n<p><strong>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Eclipse<\/strong><\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 .project, .cproject. \u0412\u0430\u0436\u043d\u043e \u0441\u043d\u044f\u0442\u044c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0441 \u043f\u0443\u043d\u043a\u0442\u0430 Makefile generation.\u00a0\u0412 \u043f\u043e\u043b\u0435 Build location \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 Makefile.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0446\u0438\u043a\u043b ToolChain(\u0430). \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Behavior<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u0440\u044f\u0447\u0435\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 Ctrl+B.<\/p>\n<h2>\u0424\u0430\u0437\u0430 2. \u041d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 ToolChain(\u0430) GCC \u043f\u043e\u0434 ARM \u0434\u043b\u044f Cross \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430 Win10<\/h2>\n<p>\u041d\u0443\u0436\u0435\u043d ToolChain: \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (cpp), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 ASM(as), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0421 (gcc),\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0421++(g++), \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a(ld), \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a(gdb). \u041d\u0443\u0436\u043d\u044b binutils(\u044b) \u0434\u043b\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432(nm, size, readelf), \u0430\u0440\u0445\u0438\u0432\u0430\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a(ar), \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 (*.\u0441, *.h) \u0432 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b (*.hex *.bin *.map *.elf *.out \u0444\u0430\u0439\u043b\u0438\u043a\u0438).<\/p>\n<p>ToolChain \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443<\/p>\n<p>C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin\\<\/p>\n<p>\u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 GCC ARM. \u0412\u0441\u0435\u0433\u043e 28 \u0443\u0442\u0438\u043b\u0438\u0442.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 3 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Windows Build Tools binaries (Make, cp, rm, echo, sh&#8230;)<\/strong> <\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0421(\u044f\u0445) \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 Make \u0444\u0430\u0439\u043b\u044b. \u041d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e \u0443\u0434\u0438\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438\u0437 make. \u0412 1970\u0435 \u0433\u043e\u0434\u0430 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0430 make \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0443\u0447\u0435\u043d\u044b\u0435 \u0441\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u044f\u043c\u0438 \u0434\u043e\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u0443\u043a. \u0422\u043e\u0433\u0434\u0430 \u0443 \u0448\u043a\u043e\u043b\u043e\u0442\u044b \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u0438\u0445 \u0434\u043e\u0440\u043e\u0433\u043e\u0432\u0438\u0437\u043d\u044b. \u0412 197x \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u043b\u044e\u0434\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b-\u0448\u0435\u0434\u0435\u0432\u0440\u044b \u043a\u0430\u043a make, grep, find, sort \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Make \u0444\u0430\u0439\u043b\u0430\u043c\u00a0 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0431\u043e\u0440\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043e-\u043f\u043e\u043b\u043d\u043e\u0439. \u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0442\u0435\u043d \u0441\u0431\u043e\u0440\u043e\u043a. \u042d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a\u0438\u043c GUI(\u043d\u044f\u043c) \u043a\u0430\u043a IAR \u0441 Keil, \u0433\u0434\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u0438\u0440\u0430\u0442\u044c \u0434\u044b\u0440\u044b \u0432 \u043a\u043e\u0432\u0440\u0438\u043a\u0435 \u0434\u043b\u044f \u043c\u044b\u0448\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0432 make \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u0432 *.mk. \u0412\u043e\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u0430 Make \u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\"><strong>\u0423\u0442\u0438\u043b\u0438\u0442\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">make<\/p>\n<\/td>\n<td>\n<p align=\"left\">build automation tool<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">sh<\/p>\n<\/td>\n<td>\n<p align=\"left\">Unix shell interpreter<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">busybox<\/p>\n<\/td>\n<td>\n<p align=\"left\">a software suite that provides several Unix utilities<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">echo<\/p>\n<\/td>\n<td>\n<p align=\"left\">Echo the STRING(s) to standard output.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">cp<\/p>\n<\/td>\n<td>\n<p align=\"left\">Copy SOURCEs to DEST<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">mkdir<\/p>\n<\/td>\n<td>\n<p align=\"left\">Create DIRECTORY<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"134\" width=\"134\">\n<p align=\"left\">rm<\/p>\n<\/td>\n<td>\n<p align=\"left\">Remove (unlink) FILEs<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u0413\u0434\u0435 \u0436\u0435 \u043c\u043d\u0435 \u0432\u0437\u044f\u0442\u044c <strong>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439<\/strong> MakeFile \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043d\u043e\u0433\u043e-\u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432? \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u044d\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c STM32CubeMX \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c MakeFile \u043f\u0440\u043e\u0435\u043a\u0442. \u0414\u0430\u043b\u0435\u0435 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u0440\u0431\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0434 \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438.<\/p>\n<pre><code class=\"bash\">mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) $(info Build  $(mkfile_path) )  BUILD_DIR = build  #@echo $(error SOURCES_C= $(SOURCES_C)) INCDIR := $(subst \/cygdrive\/c\/,C:\/, $(INCDIR)) #@echo $(error INCDIR=$(INCDIR)) SOURCES_C := $(subst \/cygdrive\/c\/,C:\/, $(SOURCES_C)) #@echo $(error SOURCES_C=$(SOURCES_C)) SOURCES_ASM := $(subst \/cygdrive\/c\/,C:\/, $(SOURCES_ASM)) LDSCRIPT := $(subst \/cygdrive\/c\/,C:\/, $(LDSCRIPT)) #@echo $(error SOURCES_ASM=$(SOURCES_ASM))  # binaries PREFIX = arm-none-eabi- # The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) # either it can be added to the PATH environment variable. ifdef GCC_PATH   CC = $(GCC_PATH)\/$(PREFIX)gcc   AS = $(GCC_PATH)\/$(PREFIX)gcc -x assembler-with-cpp   CP = $(GCC_PATH)\/$(PREFIX)objcopy   SZ = $(GCC_PATH)\/$(PREFIX)size else   CC = $(PREFIX)gcc   AS = $(PREFIX)gcc -x assembler-with-cpp   CP = $(PREFIX)objcopy   SZ = $(PREFIX)size endif HEX = $(CP) -O ihex BIN = $(CP) -O binary -S   # CFLAGS #https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/ARM-Options.html FPU =  FPU += -mfpu=fpv4-sp-d16  FLOAT-ABI = -mfloat-abi=hard  MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)  CSTANDARD = -std=c11  AS_DEFS =   AS_INCLUDES =  OPT += -Os      ifeq ($(DEBUG), Y)     #@echo $(error DEBUG=$(DEBUG))     CFLAGS += -g3 -gdwarf-2 -ggdb endif  ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections  CFLAGS += $(MCU) $(OPT) $(INCDIR) -Wall -fdata-sections -ffunction-sections $(CSTANDARD)   # Generate dependency information CFLAGS += -MMD -MP -MF\"$(@:%.o=%.d)\"  # LDFLAGS  # libraries LINKER_FLAGS += -Xlinker --gc-sections  ifeq ($(MBR), Y)     #@echo $(error MBR=$(MBR))     LIBS += -lnosys else     LIBS += -lnosys      LINKER_FLAGS += -u _scanf_float     LINKER_FLAGS += -u _printf_float endif  ifeq ($(LIBC), Y)     #@echo $(error LIBC=$(LIBC))     LIBS += -lc endif  ifeq ($(MATH), Y)     #@echo $(error MATH=$(MATH))     LIBS += -lm  endif   #@echo $(error LDSCRIPT=$(LDSCRIPT)) LIBDIR =   LDFLAGS += $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)\/$(TARGET).map,--cref -Wl,--gc-sections $(LINKER_FLAGS)  # default action: build all all: $(BUILD_DIR)\/$(TARGET).elf $(BUILD_DIR)\/$(TARGET).hex $(BUILD_DIR)\/$(TARGET).bin   # build the application # list of objects OBJECTS = $(addprefix $(BUILD_DIR)\/,$(notdir $(SOURCES_C:.c=.o))) vpath %.c $(sort $(dir $(SOURCES_C))) # list of ASM program objects OBJECTS += $(addprefix $(BUILD_DIR)\/,$(notdir $(SOURCES_ASM:.S=.o))) vpath %.S $(sort $(dir $(SOURCES_ASM)))  $(BUILD_DIR)\/%.o: %.c Makefile | $(BUILD_DIR)  $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)\/$(notdir $(&lt;:.c=.lst)) $&lt; -o $@  $(BUILD_DIR)\/%.o: %.S Makefile | $(BUILD_DIR) $(AS) -c $(CFLAGS) $&lt; -o $@  $(BUILD_DIR)\/$(TARGET).elf: $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) -o $@ $(SZ) $@  $(BUILD_DIR)\/%.hex: $(BUILD_DIR)\/%.elf | $(BUILD_DIR) $(HEX) $&lt; $@  $(BUILD_DIR)\/%.bin: $(BUILD_DIR)\/%.elf | $(BUILD_DIR) $(BIN) $&lt; $@  $(BUILD_DIR): mkdir $@  # clean up clean: -rm -fR $(BUILD_DIR)    # dependencies -include $(wildcard $(BUILD_DIR)\/*.d)  # *** EOF ***<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 make \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430<\/p>\n<pre><code class=\"bash\">$(info IWDG_MK_INC=$(IWDG_MK_INC) ) ifneq ($(IWDG_MK_INC),Y)     IWDG_MK_INC=Y          mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))     $(info Build  $(mkfile_path) )          IWDG_DIR = $(WORKSPACE_LOC)bsp\/bsp_stm32f4\/iwdg     #@echo $(error IWDG_DIR=$(IWDG_DIR))     IWDG=Y     INCDIR += -I$(IWDG_DIR)     OPT += -DHAS_IWDG      SOURCES_C += $(IWDG_DIR)\/iwdg_drv.c      ifeq ($(CLI),Y)         ifeq ($(IWDG_COMMANDS),Y)             OPT += -DHAS_IWDG_COMMANDS             SOURCES_C += $(IWDG_DIR)\/iwdg_commands.c         endif     endif endif <\/code><\/pre>\n<p>\u0410 \u044d\u0442\u043e MakeFile \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<pre><code class=\"bash\">MK_PATH:=$(dir $(realpath $(lastword $(MAKEFILE_LIST)))) #@echo $(error MK_PATH=$(MK_PATH)) WORKSPACE_LOC:= $(MK_PATH)..\/..\/ INCDIR += -I$(MK_PATH) INCDIR += -I$(WORKSPACE_LOC)  include $(MK_PATH)components.mk include $(MK_PATH)cli_config.mk include $(MK_PATH)diag_config.mk include $(MK_PATH)test_config.mk include $(WORKSPACE_LOC)code_base.mk include $(WORKSPACE_LOC)rules.mk <\/code><\/pre>\n<p> \u0412 Makefile \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c Include guard \u043f\u043e\u0434\u043e\u0431\u043d\u043e *.h \u0444\u0430\u0439\u043b\u0430\u043c \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<pre><code class=\"bash\">$(info FILE_MK_INC=$(FILE_MK_INC)) ifneq ($(FILE_MK_INC),Y)     FILE_MK_INC=Y endif<\/code><\/pre>\n<p>\u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041e\u0434\u0438\u043d Makefile \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e *.mk \u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n<p>Windows Build Tools binaries \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435\u00a0<\/p>\n<p><a href=\"https:\/\/github.com\/xpack-dev-tools\/windows-build-tools-xpack\/releases\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/xpack-dev-tools\/windows-build-tools-xpack\/releases\/<\/u><\/a><\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b Windows Build Tools\u00a0 \u0432 \u043f\u0430\u043f\u043a\u0443 <\/p>\n<p>C:\\xpack-windows-build-tools-4.3.0-1\\bin<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 4 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0430 (Linker(\u0430)). (*.ld \u0444\u0430\u0439\u043b)<\/strong><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 *.\u0441 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 *.o \u0444\u0430\u043b\u043e\u0432. \u0418\u0445 \u043d\u0430\u0434\u043e \u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u0438\u043d *.bin \u0444\u0430\u0439\u043b. \u042d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 arm-none-eabi-<strong>ld<\/strong>.exe. \u041a\u0430\u043a \u0438<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-335020","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=335020"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335020\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=335020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=335020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=335020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}