{"id":454131,"date":"2025-04-01T16:28:44","date_gmt":"2025-04-01T16:28:44","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=454131"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=454131","title":{"rendered":"<span>VSCode, SourceCraft Code\u00a0Assistant \u0438\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/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<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/785\/65f\/5c9\/78565f5c9169f521a7188fa4956729bb.png\" width=\"1560\" height=\"880\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/785\/65f\/5c9\/78565f5c9169f521a7188fa4956729bb.png\"\/><\/figure>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0434\u043b\u044f\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0445\u0435\u043c\u044b \u0438 \u043f\u043b\u0430\u0442\u044b. \u0421\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u043a\u043e\u0432\u0438\u0434\u0430 \u043f\u0440\u043e\u0448\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0431\u0435\u0437\u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u044b\u0447\u0435\u0441\u0442\u0432\u0430 STM32, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435\u00a0\u0436\u0435\u043b\u0435\u0437\u043a\u0438. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0434\u043b\u044f\u00a0\u043d\u0438\u0445 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u044f\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00a0\u2014 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c VSCode \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u043f\u043e\u0434\u00a0\u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043a\u0430\u043a\u00a0\u043c\u043d\u0435 \u0432\u00a0\u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 <a href=\"https:\/\/yandex.cloud\/ru\/services\/code-assistant\">SourceCraft Code Assistant<\/a> \u043e\u0442\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Yandex Cloud &amp; Yandex Infrastructure.<\/p>\n<h2>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u0430 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c VSCode \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/h2>\n<p>\u0412\u00a0\u0441\u0435\u0442\u0438 (\u0438 \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435) \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 VScode \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438. \u0417\u0430\u0447\u0435\u043c yet another one? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0432\u00a0\u0442\u0435\u0445, \u0447\u0442\u043e\u00a0\u0435\u0441\u0442\u044c, \u044f \u043d\u0435\u00a0\u043e\u0431\u0440\u0451\u043b \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u0441\u0432\u043e\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439. \u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435\u00a0\u2014 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0430\u0432\u0442\u043e\u0440\u0430\u043c!<\/p>\n<p>\u042f \u043b\u044e\u0431\u043b\u044e, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e, \u0438 \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442 \u044f \u043e\u043f\u0438\u0441\u0430\u043b, \u043a\u0430\u043a\u00a0\u044f \u0434\u0435\u043b\u0430\u043b \u0441\u0435\u0431\u0435 \u0443\u0434\u043e\u0431\u043d\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e), \u0434\u043b\u044f\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439 \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u00a0\u2014 \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. <\/p>\n<p>\u042f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438, \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u00a0Windows. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u00a0Windows \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0440\u0435\u0447\u044c. <\/p>\n<p>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u00a0\u0436\u0435 \u0434\u0438\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0435\u043c\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438. \u041c\u043e\u044f \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0432\u00a0\u0433\u043e\u0434 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u043d\u044b\u0445\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u043a \u0441\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u043e\u0442\u00a0\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439, \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u044f\u0434\u0440\u0430\u043c\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0434\u0430\u043c\u0438 \u043f\u0438\u043b\u044f\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442\u00a0\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434\u00a0\u043e\u0434\u043d\u0443 \u0438 \u0442\u0443\u00a0\u0436\u0435\u00a0\u0436\u0435\u043b\u0435\u0437\u043a\u0443\u00a0\u2014 \u0438\u043c \u043c\u043e\u0439 \u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u0447\u0443\u0436\u0434. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441\u00a0STM32, GD32, WCH, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u043c RISC\u2011V \u044f\u0434\u0440\u043e\u043c \u0432\u00a0\u041f\u041b\u0418\u0421 GOWIN. \u0418 \u0435\u0449\u0451 \u043f\u0438\u0448\u0443 \u043d\u0430\u00a0Verilog \u0434\u043b\u044f\u00a0\u0442\u0435\u0445\u00a0\u0436\u0435 GOWIN. \u0410\u00a0\u0435\u0449\u0451 \u043c\u043d\u0435 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430\u00a0Python. <\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445, \u0430\u00a0\u043d\u0435\u00a0\u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. Verilog \u0438 Risc\u2011V\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0434 \u0434\u043b\u044f\u00a0\u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0438\u0445 \u0441\u0442\u0435\u043d\u0434\u043e\u0432\u2011\u0434\u0436\u0438\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0442 \u0442\u044b\u0441\u044f\u0447\u0438 \u043f\u043b\u0430\u0442 \u042f\u043d\u0434\u0435\u043a\u0441 \u0421\u0442\u0430\u043d\u0446\u0438\u0439 \u0432\u00a0\u0434\u0435\u043d\u044c. \u041a\u043e\u0434 \u0434\u043b\u044f\u00a0STM32, GD32\u00a0\u0438 WCH\u00a0\u2014 \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c RND\u2011\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0434\u043b\u044f\u00a0\u042f\u043d\u0434\u0435\u043a\u0441\u0430, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 Pet Projects, \u0440\u0430\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0435\u0441\u044f \u043f\u043e\u00a0\u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0435, \u0442\u0438\u043f\u0430 \u043f\u043b\u0430\u0442 \u0434\u043b\u044f\u00a0\u0448\u043a\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0430\u00a0\u043a\u0432\u0430\u0434\u0440\u043e\u043a\u043e\u043f\u0442\u0435\u0440\u0430\u0445 \u043f\u043e\u0434\u00a0\u044d\u0433\u0438\u0434\u043e\u0439 <a href=\"https:\/\/kruzhok.org\">\u00ab\u041a\u0440\u0443\u0436\u043a\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u00bb<\/a>. \u0418 \u0435\u0449\u0451 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u00a0\u044d\u0442\u043e \u0432\u0441\u0451 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0438\u043c \u0441\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u043c \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0437\u0431\u0435\u0433\u0430\u044e \u0434\u043e\u0440\u043e\u0433\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 J\u2011Link \u0438 CLion, \u0434\u0430\u00a0\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u0430 Keil \u043d\u0435\u00a0\u0436\u0430\u043b\u0443\u044e.<\/p>\n<p>\u042f \u043d\u0435\u00a0\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c HAL \u043e\u0442\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439: \u043f\u0438\u0448\u0443 \u043d\u0430\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0438\u043b\u0438\u00a0\u0434\u0435\u043b\u0430\u044e \u0441\u0432\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u0435\u043d. HAL \u043e\u0442\u00a0ST \u043c\u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u0435\u043d, HAL \u043e\u0442\u00a0GD \u0435\u0449\u0451 \u0445\u0443\u0436\u0435, \u0430\u00a0HAL \u043e\u0442\u00a0GOWIN \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0431\u0430\u0433\u0438 \u0442\u0438\u043f\u0430 uint8_t \u0434\u043b\u044f\u00a0\u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c 16-\u0431\u0438\u0442\u043d\u044b\u043c\u0438. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u00abHAL \u0438\u043b\u0438\u00a0\u043d\u0435\u00a0HAL\u00bb\u00a0\u2014 \u044d\u0442\u043e \u0442\u0435\u043c\u0430 \u0434\u043b\u044f\u00a0\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u043e\u0439\u043d\u044b, \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u043c \u043e\u0431\u00a0\u044d\u0442\u043e\u043c. <\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438: \u043a\u0430\u043a\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 Eclipse \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c GCC \u0438 \u0441\u0432\u043e\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u043e\u0440\u043a\u043e\u043c OpenOCD. \u0423\u00a0ST \u044d\u0442\u043e CubeIDE, \u0443\u00a0GOWIN\u00a0\u2014 MCU Designer, \u0443\u00a0WCH\u00a0\u2014 MounRiver Studio (\u0441 \u0444\u043e\u0440\u043a\u043e\u043c GCC, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432\u00a0\u0438\u0445 MCU \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u0438\u00a0\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 <code>attribute((interrupt(\"WCH-Interrupt-fast\"))<\/code> ). \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u00a0\u043a\u043e\u043c\u043f\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438\u0445 Eclipse. \u0410\u00a0\u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432\u00a0\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u043b\u043e\u0436\u0438\u043b \u0441\u0435\u043c\u044c \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0441\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440 \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043a\u043e\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u044d\u0442\u043e\u0442 \u0421++20. \u0410\u00a0\u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/companies\/otus\/articles\/669532\/\">std::span<\/a>), \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u044f \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0432\u00a0\u043f\u043b\u0430\u0433\u0438\u043d\u0430\u0445 \u043f\u043e\u0440\u043e\u0439 \u0432\u044b\u043f\u0438\u043b\u0435\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u043f\u043b\u0430\u0433\u0438\u043d\u0435 MCU Designer \u043e\u0442\u00a0GOWIN \u0443\u0431\u0440\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u00a0\u043a\u043d\u043e\u043f\u043a\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 exe, \u0430\u00a0\u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043b\u0438\u0432\u043a\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u0438\u0437\u00a0IDE \u043f\u043e\u00a0\u043a\u043d\u043e\u043f\u043a\u0435. \u041d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u043e\u043a\u043d\u043e \u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u0438 \u043c\u044b\u0448\u044c\u044e \u0432\u00a0GUI \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043b\u0438\u0432\u043a\u0438. \u041c\u0435\u043d\u044f \u0442\u0430\u043a\u043e\u0435, \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u0431\u0435\u0441\u0438\u0442. \u041d\u043e\u00a0\u0437\u0430\u0442\u043e \u0432\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u00a0\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438! \u0410\u00a0\u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0438 \u043d\u0435\u0442.<\/p>\n<p>GigaDevice \u0441\u0442\u043e\u044f\u0442 \u043e\u0441\u043e\u0431\u043d\u044f\u043a\u043e\u043c: \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0435\u00a0IDE, \u0430\u00a0\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0Keil, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u0443\u043f\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u041c\u043d\u0435 \u043d\u0435\u00a0\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f Keil, \u044f \u043d\u0435\u00a0\u0445\u043e\u0447\u0443 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e IDE \u0440\u0430\u0434\u0438 GD, \u043c\u0435\u043d\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. <\/p>\n<p>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u0433\u043e\u0434\u044b \u0436\u0438\u043b \u043d\u0430\u00a0\u043d\u0430\u0431\u043e\u0440\u0435: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Eclipse IDE for Embedded C\/C++ Developers \u0431\u0435\u0437\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 + \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0435 GCC\u2011\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u043b\u044f\u00a0ARM \u0438 RiscV. \u041d\u0435\u00a0\u0432\u0441\u0451 \u0433\u043b\u0430\u0434\u043a\u043e \u0441\u00a0Eclipse: \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0432\u0438\u0441\u043d\u0435\u0442, \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438 \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u043d\u043e, \u0430\u00a0\u0435\u0449\u0451 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0431\u0430\u0433\u0430 \u0441\u00a0Code Folding, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 15\u00a0\u043b\u0435\u0442 \u0442\u0430\u043a \u0438 \u043d\u0435\u00a0\u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b\u0438: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c5d\/4e9\/c08\/c5d4e9c08c002c51e7d3cdeec80885d9.png\" width=\"1600\" height=\"803\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5d\/4e9\/c08\/c5d4e9c08c002c51e7d3cdeec80885d9.png\"\/><\/figure>\n<p>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0\u0431\u044b\u043b\u0430 \u0441\u0432\u0451\u0440\u043d\u0443\u0442\u0430, \u043d\u043e\u00a0\u0441\u0430\u043c\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0430\u043a\u00a0\u0431\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c. \u041d\u043e\u00a0\u043d\u0435\u00a0\u0441\u043e\u0432\u0441\u0435\u043c, \u0430\u00a0\u043a\u0430\u043a\u2011\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0447\u0430\u0442\u043e, \u0441\u00a0\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u0430\u043c\u0438 \u044d\u0442\u0438\u043c\u0438. \u0411\u0435\u0441\u0438\u0442, \u0437\u043d\u0430\u0435\u0442\u0435\u00a0\u043b\u0438. <\/p>\n<p>\u0414\u0440\u0443\u0437\u044c\u044f \u043d\u0435\u00a0\u0440\u0430\u0437 \u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b\u0438 \u043c\u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0VScode. \u042f \u0434\u0435\u043b\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a\u00a0\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0440\u044f\u0434\u0443, \u043d\u043e\u00a0\u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043b. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u043e\u0431\u0438\u043b\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, VScode\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 tasks \u0438 \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a\u00a0\u0437\u0430\u0434\u0430\u0447\u0435 \u00abVScode + MCU\u00bb \u0435\u0441\u0442\u044c \u0434\u0432\u0430: \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0415\u0434\u0438\u043d\u044b\u0439\u2011\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439\u2011\u041f\u043b\u0430\u0433\u0438\u043d\u2011\u0414\u043b\u044f\u2011\u0412\u0441\u0435\u0433\u043e \u0438\u043b\u0438\u00a0\u043a\u0430\u0447\u0430\u0435\u043c \u043a\u0443\u0447\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u0445. <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u041f\u043b\u0430\u0433\u0438\u043d\u0430\u2011\u0414\u043b\u044f\u2011\u0412\u0441\u0435\u0433\u043e \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u00a0\u0412\u0441\u0451, \u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0447\u043b\u0438 \u043d\u0443\u0436\u043d\u044b\u043c \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c. \u0410\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u0438 \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u043b\u044f\u00a0ARM \u0438 RiscV\u00a0\u2014 \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0418\u043b\u0438\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430: \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0447\u0442\u043e\u2011\u0442\u043e \u043e\u0434\u043d\u043e\u00a0\u2014 bin \u0438\u043b\u0438\u00a0hex. \u0410\u00a0\u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043e\u0431\u0430? \u0423\u0432\u044b \u043c\u043d\u0435. \u0418\u043b\u0438\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430\u00a0\u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u0432\u2011\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u0432: \u0435\u0441\u0442\u044c STLink, J\u2011Link, \u043d\u043e\u00a0\u043d\u0435\u0442 Black Magic Probe (\u0430 \u0443\u00a0\u043c\u0435\u043d\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438).<\/p>\n<p>\u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u00a0\u2014 \u0441\u00a0\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u00a0\u043c\u043e\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u00a0\u2014 EmbeddedIDE \u0438 PlatformIO. <\/p>\n<p>\u041a\u0443\u0447\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043d\u043e\u0440\u043c, \u043d\u043e\u00a0\u0432\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445 \u044f \u043d\u0435\u00a0\u043d\u0430\u0448\u0451\u043b, \u043a\u0430\u043a\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u0443\u0434\u043e\u0431\u043d\u043e. \u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431 \u044f \u043c\u043e\u0433 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c\u2011\u0443\u0434\u0430\u043b\u0438\u0442\u044c\u2011\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u043f\u0440\u0435\u0442\u0438\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 CMake, \u043a\u043b\u0430\u0441\u0442\u044c \u0432\u00a0\u043a\u0430\u0436\u0434\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 CMakeLists.txt \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438. \u0412\u00a0Eclipse \u0432\u00a0\u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0432\u0441\u0451 \u0443\u0434\u043e\u0431\u043d\u043e. <\/p>\n<h2>\u0418\u00a0\u0442\u0443\u0442 \u044f\u00a0\u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441\u00a0AI-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043e\u043c<\/h2>\n<p>\u0412\u00a0\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u042f\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0432\u00a0\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0431\u0435\u0442\u0443 <a href=\"https:\/\/yandex.cloud\/ru\/services\/code-assistant\">Code Assistant<\/a>. \u041d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435 \u043e\u0431\u00a0\u044d\u0442\u043e\u043c \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/companies\/yandex\/articles\/841436\/\">\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437<\/a>. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u044d\u0442\u043e AI\u2011\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441\u00a0\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043e\u043c\u00a0\u0431\u044b\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043f\u043e\u0434\u00a0PyCharm Community \u0438 VScode. \u042f \u0441\u043f\u0440\u043e\u0441\u0438\u043b: \u00ab\u0410 \u043f\u043e\u0434\u00a0Eclipse?\u00bb \u00ab\u041d\u0435\u0442,\u00a0\u2014 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0438 \u043c\u043d\u0435.\u00a0\u2014 \u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d, \u0442\u043e \u043c\u043e\u0436\u0435\u0448\u044c \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0430\u043c \u0441\u00a0\u044d\u0442\u0438\u043c\u00bb.<\/p>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u043b\u0438 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u00a0\u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432\u00a0\u2014 \u0443\u0447\u0438\u043b\u0438\u2011\u0442\u043e \u0435\u0451 \u043d\u0430\u00a0\u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u043c \u043a\u043e\u0434\u0435. \u0425\u0430, \u043d\u0435\u00a0\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0448\u044c\u00a0\u2014 \u043d\u0435\u00a0\u0443\u0437\u043d\u0430\u0435\u0448\u044c. \u041d\u043e\u00a0\u043b\u0430\u0434\u043d\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0439 \u0421++, \u0430\u00a0\u043a\u0430\u043a\u00a0\u043d\u0430\u0441\u0447\u0451\u0442 \u0432\u0435\u0440\u0438\u043b\u043e\u0433\u0430? \u041c\u043d\u0435 \u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0441\u043e\u043e\u0440\u0443\u0434\u0438\u0442\u044c \u0441\u0438\u0433\u043c\u0430\u2011\u0434\u0435\u043b\u044c\u0442\u0430\u2011\u043c\u043e\u0434\u0443\u043b\u044f\u0442\u043e\u0440. <\/p>\n<p>\u042f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b VScode, \u043d\u0430\u0448\u0451\u043b \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0432\u0435\u0440\u0438\u043b\u043e\u0433\u0430 \u0438 \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c. \u041f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u00a0\u0432\u00a0\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. SourceCraft Code Assistant \u0441\u0442\u0430\u043b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u0443\u044e \u043c\u0435\u043b\u043e\u0447\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d1\/c1b\/027\/2d1c1b027d11ff110a959b0e2c4b0508.png\" width=\"1600\" height=\"270\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d1\/c1b\/027\/2d1c1b027d11ff110a959b0e2c4b0508.png\"\/><\/figure>\n<p>\u041a\u0430\u043a\u00a0\u043e\u043d \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f, \u0447\u0442\u043e\u00a0\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440?<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0438 \u043f\u043e\u043a\u0440\u0443\u043f\u043d\u0435\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f06\/39d\/480\/f0639d4808fdf1849b4793e9b25c7d95.png\" width=\"1600\" height=\"465\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f06\/39d\/480\/f0639d4808fdf1849b4793e9b25c7d95.png\"\/><\/figure>\n<p>\u041f\u043e\u0442\u043e\u043c \u043e\u043d \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0446\u0435\u043b\u044b\u0439 \u0431\u043b\u043e\u043a \u0434\u043b\u044f\u00a0\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438: \u043f\u043e\u0447\u0438\u0442\u0430\u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u043e\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044f. <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0443\u0436\u0435 \u0421++, \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f VScode \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u0432\u00a0Eclipse \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/84f\/447\/f0e\/84f447f0ef64e4b6f0d4b911667c92f8.png\" width=\"1600\" height=\"589\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/84f\/447\/f0e\/84f447f0ef64e4b6f0d4b911667c92f8.png\"\/><\/figure>\n<p>\u0418 \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50a\/6d3\/90e\/50a6d390e3a8bc70dab47ab5dbb4f527.png\" width=\"1600\" height=\"646\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50a\/6d3\/90e\/50a6d390e3a8bc70dab47ab5dbb4f527.png\"\/><\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0\u043e\u043d \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0432\u0441\u0451\u00a0\u0436\u0435 \u043d\u0435\u00a0\u0447\u0438\u0442\u0430\u0435\u0442 \u043c\u044b\u0441\u043b\u0438 \u0438 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u043e\u043c\u0430\u0445\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u041d\u043e\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e. \u0418\u0441\u0447\u0435\u0437\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u043e\u043b\u043a\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d66\/87b\/9c6\/d6687b9c69138b58f14bf07c2961aeeb.png\" width=\"1600\" height=\"931\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d66\/87b\/9c6\/d6687b9c69138b58f14bf07c2961aeeb.png\"\/><\/figure>\n<p>\u0422\u0430\u043c \u0435\u0449\u0451 15\u00a0\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u0438 SourceCraft Code Assistant \u043c\u043d\u0435 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u00a0\u2014 \u0418\u0418 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0443\u00a0\u043c\u0435\u043d\u044f \u043d\u0430\u00a0\u043a\u0430\u043a\u043e\u0439 \u0446\u0435\u043f\u0438 \u0441\u0442\u043e\u0438\u0442. <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0432 \u043d\u0430\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u043a\u043e\u0434\u0438\u0442\u044c \u0432\u00a0Eclipse \u043f\u043e\u2011\u0441\u0442\u0430\u0440\u043e\u043c\u0443, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0432\u0441\u0451\u00a0\u2014 \u043f\u043e\u2011\u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u043c\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u042d\u0442\u043e \u0447\u0442\u043e, \u043d\u0443\u0436\u043d\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043e\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a?<\/p>\n<p>\u0415\u0449\u0451 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0440\u0443\u0433\u043e\u0439 \u0418\u0418\u2011\u043f\u043b\u0430\u0433\u0438\u043d \u043f\u043e\u0434\u00a0Eclipse. \u0418\u0445 \u0435\u0441\u0442\u044c \u0441\u00a0\u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0432\u043e\u00a0\u0433\u043b\u0430\u0432\u0435 \u0441\u00a0Copilot \u043e\u0442\u00a0GitHub, \u043d\u043e\u00a0\u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043e\u0431\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u0430\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430\u00a0\u043c\u0435\u043d\u044f \u0431\u0435\u0441\u0438\u0442 \u0438\u0434\u0435\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c VPN, \u0447\u0442\u043e\u0431 \u043f\u043e\u043a\u043e\u0434\u0438\u0442\u044c. \u0422\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c AI\u2011\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u042f\u043d\u0434\u0435\u043a\u0441\u0430,\u00a0\u2014 \u0445\u0443\u0436\u0435 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0435\u0442. <\/p>\n<p>\u0412\u00a0\u043e\u0431\u0449\u0435\u043c, \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0451\u00a0\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c VScode \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. <\/p>\n<h2>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/h2>\n<h3>\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440<\/h3>\n<p>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f <strong>\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0438 \u0441\u043c\u0435\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/strong> \u0442\u0438\u043f\u0430 OpenOCD, \u0442\u043e \u0435\u0441\u0442\u044c tools, \u0438\u043b\u0438\u00a0Toolchain. \u0412\u00a0\u043a\u043e\u0440\u043d\u0435 \u0434\u0438\u0441\u043a\u0430 \u0421\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0430\u043f\u043a\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0438\u043b\u0438\u00a0\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u043e\u0432 \u0441\u043e\u0444\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u044d\u0442\u0443 \u043f\u0430\u043f\u043a\u0443. <\/p>\n<p>\u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c x\u2011packs, \u043d\u043e\u00a0\u043c\u043d\u0435 \u043d\u0435\u00a0\u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c: \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 xpm, \u0430\u00a0\u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 npm \u043e\u0442\u00a0Node.js, \u0430\u00a0\u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u0447\u0442\u043e\u2011\u0442\u043e. \u0412\u0430\u0436\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0432\u00a0\u043d\u0443\u0436\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u0432\u00a0\u043f\u0443\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 \u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u0431\u0443\u043a\u0432. \u0415\u0449\u0451 \u044f \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e \u043d\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u043f\u0443\u0442\u0435\u0439 \u0432\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 PATH, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043f\u0438\u0448\u0443\u0442 \u0441\u0432\u043e\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u00a0\u0441\u0442\u0435\u0441\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043a\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432\u00a0\u2014 \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u00a0x\u2011packs. \u042d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u00a0\u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u00a0\u2014 \u043f\u0440\u0438\u0447\u0451\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435\u00a0\u043f\u043e\u0434\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0442\u00a0WCH, OpenOCD \u043e\u0442\u00a0GigaDevice \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a \u043e\u0442\u00a0GOWIN.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e <strong>\u043f\u0440\u043e\u0435\u043a\u0442\u044b<\/strong>. \u0412\u00a0\u043a\u043e\u0440\u043d\u0435 \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u043f\u0430\u043f\u043a\u0430 \u0434\u043b\u044f\u00a0VSCode \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0435\u0437\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u043b\u0438\u00a0\u0441\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u043f\u0430\u043f\u043a\u0430.vscode, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0430\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a VScode:<\/p>\n<ul>\n<li>\n<p>tasks.json\u00a0\u2014 \u043d\u0430\u0431\u043e\u0440 \u0442\u0430\u0441\u043a\u043e\u0432 \u0434\u043b\u044f\u00a0\u0431\u0438\u043b\u0434\u0438\u043d\u0433\u0430, \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>settings.json\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>launch.json\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>c_cpp_properties.json\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 C\/C++, \u0432\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 makefile;<\/p>\n<\/li>\n<li>\n<p>\u0444\u0430\u0439\u043b\u044b version.h \u0438 version.cpp, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0441\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0444\u0430\u0439\u043b.svd (\u0435\u0441\u043b\u0438 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438). <\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0435\u0441\u0442\u044c <a href=\"https:\/\/gitverse.ru\/Kreyl\/VSCodeTemplates\">\u043d\u0430\u00a0Gitverse<\/a>. \u0423\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435: \u044d\u0442\u043e \u043f\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0438 Pet Projects \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0434\u043b\u044f\u00a0\u0411\u0430\u0443\u043c\u0430\u043d\u043a\u0438, \u043a\u00a0\u042f\u043d\u0434\u0435\u043a\u0441\u0443 \u043e\u043d\u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u0438\u043c\u0435\u044e\u0442.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a<strong>\u00a0\u0436\u0435\u043b\u0435\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430\u043c\u2011\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430\u043c<\/strong>. \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u00a0STLink + stlink_server (\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e STM32), STLink + OpenOCD (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0441\u00a0GD32), DAP\u2011Link + OpenOCD, Black Magic Probe. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u0442\u044c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0Black Magic Probe \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0418 \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e\u00a0\u2014 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u043a\u0438 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 OpenOCD. \u0412\u0441\u0451 \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u0432\u00a0Eclipse.<\/p>\n<p>\u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0430\u00a0\u2014 \u0432\u044b\u0437\u043e\u0432 make \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0441\u043a\u0438 VSCode;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0441\u043a\u0438: \u0432\u044b\u0437\u043e\u0432 make \u0438\u043b\u0438\u00a0\u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043b\u0430\u0434\u043a\u0430\u00a0\u2014 Launch \u0441\u00a0\u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438. <\/p>\n<h3>\u041f\u0430\u043f\u043a\u0430 \u0441\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u043c\u0438 \u0438\u00a0\u043f\u0440\u043e\u0447\u0438\u043c\u00a0<\/h3>\n<p>\u041f\u0430\u043f\u043a\u0443 \u044f \u043d\u0430\u0437\u0432\u0430\u043b YaStudio (Yet Another Studio). \u0418 \u0432\u043e\u0442 \u0447\u0442\u043e\u00a0\u0432\u00a0\u043d\u0435\u0439 \u0435\u0441\u0442\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f1d\/d3d\/598\/f1dd3d598b5d7d6618df5861133eb781.png\" width=\"1600\" height=\"509\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f1d\/d3d\/598\/f1dd3d598b5d7d6618df5861133eb781.png\"\/><\/figure>\n<ul>\n<li>\n<p>arm\u2011none\u2011eabi\u2011gcc\u00a0\u2014 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f\u00a0ARM;<\/p>\n<\/li>\n<li>\n<p>build\u2011tools\u00a0\u2014 \u0442\u0430\u043c \u043b\u0435\u0436\u0438\u0442 make.exe \u0438 \u043f\u0440\u0438\u0441\u043d\u044b\u0435;<\/p>\n<\/li>\n<li>\n<p>Gowin Programmer\u00a0\u2014 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u043e\u0440 \u0434\u043b\u044f\u00a0\u041f\u041b\u0418\u0421 GOWIN;<\/p>\n<\/li>\n<li>\n<p>OpenOCD\u00a0\u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/notiel\/OstrannaTerminal\/releases\">Quetima<\/a>\u00a0\u2014 \u043d\u0430\u0448 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f\u00a0\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u00a0\u0442\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u0438, \u0442\u0438\u043f\u0430 \u0442\u043e\u0433\u043e\u00a0\u0436\u0435 Terminal_bray.exe (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0436\u0438\u0442 \u043d\u0438\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u00a0\u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439);<\/p>\n<\/li>\n<li>\n<p>riscv\u2011none\u2011elf\u2011gcc\u00a0\u2014 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f\u00a0RiscV;<\/p>\n<\/li>\n<li>\n<p>versions.txt\u00a0\u2014 \u0444\u0430\u0439\u043b \u0441\u00a0\u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0432\u00a0\u043f\u0430\u043f\u043a\u0435. <\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043b\u0430\u0433\u0438\u043d\u044b VSCode<\/h3>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435:<\/p>\n<ul>\n<li>\n<p>C\/C++ Extension Pack;<\/p>\n<\/li>\n<li>\n<p>Cortex\u2011Debug;<\/p>\n<\/li>\n<li>\n<p>RTOS Views (\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0Cortex\u2011Debug, \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 RTOS). <\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435:<\/p>\n<ul>\n<li>\n<p>IntelliBoba\u00a0\u2014 SourceCraft Code Assistant \u043e\u0442\u00a0\u042f\u043d\u0434\u0435\u043a\u0441\u0430, \u0440\u0430\u0434\u0438 \u043d\u0435\u0433\u043e \u0432\u0441\u0451 \u0438 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c;<\/p>\n<\/li>\n<li>\n<p>ARM assembly editor\u00a0\u2014 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b;<\/p>\n<\/li>\n<li>\n<p>GNU Linker Map files\u00a0\u2014 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0434\u043b\u044f.map\u2011\u0444\u0430\u0439\u043b\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p>ELFInsight\u00a0\u2014 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.elf\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u00a0\u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0433\u0440\u0430\u0444\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>LinkerScript\u00a0\u2014 \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b\u00a0\u043b\u0438\u043d\u043a\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>MemoryView\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0435;<\/p>\n<\/li>\n<li>\n<p>Peripheral View\u00a0\u2014 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442.svd\u2011\u0444\u0430\u0439\u043b, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u00a0\u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0432\u0441\u0435 \u0431\u0438\u0442\u044b, \u0438 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0443\u0432\u044b, \u043d\u0435\u00a0\u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 \u041c\u041a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b). <\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u043c\u0435\u043b\u043e\u0447\u0438:<\/p>\n<ul>\n<li>\n<p>Overtype\u00a0\u2014 \u043f\u043e\u00a0\u043a\u043d\u043e\u043f\u043a\u0435 Insert \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u0432\u0432\u043e\u0434\u0430: \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0438\u043b\u0438\u00a0\u0437\u0430\u043c\u0435\u043d\u0430. \u042f \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0437\u0430\u043c\u0435\u043d\u044b, \u0430\u00a0\u0432\u00a0VScode \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e \u043d\u0435\u0442. \u041d\u043e\u00a0\u0432\u043e\u0442 \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d.<\/p>\n<\/li>\n<li>\n<p>Task Buttons\u00a0\u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u00a0\u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u0430\u0441\u043a\u0438 \u043f\u043e\u00a0\u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430\u00a0\u043d\u0438\u0445: <\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/beb\/aee\/490\/bebaee4909243719ea45a7a612c4a2b3.png\" width=\"1600\" height=\"276\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/beb\/aee\/490\/bebaee4909243719ea45a7a612c4a2b3.png\"\/><\/figure>\n<ul>\n<li>\n<p>TODO Highlight v2\u00a0\u2014 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432\u00a0\u043a\u043e\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, TODO, FIXME, DEBUG. \u041a\u0430\u043a\u00a0\u0432\u00a0Eclipse, \u043d\u043e\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u043e, \u0433\u0438\u0431\u043a\u043e \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c14\/c05\/80a\/c14c0580ac205f5a7466205343abfa5c.png\" width=\"1600\" height=\"431\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c14\/c05\/80a\/c14c0580ac205f5a7466205343abfa5c.png\"\/><\/figure>\n<p>\u0415\u0449\u0451 \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u00a0\u2014 \u043f\u0440\u0438\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432\u00a0\u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0440\u043e\u043a (\u043a\u0430\u043a \u0432\u00a0Eclipse): Ctrl + Shift + P \u2192 (\u0432\u0432\u0435\u0441\u0442\u0438 user) \u2192 Preferences: Open User Settings \u2192 (\u0438\u0441\u043a\u0430\u0442\u044c files trim) \u2192 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0433\u0430\u043b\u043a\u0443 Files: Trim Trailing Whitespace.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u00a0\u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0434\u043b\u044f\u00a0Python \u0438 Verilog. \u041e\u043d\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u00a0\u043f\u0438\u0442\u043e\u043d\u0435 \u0438 \u0432\u0435\u0440\u0438\u043b\u043e\u0433\u0435. <\/p>\n<ul>\n<li>\n<p>Verilog\u2011HDL \/ SystemVerilog \/ Bluespec SystemVerilog;<\/p>\n<\/li>\n<li>\n<p>Python (\u043e\u043d \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u00a0\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435);<\/p>\n<\/li>\n<li>\n<p>Python debugger;<\/p>\n<\/li>\n<li>\n<p>Pylance.<\/p>\n<\/li>\n<\/ul>\n<h3>makefile<\/h3>\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 make \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b makefile, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e\u00a0\u0438 \u0441\u00a0\u043a\u0430\u043a\u0438\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c. \u0418 \u043e\u043d\u0430\u00a0\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u0421\u043a\u0440\u0438\u043f\u0442 makefile\u00a0\u2014 \u044d\u0442\u043e \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>\u041e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0444\u0430\u0439\u043b makefile? <\/p>\n<p>\u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 Eclipse \u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d. \u041f\u043b\u0430\u0433\u0438\u043d \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0444\u0430\u0439\u043b\u044b makefile \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u043f\u043a\u0438. \u041e\u043f\u0446\u0438\u0438 makefile \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0433\u0430\u043b\u043e\u0447\u043a\u0430\u043c\u0438 \u0432\u00a0\u043e\u043a\u043d\u0430\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/921\/78e\/7cf\/92178e7cf7f291ba252d405bca739803.png\" width=\"1595\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/921\/78e\/7cf\/92178e7cf7f291ba252d405bca739803.png\"\/><\/figure>\n<p>\u0413\u0430\u043b\u043e\u0447\u0435\u043a \u043c\u043d\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u00a0\u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c\u044e Eclipse \u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u00a0\u0438\u043c\u0435\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0422\u0443\u0442 \u0440\u0435\u0447\u044c \u043f\u0440\u043e\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d, \u0430\u00a0\u043d\u0435\u00a0\u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043e\u0442\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u00a0\u2014 \u0442\u0430\u043c\u00a0\u0431\u044b\u0432\u0430\u0435\u0442 \u0443\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0446\u0438\u0439. <\/p>\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u00a0\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b PlatformIO \u0438 EmbeddedIDE: \u0432\u00a0\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u0438, \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b\u044b makefile. \u041e\u043f\u0446\u0438\u0439 \u0443\u0434\u0440\u0443\u0447\u0430\u044e\u0449\u0435 \u043c\u0430\u043b\u043e (\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u0443\u0433\u0430\u0442\u044c \u0430\u0440\u0434\u0443\u0438\u043d\u0449\u0438\u043a\u043e\u0432 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445), \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u043c\u043d\u0435 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u00a0\u0445\u0432\u0430\u0442\u0438\u043b\u043e. <\/p>\n<p>\u042f \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 makefile \u0438 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0make\u00a0\u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u043c\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u00a0\u044f\u0437\u044b\u043a\u0435 makefile, \u0431\u0435\u0437\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u043e\u0434\u043d\u043e\u0439 \u0438\u0437\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CMake \u0441\u00a0\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c CMake Tools. \u041d\u043e\u00a0\u043c\u043d\u0435 \u0442\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a, \u0447\u0442\u043e\u0431 CMake \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 Ninja \u0438\u043b\u0438\u00a0nmake, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b makefile. \u041b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0437\u0430\u0447\u0435\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a CMake, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a makefile \u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u00a0\u043d\u0451\u043c?<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438, \u0434\u043b\u044f\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 CMake \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043e\u0449\u043d\u044b\u043c \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0437\u0434\u043e\u0440\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u00a0\u0441\u043e\u0442\u043d\u0438\u2011\u0442\u044b\u0441\u044f\u0447\u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u00a0\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (Windows, Linux, iOS), \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u0432\u043e\u0438). \u041d\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0\u043c\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439: \u0443\u00a0\u043c\u0435\u043d\u044f \u043a\u0443\u0447\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u0442\u043d\u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0438 \u043d\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. <\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e\u00a0\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 makefile (\u043e\u0434\u0438\u043d), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0432\u0441\u0451 \u043d\u0443\u0436\u043d\u043e\u0435. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u044e \u0435\u0433\u043e \u0438\u0437\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430. Makefile \u043b\u0435\u0436\u0438\u0442 \u0432\u00a0\u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0435, \u0430\u00a0make \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0438 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d. <\/p>\n<p>\u0423\u0433\u0430\u0434\u0430\u0439\u0442\u0435, \u043a\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u043b \u043c\u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c makefile. \u0422\u043e\u0447\u043d\u0435\u0435, \u0447\u0442\u043e: \u043e\u043d \u0432\u0441\u0451\u2011\u0442\u0430\u043a\u0438 \u043d\u0435\u043e\u0434\u0443\u0448\u0435\u0432\u043b\u0451\u043d\u043d\u044b\u0439.<\/p>\n<h4>makefile \u0434\u043b\u044f ARM\u00a0<\/h4>\n<p>\u041e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b make \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u00a0\u0431\u0443\u0434\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0433\u043e \u0438 \u0435\u0451 \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c\u00a0\u0436\u0435, <a href=\"https:\/\/habr.com\/ru\/articles\/155201\/\">\u043d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435<\/a>. <\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u043e\u043c \u044f\u0437\u044b\u043a\u0435 makefile.<\/p>\n<pre><code class=\"cpp\">######################### Project Settings ######################### PRJ_NAME = Prj # What to include, in form dir1 dir2 dir3... INCLUDE_DIRS = .\/ Audio FileSys lib usb yartos # What to define in form MYDEF1 MYDEF2=18 MYDEF3...  DEFINS = <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e: \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>PRJ_NAME <\/code>\u0437\u0430\u0434\u0430\u0451\u0442, \u043a\u0430\u043a\u00a0\u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b .elf, .hex, .bin. \u042f \u0432\u00a0\u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0443: Prj \u0438 Prj, \u043d\u0438\u0447\u0435\u043c \u043d\u0435\u00a0\u043f\u043b\u043e\u0445\u043e. \u0417\u0430\u043e\u0434\u043d\u043e \u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u043f\u0440\u0438\u00a0\u0441\u043c\u0435\u043d\u0435 \u0438\u043c\u0435\u043d\u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 VScode (\u043e\u0431 \u044d\u0442\u043e\u043c \u0434\u0430\u043b\u044c\u0448\u0435).<\/p>\n<p><code>INCLUDE_DIRS<\/code>\u00a0\u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043d\u043a\u043b\u044e\u0434\u0438\u0442\u044c. (\u041a\u0430\u043a \u044d\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u2011\u0440\u0443\u0441\u0441\u043a\u0438? \u00ab\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b\u00bb? \u0421\u043c\u044b\u0441\u043b \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u043c \u0440\u0443\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0432\u00a0\u0443\u0449\u0435\u0440\u0431 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0441\u0442\u0438.) <\/p>\n<p><code>DEFINS<\/code>\u00a0\u2014 \u0441\u043f\u0438\u0441\u043e\u043a defines, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u0412\u00a0\u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u043d \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u043d\u0430\u043a\u0430 <code>=<\/code> \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0442\u044c. \u041e\u0431\u044b\u0447\u043d\u043e \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 make all. \u041d\u043e\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439: <\/p>\n<ul>\n<li>\n<p>Release, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432\u0441\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0443\u0431\u0440\u0430\u043d\u0430 \u0432\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>Debug, \u0433\u0434\u0435 \u0432\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0430\u00a0\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u00a0\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443.<\/p>\n<\/li>\n<li>\n<p>FromBoot\u00a0\u2014 \u044d\u0442\u043e \u043a\u0430\u043a\u00a0Release, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u0430 \u0431\u0443\u0442\u043b\u043e\u0430\u0434\u0435\u0440\u043e\u043c. \u0411\u0443\u0442\u043b\u043e\u0430\u0434\u0435\u0440 \u043b\u0435\u0436\u0438\u0442 \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u043b\u0435\u0448\u043a\u0438 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442, \u0441\u043a\u0430\u0436\u0435\u043c, 32\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430. \u0410\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u00a0\u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0432\u043e\u0439 makefile. \u041d\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e: \u043e\u043d\u0438\u00a0\u0436\u0435 \u043f\u043e\u0445\u043e\u0436\u0438 \u043a\u0430\u043a\u00a0\u0434\u0432\u0435 \u043a\u0430\u043f\u043b\u0438 \u0432\u043e\u0434\u044b \u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u043e\u0439 \u043e\u043f\u0446\u0438\u0439. \u0412\u043d\u0451\u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u00a0\u043e\u0434\u0438\u043d\u00a0\u2014 \u0438\u0437\u0432\u043e\u043b\u044c \u043d\u0435\u00a0\u0437\u0430\u0431\u044b\u0442\u044c \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 makefile \u0438 \u0438\u043d\u043a\u043b\u044e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437\u00a0\u0434\u0440\u0443\u0433\u0438\u0445, \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041d\u043e\u00a0\u0437\u0430\u0447\u0435\u043c \u0432\u0441\u0451 \u044d\u0442\u043e? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0432\u00a0\u0432\u0438\u0434\u0435 <code>make build_Release<\/code> \u0438\u043b\u0438 <code>make build_Debug<\/code>.<\/p>\n<pre><code class=\"cpp\">######################### Figure out what to do ######################### # Target must be in the following form: build_Release, clean_Debug, flash_Fromboot # The first word is the action (build, clean, flash);  # the second is the name of the configuration and the name of the OUT_DIR. INPUT_WORDS = $(subst _, ,$(MAKECMDGOALS)) # Replace '_' with ' ' ACTION = $(word 1,$(INPUT_WORDS)) GOAL_NAME = $(word 2,$(INPUT_WORDS)) OUT_DIR = $(GOAL_NAME) # Run Action (build_Release -&gt; build; clean_Debug -&gt; clean; flash_Fromboot -&gt; flash) $(MAKECMDGOALS): $(ACTION)<\/code><\/pre>\n<p>\u041e\u043f\u044f\u0442\u044c\u00a0\u0436\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0442\u0430\u0441\u043a\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0435 make \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 <code>build_Release<\/code>, \u0438\u043b\u0438 <code>clean_Debug<\/code>, \u0438\u043b\u0438 <code>flash_Fromboot<\/code>. \u0423\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432\u043e\u00a0\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>$(MAKECMDGOALS)<\/code>. \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u043f\u0440\u043e\u0431\u0435\u043b \u0438\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432: \u043f\u0435\u0440\u0432\u043e\u0435\u00a0\u2014 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u0442\u043e\u0440\u043e\u0435\u00a0\u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430 OUT_DIR \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u00a0\u0436\u0435, \u043a\u0430\u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f.\u00a0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>build_Release<\/code> \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u00a0\u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u0412\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u044d\u0442\u043e \u0438\u00a0\u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f: \u043e\u043d\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432\u00a0<code>build_Release: build<\/code>.\u00a0<\/p>\n<pre><code class=\"cpp\">######################### Common Cfg Settings ######################### MCU = cortex-m4 FLOAT_FLAGS = -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -Wdouble-promotion -Wfloat-conversion -Wfloat-equal WARNING_FLAGS = -Wall -Wlogical-op -Werror DISABLED_WARNINGS = -Wno-address-of-packed-member -Wno-unknown-pragmas -Wno-volatile COMMON_FLAGS = -mcpu=$(MCU) -mthumb -fmessage-length=0 -ffunction-sections -fdata-sections -ffreestanding $(FLOAT_FLAGS) $(WARNING_FLAGS) CPP_FLAGS = -std=gnu++20 -fabi-version=0 -fno-exceptions -fno-rtti -fno-use-cxa-atexit -fno-threadsafe-statics $(DISABLED_WARNINGS) $(OUTPUT_ASM) C_FLAGS = -std=gnu17 $(OUTPUT_ASM) # Add this to build commands. Nothing to change here. OBJ_FLAGS = -MMD -MP -MF\"$(@:%.o=%.d)\" -MT\"$@\" -c -o \"$@\" \"$&lt;\" ELF_NAME = $(OUT_DIR)\/$(PRJ_NAME).elf LINKER_FLAGS = -Xlinker --gc-sections --specs=nano.specs --specs=nosys.specs -nostartfiles -Wl,-Map,\"$(OUT_DIR)\/$(PRJ_NAME).map\" -o \"$(ELF_NAME)\u201d<\/code><\/pre>\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0434\u043b\u044f\u00a0\u044f\u0434\u0440\u0430 MCU. \u041c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0432\u0441\u0451 \u0441\u0432\u0430\u043b\u0438\u0442\u044c \u0432\u00a0\u043e\u0434\u043d\u0443 \u043a\u0443\u0447\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u043e\u00a0\u0434\u043b\u044f\u00a0\u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0444\u043b\u0430\u0433\u043e\u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u042f \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043f\u0446\u0438\u044f\u043c. <\/p>\n<p>\u0422\u0443\u0442 \u0443\u00a0\u043d\u0430\u0441 Cortex\u2011M4. \u0423\u00a0\u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>FLOAT_FLAGS<\/code> \u0441\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438. <\/p>\n<p><code>WARNING_FLAGS<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u00a0warnings: \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0445 \u0432\u0441\u0435, \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0435\u0449\u0451 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c warnings \u043a\u0430\u043a\u00a0\u043e\u0448\u0438\u0431\u043a\u0438. <\/p>\n<p><code>DISABLED_WARNINGS <\/code>\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u043f\u043e\u00a0\u043a\u0430\u043a\u0438\u043c \u043f\u043e\u0432\u043e\u0434\u0430\u043c \u043d\u0435\u00a0\u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c. <\/p>\n<p><code>-Wno-address-of-packed-member<\/code>. \u0418\u043d\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u00a0aligned (\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u00a0\u043a\u0440\u0430\u0442\u0435\u043d 4)\u00a0\u2014 \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>Color_t {uint8_t R, G, B, W}<\/code> \u043c\u043d\u0435 \u0447\u0430\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. <\/p>\n<p><code>-Wno-unknown-pragmas<\/code>. \u0412\u00a0VScode \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 (folding) \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438: <\/p>\n<pre><code class=\"cpp\">#pragma region \/\/ ==== Begin of the area ==== ... #pragma endregion \/\/ End of the area<\/code><\/pre>\n<p>\u042d\u0442\u0438 \u0434\u0432\u0435 \u043f\u0440\u0430\u0433\u043c\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u00a0\u2014 \u0438\u00a0\u043d\u043e\u0440\u043c, \u043f\u0443\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442.\u00a0<\/p>\n<p><code>-Wno-volatile<\/code>. \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0442\u0438\u043f\u0430 <code>|=<\/code> \u0438 <code>&amp;=<\/code> \u043a\u00a0volatile\u2011\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c. \u041f\u043e\u0434\u00a0\u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u00a0\u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0430\u0433\u0430 \u043f\u0440\u043e -Wno-volatile <\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u0445 C++20\u00a0\u0438 C++23\u00a0\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043d\u0430\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>|=<\/code>, <code>&amp;=<\/code> \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u043a\u00a0volatile\u2011\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a\u00a0deprecated. \u041f\u0440\u0438\u00a0\u0438\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <code>compound assignment with 'volatile'\u2011qualified left operand is deprecated<\/code>. <\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u042f \u043d\u0430\u0448\u0451\u043b \u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435. <\/p>\n<p>\u041a\u043e\u0434 <code>A |= B<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438, \u043d\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0\u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e \u0442\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: <\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 <code>A<\/code> \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0440\u043e\u0446\u0430 <code>R<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e <code>R | B<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 <code>R<\/code> \u0432\u00a0<code>A<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 (2) \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 <code>A<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0444\u043b\u0430\u0433\u043e\u0432, \u0438 \u0442\u0430\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0444\u043b\u0430\u0433\u00a0\u2014 \u043d\u043e\u00a0\u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0442\u0435\u043d\u043e, \u0438 \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0444\u043b\u0430\u0433 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0451\u0440\u0442. \u0418 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u00a0\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e. <\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0444\u043b\u0430\u0433\u043e\u0432 \u0432\u043e\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 UART, I2C \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u0445 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0445\u0438\u0442\u0440\u043e\u00a0\u2014 \u0444\u043b\u0430\u0433 \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u043b\u0438\u00a0\u0432\u043e\u043e\u0431\u0449\u0435 read\u2011only. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u00a0\u0444\u043b\u0430\u0433\u0430\u043c\u0438. \u041d\u043e\u00a0\u044d\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u043b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438\u00a0\u0436\u0435\u043b\u0435\u0437\u0430, \u0430\u00a0\u043d\u0435\u00a0\u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f C++, \u0438 \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u0438\u0442\u0435\u0442 \u0440\u0435\u0448\u0438\u043b \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u00a0\u0446\u0435\u043b\u044c\u044e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>std::atomic<\/code>. <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>A |= B<\/code> \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>A = A | B<\/code>, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442: \u0442\u0443\u0442 \u0432\u0438\u0434\u043d\u0430 \u043d\u0435\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c. \u041d\u043e\u00a0\u0432\u00a0\u043d\u0430\u0448\u0435\u0439 Embedded \u0441\u0444\u0435\u0440\u0435\u00a0\u0431\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>|=<\/code> \u0438 <code>&amp;=<\/code> \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u044b \u0434\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0431\u0438\u0442 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445, \u043e\u043d\u0438 \u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a\u00a0\u043d\u0430\u0434\u043e \u0438 \u043d\u0435\u00a0\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0445 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u043f\u0446\u0438\u0435\u0439 <code>\u2011Wno\u2011volatile<\/code>.<\/p>\n<\/div>\n<\/details>\n<p><code>COMMON_FLAGS<\/code>\u00a0\u2014 \u044d\u0442\u043e \u043e\u043f\u0446\u0438\u0438 \u0438 \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0421++, \u0438 \u0434\u043b\u044f\u00a0\u0421, \u0438 \u0434\u043b\u044f\u00a0\u043b\u0438\u043d\u043a\u0435\u0440\u0430.<\/p>\n<p><code>CPP_FLAGS<\/code>\u00a0\u2014 \u043e\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 C++. \u0423\u00a0\u043d\u0430\u0441 \u0443\u043a\u0430\u0437\u0430\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u044f\u0437\u044b\u043a\u0430\u00a0\u2014 gnu++20. \u0418 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c exceptions \u0438 RTTI: \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 embedded\u2011\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0438 \u0434\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u00a0\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u0447\u0442\u043e\u00a0\u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0415\u0449\u0451 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043e\u043f\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043d\u043e\u00a0\u043f\u0440\u043e\u00a0\u044d\u0442\u043e \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p><code>C_FLAGS<\/code>\u00a0\u2014 \u0442\u043e, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 C. \u0422\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p><code>OBJ_FLAGS<\/code>\u00a0\u2014 \u0442\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0442\u0430\u043a\u0438\u0435\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0435. <\/p>\n<p><code>ELF_NAME<\/code>\u00a0\u2014 \u0438\u043c\u044f.elf\u2011\u0444\u0430\u0439\u043b\u0430. \u041e\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u044f \u0435\u0433\u043e \u0432\u044b\u043d\u0435\u0441 \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f\u00a0\u044f\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><code>LINKER_FLAGS<\/code>\u00a0\u2014 \u0442\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0430\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 nano (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0443\u00a0\u043d\u0430\u0441 \u043e\u043f\u044f\u0442\u044c\u00a0\u0436\u0435 embedded\u2011\u0441\u0438\u0441\u0442\u0435\u043c\u0430). \u0410\u00a0\u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0443\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439.elf\u2011\u0444\u0430\u0439\u043b \u0438 \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.map\u2011\u0444\u0430\u0439\u043b (\u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043a\u0442\u043e \u0441\u044a\u0435\u043b \u0421\u0422\u041e\u041b\u042c\u041a\u041e \u043f\u0430\u043c\u044f\u0442\u0438\u00bb).<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 \u0442\u0440\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u0443 \u0438 \u0435\u0451 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442\u00a0\u0434\u0440\u0443\u0433\u0438\u0445. <\/p>\n<pre><code class=\"cpp\">######################### Individual Cfg Settings ######################### ####### Release Cfg Settings ####### ifeq \"$(GOAL_NAME)\" \"Release\" COMMON_FLAGS += -Os LINKER_FLAGS +=  LD_SCRIPT = GD32F405RG.ld # Comment \/ uncomment the following lines to produce .hex and\/or .bin output HEX_NAME = $(OUT_DIR)\/$(PRJ_NAME).hex # BIN_NAME = $(OUT_DIR)\/$(PRJ_NAME).bin OUTPUT_ASM = -Wa,-adhlns=\"$@.lst\"<\/code><\/pre>\n<p>\u0412\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Release \u043a\u00a0\u043f\u0430\u0447\u043a\u0435 <code>COMMON_FLAGS<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u00a0\u0440\u0430\u0437\u043c\u0435\u0440\u0443 <code>-Os<\/code>. \u0418 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. <\/p>\n<p>\u0410\u00a0\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Debug \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cpp\">COMMON_FLAGS += -O0 -g3<\/code><\/pre>\n<p>C\u0442\u0440\u043e\u043a\u0438 <code>HEX_NAME<\/code> \u0438\u00a0<code>BIN_NAME<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0435 \u0441\u0442\u0440\u043e\u043a\u0438\u00a0\u2014 \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u00a0.hex, \u0438\u00a0.bin.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>OUTPUT_ASM<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0443\u0436\u043d\u043e\u00a0\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u00a0\u0437\u0430\u0431\u044b\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043e\u043f\u0446\u0438\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u0438\u043d\u043a\u0435\u0440\u0430 <code>\u2013flto<\/code>). \u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u00a0\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u0441 \u043f\u043e\u043d\u044f\u043b \u0438\u043b\u0438 \u043d\u0430\u00a0\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u00a0\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 DSP-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u0441\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430.\u00a0<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Fromboot \u0442\u0430\u043a\u0430\u044f\u00a0\u0436\u0435, \u043a\u0430\u043a Release, \u0438\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043b\u0438\u043d\u043a\u0435\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">LD_SCRIPT = GD32F405RG_FromBoot.ld<\/code><\/pre>\n<p>\u2026\u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432: \u043a\u00a0\u043d\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u0435\u0444\u0438\u043a\u0441 fw, \u043f\u043e\u00a0\u043d\u0435\u043c\u0443 \u0431\u0443\u0442\u043b\u043e\u0430\u0434\u0435\u0440 \u0438\u0449\u0435\u0442 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/p>\n<pre><code class=\"cpp\">HEX_NAME = $(OUT_DIR)\/fw$(PRJ_NAME).hex BIN_NAME = $(OUT_DIR)\/fw$(PRJ_NAME).bin<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">######################### Toolchain #########################  CPP_CMP = arm-none-eabi-g++ C_CMP = arm-none-eabi-gcc OBJCPY = arm-none-eabi-objcopy SZ = arm-none-eabi-size GDB = arm-none-eabi-gdb  # Required for flashing using BMP # GDB COM port: required for flashing using BMP GDB_COM = \\\\.\\COM5<\/code><\/pre>\n<p>\u0423\u043a\u0430\u0437\u0430\u043d\u044b \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0421++ \u0438 \u0421, \u0443\u0442\u0438\u043b\u0438\u0442\u044b objcpy (\u043e\u043d\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 .hex \u0438\u043b\u0438 .bin \u0438\u0437 .elf), \u0443\u0442\u0438\u043b\u0438\u0442\u044b size \u0434\u043b\u044f\u00a0\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0414\u043b\u044f\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a gdb, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Black Magic Probe\u00a0\u2014 \u043e\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a\u00a0COM5, \u0447\u0442\u043e\u00a0\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e. <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043e\u043f\u0446\u0438\u0438, \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cpp\">######################### Do not touch ######################### .PHONY: .FORCE print_size clean flash # \"virtual\" symbols to \"rebuild\" them always<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0441\u043b\u043e\u0432\u043e\u043c <code>PHONY<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0443\u043d\u043a\u0442\u044b <code>print_size<\/code>, <code>clean<\/code>, <code>flash <\/code>\u0438\u00a0\u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043e \u0441\u043b\u043e\u0432\u043e\u043c <code>.FORCE<\/code>.<\/p>\n<pre><code class=\"cpp\"># Current datetime TIMESTAMP = $(shell \"date\" \"+%Y%m%d_%H%M\")<\/code><\/pre>\n<p>\u0412\u00a0\u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u00a0\u0444\u043e\u0440\u043c\u0435 <code>20250318_1400<\/code>.<\/p>\n<pre><code class=\"cpp\"># Build include flag string out of INCLUDE_DIRS list INCLUDE_STR = $(addprefix -I.\/,$(INCLUDE_DIRS))<\/code><\/pre>\n<p>\u0412\u00a0\u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0438\u0437\u00a0<code>INCLUDE_DIRS<\/code>: \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <code>\u2013I.\/<\/code>, \u0447\u0442\u043e\u0431\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437\u00a0<code>Audio<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <code>\u2013I.\/Audio<\/code>.<\/p>\n<pre><code class=\"cpp\"># Build define flag string out of DEFINS list, surrounding with double quotes ToUppercase = $(shell echo $(1) | tr '[:lower:]' '[:upper:]') # add BUILD_CFG_GOALNAME=1 define, uppercasing GOAL_NAME DEFINS += BUILD_CFG_$(call ToUppercase,$(GOAL_NAME))=1 <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>DEFINS<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438: <code>RELEASE=1<\/code>, \u0438\u043b\u0438 <code>DEBUG=1<\/code>, \u0438\u043b\u0438 <code>FROMBOOT=1<\/code>. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432\u00a0\u043a\u043e\u0434\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f\u00a0\u044f\u0434\u0440\u0430 Cortex\u2011M0\u00a0\u043f\u0440\u0438\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 FROMBOOT \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0RAM \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439\u00a0\u2014 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u00a0\u044d\u0442\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0430\u0434\u0440\u0435\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f. <\/p>\n<pre><code class=\"cpp\">DEFINE_STR = $(patsubst %,-D\"%\",$(DEFINS)) COMMON_FLAGS += $(DEFINE_STR) <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 COMMON_FLAGS \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f DEFINE_STR, \u0430\u00a0\u043e\u043d\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437\u00a0DEFINS \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0444\u0430\u0439\u043d\u0430 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u043c\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u2011D. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, RELEASE=1\u00a0\u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432 \u2011D \u00abRELEASE=1\u00bb.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 (*.cpp, .c, .S) \u0432\u043e\u00a0\u0432\u0441\u0435\u0445 \u043f\u0430\u043f\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445. \u0423\u00a0make \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f wildcard, \u043d\u043e\u00a0\u043e\u043d\u0430 \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435. \u041a\u0430\u043a\u00a0\u0431\u044b\u0442\u044c? \u0417\u0430\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439\u00a0\u2014 \u0442\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u00ab\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0439 wildcard\u00bb:<\/p>\n<pre><code class=\"cpp\"># Recursive wildcard to iterate subdirs of any depth rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d\/,$2))<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0449\u0435\u043c \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043a\u043b\u0430\u0434\u0451\u043c \u0438\u0445 \u0438\u043c\u0435\u043d\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u043f\u0443\u0442\u0451\u043c \u0432\u00a0SRCS:<\/p>\n<pre><code class=\"cpp\"># Find all .cpp, .c and .S files in all subfolders of ..\/  SRCS = $(call rwildcard,.\/,*.c) $(call rwildcard,.\/,*.cpp) $(call rwildcard,.\/,*.S)<\/code><\/pre>\n<p>\u0423\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437\u00a0\u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u043d\u044b\u0445 \u0438\u043c\u0451\u043d \u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>.\/<\/code>:<\/p>\n<pre><code class=\"cpp\"># Remove leading .\/  SRCS := $(patsubst .\/%,%,$(SRCS))<\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430.o \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e OBJS. \u0418\u043c\u0435\u043d\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438.<\/p>\n<pre><code class=\"cpp\"># Replace .cpp, .c, .S with .o OBJS = $(SRCS:.cpp=.o) # Take all srcs replacing .cpp with .o OBJS := $(OBJS:.c=.o)  # Replace .c with .o OBJS := $(OBJS:.S=.o)  # Replace .S with .o<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0430\u043f\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u00a0\u043f\u0430\u043f\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u00a0\u2014 \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0435\u0442 Release \u0434\u043b\u044f\u00a0\u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0441\u0435\u0434\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d4e\/c98\/363\/d4ec983635ea721576267d78b58ee0bd.png\" width=\"1600\" height=\"613\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d4e\/c98\/363\/d4ec983635ea721576267d78b58ee0bd.png\"\/><\/figure>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0438\u043c\u0435\u043d\u0430 \u043f\u0430\u043f\u043e\u043a. <\/p>\n<pre><code class=\"cpp\"># Find all source-containing folders; remove ending \/; remove . SUBDIRS = $(filter-out .,$(patsubst %\/,%,$(sort $(dir $(SRCS)))))<\/code><\/pre>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e: <\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u0430 \u043f\u0430\u043f\u043e\u043a \u0438\u0437\u00a0\u043f\u043e\u043b\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0SRCS.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0445. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0438\u043c\u0435\u043d\u0430, \u0430\u00a0\u0438\u0445 \u0442\u0430\u043c \u043f\u043e\u043b\u043d\u043e\u00a0\u2014 \u0432\u0435\u0434\u044c \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u043d\u0430\u0447\u0438\u0442, \u0438 \u0438\u043c\u044f \u043f\u0430\u043f\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b <code>\/<\/code> \u0432\u00a0\u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0443\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u0435\u043c \u0438\u0437\u00a0\u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u043c\u0443\u044e \u0442\u043e\u0447\u043a\u043e\u0439.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"cpp\"># Search src here. Nothing to change here. VPATH := ..\/<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e\u00a0\u043f\u0443\u0442\u044c \u043a\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 <code>..\/<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0437\u00a0\u043f\u0430\u043f\u043a\u0438 \u0432\u044b\u0448\u0435\u00a0\u2014 \u0438\u0437\u00a0\u043a\u043e\u0440\u043d\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041b\u043e\u0433\u0438\u0447\u043d\u043e, \u043c\u044b\u00a0\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432\u00a0\u043f\u0430\u043f\u043a\u0435 Release, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>lib\/uart.o<\/code> (\u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c <code>Release\/lib\/uart.o<\/code>) \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d \u043f\u043e\u00a0\u043f\u0443\u0442\u0438 <code>..\/lib\/uart.cpp<\/code>. <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0438\u043b\u0434\u0438\u043d\u0433\u0430.<\/p>\n<pre><code class=\"cpp\">######################### Build ######################### # Add OUT_DIR prefix to OBJS OBJS := $(addprefix $(OUT_DIR)\/, $(OBJS))<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043a\u00a0\u043f\u0443\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043c\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438.<\/p>\n<pre><code class=\"cpp\"># Include dependents *.d (ignore if not exist) to rebuild what depends on changed .h -include $(OBJS:.o=.d) <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043d\u043e\u00a0\u0438\u00a0\u0444\u0430\u0439\u043b\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0438\u0437\u00a0\u0444\u0430\u0439\u043b\u043e\u0432, \u043e\u0442\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u0442,\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c\u00a0.h. \u041c\u0438\u043d\u0443\u0441 \u043f\u0435\u0440\u0435\u0434 <code>include<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0438\u0445\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0418\u00a0\u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435\u00a0\u2014 \u0432\u00a0\u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 .d-\u0444\u0430\u0439\u043b\u043e\u0432 \u0435\u0449\u0451 \u043d\u0435\u0442.<\/p>\n<pre><code class=\"cpp\"># Build: Require dir tree, .elf file, .hex, .bin, .siz build: $(OUT_DIR)\/out_subdirs $(ELF_NAME) $(HEX_NAME) $(BIN_NAME) print_size<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e. \u0427\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 <code>build<\/code> \u0441\u0442\u0430\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u0430\u043f\u043e\u043a <code>out_subdirs<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0430\u0448\u0435\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0444\u0430\u0439\u043b\u0430 <code>Release\/Prj.elf<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0444\u0430\u0439\u043b\u0430 <code>Release\/Prj.hex<\/code> (\u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e HEX_NAME \u043d\u0435\u00a0\u0431\u044b\u043b \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d);<\/p>\n<\/li>\n<li>\n<p>\u0444\u0430\u0439\u043b\u0430 <code>Release\/Prj.bin<\/code> (\u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e BIN_NAME \u043d\u0435\u00a0\u0431\u044b\u043b \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d);<\/p>\n<\/li>\n<li>\n<p>\u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <code>print_size<\/code> (\u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u044b\u0448\u0435 \u043c\u044b\u00a0\u043f\u043e\u043c\u0435\u0442\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u0441\u043b\u043e\u0432\u043e\u043c <code>.PHONY<\/code>).<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\"># Construct dir tree: out_dir\/dir1, out_dir\/dir2, ... $(OUT_DIR)\/out_subdirs: @mkdir -p $(addprefix $(OUT_DIR)\/, $(SUBDIRS))<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0430\u043f\u043e\u043a. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043a\u00a0\u043f\u0443\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u0438\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438.<\/p>\n<pre><code class=\"cpp\"># Construct .elf $(ELF_NAME): $(OBJS) @echo 'Linking $@' @$(CPP_CMP) $(COMMON_FLAGS) -T $(LD_SCRIPT) $(LINKER_FLAGS) $(OBJS)<\/code><\/pre>\n<p>\u0422\u0443\u0442\u00a0\u043b\u0438\u043d\u043a\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439.elf\u2011\u0444\u0430\u0439\u043b. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u00a0\u2014 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>OBJS<\/code>. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0438\u043b\u0438\u00a0\u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f\u00a0\u043b\u0438\u043d\u043a\u0435\u0440 \u0441\u00a0\u0444\u043b\u0430\u0433\u0430\u043c\u0438 (\u043e\u0431\u0449\u0438\u043c\u0438 \u0438\u00a0\u043b\u0438\u043d\u043a\u0435\u0440\u0430), \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u00a0\u043b\u0438\u043d\u043a\u0435\u0440\u0430 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0410\u00a0\u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442 \u0432\u00a0\u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0438\u043a\u043e\u0432, \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c!<\/p>\n<pre><code class=\"cpp\">### Compile objs ### # Special rule for version.cpp: always rebuild VERSION_DEFINS = -D\"BUILD_TIME=$(TIMESTAMP)\" -D\"BUILD_CFG=$(call ToUppercase,$(GOAL_NAME))\" $(OUT_DIR)\/version.o: version.cpp .FORCE @echo 'Building $&lt;' @$(CPP_CMP) $(COMMON_FLAGS) $(VERSION_DEFINS) $(INCLUDE_STR) $(CPP_FLAGS) $(OBJ_FLAGS)<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043e\u0441\u043e\u0431\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0434\u043b\u044f\u00a0\u0444\u0430\u0439\u043b\u0430 version.cpp, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0438 \u0435\u0441\u0442\u044c, \u0447\u0442\u043e\u00a0\u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041d\u043e\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430\u00a0\u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0434\u0435\u0444\u0430\u0439\u043d\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438\u0445 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>VERSION_DEFINS<\/code> \u0438 \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0435\u0451 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443. <\/p>\n<p>\u0421\u043b\u043e\u0432\u043e\u043c <code>.FORCE<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430\u00a0\u2014 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0438\u043a. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u00a0\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u043e\u0441\u044c \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b.cpp,.c \u0438.S.<\/p>\n<pre><code class=\"cpp\"># cpp $(OUT_DIR)\/%.o: %.cpp @echo 'Building $&lt;' @$(CPP_CMP) $(COMMON_FLAGS) $(INCLUDE_STR) $(CPP_FLAGS) $(OBJ_FLAGS)  # c $(OUT_DIR)\/%.o: %.c @echo 'Building $&lt;' @$(C_CMP) $(COMMON_FLAGS) $(INCLUDE_STR) $(C_FLAGS) $(OBJ_FLAGS) # S $(OUT_DIR)\/%.o: %.S @echo 'Building $&lt;' @$(C_CMP) -x assembler-with-cpp $(COMMON_FLAGS) $(INCLUDE_STR) $(OBJ_FLAGS) <\/code><\/pre>\n<p>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0443\u0447\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043b\u0438\u043d\u043a\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0438\u00a0\u043e\u043d\u00a0\u0441\u043e\u0431\u0435\u0440\u0451\u0442 .elf-\u0444\u0430\u0439\u043b.\u00a0<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043e\u0440\u0443\u0434\u0438\u0442\u044c .hex \u0438\u00a0.bin:<\/p>\n<pre><code class=\"cpp\"># Output .hex $(HEX_NAME): $(ELF_NAME) @echo 'Constructing $@' @$(OBJCPY) -O ihex \"$(ELF_NAME)\" \"$(HEX_NAME)\"  # Output .bin $(BIN_NAME): $(ELF_NAME) @echo 'Constructing $@' @$(OBJCPY) -O binary \"$(ELF_NAME)\" \"$(BIN_NAME)\"<\/code><\/pre>\n<p>\u0418\u00a0\u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043e\u0431\u044a\u0451\u043c\u044b \u0437\u0430\u043d\u044f\u0442\u044b\u0445 FLASH \u0438 RAM:<\/p>\n<pre><code class=\"cpp\"># Print size print_size:  @echo 'Size:' @$(SZ) --format=berkeley \"$(ELF_NAME)\"<\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0431\u0438\u043b\u0434\u0438\u043d\u0433 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d!<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 <code>clean_Release<\/code>:<\/p>\n<pre><code class=\"cpp\">######################### Clean ######################### clean: @rm -rf $(OUT_DIR) @echo 'Done.'<\/code><\/pre>\n<p>\u041e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430. Release \u0438\u043b\u0438\u00a0Debug, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<p>\u0410\u00a0\u0432\u043e\u0442 \u043a\u0430\u043a\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u0440\u0438\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 <code>flash_Release<\/code>:<\/p>\n<pre><code class=\"cpp\">######################### Flash it ######################### Using BlackMagicProbe flash: @$(GDB) -q -ex \"target extended-remote $(GDB_COM)\" -ex \"mon swdp_scan\" -ex \"att 1\" -ex \"load $(HEX_NAME)\" -ex \"det\" -ex \"quit\"<\/code><\/pre>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>arm-none-eabi-gdb<\/code> \u0441\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u00a0\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 COM5;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWD;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u00a0\u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0443 (\u043e\u043d\u00a0\u0443\u00a0\u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0434\u0438\u043d);<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c <code>Release\/Prj.hex<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0439\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u043b\u0438\u0432\u043a\u0443 \u043d\u0435\u00a0\u0447\u0435\u0440\u0435\u0437 make, \u0430\u00a0\u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 exe \u0441\u00a0\u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u00a0\u0442\u0430\u0441\u043a\u0435. \u041a\u0430\u043a \u043b\u0443\u0447\u0448\u0435? \u0412\u00a0\u0446\u0435\u043b\u043e\u043c \u0431\u0435\u0437 \u0440\u0430\u0437\u043d\u0438\u0446\u044b. \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a, \u043c\u043e\u0436\u043d\u043e \u044d\u0434\u0430\u043a.\u00a0<\/p>\n<h4>makefile \u0434\u043b\u044f RiscV<\/h4>\n<p>\u0412\u00a0\u043d\u0430\u0448\u0438\u0445 \u0441\u0442\u0435\u043d\u0434\u0430\u0445\u2011\u0434\u0436\u0438\u0433\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u041f\u041b\u0418\u0421 GOWIN 2A-18C. \u0412\u00a0\u043d\u0435\u0439 \u0441\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043d\u043e\u0435 \u044f\u0434\u0440\u043e picoRV\u00a0\u2014 \u044d\u0442\u043e \u0444\u043e\u0440\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0441\u0442\u044c \u043d\u0430\u00a0GitHub. \u042f\u0434\u0440\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e 2\u043a \u043b\u0443\u0442\u043e\u0432 (\u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f: ARM Cortex\u2011M3\u00a0\u0441\u044a\u0435\u0434\u0430\u0435\u0442 18\u043a). \u0412\u00a0\u043d\u0451\u043c \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438\u00a0\u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u00a0UART \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c Realtime \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u00a0\u043f\u043b\u0438\u0441\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. <\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u044f. <\/p>\n<pre><code class=\"cpp\">######################### Common Cfg Settings ######################### ARCH = rv32imc_zicsr # Specify MCU arch here<\/code><\/pre>\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u044f\u0434\u0440\u0430. \u0418\u0445\u00a0\u0431\u044b\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cpp\">WARNING_FLAGS = -Wall -Wlogical-op DISABLED_WARNINGS = -Wno-address-of-packed-member -Wno-unknown-pragmas -Wno-volatile RISCV_FLAGS = -march=$(ARCH) -mabi=ilp32 -mtune=size -mcmodel=medany -msmall-data-limit=8 -mstrict-align -msave-restore<\/code><\/pre>\n<p>\u0422\u0443\u0442\u00a0\u2014 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f RiscV \u043e\u043f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cpp\">COMMON_FLAGS =  $(RISCV_FLAGS) -fmessage-length=0 -ffunction-sections -fdata-sections -fno-builtin -ffreestanding $(WARNING_FLAGS)<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0438\u043f\u0430 \u044f\u0434\u0440\u0430 ARM \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043e\u043f\u0446\u0438\u0438 RiscV. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0435\u00a0\u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. <\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a\u00a0\u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Release:<\/p>\n<pre><code class=\"cpp\">####### Release Cfg Settings ####### ifeq \"$(GOAL_NAME)\" \"Release\" COMMON_FLAGS += -Os LINKER_FLAGS +=  LD_SCRIPT = sections.lds<\/code><\/pre>\n<p>\u042f \u0442\u0443\u0442 \u0445\u043e\u0447\u0443 \u043e\u0441\u043e\u0431\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 <code>-flto<\/code>\u00a0\u2014 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435\u00a0\u043b\u0438\u043d\u043a\u0435\u0440\u0430. \u041f\u0440\u0438\u00a0\u0435\u0451 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0451\u043c \u043a\u043e\u0434\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 6%, \u043d\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u044f\u0434\u0440\u043e \u043d\u0435\u00a0\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442. \u041f\u043e\u0447\u0435\u043c\u0443\u00a0\u2014 \u044f \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440.<\/p>\n<p>\u0410\u00a0\u0432\u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Toolchain:<\/p>\n<pre><code class=\"cpp\">######################### Toolchain #########################  CPP_CMP = riscv-none-elf-g++ C_CMP = riscv-none-elf-gcc OBJCPY = riscv-none-elf-objcopy SZ = riscv-none-elf-size GW_FLASHER = C:\/YaStudio\/GowinProgrammer\/bin\/programmer_cli.exe<\/code><\/pre>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043c\u0451\u043d \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0435\u0449\u0451 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a\u0430 \u043e\u0442\u00a0GOWIN. \u0418\u00a0\u0432\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">######################### Flash it ######################### flash: @$(GW_FLASHER) -d GW2A-18C -r 38 --spiaddr 0x400000 --mcuFile \"$(CURDIR)\/$(OUT_DIR)\/$(PRJ_NAME).bin\"<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u0435\u043b\u0435\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c programmer_cli.exe \u0441\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u0430 \u041f\u041b\u0418\u0421, \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u043c \u2116\u00a038\u00a0\u2014 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e SPI FLASH \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GAO Bridge, \u0441\u00a0\u0430\u0434\u0440\u0435\u0441\u0430 0\u00d7400\u00a0000, \u043d\u0443 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a.bin\u2011\u0444\u0430\u0439\u043b\u0443.<\/p>\n<p>\u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0441\u00a0makefile \u0438 \u043f\u043e\u0439\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<h3>\u041f\u0430\u043f\u043a\u0430 .vscode<\/h3>\n<p>\u0415\u0451 \u044f \u0442\u043e\u0436\u0435 \u0442\u0430\u0441\u043a\u0430\u044e \u0438\u0437\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u043b\u0435\u0436\u0430\u043b\u0438 \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/505\/916\/bb4\/505916bb4edd3d89d283a461eae4889d.png\" width=\"1280\" height=\"446\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/505\/916\/bb4\/505916bb4edd3d89d283a461eae4889d.png\"\/><\/figure>\n<h4>settings.json<\/h4>\n<p>\u0412\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0443\u0442\u0438 <code>PATH <\/code>\u043a\u00a0\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0435\u043c\u0443. \u042f \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 <code>PATH<\/code> \u0432\u00a0Windows, \u043a\u00a0\u0442\u043e\u043c\u0443\u00a0\u0436\u0435 \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 RiscV. \u0427\u0442\u043e\u00a0\u043b\u0443\u0447\u0448\u0435\u00a0\u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043b\u0438\u00a0\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435\u00a0\u2014 \u043d\u0435\u00a0\u0445\u043e\u0447\u0443 \u0441\u043f\u043e\u0440\u0438\u0442\u044c, \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442, \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0442\u0430\u043a.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0438 \u0432\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445\u00a0\u2014 \u043f\u0440\u043e\u00a0json\u2011\u0444\u0430\u0439\u043b\u044b.<\/p>\n<pre><code class=\"css\">\"C_Cpp.default.intelliSenseMode\": \"gcc-arm\",<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0421++ \u043a\u043e\u0434\u0430.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 cortex-debug: \u043f\u0443\u0442\u0438 \u0438\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f. <\/p>\n<pre><code class=\"cpp\">\"cortex-debug.gdbPath\": \"C:\/YaStudio\/arm-none-eabi-gcc\/bin\/arm-none-eabi-gdb.exe\", \"cortex-debug.armToolchainPath\": \"C:\/YaStudio\/arm-none-eabi-gcc\/bin\", \"cortex-debug.armToolchainPrefix\": \"arm-none-eabi\", \"cortex-debug.openocdPath\": \"C:\/YaStudio\/OpenOCD\/bin\/openocd.exe\",<\/code><\/pre>\n<p>\u0410\u00a0\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u043f\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432\u00a0\u043a\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0435: \u0434\u0435\u0441\u044f\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c \u0438\u043b\u0438\u00a0\u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e\u00a0\u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u00a0\u0433\u043b\u0430\u0432\u0435 \u00ab\u041e\u0442\u043b\u0430\u0434\u043a\u0430\u00bb.<\/p>\n<pre><code class=\"cpp\">\"cortex-debug.variableUseNaturalFormat\": true, \/\/ False is hex, true is decimal \"terminal.integrated.env.windows\": {         \"PATH\": \"C:\/YaStudio\/arm-none-eabi-gcc\/bin; C:\/YaStudio\/build-tools; C:\/YaStudio\/OpenOCD; C:\/YaStudio\/OpenOCD\/bin\"     },<\/code><\/pre>\n<p>\u0410\u00a0\u0442\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d <code>PATH<\/code> \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 VScode: \u043e\u043d\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0442\u0430\u0441\u043a\u043e\u0432. \u0412\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 make \u0438\u00a0OpenOCD.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 TODO Highlight, \u043e\u043d\u0438 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u0437\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043a\u00a0\u043f\u043b\u0430\u0433\u0438\u043d\u0443.<\/p>\n<p>\u0414\u043b\u044f RiscV \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">\"cortex-debug.armToolchainPath\": \"C:\/YaStudio\/riscv-none-elf-gcc\/bin\", \"cortex-debug.armToolchainPrefix\": \"riscv-none-elf\", \"terminal.integrated.env.windows\": { \"PATH\": \"C:\/YaStudio\/riscv-none-elf-gcc\/bin;C:\/YaStudio\/build-tools\" },<\/code><\/pre>\n<h4>tasks.json<\/h4>\n<p>\u0422\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u0441\u043a\u043e\u0432. \u0423\u00a0\u043c\u0435\u043d\u044f \u0438\u0445 \u043f\u043e\u00a0\u0442\u0440\u0438 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u00a0\u2014 Build, Clean \u0438 Flash. <\/p>\n<pre><code class=\"cpp\">{     \"version\": \"2.0.0\",     \"tasks\": [         \/\/ ==== Release ====         {             \"label\": \"Build Release\",<\/code><\/pre>\n<p>\u041a\u0430\u043a \u044d\u0442\u043e\u0442 \u0442\u0430\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f. \u041b\u044e\u0431\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430.\u00a0<\/p>\n<pre><code class=\"cpp\">            \"type\": \"shell\",<\/code><\/pre>\n<p>\u0422\u0438\u043f \u0442\u0430\u0441\u043a\u0430\u00a0\u2014 \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0437\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<pre><code class=\"cpp\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"command\": \"make\",<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041f\u0443\u0442\u044c, \u0432\u00a0\u0441\u043c\u044b\u0441\u043b\u0435 <code>PATH<\/code>, \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u0432\u00a0settings.json.<\/p>\n<pre><code class=\"cpp\">            \"args\": [                 \"build_Release\"             ],<\/code><\/pre>\n<p>\u0421\u00a0\u043a\u0430\u043a\u0438\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c make. \u0412\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u043e make build_Release.<\/p>\n<pre><code class=\"cpp\">            \"group\": {                 \"kind\": \"build\",                 \"isDefault\": true             },<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e\u0442 \u0442\u0430\u0441\u043a \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u00a0\u0433\u0440\u0443\u043f\u043f\u0443 Build. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u044c Ctrl + Shift + B \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u0441\u043a \u0438\u0437\u00a0\u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043f\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\/731\/6cc\/e99\/7316cce99cee3361a0455492e23a84b0.png\" width=\"1600\" height=\"793\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/731\/6cc\/e99\/7316cce99cee3361a0455492e23a84b0.png\"\/><\/figure>\n<p>\u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0438\u0448\u0435\u0448\u044c \u043a\u043e\u0434 \u0438 \u043d\u0435\u00a0\u0445\u043e\u0447\u0435\u0448\u044c \u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f \u0437\u0430\u00a0\u043c\u044b\u0448\u044c\u044e.<\/p>\n<pre><code class=\"cpp\">\"presentation\": {                  \"clear\": true,                 \"showReuseMessage\": false             }<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c (\u0438\u043d\u0430\u0447\u0435 \u0442\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432), \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u044f\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432\u00a0\u0431\u0443\u0434\u0443\u0449\u0435\u043c. <\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0430\u0441\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430:<\/p>\n<pre><code class=\"cpp\">            \"label\": \"Clean Release\", ...             \"args\": [                 \"clean_Release\"             ], ...             \"label\": \"Flash Release\", ...             \"args\": [                 \"flash_Release\"             ],<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 OpenOCD, \u0431\u0435\u0437\u00a0make. <\/p>\n<pre><code class=\"cpp\">            \"label\": \"Flash Release w OpenOCD\",             \"type\": \"shell\",             \"command\": \"openocd\",<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0438\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<pre><code class=\"cpp\">\"args\": [ \"-f interface\/stlink.cfg\", \/\/ Configuration file name   \/\/ Command    \"-c \\\"program ${workspaceRoot}\/Release\/Locket.hex verify reset exit\\\"\"<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 stlink.cfg, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 STLink. \u0414\u0430\u043b\u0435\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u0443\u0442\u044c \u043a .hex\u2011\u0444\u0430\u0439\u043b\u0443 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b: \u043f\u0440\u043e\u0448\u0438\u0442\u044c, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043e\u0442\u0440\u0435\u0437\u0435\u0442\u0438\u0442\u044c, \u0432\u044b\u0439\u0442\u0438. <\/p>\n<h4>c_cpp_properties.json<\/h4>\n<p>\u0422\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 C\/C++ \u0438, \u0447\u0442\u043e\u00a0\u0432\u0430\u0436\u043d\u043e, IntelliSense\u00a0\u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438. <\/p>\n<pre><code class=\"cpp\">{     \"configurations\": [         {             \"name\": \"Win32\",             \"includePath\": [                 \"${workspaceFolder}\/**\"             ],             \"defines\": [                 \"-D_GNU_SOURCE\"             ],             \"windowsSdkVersion\": \"10.0.22621.0\",             \"cStandard\": \"gnu17\",             \"cppStandard\": \"gnu++20\",             \"compilerPath\": \"C:\/YaStudio\/arm-none-eabi-gcc\/bin\/arm-none-eabi-g++.exe\"         }     ],     \"version\": 4 }<\/code><\/pre>\n<p>\u0412\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e: \u0433\u0434\u0435 \u043b\u0435\u0436\u0430\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u0430\u043a\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0421\u00a0\u0438 C++, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u0443\u0442\u044c \u043a\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443. \u0412\u0435\u0440\u0441\u0438\u0438 \u0421 \/ \u0421++ \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u0432\u00a0makefile\u00a0\u2014 \u0442\u043e\u0433\u0434\u0430 \u0443\u00a0IntelliSense \u043c\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u00a0\u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u00a0\u043c\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<h4>launch.json<\/h4>\n<p>\u0422\u0443\u0442 \u043b\u0435\u0436\u0430\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u041c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u044d\u0442\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u0432. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u043b\u044f\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0434\u043b\u044f\u00a0DAPlink.<\/p>\n<pre><code class=\"cpp\">{     \"version\": \"0.2.0\",     \"configurations\": [         {             \"name\": \"Debug with OpenOCD DAPLink\",<\/code><\/pre>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u00a0\u2014 \u043b\u044e\u0431\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u00a0\u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/549\/a8d\/19c\/549a8d19cf97eafbc4bf7e0161efd554.png\" width=\"1600\" height=\"792\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/549\/a8d\/19c\/549a8d19cf97eafbc4bf7e0161efd554.png\"\/><\/figure>\n<pre><code class=\"cpp\">\"type\": \"cortex-debug\",<\/code><\/pre>\n<p>\u041a\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">\"cwd\": \"${workspaceRoot}\",<\/code><\/pre>\n<p>\u0412\u00a0\u043a\u0430\u043a\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u00a0\u2014 \u0432\u00a0\u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. <\/p>\n<pre><code class=\"cpp\">\"device\": \"GD32F4xx\", \/\/ The name of the MCU, which matches the &lt;name&gt; tag at the top of the svd file.<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u0438\u00a0\u043d\u0430\u043b\u0438\u0447\u0438\u0438 .svd\u2011\u0444\u0430\u0439\u043b\u0430. \u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u043a\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1d\/ab8\/1d2\/d1dab81d29849971761730b905c6cb96.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d1d\/ab8\/1d2\/d1dab81d29849971761730b905c6cb96.png\"\/><\/figure>\n<pre><code class=\"cpp\">\"executable\": \".\/Debug\/Prj.elf\",<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u0443\u0442\u044c \u043a\u00a0\u0444\u0430\u0439\u043b\u0443 .elf. \u042f \u043f\u043e\u0442\u043e\u043c\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432\u0435\u0437\u0434\u0435 Prj \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0435\u0449\u0451 \u0438 \u0432\u00a0launch.json. <\/p>\n<pre><code class=\"cpp\">\"runToEntryPoint\" : \"main\",<\/code><\/pre>\n<p>\u041f\u0440\u0438\u00a0\u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0434\u043e\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main<\/code>, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0435\u0449\u0451 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0441\u0435\u0433\u043e: \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0432\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0441\u0442\u0435\u043a\u0430, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f FPU, \u043e\u0431\u043d\u0443\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b. \u041d\u043e\u00a0\u044d\u0442\u043e \u0432\u0441\u0451, \u043a\u0430\u043a\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0438 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e, \u0430\u00a0\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main<\/code>. \u0412\u00a0\u044d\u0442\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0451 \u0434\u043e <code>main<\/code> \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u0435. <\/p>\n<p>\u0415\u0441\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u0440\u0438\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u044f\u043a\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e <code>main<\/code>, \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>EarlyInit()<\/code>. \u041d\u043e\u00a0\u044f \u0442\u0430\u043a\u043e\u0435 \u043d\u0435\u00a0\u043e\u0434\u043e\u0431\u0440\u044f\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u044b \u0432\u0441\u044f\u043a\u0438\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u0438, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u0434 <code>main()<\/code> \u0435\u0441\u0442\u044c \u0435\u0449\u0451 <code>EarlyInit()<\/code>. \u0412\u043e\u043f\u0440\u043e\u0441 \u0432\u043a\u0443\u0441\u0430, \u0432\u043f\u0440\u043e\u0447\u0435\u043c. <\/p>\n<pre><code class=\"cpp\">\"showDevDebugOutput\": \"none\",<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e\u00a0\u0432\u044b\u0432\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043d\u043e\u00a0\u043c\u044b \u044d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043d\u0435\u00a0\u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f. <\/p>\n<pre><code class=\"cpp\">\"svdFile\": \"${workspaceRoot}\/GD32F4xx.svd\",<\/code><\/pre>\n<p>\u041f\u0443\u0442\u044c \u043a\u00a0.svd-\u0444\u0430\u0439\u043b\u0443. \u042d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u0431\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u00a0\u0443\u0442\u0438\u043b\u0438\u0442 ST \u0434\u043b\u044f STM32, \u0430\u00a0\u0434\u043b\u044f GD\u00a0\u2014 \u0438\u0437\u00a0\u0431\u043b\u043e\u043a\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f Keil.\u00a0<\/p>\n<pre><code class=\"cpp\">\"armToolchainPath\": \"C:\/YaStudio\/arm-none-eabi-gcc\/bin\/\",<\/code><\/pre>\n<p>\u041f\u0443\u0442\u044c \u043a\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u043c \u0438\u00a0gdb.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430: \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 gdb \u0438\u00a0\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u043c. \u0412\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e OpenOCD.<\/p>\n<pre><code class=\"cpp\">\/\/ Server \"servertype\": \"openocd\", \"configFiles\": [      \"interface\/cmsis-dap.cfg\",      \"target\/stm32f4x.cfg\"  ],<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u00a0\u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446.\u00a0<\/p>\n<pre><code class=\"cpp\">\"interface\": \"swd\"<\/code><\/pre>\n<p>\u041f\u043e\u00a0\u043a\u0430\u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f.<\/p>\n<pre><code class=\"cpp\">\/\/ \"preLaunchTask\": \"Build Debug\",<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0442\u0430\u0441\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u042f \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 Debug\u2011\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041d\u043e\u00a0\u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<pre><code class=\"cpp\">\/\/ \"preLaunchCommands\": [ \"set output-radix 16\" ],<\/code><\/pre>\n<p>\u0410\u00a0\u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f, \u0432\u00a0\u043a\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445: \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c, \u0434\u0435\u0441\u044f\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e), \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c. \u041f\u0440\u043e\u00a0\u044d\u0442\u043e \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0412\u043e\u0442, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0432\u0441\u0451. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u00ab\u0441\u0435\u0440\u0432\u0435\u0440 + \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u00bb. \u0414\u043b\u044f\u00a0\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e STLink \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">\"servertype\": \"stlink\", \"interface\": \"swd\"<\/code><\/pre>\n<p>\u041c\u0438\u043d\u0443\u0441, \u043a\u0430\u043a\u00a0\u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0STLink \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u00a0\u041c\u041a STM32. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c GD32F405\u00a0\u043f\u043e\u0434\u00a0\u0432\u0438\u0434\u043e\u043c STM32F405\u00a0\u2014 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0438 \u043f\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u043e. <\/p>\n<p>\u0414\u043b\u044f\u00a0\u0441\u0432\u044f\u0437\u043a\u0438 STLink + OpenOCD:<\/p>\n<pre><code class=\"cpp\">\"servertype\": \"openocd\", \"configFiles\": [  \"interface\/stlink.cfg\",  \"target\/gd32f4xx.cfg\" ], \"interface\": \"swd\"<\/code><\/pre>\n<p>\u041d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u00a0\u2014 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c GD32\u00a0\u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 STLink. \u0410\u0432\u0442\u043e\u0440\u044b OpenOCD \u043c\u043e\u043b\u043e\u0434\u0446\u044b!<\/p>\n<p>\u0414\u043b\u044f Black Magic Probe:<\/p>\n<pre><code class=\"cpp\">\"servertype\": \"bmp\", \"BMPGDBSerialPort\": \"COM5\", \"interface\": \"swd\", \"preRestartCommands\" : [ \"load\", \"enable breakpoint\", \"monitor reset\" ]<\/code><\/pre>\n<p>\u041d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c COM-\u043f\u043e\u0440\u0442, \u043a\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0438\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u044b: \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c breakpoints, \u043e\u0442\u0440\u0435\u0437\u0435\u0442\u0438\u0442\u044c\u00a0\u041c\u041a. <\/p>\n<h2>\u041e\u0442\u043b\u0430\u0434\u043a\u0430<\/h2>\n<p>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441\u00a0\u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u043e\u0439 Launch.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a09\/ffb\/7e9\/a09ffb7e9f5d82641642eaa5a9460a01.png\" width=\"1600\" height=\"781\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a09\/ffb\/7e9\/a09ffb7e9f5d82641642eaa5a9460a01.png\"\/><\/figure>\n<p>\u0423\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432\u00a0VScode \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u00a0Eclipse: \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u0434\u0435\u0441\u044f\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 (\u043a\u0440\u043e\u043c\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439\u00a0\u2014 \u0442\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0439, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c). \u042d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e\u00a0\u2014 \u0432\u00a0Eclipse \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432\u00a0\u043b\u044e\u0431\u043e\u043c \u0432\u0438\u0434\u0435: \u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c, \u0438 \u0434\u0435\u0441\u044f\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c, \u0438 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c.<\/p>\n<p>\u041a\u0430\u043a\u00a0\u0436\u0435\u00a0\u0431\u044b\u0442\u044c? \u041d\u0430\u043c, \u044d\u043c\u0431\u0435\u0434\u0434\u0435\u0440\u0430\u043c, \u043d\u0443\u0436\u043d\u043e \u043e\u0434\u043d\u043e \u0432\u00a0hex, \u0434\u0440\u0443\u0433\u043e\u0435 \u0432\u00a0dec, \u0442\u0440\u0435\u0442\u044c\u0435 \u0432\u00a0bin.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u0443\u0442\u0438. <\/p>\n<p><strong>\u0410. \u0417\u0430\u0432\u0435\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432\u00a0\u043e\u043a\u043e\u0448\u043a\u0435 watch \u0438 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442.<\/strong> \u041c\u0438\u043d\u0443\u0441 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0434\u043b\u044f\u00a0\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3a4\/f72\/ff8\/3a4f72ff892c30c438e30c61e747f930.png\" width=\"1600\" height=\"483\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a4\/f72\/ff8\/3a4f72ff892c30c438e30c61e747f930.png\"\/><\/figure>\n<p><strong>\u0411. \u0412\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u00ab\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u00a0\u043d\u0443\u0436\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435\u00bb.<\/strong> \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u0433\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>settings.json: \u043e\u043f\u0446\u0438\u044f <code>\"cortex-debug.variableUseNaturalFormat\"<\/code>,<\/p>\n<\/li>\n<li>\n<p>launch.json: \u0437\u0430\u0434\u0430\u0442\u044c <code>\"preLaunchCommands\": [ \"set output-radix 16\" ]<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0441 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u00a0\u044d\u0442\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043a\u0443\u0447\u0443 \u0432\u0441\u0435\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u00a0hex, \u0430\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u00a0dec\u00a0\u2014 \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0432\u00a0\u043e\u043a\u043d\u0435 watch.<\/p>\n<p><strong>\u0412. \u041c\u0435\u043d\u044f\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/strong> \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/811\/617\/9a6\/8116179a666b01476f028d2919adab09.png\" width=\"1044\" height=\"474\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/811\/617\/9a6\/8116179a666b01476f028d2919adab09.png\"\/><\/figure>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u00a0\u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043c\u044b\u0448\u0438 \u043d\u0430\u00a0\u0441\u0442\u0440\u043e\u043a\u0443 Watch. \u0418 \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0438\u0442\u0441\u044f:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/832\/24c\/716\/83224c716d35d2582bd50e02ebb24696.png\" width=\"1600\" height=\"578\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/832\/24c\/716\/83224c716d35d2582bd50e02ebb24696.png\"\/><\/figure>\n<p>\u041c\u0438\u043d\u0443\u0441 \u0438 \u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0435\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u0432\u00a0\u043f\u0443\u043d\u043a\u0442\u0435 \u0411, \u043d\u043e\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432. <\/p>\n<p><strong>\u0413. \u0410\u00a0\u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448 Ctrl + Shift + X!<\/strong> \u042d\u0444\u0444\u0435\u043a\u0442 \u0442\u043e\u0442\u00a0\u0436\u0435.<\/p>\n<h2>\u041c\u0435\u043b\u043e\u0447\u0438, \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u00a0\u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>\u0412\u00a0\u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443\u00a0\u043c\u0435\u043d\u044f \u0432\u00a0\u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0441\u043b\u043e\u0432\u0435\u0447\u043a\u043e <code>MySuperMegaClass<\/code>. \u042f \u0445\u043e\u0447\u0443 \u043f\u043e\u00a0\u043d\u0435\u043c\u0443\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f, \u0437\u0430\u0436\u0430\u0432 Ctrl \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438. \u042f \u043e\u0436\u0438\u0434\u0430\u043b, \u0447\u0442\u043e\u00a0\u043f\u0440\u044b\u0436\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u0436\u0434\u0443 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u0441\u043b\u043e\u0432\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/43e\/ce5\/987\/43ece598726e8eabed3d35a6693857f9.png\" width=\"1600\" height=\"516\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/43e\/ce5\/987\/43ece598726e8eabed3d35a6693857f9.png\"\/><\/figure>\n<p>\u041d\u043e\u00a0\u0432 VScode \u043a\u0443\u0440\u0441\u043e\u0440 \u043f\u0440\u044b\u0433\u0430\u0435\u0442 \u043d\u0430\u00a0\u0432\u0441\u0451 \u0441\u043b\u043e\u0432\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c. <\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445. \u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0442\u0443\u0434\u0430 (Ctrl + K \u0438\u043b\u0438\u00a0Ctrl + S), \u0432\u0432\u043e\u0434\u0438\u043c \u0432\u00a0\u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 <code>cursorWord<\/code>. \u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>cursorWordLeft<\/code> (Ctrl + LeftArrow) \u0438 <code>cursorWordRight<\/code> (Ctrl + RightArrow). \u0427\u0442\u043e\u0431\u044b \u043a\u0443\u0440\u0441\u043e\u0440 \u043f\u0440\u044b\u0433\u0430\u043b \u043f\u043e\u00a0\u0447\u0430\u0441\u0442\u044f\u043c \u0441\u043b\u043e\u0432\u0430, \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>cursorWordPartLeft<\/code> \u0438 <code>cursorWordPartRight<\/code> \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0438\u043c Ctrl + LeftArrow \u0438 Ctrl + RightArrow \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u042d\u0442\u0438 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0438\u0437\u00a0<code>cursorWordLeft<\/code> \u0438 <code>cursorWordRight<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u043e\u0440 \u043f\u0440\u044b\u0433\u0430\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e.<\/p>\n<p>\u041d\u043e\u00a0\u043d\u0435\u00a0\u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e. \u0415\u0441\u0442\u044c SourceCraft Code Assistant (IntelliBoba)\u00a0\u2014 \u043d\u0430\u0448 \u0418\u0418\u2011\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442, \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430. \u042f \u043c\u043e\u0433\u0443 \u043d\u0430\u0436\u0430\u0442\u044c Tab \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u044f \u0445\u043e\u0447\u0443 \u043d\u0435\u00a0\u0446\u0435\u043b\u044b\u0439 \u043a\u0443\u0441\u043e\u043a, \u0430\u00a0\u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c? <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8a6\/e30\/fa6\/8a6e30fa63218c3f793883d626f6123c.png\" width=\"1600\" height=\"516\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a6\/e30\/fa6\/8a6e30fa63218c3f793883d626f6123c.png\"\/><\/figure>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u043e \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c Ctrl + RightArrow \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u043e \u0437\u0430\u00a0\u0441\u043b\u043e\u0432\u043e\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b32\/f05\/8f7\/b32f058f774b766397f4c7ab21567cbf.png\" width=\"1600\" height=\"611\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b32\/f05\/8f7\/b32f058f774b766397f4c7ab21567cbf.png\"\/><\/figure>\n<p>\u041d\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u043d\u044b \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0441\u00a0<code>cursorWordRight<\/code> \u043d\u0430\u00a0<code>cursorWordPartRight<\/code> \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435. \u041d\u0443\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0\u2014 <code>Accept Next Word Of Inline Suggestion<\/code>. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 Alt + Shift + RightArrow.<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435\u00a0\u2014 Ctrl + \u041f\u0440\u043e\u0431\u0435\u043b\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043e\u0442\u00a0\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u0430. \u041d\u043e\u00a0\u044d\u0442\u043e\u00a0\u0436\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u00a0IntelliSense. \u0422\u0443\u0442 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442, \u0438 \u044d\u0442\u043e \u043d\u0435\u0445\u043e\u0440\u043e\u0448\u043e: IntelliSense \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0447\u0430\u0441\u0442\u043e, \u0434\u043b\u044f\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 \u043c\u0435\u043b\u043e\u0447\u0435\u0439 \u0432\u0440\u043e\u0434\u0435 \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043b Ctrl + \u041f\u0440\u043e\u0431\u0435\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>Trigger Suggest<\/code>, \u0430\u00a0Ctrl + Enter\u00a0\u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>Yandex Code Assistant Suggest<\/code>.<\/p>\n<h2>\u0424\u0430\u0439\u043b .svd \u0438\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u00a0\u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438<\/h2>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u00a0\u043e\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e.\u00a0<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 ST\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0444\u0430\u0439\u043b \u0441\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438\u00a0\u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439. \u0414\u043b\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e I2C. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, stm32l151xb.h \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0438\u0436\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (\u044f\u0437\u044b\u043a\u00a0C):<\/p>\n<pre><code class=\"cpp\">typedef struct {   __IO uint32_t CR1;    __IO uint32_t CR2;   __IO uint32_t OAR1;   __IO uint32_t OAR2;    __IO uint32_t DR;    __IO uint32_t SR1;    __IO uint32_t SR2;    __IO uint32_t CCR;    __IO uint32_t TRISE; } I2C_TypeDef;<\/code><\/pre>\n<p>\u041d\u0438\u0436\u0435 \u0435\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 I2C1 \u0438\u00a0I2C2:<\/p>\n<pre><code class=\"cpp\">#define I2C1_BASE             (APB1PERIPH_BASE + 0x00005400U) #define I2C2_BASE             (APB1PERIPH_BASE + 0x00005800U)<\/code><\/pre>\n<p>\u0418 \u0434\u0430\u043b\u0435\u0435\u00a0\u2014 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0430\u00a0\u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430:<\/p>\n<pre><code class=\"cpp\">#define I2C1                ((I2C_TypeDef *) I2C1_BASE) #define I2C2                ((I2C_TypeDef *) I2C2_BASE)<\/code><\/pre>\n<p>\u0415\u0449\u0451 \u0434\u0430\u043b\u044c\u0448\u0435 \u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">#define I2C_CR1_PE_Pos                      (0U)                                #define I2C_CR1_PE_Msk                      (0x1U &lt;&lt; I2C_CR1_PE_Pos)  #define I2C_CR1_PE                          I2C_CR1_PE_Msk <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440\u00a0\u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0438\u0445 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f\u00a0\u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u00ab\u0441\u0432\u043e\u0439 HAL \u043d\u0430\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445\u00bb. \u0414\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u00a0\u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0431\u0438\u0442\u0430 PE \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 CR1\u00a0\u0431\u043b\u043e\u043a\u0430 I2C2\u00a0\u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">I2C2-&gt;CR1 |= I2C_CR1_PE;<\/code><\/pre>\n<p>\u041d\u043e\u00a0\u043d\u0435\u00a0\u0442\u0430\u043a\u043e\u0432\u044b GigaDevice. \u0418\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043d\u0435\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440: I2C0\u00a0\u0438\u043b\u0438\u00a0I2C1\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0441\u043b\u043e, \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 I2C. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u00a0\u2014 \u0442\u043e\u0436\u0435 \u0447\u0438\u0441\u043b\u0430: \u044d\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0415\u0441\u0442\u044c \u0434\u0435\u0444\u0430\u0439\u043d\u044b \u0431\u0438\u0442\u043e\u0432. \u0414\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e\u00a0\u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 HAL,\u00a0\u043b\u0438\u0431\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0438 \u043f\u043e\u0445\u043e\u0436\u0435, \u043d\u043e\u00a0\u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e:<\/p>\n<pre><code class=\"cpp\">I2C_CTL0(I2C1) |= I2C_CTL0_I2CEN;<\/code><\/pre>\n<p>\u041c\u043d\u0435 \u0442\u0430\u043a \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u041f\u0435\u0440\u0435\u0443\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0435\u043d\u044c. \u041d\u043e\u00a0\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438\u00a0\u2014 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u0435\u043d\u044c (\u044f \u043a\u0430\u043a\u2011\u0442\u043e \u043f\u0438\u0441\u0430\u043b, \u043d\u0435\u00a0\u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c). \u0427\u0442\u043e\u00a0\u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c? <\/p>\n<p>\u0422\u0430\u043a \u0432\u043e\u0442, \u0435\u0441\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0430 SVDConv.exe, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430\u00a0\u0432\u0445\u043e\u0434.svd\u2011\u0444\u0430\u0439\u043b \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442.h\u2011\u0444\u0430\u0439\u043b \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0438\u0434 \u044d\u0442\u0438\u0445 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439: \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043a\u0430\u043a\u00a0\u0443\u00a0ST, \u0438\u043b\u0438\u00a0enum, \u0438\u043b\u0438\u00a0\u0432\u00a0\u0432\u0438\u0434\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u0412\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">union {     __IOM uint32_t CTL1;          struct {       __IOM uint32_t I2CCLK     : 6;             uint32_t            : 2;       __IOM uint32_t ERRIE      : 1;       __IOM uint32_t EVIE       : 1;       __IOM uint32_t BUFIE      : 1;       __IOM uint32_t DMAON      : 1;       __IOM uint32_t DMALST     : 1;             uint32_t            : 19;     } CTL1_b; } ;<\/code><\/pre>\n<p>\u0422\u0443\u0442 <code>__IOM<\/code>\u00a0\u2014 \u044d\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f volatile.\u00a0<\/p>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0438\u0441\u043b\u0430 clk_MHz \u0432\u00a0\u043f\u043e\u043b\u0435 I2CCLK \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u00a0\u00ab\u0441\u0442\u0438\u043b\u0435 ST\u00bb:<\/p>\n<pre><code class=\"cpp\">I2C1-&gt;CTL1 = (I2C1-&gt;CTL1 &amp; ~I2C_CTL1_I2CCLK) | clk_MHz;<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u0435\u043b\u0435\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0435 6\u00a0\u0431\u0438\u0442, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418\u041b\u0418 \u0441\u00a0\u0447\u0438\u0441\u043b\u043e\u043c clk_MHz. \u041e\u043d\u043e \u0442\u0443\u0442 \u0432\u00a0\u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0431\u0438\u0442\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0410 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">I2C1-&gt;CTL1_b.I2CCLK = clk_MHz;<\/code><\/pre>\n<p>\u042f \u043d\u0435\u00a0\u043f\u043e\u043b\u0435\u043d\u0438\u043b\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043a\u043e\u0434 \u0432\u00a0\u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0435\u0449\u0451 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435: \u0442\u0440\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0432\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u0430\u043a\u00a0\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418, \u0430\u00a0\u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418\u041b\u0418; \u0430\u00a0\u0432\u043e\u00a0\u0432\u0442\u043e\u0440\u043e\u043c\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c. <\/p>\n<hr\/>\n<p>SourceCraft Code Assistant\u00a0\u2014 \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442\u00a0\u0440\u0443\u0442\u0438\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u0422\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u043b\u043e\u0437\u0443\u043d\u0433 IBM \u00ab\u041c\u0430\u0448\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u00a0\u2014 \u0434\u0443\u043c\u0430\u0442\u044c\u00bb \u043e\u0431\u0440\u0451\u043b \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041c\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430\u00a0\u2014 \u043e\u0442\u0441\u0435\u044f\u0442\u044c \u043f\u043b\u043e\u0445\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435, \u0430\u00a0\u0435\u0441\u043b\u0438 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435\u00a0\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u043e\u0439\u00a0\u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443. \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u043a\u0443\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u043d\u043e\u00a0\u0441\u0443\u0442\u044c \u0438\u0445 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430. <\/p>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f\u0442, \u043f\u043e\u00a0\u043c\u0435\u0440\u0435 \u0440\u043e\u0441\u0442\u0430 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u043e\u043d \u0432\u0441\u0451 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0438 \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0443\u043c\u0430\u0435\u0442. \u0418 \u0418\u0418 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043c\u043d\u0435 \u0440\u0430\u0441\u0442\u0438 \u0435\u0449\u0451\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0422\u0430\u043a \u0447\u0442\u043e\u00a0\u0442\u0435\u043f\u0435\u0440\u044c VScode \u0432\u00a0\u043f\u0430\u0440\u0435 \u0441\u00a0\u0418\u0418\u2011\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043e\u043c\u00a0\u2014 \u043c\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0442\u0430\u043d\u0434\u0435\u043c \u0434\u043b\u044f\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u0418 \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u00a0\u2014 \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0447\u0435\u043c\u00a0\u0431\u044b\u043b\u043e \u0432\u00a0Eclipse. <\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/articles\/892502\/\"> https:\/\/habr.com\/ru\/articles\/892502\/<\/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<figure class=\"full-width\"><\/figure>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0434\u043b\u044f\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0445\u0435\u043c\u044b \u0438 \u043f\u043b\u0430\u0442\u044b. \u0421\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u043a\u043e\u0432\u0438\u0434\u0430 \u043f\u0440\u043e\u0448\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0431\u0435\u0437\u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u044b\u0447\u0435\u0441\u0442\u0432\u0430 STM32, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435\u00a0\u0436\u0435\u043b\u0435\u0437\u043a\u0438. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0434\u043b\u044f\u00a0\u043d\u0438\u0445 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u044f\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00a0\u2014 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c VSCode \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u043f\u043e\u0434\u00a0\u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043a\u0430\u043a\u00a0\u043c\u043d\u0435 \u0432\u00a0\u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 <a href=\"https:\/\/yandex.cloud\/ru\/services\/code-assistant\">SourceCraft Code Assistant<\/a> \u043e\u0442\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Yandex Cloud &amp; Yandex Infrastructure.<\/p>\n<h2>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u0430 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c VSCode \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/h2>\n<p>\u0412\u00a0\u0441\u0435\u0442\u0438 (\u0438 \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435) \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 VScode \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438. \u0417\u0430\u0447\u0435\u043c yet another one? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0432\u00a0\u0442\u0435\u0445, \u0447\u0442\u043e\u00a0\u0435\u0441\u0442\u044c, \u044f \u043d\u0435\u00a0\u043e\u0431\u0440\u0451\u043b \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u0441\u0432\u043e\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439. \u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435\u00a0\u2014 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0430\u0432\u0442\u043e\u0440\u0430\u043c!<\/p>\n<p>\u042f \u043b\u044e\u0431\u043b\u044e, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e, \u0438 \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442 \u044f \u043e\u043f\u0438\u0441\u0430\u043b, \u043a\u0430\u043a\u00a0\u044f \u0434\u0435\u043b\u0430\u043b \u0441\u0435\u0431\u0435 \u0443\u0434\u043e\u0431\u043d\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e), \u0434\u043b\u044f\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439 \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u00a0\u2014 \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. <\/p>\n<p>\u042f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438, \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u00a0Windows. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u00a0Windows \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0440\u0435\u0447\u044c. <\/p>\n<p>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u00a0\u0436\u0435 \u0434\u0438\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0435\u043c\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438. \u041c\u043e\u044f \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0432\u00a0\u0433\u043e\u0434 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u043d\u044b\u0445\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u043a \u0441\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u043e\u0442\u00a0\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439, \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u044f\u0434\u0440\u0430\u043c\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0434\u0430\u043c\u0438 \u043f\u0438\u043b\u044f\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442\u00a0\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434\u00a0\u043e\u0434\u043d\u0443 \u0438 \u0442\u0443\u00a0\u0436\u0435\u00a0\u0436\u0435\u043b\u0435\u0437\u043a\u0443\u00a0\u2014 \u0438\u043c \u043c\u043e\u0439 \u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u0447\u0443\u0436\u0434. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441\u00a0STM32, GD32, WCH, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u043c RISC\u2011V \u044f\u0434\u0440\u043e\u043c \u0432\u00a0\u041f\u041b\u0418\u0421 GOWIN. \u0418 \u0435\u0449\u0451 \u043f\u0438\u0448\u0443 \u043d\u0430\u00a0Verilog \u0434\u043b\u044f\u00a0\u0442\u0435\u0445\u00a0\u0436\u0435 GOWIN. \u0410\u00a0\u0435\u0449\u0451 \u043c\u043d\u0435 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430\u00a0Python. <\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445, \u0430\u00a0\u043d\u0435\u00a0\u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. Verilog \u0438 Risc\u2011V\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0434 \u0434\u043b\u044f\u00a0\u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0438\u0445 \u0441\u0442\u0435\u043d\u0434\u043e\u0432\u2011\u0434\u0436\u0438\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0442 \u0442\u044b\u0441\u044f\u0447\u0438 \u043f\u043b\u0430\u0442 \u042f\u043d\u0434\u0435\u043a\u0441 \u0421\u0442\u0430\u043d\u0446\u0438\u0439 \u0432\u00a0\u0434\u0435\u043d\u044c. \u041a\u043e\u0434 \u0434\u043b\u044f\u00a0STM32, GD32\u00a0\u0438 WCH\u00a0\u2014 \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c RND\u2011\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0434\u043b\u044f\u00a0\u042f\u043d\u0434\u0435\u043a\u0441\u0430, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 Pet Projects, \u0440\u0430\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0435\u0441\u044f \u043f\u043e\u00a0\u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0435, \u0442\u0438\u043f\u0430 \u043f\u043b\u0430\u0442 \u0434\u043b\u044f\u00a0\u0448\u043a\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0430\u00a0\u043a\u0432\u0430\u0434\u0440\u043e\u043a\u043e\u043f\u0442\u0435\u0440\u0430\u0445 \u043f\u043e\u0434\u00a0\u044d\u0433\u0438\u0434\u043e\u0439 <a href=\"https:\/\/kruzhok.org\">\u00ab\u041a\u0440\u0443\u0436\u043a\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u00bb<\/a>. \u0418 \u0435\u0449\u0451 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u00a0\u044d\u0442\u043e \u0432\u0441\u0451 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0438\u043c \u0441\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u043c \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0437\u0431\u0435\u0433\u0430\u044e \u0434\u043e\u0440\u043e\u0433\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 J\u2011Link \u0438 CLion, \u0434\u0430\u00a0\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u0430 Keil \u043d\u0435\u00a0\u0436\u0430\u043b\u0443\u044e.<\/p>\n<p>\u042f \u043d\u0435\u00a0\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c HAL \u043e\u0442\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439: \u043f\u0438\u0448\u0443 \u043d\u0430\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0438\u043b\u0438\u00a0\u0434\u0435\u043b\u0430\u044e \u0441\u0432\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u0435\u043d. HAL \u043e\u0442\u00a0ST \u043c\u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u0435\u043d, HAL \u043e\u0442\u00a0GD \u0435\u0449\u0451 \u0445\u0443\u0436\u0435, \u0430\u00a0HAL \u043e\u0442\u00a0GOWIN \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0431\u0430\u0433\u0438 \u0442\u0438\u043f\u0430 uint8_t \u0434\u043b\u044f\u00a0\u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c 16-\u0431\u0438\u0442\u043d\u044b\u043c\u0438. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u00abHAL \u0438\u043b\u0438\u00a0\u043d\u0435\u00a0HAL\u00bb\u00a0\u2014 \u044d\u0442\u043e \u0442\u0435\u043c\u0430 \u0434\u043b\u044f\u00a0\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u043e\u0439\u043d\u044b, \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u043c \u043e\u0431\u00a0\u044d\u0442\u043e\u043c. <\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438: \u043a\u0430\u043a\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 Eclipse \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c GCC \u0438 \u0441\u0432\u043e\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u043e\u0440\u043a\u043e\u043c OpenOCD. \u0423\u00a0ST \u044d\u0442\u043e CubeIDE, \u0443\u00a0GOWIN\u00a0\u2014 MCU Designer, \u0443\u00a0WCH\u00a0\u2014 MounRiver Studio (\u0441 \u0444\u043e\u0440\u043a\u043e\u043c GCC, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432\u00a0\u0438\u0445 MCU \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u0438\u00a0\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 <code>attribute((interrupt(\"WCH-Interrupt-fast\"))<\/code> ). \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u00a0\u043a\u043e\u043c\u043f\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438\u0445 Eclipse. \u0410\u00a0\u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432\u00a0\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u043b\u043e\u0436\u0438\u043b \u0441\u0435\u043c\u044c \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0441\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440 \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043a\u043e\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u044d\u0442\u043e\u0442 \u0421++20. \u0410\u00a0\u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/companies\/otus\/articles\/669532\/\">std::span<\/a>), \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u044f \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0432\u00a0\u043f\u043b\u0430\u0433\u0438\u043d\u0430\u0445 \u043f\u043e\u0440\u043e\u0439 \u0432\u044b\u043f\u0438\u043b\u0435\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u043f\u043b\u0430\u0433\u0438\u043d\u0435 MCU Designer \u043e\u0442\u00a0GOWIN \u0443\u0431\u0440\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u00a0\u043a\u043d\u043e\u043f\u043a\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 exe, \u0430\u00a0\u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043b\u0438\u0432\u043a\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u0438\u0437\u00a0IDE \u043f\u043e\u00a0\u043a\u043d\u043e\u043f\u043a\u0435. \u041d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u043e\u043a\u043d\u043e \u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u0438 \u043c\u044b\u0448\u044c\u044e \u0432\u00a0GUI \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043b\u0438\u0432\u043a\u0438. \u041c\u0435\u043d\u044f \u0442\u0430\u043a\u043e\u0435, \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u0431\u0435\u0441\u0438\u0442. \u041d\u043e\u00a0\u0437\u0430\u0442\u043e \u0432\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u00a0\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438! \u0410\u00a0\u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0438 \u043d\u0435\u0442.<\/p>\n<p>GigaDevice \u0441\u0442\u043e\u044f\u0442 \u043e\u0441\u043e\u0431\u043d\u044f\u043a\u043e\u043c: \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0435\u00a0IDE, \u0430\u00a0\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0Keil, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u0443\u043f\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u041c\u043d\u0435 \u043d\u0435\u00a0\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f Keil, \u044f \u043d\u0435\u00a0\u0445\u043e\u0447\u0443 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e IDE \u0440\u0430\u0434\u0438 GD, \u043c\u0435\u043d\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. <\/p>\n<p>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u0433\u043e\u0434\u044b \u0436\u0438\u043b \u043d\u0430\u00a0\u043d\u0430\u0431\u043e\u0440\u0435: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Eclipse IDE for Embedded C\/C++ Developers \u0431\u0435\u0437\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 + \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0435 GCC\u2011\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u043b\u044f\u00a0ARM \u0438 RiscV. \u041d\u0435\u00a0\u0432\u0441\u0451 \u0433\u043b\u0430\u0434\u043a\u043e \u0441\u00a0Eclipse: \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0432\u0438\u0441\u043d\u0435\u0442, \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438 \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u043d\u043e, \u0430\u00a0\u0435\u0449\u0451 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0431\u0430\u0433\u0430 \u0441\u00a0Code Folding, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 15\u00a0\u043b\u0435\u0442 \u0442\u0430\u043a \u0438 \u043d\u0435\u00a0\u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b\u0438: <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0\u0431\u044b\u043b\u0430 \u0441\u0432\u0451\u0440\u043d\u0443\u0442\u0430, \u043d\u043e\u00a0\u0441\u0430\u043c\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0430\u043a\u00a0\u0431\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c. \u041d\u043e\u00a0\u043d\u0435\u00a0\u0441\u043e\u0432\u0441\u0435\u043c, \u0430\u00a0\u043a\u0430\u043a\u2011\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0447\u0430\u0442\u043e, \u0441\u00a0\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u0430\u043c\u0438 \u044d\u0442\u0438\u043c\u0438. \u0411\u0435\u0441\u0438\u0442, \u0437\u043d\u0430\u0435\u0442\u0435\u00a0\u043b\u0438. <\/p>\n<p>\u0414\u0440\u0443\u0437\u044c\u044f \u043d\u0435\u00a0\u0440\u0430\u0437 \u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b\u0438 \u043c\u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0VScode. \u042f \u0434\u0435\u043b\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a\u00a0\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0440\u044f\u0434\u0443, \u043d\u043e\u00a0\u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043b. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u043e\u0431\u0438\u043b\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, VScode\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 tasks \u0438 \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a\u00a0\u0437\u0430\u0434\u0430\u0447\u0435 \u00abVScode + MCU\u00bb \u0435\u0441\u0442\u044c \u0434\u0432\u0430: \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0415\u0434\u0438\u043d\u044b\u0439\u2011\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439\u2011\u041f\u043b\u0430\u0433\u0438\u043d\u2011\u0414\u043b\u044f\u2011\u0412\u0441\u0435\u0433\u043e \u0438\u043b\u0438\u00a0\u043a\u0430\u0447\u0430\u0435\u043c \u043a\u0443\u0447\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u0445. <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u041f\u043b\u0430\u0433\u0438\u043d\u0430\u2011\u0414\u043b\u044f\u2011\u0412\u0441\u0435\u0433\u043e \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u00a0\u0412\u0441\u0451, \u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0447\u043b\u0438 \u043d\u0443\u0436\u043d\u044b\u043c \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c. \u0410\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u0438 \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u043b\u044f\u00a0ARM \u0438 RiscV\u00a0\u2014 \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0418\u043b\u0438\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430: \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0447\u0442\u043e\u2011\u0442\u043e \u043e\u0434\u043d\u043e\u00a0\u2014 bin \u0438\u043b\u0438\u00a0hex. \u0410\u00a0\u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043e\u0431\u0430? \u0423\u0432\u044b \u043c\u043d\u0435. \u0418\u043b\u0438\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430\u00a0\u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u0432\u2011\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u0432: \u0435\u0441\u0442\u044c STLink, J\u2011Link, \u043d\u043e\u00a0\u043d\u0435\u0442 Black Magic Probe (\u0430 \u0443\u00a0\u043c\u0435\u043d\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438).<\/p>\n<p>\u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u00a0\u2014 \u0441\u00a0\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u00a0\u043c\u043e\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u00a0\u2014 EmbeddedIDE \u0438 PlatformIO. <\/p>\n<p>\u041a\u0443\u0447\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043d\u043e\u0440\u043c, \u043d\u043e\u00a0\u0432\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445 \u044f \u043d\u0435\u00a0\u043d\u0430\u0448\u0451\u043b, \u043a\u0430\u043a\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u0443\u0434\u043e\u0431\u043d\u043e. \u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431 \u044f \u043c\u043e\u0433 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c\u2011\u0443\u0434\u0430\u043b\u0438\u0442\u044c\u2011\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u043f\u0440\u0435\u0442\u0438\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 CMake, \u043a\u043b\u0430\u0441\u0442\u044c \u0432\u00a0\u043a\u0430\u0436\u0434\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 CMakeLists.txt \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438. \u0412\u00a0Eclipse \u0432\u00a0\u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0432\u0441\u0451 \u0443\u0434\u043e\u0431\u043d\u043e. <\/p>\n<h2>\u0418\u00a0\u0442\u0443\u0442 \u044f\u00a0\u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441\u00a0AI-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043e\u043c<\/h2>\n<p>\u0412\u00a0\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u042f\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0432\u00a0\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0431\u0435\u0442\u0443 <a href=\"https:\/\/yandex.cloud\/ru\/services\/code-assistant\">Code Assistant<\/a>. \u041d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435 \u043e\u0431\u00a0\u044d\u0442\u043e\u043c \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/companies\/yandex\/articles\/841436\/\">\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437<\/a>. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u044d\u0442\u043e AI\u2011\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441\u00a0\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043e\u043c\u00a0\u0431\u044b\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043f\u043e\u0434\u00a0PyCharm Community \u0438 VScode. \u042f \u0441\u043f\u0440\u043e\u0441\u0438\u043b: \u00ab\u0410 \u043f\u043e\u0434\u00a0Eclipse?\u00bb \u00ab\u041d\u0435\u0442,\u00a0\u2014 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0438 \u043c\u043d\u0435.\u00a0\u2014 \u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d, \u0442\u043e \u043c\u043e\u0436\u0435\u0448\u044c \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0430\u043c \u0441\u00a0\u044d\u0442\u0438\u043c\u00bb.<\/p>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u043b\u0438 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u00a0\u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432\u00a0\u2014 \u0443\u0447\u0438\u043b\u0438\u2011\u0442\u043e \u0435\u0451 \u043d\u0430\u00a0\u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u043c \u043a\u043e\u0434\u0435. \u0425\u0430, \u043d\u0435\u00a0\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0448\u044c\u00a0\u2014 \u043d\u0435\u00a0\u0443\u0437\u043d\u0430\u0435\u0448\u044c. \u041d\u043e\u00a0\u043b\u0430\u0434\u043d\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0439 \u0421++, \u0430\u00a0\u043a\u0430\u043a\u00a0\u043d\u0430\u0441\u0447\u0451\u0442 \u0432\u0435\u0440\u0438\u043b\u043e\u0433\u0430? \u041c\u043d\u0435 \u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0441\u043e\u043e\u0440\u0443\u0434\u0438\u0442\u044c \u0441\u0438\u0433\u043c\u0430\u2011\u0434\u0435\u043b\u044c\u0442\u0430\u2011\u043c\u043e\u0434\u0443\u043b\u044f\u0442\u043e\u0440. <\/p>\n<p>\u042f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b VScode, \u043d\u0430\u0448\u0451\u043b \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0432\u0435\u0440\u0438\u043b\u043e\u0433\u0430 \u0438 \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c. \u041f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u00a0\u0432\u00a0\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. SourceCraft Code Assistant \u0441\u0442\u0430\u043b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u0443\u044e \u043c\u0435\u043b\u043e\u0447\u044c:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0430\u043a\u00a0\u043e\u043d \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f, \u0447\u0442\u043e\u00a0\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440?<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0438 \u043f\u043e\u043a\u0440\u0443\u043f\u043d\u0435\u0435:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u043e\u0442\u043e\u043c \u043e\u043d \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0446\u0435\u043b\u044b\u0439 \u0431\u043b\u043e\u043a \u0434\u043b\u044f\u00a0\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438: \u043f\u043e\u0447\u0438\u0442\u0430\u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u043e\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044f. <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0443\u0436\u0435 \u0421++, \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f VScode \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u0432\u00a0Eclipse \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0418 \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0\u043e\u043d \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0432\u0441\u0451\u00a0\u0436\u0435 \u043d\u0435\u00a0\u0447\u0438\u0442\u0430\u0435\u0442 \u043c\u044b\u0441\u043b\u0438 \u0438 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u043e\u043c\u0430\u0445\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u041d\u043e\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e. \u0418\u0441\u0447\u0435\u0437\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u043e\u043b\u043a\u0430:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0430\u043c \u0435\u0449\u0451 15\u00a0\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u0438 SourceCraft Code Assistant \u043c\u043d\u0435 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u00a0\u2014 \u0418\u0418 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0443\u00a0\u043c\u0435\u043d\u044f \u043d\u0430\u00a0\u043a\u0430\u043a\u043e\u0439 \u0446\u0435\u043f\u0438 \u0441\u0442\u043e\u0438\u0442. <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0432 \u043d\u0430\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u043a\u043e\u0434\u0438\u0442\u044c \u0432\u00a0Eclipse \u043f\u043e\u2011\u0441\u0442\u0430\u0440\u043e\u043c\u0443, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0432\u0441\u0451\u00a0\u2014 \u043f\u043e\u2011\u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u043c\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u042d\u0442\u043e \u0447\u0442\u043e, \u043d\u0443\u0436\u043d\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043e\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a?<\/p>\n<p>\u0415\u0449\u0451 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0440\u0443\u0433\u043e\u0439 \u0418\u0418\u2011\u043f\u043b\u0430\u0433\u0438\u043d \u043f\u043e\u0434\u00a0Eclipse. \u0418\u0445 \u0435\u0441\u0442\u044c \u0441\u00a0\u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0432\u043e\u00a0\u0433\u043b\u0430\u0432\u0435 \u0441\u00a0Copilot \u043e\u0442\u00a0GitHub, \u043d\u043e\u00a0\u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043e\u0431\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u0430\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430\u00a0\u043c\u0435\u043d\u044f \u0431\u0435\u0441\u0438\u0442 \u0438\u0434\u0435\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c VPN, \u0447\u0442\u043e\u0431 \u043f\u043e\u043a\u043e\u0434\u0438\u0442\u044c. \u0422\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c AI\u2011\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u042f\u043d\u0434\u0435\u043a\u0441\u0430,\u00a0\u2014 \u0445\u0443\u0436\u0435 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0435\u0442. <\/p>\n<p>\u0412\u00a0\u043e\u0431\u0449\u0435\u043c, \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0451\u00a0\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c VScode \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. <\/p>\n<h2>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/h2>\n<h3>\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440<\/h3>\n<p>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f <strong>\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0438 \u0441\u043c\u0435\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/strong> \u0442\u0438\u043f\u0430 OpenOCD, \u0442\u043e \u0435\u0441\u0442\u044c tools, \u0438\u043b\u0438\u00a0Toolchain. \u0412\u00a0\u043a\u043e\u0440\u043d\u0435 \u0434\u0438\u0441\u043a\u0430 \u0421\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0430\u043f\u043a\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0438\u043b\u0438\u00a0\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u043e\u0432 \u0441\u043e\u0444\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u044d\u0442\u0443 \u043f\u0430\u043f\u043a\u0443. <\/p>\n<p>\u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c x\u2011packs, \u043d\u043e\u00a0\u043c\u043d\u0435 \u043d\u0435\u00a0\u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c: \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 xpm, \u0430\u00a0\u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 npm \u043e\u0442\u00a0Node.js, \u0430\u00a0\u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u0447\u0442\u043e\u2011\u0442\u043e. \u0412\u0430\u0436\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0432\u00a0\u043d\u0443\u0436\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u0432\u00a0\u043f\u0443\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 \u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u0431\u0443\u043a\u0432. \u0415\u0449\u0451 \u044f \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e \u043d\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u043f\u0443\u0442\u0435\u0439 \u0432\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 PATH, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043f\u0438\u0448\u0443\u0442 \u0441\u0432\u043e\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u00a0\u0441\u0442\u0435\u0441\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043a\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432\u00a0\u2014 \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u00a0x\u2011packs. \u042d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u00a0\u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u00a0\u2014 \u043f\u0440\u0438\u0447\u0451\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435\u00a0\u043f\u043e\u0434\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0442\u00a0WCH, OpenOCD \u043e\u0442\u00a0GigaDevice \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a \u043e\u0442\u00a0GOWIN.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e <strong>\u043f\u0440\u043e\u0435\u043a\u0442\u044b<\/strong>. \u0412\u00a0\u043a\u043e\u0440\u043d\u0435 \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u043f\u0430\u043f\u043a\u0430 \u0434\u043b\u044f\u00a0VSCode \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0435\u0437\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u043b\u0438\u00a0\u0441\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u043f\u0430\u043f\u043a\u0430.vscode, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0430\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a VScode:<\/p>\n<ul>\n<li>\n<p>tasks.json\u00a0\u2014 \u043d\u0430\u0431\u043e\u0440 \u0442\u0430\u0441\u043a\u043e\u0432 \u0434\u043b\u044f\u00a0\u0431\u0438\u043b\u0434\u0438\u043d\u0433\u0430, \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>settings.json\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>launch.json\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>c_cpp_properties.json\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 C\/C++, \u0432\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 makefile;<\/p>\n<\/li>\n<li>\n<p>\u0444\u0430\u0439\u043b\u044b version.h \u0438 version.cpp,<\/p>\n<\/li>\n<\/ul>\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-454131","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/454131","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=454131"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/454131\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=454131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=454131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=454131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}