{"id":387123,"date":"2024-06-29T07:08:26","date_gmt":"2024-06-29T07:08:26","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=387123"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T07:08:26","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=387123","title":{"rendered":"<span>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 VSCode \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f AVR \u0432 Linux<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c, \u043a\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u043e\u0439, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b AVR. \u041d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u043e\u043d\u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u044b, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430 \u0441\u0447\u0451\u0442 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b Arduino. \u0412 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043b\u044e\u0441 &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u0447\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u043d\u0435\u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440, \u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0440\u0430\u0437\u0443. \u0414\u0430\u0436\u0435 \u0443 \u0430\u0437\u0438\u0430\u0442\u043e\u0432 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 ISP-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043a\u043b\u043e\u043d st-link v2, \u0445\u043e\u0442\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u0435\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043a\u0438, IDE \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 &#171;\u0440\u0435\u043b\u0438\u0433\u0438\u043e\u0437\u043d\u044b\u0445&#187; \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432. \u0421\u043a\u0430\u0436\u0443 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0441\u0430\u043c \u043a\u0430\u0447\u0443\u044e \u043c\u0435\u0436\u0434\u0443 Debian (\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u041e\u0421 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442) \u0438 Win7 (\u0440\u0430\u0431\u043e\u0447\u0430\u044f), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0432\u0430\u0436\u0435\u043d. <\/p>\n<p><strong>\u0412\u0441\u0451 \u043e\u043f\u0438\u0441\u0430\u043d\u043e\u0435 \u043d\u0438\u0436\u0435, \u044f \u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430, \u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438.<\/strong><\/p>\n<p>\u0421 \u0447\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043d\u044f\u043a? \u0410 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0442\u043e\u0433\u043e \u0436\u0435, \u0441 \u0447\u0435\u0433\u043e \u0438 \u0432\u0441\u0435\u0433\u0434\u0430. \u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u0435 \u0432\u043d\u0435\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u043a\u0443 \u043d\u0430 \u043f\u0430\u0440\u0443 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0441 \u0441\u0442\u0430\u0440\u044e\u0447\u0443\u044e \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u043a\u0443, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0438\u0437 arduino \u0438 \u043f\u0430\u043b\u043e\u043a. \u0411\u0435\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432 Eclipse, \u0430 \u043e\u043d \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044f\u043b\u0441\u044f, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0411\u0435\u0434\u0430 \u0435\u0449\u0451 \u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a make \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 &#8212; \u043e\u043d \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 Makefile, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u0421\u0430\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e mk-\u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c. \u0415\u0449\u0451 \u0443\u0434\u0438\u0432\u0438\u043b\u0438 \u043b\u0435\u0432\u044b\u0435 \u0434\u0435\u0444\u0430\u0439\u043d\u044b \u0441 \u0430\u043d\u0434\u0435\u0444\u0430\u0439\u043d\u0430\u043c\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0436\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c \u043e\u0433\u043e\u0440\u0447\u0438\u043b\u0441\u044f \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 Eclipse, \u0432 \u043e\u0431\u043e\u0437\u0440\u0438\u043c\u043e\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043d\u0435 \u0432\u0438\u0436\u0443 \u043d\u0438 \u043c\u0430\u043b\u0435\u0439\u0448\u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0438\u043b\u0438\u043c \u043f\u043e\u0434 \u043c\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u0441\u0435\u0439\u0447\u0430\u0441 VSCode. \u0417\u0430\u043d\u044f\u0442\u0438\u0435 \u043d\u0435\u0445\u0438\u0442\u0440\u043e\u0435 \u0438 \u044f \u043e\u0445\u043e\u0442\u043d\u043e \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a\u0430\u043a, \u043d\u043e \u0435\u0441\u0442\u044c \u043b\u044e\u0434\u0438 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 make &#8212; \u0442\u0451\u043c\u043d\u044b\u0439 \u043b\u0435\u0441 \u0441 \u0432\u043e\u043b\u043a\u0430\u043c\u0438. \u0414\u0443\u043c\u0430\u044e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e PlatformIO, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u043d\u0430\u0434\u043e &#8212; \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0434\u0443\u043c\u0430\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0432 \u043e\u0431\u043e\u0437\u0440\u0438\u043c\u043e\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c! \u0412 \u043c\u043e\u0451\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438 Arduino Nano \u0438 Debian bullseye. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432: gcc-avr; binutils-avr; make; avrdude. \u0414\u043b\u044f VSCode \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b <em>C\/C++<\/em> \u043e\u0442 Microsoft \u0438 <em>Makefile Tools<\/em> \u043e\u0442 Microsoft.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0432 Adruino \u043d\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0439, \u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438: <em>.vscode<\/em>; <em>src<\/em> \u0438 <em>inc<\/em>. \u0412 <em>.vscode<\/em> \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b <em>c_cpp_properties.json<\/em> \u0432\u043e\u0442 \u0441 \u0442\u0430\u043a\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c<\/p>\n<pre><code class=\"json\">{     \"configurations\": [         {             \"name\": \"Habr_2\",             \"includePath\": [                 \"${workspaceRoot}\/inc\",                 \"\/usr\/lib\/avr\/include\"             ],             \"browse\": {                 \"path\": []             },             \"defines\": [                 \"F_CPU 16000000UL\",                 \"__AVR_ATmega328P__\"             ],             \"compilerPath\": \"\/usr\/bin\/avr-gcc\",             \"compilerArgs\": [],             \"cStandard\": \"c11\",             \"cppStandard\": \"gnu++11\",             \"intelliSenseMode\": \"${default}\",             \"configurationProvider\": \"ms-vscode.makefile-tools\"         }     ],     \"version\": 4 } <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f, \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0434\u0435\u043b\u0430\u0435\u0442 <em>Makefile Tools<\/em> \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 <em>Makefile<\/em>. \u0412\u0441\u0451 \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u044e \u043f\u0430\u0440\u0443 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0439. \u0412 <em>includePath<\/em> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432 <em>browse<\/em> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 *.c \u0438 *.cpp \u0444\u0430\u0439\u043b\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u0437\u0434\u0435\u0441\u044c \u043f\u0443\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <em>Makefile Tools<\/em> \u0441\u0430\u043c \u0438\u0445 \u043d\u0430\u0439\u0434\u0451\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430), <em>defines<\/em> &#8212; \u0432\u0441\u0435 \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u043c \u0441\u0443\u043f\u0435\u0440-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>src<\/em> \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b\u044b:<\/p>\n<p><strong>habr_2.c<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;avr\/io.h> #include \"functions.h\"  int main(void) { DDRB = 1 &lt;&lt; PB5; func();  return 0; }<\/code><\/pre>\n<p>\u0438 <strong>functions.c<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;avr\/io.h> #include &lt;util\/delay.h>  void func(void) { for (;;) { asm(\"NOP\"); PORTB = 1 &lt;&lt; PB5; _delay_ms(500); PORTB &amp;= ~(1 &lt;&lt; PB5); _delay_ms(500); } }<\/code><\/pre>\n<p>\u0430 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>inc<\/em> &#8212; <strong>functions.h<\/strong><\/p>\n<pre><code class=\"cpp\">#ifndef __FUNCTIONS__ #define __FUNCTIONS__  void func(void);  #endif<\/code><\/pre>\n<p>\u0421\u0438\u044f \u0431\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0442\u0432\u043e\u0440\u0438\u0442 \u0432\u0435\u043b\u0438\u043a\u043e\u0435 \u0434\u0435\u043b\u043e &#8212; \u043c\u0438\u0433\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c. <\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430? \u0410 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a, \u0447\u0442\u043e \u0431\u044b \u0443 \u043d\u0435\u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u0439 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u043a\u0430\u043a \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u041d\u0443, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u043c\u0443 &#8212; \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e Makefile. \u0417\u0430\u043d\u044f\u0442\u0438\u0435 \u043d\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043d\u0430 \u0434\u0432\u0435\u0441\u0442\u0438 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043d\u043e \u043a\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u0435\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430&#8230; <\/p>\n<pre><code class=\"bash\"># \u0418\u043c\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 TARGET = habr_2  # \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0441 GCC AVRCCDIR = \/usr\/bin\/  #\u0441\u0430\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043c\u0430\u043b\u043e \u043b\u0438, \u0432\u0434\u0440\u0443\u0433 \u043e\u043d\u043e \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f CC = avr-gcc OBJCOPY = avr-objcopy  # \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430, \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0437\u0430\u0441\u0435\u0440\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 BUILD_DIR = build  # \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 MCU = atmega328p  #\u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430  OPT = -Os C_FLAGS = -mmcu=$(MCU) $(OPT) -Wall  # \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f AVRDUDE DUDE_MCU = m328p PORT = \/dev\/ttyUSB0 PORTSPEED = 115200  # DEFIN\u044b DEFINES = \\ -D__AVR_ATmega328P__ \\ -DF_CPU=16000000UL  # \u043f\u0443\u0442\u0438 \u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c C_INCLUDES =  \\ -I\/usr\/lib\/avr\/include \\ -Iinc  # \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b C_SOURCES = \\ src\/habr_2.c \\ src\/functions.c   # \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 OBJ_FILES = $(C_SOURCES:.c=.o) ASM_FILES = $(C_SOURCES:.c=.s) OUT_OBJ = $(addprefix $(BUILD_DIR)\/, $(notdir $(OBJ_FILES)))  # \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438  all: $(TARGET).hex  $(TARGET).hex: $(TARGET).elf $(AVRCCDIR)$(OBJCOPY) -j .text -j .data -O ihex $(BUILD_DIR)\/$&lt; $(BUILD_DIR)\/$@  $(TARGET).elf: $(OBJ_FILES) $(ASM_FILES) mkdir -p $(BUILD_DIR) $(AVRCCDIR)$(CC) $(C_FLAGS) $(DEFINES) $(OUT_OBJ) -o $(BUILD_DIR)\/$@  %.o: %.c echo $^ $(AVRCCDIR)$(CC) -c $(C_FLAGS) $(DEFINES) $(C_INCLUDES) $&lt; -o $(BUILD_DIR)\/$(@F)  %.s: %.c echo $^ $(AVRCCDIR)$(CC) -S -g3 $(C_FLAGS) $(DEFINES) $(C_INCLUDES) $&lt; -o $(BUILD_DIR)\/$(@F)  clean: rm -f $(BUILD_DIR)\/*  prog: $(TARGET).hex avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -b $(PORTSPEED) -U flash:w:$(BUILD_DIR)\/$(TARGET).hex  read_eeprom: avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -b $(PORTSPEED) -U eeprom:r:eeprom.hex:i  write_eeprom: eeprom.hex avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -b $(PORTSPEED) -U eeprom:w:eeprom.hex<\/code><\/pre>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0425\u0430\u0431\u0440\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 Makefile \u0432 \u0441\u0442\u043e \u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u043c\u043e\u0435\u0433\u043e, \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u043e\u0447\u0438\u0442\u0430\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438. \u0423\u0442\u043e\u0447\u043d\u044e \u043f\u0430\u0440\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 Makefile. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>TARGET = habr_2<\/code> &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 \u0425\u0430\u0431\u0440\u0435, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>AVRCCDIR = \/usr\/bin\/<\/code> &#8212; \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443 \u0412\u0430\u0441 avr-gcc. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 Windows, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433. \u0421\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 <em>PATH<\/em> \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043c\u0430\u043b\u043e \u043b\u0438 \u0433\u0434\u0435 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0432\u0438\u043d\u0434\u0430 \u0432\u0441\u0451 \u0436\u0435\u0436. \u0412 <code>C_SOURCES = \\<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441\u0432\u043e\u0438 <em>*.c-\u0444\u0430\u0439\u043b\u044b*<\/em>. \u0426\u0435\u043b\u044c <em>prog:<\/em> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0430 <em>read_eeprom:<\/em> \u0438 <em>write_eeprom:<\/em> &#8212; \u043d\u0443\u0436\u043d\u044b \u0447\u0442\u043e \u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c EEPROM, \u043c\u0430\u043b\u043e \u043b\u0438 \u0447\u0435\u0433\u043e \u0412\u044b \u0442\u0430\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0435. \u0417\u0430\u0447\u0435\u043c \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e \u0435\u0449\u0451 \u0438 <em>.s<\/em> \u0444\u0430\u0439\u043b\u044b, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a, \u0438\u043d\u043e\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. <\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 &#8212; avrdude. \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 AVR, \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043c\u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c\u0438 Atmel Studio. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043b avrdude \u043a \u0441\u0442\u0443\u0434\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0442\u0443\u043b\u0437\u044b, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e AVR910. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u0434\u0451\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043a\u043b\u044e\u0447 <code>-c arduino<\/code>. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0443 \u043d\u0435\u0433\u043e \u043d\u0430 \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043e\u0434\u0438\u043d, \u0430 \u0432\u043e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a 115200 \u0442\u0430\u043a 57600. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043d\u0435 \u043f\u043e\u0448\u043b\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c <code>PORTSPEED<\/code>. \u0415\u0449\u0451 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 \u043f\u043e\u0440\u0442\u043e\u043c &#8212; \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c USB \u2192 UART \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u044f \u043f\u043e\u0440\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0438\u0441\u0438\u0442 \u0432\u0430\u0448\u0430 \u043f\u043b\u0430\u0442\u0430. \u041b\u0438\u0447\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0438 \u043f\u043b\u0430\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u043a\u0430\u043a <em>*ttyACM0*<\/em>. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 `PORT = \/dev\/ttyUSB0`<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u044d\u0442\u043e \u043a\u043b\u044e\u0447<code>MCU = atmega328p<\/code> \u0438 \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435<code>-D__AVR_ATmega328P__<\/code>, \u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 <code>DUDE_MCU = m328p<\/code>.<\/p>\n<p>\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451. \u041d\u0443\u0436\u043d\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 VSCode \u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <em>make<\/em> \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>build<\/em> \u0444\u0430\u0439\u043b <em>habr_2.hex<\/em>. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0430\u0448\u0443 Adruino \u0438 \u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <em>make prog<\/em>. \u041f\u043e\u0431\u0435\u0433\u0443\u0442 \u0431\u0443\u043a\u043e\u0432\u043a\u0438 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u0438\u0442\u0430 \u0442\u0430\u043a\u043e\u0433\u043e<\/p>\n<blockquote>\n<p>&#8230; Reading | ################################################## | 100% 0.03s<\/p>\n<p>avrdude: verifying &#8230; avrdude: 186 bytes of flash verified<\/p>\n<p>avrdude: safemode: Fuses OK (E:00, H:00, L:00)<\/p>\n<p>avrdude done.  Thank you.<\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u0432\u0430\u0448 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043c\u0438\u0433\u0430\u0435\u0442. <\/p>\n<p><strong>\u041f\u043e\u0437\u0440\u0430\u0432\u043b\u044f\u044e!!!<\/strong><\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c tasks.json \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043b\u0435\u043d\u044c.<\/p>\n<p><strong>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0435<\/strong><\/p>\n<p>\u0414\u0443\u043c\u0430\u043b \u043d\u0430 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u0441\u0432\u043e\u0439 AVR Dragon, \u0432\u0435\u0434\u044c \u0432 \u043a\u0430\u043c\u043d\u044f\u0445 \u043f\u043e\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0438 \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u0437\u043d\u0430\u0447\u0438\u0442 &#8212; \u0431\u0435\u0437 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0442\u0435\u043c\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0430. \u0412 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f ATMega16A \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c JTAG &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c. \u0421\u043e\u0431\u0440\u0430\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0435\u0440\u0443\u043d\u0434\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/fc8\/b61\/2d5\/fc8b612d55c8adf90f570769b32da9e7.jpg\" width=\"3320\" height=\"2464\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc8\/b61\/2d5\/fc8b612d55c8adf90f570769b32da9e7.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0437\u0435\u043b\u0451\u043d\u043e\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0435 \u043f\u0440\u0438\u043f\u0430\u044f\u043d SMD-\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0441 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u043c.<\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u0430\u043a\u0435\u0442\u044b <em>avarice<\/em> \u0438 <em>avr-gdb<\/em>. \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0438 \u0434\u0430\u0451\u0442 gdb-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u043f\u043e\u0440\u0442\u0443, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0451 VSCode \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0415\u0441\u043b\u0438 \u0433\u0434\u0435 \u043d\u0435\u043f\u0440\u0430\u0432, \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0442\u0430 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>func()<\/em> \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>t<\/em>, \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e \u0431\u044b \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0430 \u0442\u043e \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043e\u0442.<\/p>\n<pre><code class=\"cpp\">void func(void) { volatile uint8_t t = 0;  for (;;) { asm(\"NOP\"); t = t ? 0 : 1; PORTB = 1 &lt;&lt; PB5; _delay_ms(500); PORTB &amp;= ~(1 &lt;&lt; PB5); _delay_ms(500); } }<\/code><\/pre>\n<p>\u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0434\u0440\u0443\u0433\u0438\u0435 &#8212; \u0432 Makefile \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. <\/p>\n<pre><code class=\"cmake\">... MCU = atmega16a ... DUDE_MCU = m16 ... clean: rm -f $(BUILD_DIR)\/*  prog: $(TARGET).hex avrdude -p $(DUDE_MCU) -c dragon_jtag -U flash:w:$(BUILD_DIR)\/$(TARGET).hex  read_eeprom: avrdude -p $(DUDE_MCU) -c dragon_jtag -U eeprom:r:eeprom.hex:i  write_eeprom: eeprom.hex avrdude -p $(DUDE_MCU) -c dragon_jtag -U eeprom:w:eeprom.hex<\/code><\/pre>\n<p>\u0412 \u0441\u0435\u043a\u0446\u0438\u044f\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 <em>-c<\/em>, \u0443 \u043c\u0435\u043d\u044f &#8212; <em>dragon_jtag<\/em>, \u0443 \u0412\u0430\u0441 \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0451. \u0427\u0442\u043e \u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u0430\u043c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c <em>avarice<\/em>, <em>avrdude<\/em> \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441 \u043a\u043b\u044e\u0447\u0451\u043c <em>&#8212;help<\/em> \u0438 \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <em>.vscode<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <em>tasks.json<\/em> \u0438 <em>launch.json<\/em> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c<\/p>\n<p><strong>tasks.json<\/strong><\/p>\n<pre><code class=\"json\">{ \"version\": \"2.0.0\", \"tasks\": [ { \"label\": \"Build\", \"type\": \"shell\", \"group\": \"build\", \"command\": \"make\", \"problemMatcher\": [] }, { \"label\": \"Clean\", \"type\": \"shell\", \"group\": \"build\", \"command\": \"make\", \"args\": [\"clean\"], \"problemMatcher\": [] }, { \"label\": \"Write firmware\", \"type\": \"shell\", \"group\": \"build\", \"command\": \"make\", \"args\": [\"prog\"], \"problemMatcher\": [] }, { \"label\": \"Debug server\", \"presentation\": { \"echo\": true, \"reveal\": \"always\", \"panel\": \"shared\", \"focus\": true, \"showReuseMessage\": false, \"clear\": false }, \"isBackground\": true, \"command\": \"avarice\", \"args\": [ \"--dragon\", \"-R\", \"-P\", \"atmega16\", \"--file\", \"\/build\/habr_2_2.elf\", \":3333\" ], \"problemMatcher\":[] } ] }<\/code><\/pre>\n<p>\u0417\u0430\u0434\u0430\u0447\u0438 <em>Build<\/em>, <em>Clean<\/em> \u0438 <em>Write firmware<\/em> \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0432 Makefile. \u0412\u043e\u0442 <em>Debug server<\/em> \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <em>avarice<\/em> \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0436\u0438\u043c\u0430 \u0434\u0435\u043c\u043e\u043d\u0430, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 <em>preLaunchTask<\/em>, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a VSCode \u0436\u0434\u0451\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u0444\u043e\u043d. \u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>&#171;isBackground&#187;: true<\/em>. \u0412 <em>command<\/em> \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0430\u043c\u0430 <em>avarice<\/em>, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0435\u0451 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b: <em>&#8212;dragon<\/em> &#8212; \u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440; <em>-R<\/em> &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0431\u0440\u043e\u0441\u0430 (\u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442); <em>atmega16<\/em> &#8212; \u043d\u0430\u0448 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440; <em>\/build\/habr_2_2.elf<\/em> &#8212; \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (\u0441\u043c. Makefile); <em>:3333<\/em> &#8212; \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0440\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (\u0440\u0435\u0448\u0438\u043b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 openocd). \u0413\u0440\u0443\u043f\u043f\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <em>presentation<\/em> \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0438 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c. \u0412\u044b \u0436\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u044b\u0430\u0435\u0442\u0435 \u0432\u0441\u0451 \u0440\u0443\u043a\u0430\u043c\u0438, \u0447\u0442\u043e \u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0430 \u0442\u0443\u043f\u043e \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u0435?! <\/p>\n<p><strong>launch.json<\/strong><\/p>\n<pre><code class=\"json\">{ \"version\": \"0.2.0\", \"configurations\": [ { \"name\": \"Debug\", \"type\": \"cppdbg\", \"request\": \"launch\", \"program\": \"${workspaceFolder}\/build\/habr_2_2.elf\", \"MIMode\": \"gdb\", \"miDebuggerPath\": \"\/usr\/bin\/avr-gdb\", \"miDebuggerServerAddress\": \"localhost:3333\", \"stopAtEntry\": true, \"cwd\": \"${workspaceFolder}\", \"environment\": [], \"externalConsole\": false, \"preLaunchTask\": \"Debug server\" } ] }<\/code><\/pre>\n<p>\u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443 \u0432\u0441\u0451 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u0443\u0442\u043e\u0447\u043d\u044e \u043f\u0430\u0440\u0443 \u043c\u0435\u0441\u0442: <em>program<\/em> &#8212; \u043d\u0430\u0448 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 <em>.elf<\/em> (\u0443 \u0412\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0451 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435); <em>miDebuggerPath<\/em> &#8212; \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 (\u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432 Windows \u0443\u0447\u0442\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442); <em>miDebuggerServerAddress<\/em> &#8212; \u0430\u0434\u0440\u0435\u0441 \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0440\u0442 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0430\u0441 \u0436\u0434\u0451\u0442 <em>avarice<\/em>; <em>stopAtEntry<\/em> &#8212; \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0432 <em>main()<\/em> (\u044d\u0442\u043e \u043f\u043e \u0432\u043a\u0443\u0441\u0443); <em>&#171;preLaunchTask&#187;: &#171;Debug server&#187;<\/em> &#8212; \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>\u0427\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c &#8212; \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0412 Debian bullseye, avarice \u0441\u043e\u0431\u0440\u0430\u043d \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0430\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 avrdude. \u041f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a avarice \u0432 Makefile \u0438 \u0442. \u043f., \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0434\u0438\u043d &#8212; \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a avarice \u0438 \u0432\u0441\u0451 \u0437\u0430\u0441\u0442\u0440\u044f\u0451\u0442, \u043c\u043e\u0436\u043d\u043e \u0436\u0434\u0430\u0442\u044c \u0447\u0430\u0441 &#8212; \u0442\u043e\u043b\u043a\u0443 \u043d\u043e\u043b\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c, \u0430 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<\/p>\n<p><strong>\u0412\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e, \u043f\u043e\u0434\u0436\u0438\u0433\u0430\u0439!<\/strong><\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0431\u043e\u0440\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0434\u0430\u0442\u044c <em>make<\/em>, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c <em>Ctrl + Shift + B<\/em> \u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u044b\u0431\u0440\u0430\u0442\u044c <em>Build<\/em>. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 (\u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438) \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0435\u0451 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 <em>Alt + Shift + B<\/em>. \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 &#8212; \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0437\u0430\u0434\u0430\u0447\u0443 <em>Write firmware<\/em> \u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <em>make prog<\/em>. \u0414\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0441\u0435\u043b\u043e \u0437\u0430\u043c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 <code>t = t ? 0 : 1;<\/code>, \u0434\u0443\u043c\u0430\u044e \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0442\u0435\u0441\u044c \u043a\u0430\u043a &#8212; \u043d\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435. \u0418\u0434\u0451\u043c \u0432 <em>&#171;\u0417\u0430\u043f\u0443\u0441\u043a \u0438 \u041e\u0442\u043b\u0430\u0434\u043a\u0430&#187;<\/em> \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <em>&#171;\u041d\u0430\u0447\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443&#187;<\/em><\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2c6\/c77\/e5d\/2c6c77e5d447202f59b78ae8c0875bb5.png\" width=\"267\" height=\"242\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2c6\/c77\/e5d\/2c6c77e5d447202f59b78ae8c0875bb5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043a\u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u043e\u0435<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/43f\/e3a\/67e\/43fe3a67eccbe1ca08d6f771a70b076d.png\" width=\"419\" height=\"237\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/43f\/e3a\/67e\/43fe3a67eccbe1ca08d6f771a70b076d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>main()<\/em> (\u043f\u043e\u043c\u043d\u0438\u0442\u0435 <em>&#171;stopAtEntry&#187;: true<\/em> \u0432 launch.json), \u0430 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u044d\u0442\u043e\u0433\u043e<\/p>\n<blockquote>\n<p>&#8230; <\/p>\n<p>Waiting for connection on port 3333. <\/p>\n<p>Connection opened by host 127.0.0.1, port 45102.<\/p>\n<\/blockquote>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <em>&#171;\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c&#187;<\/em> \u0438\u043b\u0438 <em>F5<\/em>, \u0447\u0442\u043e \u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u043a\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \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\/922\/c4f\/c39\/922c4fc39a5bfe18915b416fc2f6dd13.png\" width=\"641\" height=\"347\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/922\/c4f\/c39\/922c4fc39a5bfe18915b416fc2f6dd13.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0435\u0449\u0451 \u0440\u0430\u0437 \u0436\u043c\u0451\u043c <em>*&#187;\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c&#187;*<\/em> \u0438 \u043e\u043a\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ab\/2cc\/22f\/6ab2cc22f41c6d07c9c7454b752e89b3.png\" width=\"641\" height=\"347\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ab\/2cc\/22f\/6ab2cc22f41c6d07c9c7454b752e89b3.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043c\u0438\u0433\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>t<\/em> \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0443\u043b\u0451\u043c \u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439.<\/p>\n<p><strong><em>\u041d\u0430 \u044d\u0442\u043e\u043c \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0451!!! \u0422\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0412\u0430\u043c \u0443\u0441\u043f\u0435\u0445\u043e\u0432!!!<\/em><\/strong><\/p>\n<p><strong>P. S.<\/strong> \u042f \u0437\u043d\u0430\u044e \u043f\u0440\u043e simavr, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u0434\u043b\u044f \u043a\u0430\u043c\u043d\u0435\u0439 \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432, \u043d\u043e \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0434\u043b\u044f \u043d\u0435\u0451 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u0442\u043e \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u044b \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0431\u0437\u0430\u0446\u0430 &#8212; \u043e\u043d\u0430 \u043d\u0435 \u0434\u043b\u044f \u0412\u0430\u0441.<\/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\/590143\/\"> https:\/\/habr.com\/ru\/articles\/590143\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c, \u043a\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u043e\u0439, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b AVR. \u041d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u043e\u043d\u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u044b, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430 \u0441\u0447\u0451\u0442 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b Arduino. \u0412 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043b\u044e\u0441 &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u0447\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u043d\u0435\u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440, \u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0440\u0430\u0437\u0443. \u0414\u0430\u0436\u0435 \u0443 \u0430\u0437\u0438\u0430\u0442\u043e\u0432 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 ISP-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043a\u043b\u043e\u043d st-link v2, \u0445\u043e\u0442\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u0435\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043a\u0438, IDE \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 &#171;\u0440\u0435\u043b\u0438\u0433\u0438\u043e\u0437\u043d\u044b\u0445&#187; \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432. \u0421\u043a\u0430\u0436\u0443 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0441\u0430\u043c \u043a\u0430\u0447\u0443\u044e \u043c\u0435\u0436\u0434\u0443 Debian (\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u041e\u0421 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442) \u0438 Win7 (\u0440\u0430\u0431\u043e\u0447\u0430\u044f), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0432\u0430\u0436\u0435\u043d. <\/p>\n<p><strong>\u0412\u0441\u0451 \u043e\u043f\u0438\u0441\u0430\u043d\u043e\u0435 \u043d\u0438\u0436\u0435, \u044f \u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430, \u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438.<\/strong><\/p>\n<p>\u0421 \u0447\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043d\u044f\u043a? \u0410 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0442\u043e\u0433\u043e \u0436\u0435, \u0441 \u0447\u0435\u0433\u043e \u0438 \u0432\u0441\u0435\u0433\u0434\u0430. \u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u0435 \u0432\u043d\u0435\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u043a\u0443 \u043d\u0430 \u043f\u0430\u0440\u0443 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0441 \u0441\u0442\u0430\u0440\u044e\u0447\u0443\u044e \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u043a\u0443, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0438\u0437 arduino \u0438 \u043f\u0430\u043b\u043e\u043a. \u0411\u0435\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432 Eclipse, \u0430 \u043e\u043d \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044f\u043b\u0441\u044f, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0411\u0435\u0434\u0430 \u0435\u0449\u0451 \u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a make \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 &#8212; \u043e\u043d \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 Makefile, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u0421\u0430\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e mk-\u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c. \u0415\u0449\u0451 \u0443\u0434\u0438\u0432\u0438\u043b\u0438 \u043b\u0435\u0432\u044b\u0435 \u0434\u0435\u0444\u0430\u0439\u043d\u044b \u0441 \u0430\u043d\u0434\u0435\u0444\u0430\u0439\u043d\u0430\u043c\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0436\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c \u043e\u0433\u043e\u0440\u0447\u0438\u043b\u0441\u044f \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 Eclipse, \u0432 \u043e\u0431\u043e\u0437\u0440\u0438\u043c\u043e\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043d\u0435 \u0432\u0438\u0436\u0443 \u043d\u0438 \u043c\u0430\u043b\u0435\u0439\u0448\u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0438\u043b\u0438\u043c \u043f\u043e\u0434 \u043c\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u0441\u0435\u0439\u0447\u0430\u0441 VSCode. \u0417\u0430\u043d\u044f\u0442\u0438\u0435 \u043d\u0435\u0445\u0438\u0442\u0440\u043e\u0435 \u0438 \u044f \u043e\u0445\u043e\u0442\u043d\u043e \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a\u0430\u043a, \u043d\u043e \u0435\u0441\u0442\u044c \u043b\u044e\u0434\u0438 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 make &#8212; \u0442\u0451\u043c\u043d\u044b\u0439 \u043b\u0435\u0441 \u0441 \u0432\u043e\u043b\u043a\u0430\u043c\u0438. \u0414\u0443\u043c\u0430\u044e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e PlatformIO, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u043d\u0430\u0434\u043e &#8212; \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0434\u0443\u043c\u0430\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0432 \u043e\u0431\u043e\u0437\u0440\u0438\u043c\u043e\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c! \u0412 \u043c\u043e\u0451\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438 Arduino Nano \u0438 Debian bullseye. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432: gcc-avr; binutils-avr; make; avrdude. \u0414\u043b\u044f VSCode \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b <em>C\/C++<\/em> \u043e\u0442 Microsoft \u0438 <em>Makefile Tools<\/em> \u043e\u0442 Microsoft.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0432 Adruino \u043d\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0439, \u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438: <em>.vscode<\/em>; <em>src<\/em> \u0438 <em>inc<\/em>. \u0412 <em>.vscode<\/em> \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b <em>c_cpp_properties.json<\/em> \u0432\u043e\u0442 \u0441 \u0442\u0430\u043a\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c<\/p>\n<pre><code class=\"json\">{     \"configurations\": [         {             \"name\": \"Habr_2\",             \"includePath\": [                 \"${workspaceRoot}\/inc\",                 \"\/usr\/lib\/avr\/include\"             ],             \"browse\": {                 \"path\": []             },             \"defines\": [                 \"F_CPU 16000000UL\",                 \"__AVR_ATmega328P__\"             ],             \"compilerPath\": \"\/usr\/bin\/avr-gcc\",             \"compilerArgs\": [],             \"cStandard\": \"c11\",             \"cppStandard\": \"gnu++11\",             \"intelliSenseMode\": \"${default}\",             \"configurationProvider\": \"ms-vscode.makefile-tools\"         }     ],     \"version\": 4 } <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f, \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0434\u0435\u043b\u0430\u0435\u0442 <em>Makefile Tools<\/em> \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 <em>Makefile<\/em>. \u0412\u0441\u0451 \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u044e \u043f\u0430\u0440\u0443 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0439. \u0412 <em>includePath<\/em> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432 <em>browse<\/em> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 *.c \u0438 *.cpp \u0444\u0430\u0439\u043b\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u0437\u0434\u0435\u0441\u044c \u043f\u0443\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <em>Makefile Tools<\/em> \u0441\u0430\u043c \u0438\u0445 \u043d\u0430\u0439\u0434\u0451\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430), <em>defines<\/em> &#8212; \u0432\u0441\u0435 \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u043c \u0441\u0443\u043f\u0435\u0440-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>src<\/em> \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b\u044b:<\/p>\n<p><strong>habr_2.c<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;avr\/io.h> #include \"functions.h\"  int main(void) { DDRB = 1 &lt;&lt; PB5; func();  return 0; }<\/code><\/pre>\n<p>\u0438 <strong>functions.c<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;avr\/io.h> #include &lt;util\/delay.h>  void func(void) { for (;;) { asm(\"NOP\"); PORTB = 1 &lt;&lt; PB5; _delay_ms(500); PORTB &amp;= ~(1 &lt;&lt; PB5); _delay_ms(500); } }<\/code><\/pre>\n<p>\u0430 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>inc<\/em> &#8212; <strong>functions.h<\/strong><\/p>\n<pre><code class=\"cpp\">#ifndef __FUNCTIONS__ #define __FUNCTIONS__  void func(void);  #endif<\/code><\/pre>\n<p>\u0421\u0438\u044f \u0431\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0442\u0432\u043e\u0440\u0438\u0442 \u0432\u0435\u043b\u0438\u043a\u043e\u0435 \u0434\u0435\u043b\u043e &#8212; \u043c\u0438\u0433\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c. <\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430? \u0410 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a, \u0447\u0442\u043e \u0431\u044b \u0443 \u043d\u0435\u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u0439 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u043a\u0430\u043a \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u041d\u0443, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u043c\u0443 &#8212; \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e Makefile. \u0417\u0430\u043d\u044f\u0442\u0438\u0435 \u043d\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043d\u0430 \u0434\u0432\u0435\u0441\u0442\u0438 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043d\u043e \u043a\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u0435\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430&#8230; <\/p>\n<pre><code class=\"bash\"># \u0418\u043c\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 TARGET = habr_2  # \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0441 GCC AVRCCDIR = \/usr\/bin\/  #\u0441\u0430\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043c\u0430\u043b\u043e \u043b\u0438, \u0432\u0434\u0440\u0443\u0433 \u043e\u043d\u043e \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f CC = avr-gcc OBJCOPY = avr-objcopy  # \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430, \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0437\u0430\u0441\u0435\u0440\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 BUILD_DIR = build  # \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 MCU = atmega328p  #\u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430  OPT = -Os C_FLAGS = -mmcu=$(MCU) $(OPT) -Wall  # \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f AVRDUDE DUDE_MCU = m328p PORT = \/dev\/ttyUSB0 PORTSPEED = 115200  # DEFIN\u044b DEFINES = \\ -D__AVR_ATmega328P__ \\ -DF_CPU=16000000UL  # \u043f\u0443\u0442\u0438 \u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c C_INCLUDES =  \\ -I\/usr\/lib\/avr\/include \\ -Iinc  # \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b C_SOURCES = \\ src\/habr_2.c \\ src\/functions.c   # \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 OBJ_FILES = $(C_SOURCES:.c=.o) ASM_FILES = $(C_SOURCES:.c=.s) OUT_OBJ = $(addprefix $(BUILD_DIR)\/, $(notdir $(OBJ_FILES)))  # \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438  all: $(TARGET).hex  $(TARGET).hex: $(TARGET).elf $(AVRCCDIR)$(OBJCOPY) -j .text -j .data -O ihex $(BUILD_DIR)\/$&lt; $(BUILD_DIR)\/$@  $(TARGET).elf: $(OBJ_FILES) $(ASM_FILES) mkdir -p $(BUILD_DIR) $(AVRCCDIR)$(CC) $(C_FLAGS) $(DEFINES) $(OUT_OBJ) -o $(BUILD_DIR)\/$@  %.o: %.c echo $^ $(AVRCCDIR)$(CC) -c $(C_FLAGS) $(DEFINES) $(C_INCLUDES) $&lt; -o $(BUILD_DIR)\/$(@F)  %.s: %.c echo $^ $(AVRCCDIR)$(CC) -S -g3 $(C_FLAGS) $(DEFINES) $(C_INCLUDES) $&lt; -o $(BUILD_DIR)\/$(@F)  clean: rm -f $(BUILD_DIR)\/*  prog: $(TARGET).hex avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -b $(PORTSPEED) -U flash:w:$(BUILD_DIR)\/$(TARGET).hex  read_eeprom: avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -b $(PORTSPEED) -U eeprom:r:eeprom.hex:i  write_eeprom: eeprom.hex avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -b $(PORTSPEED) -U eeprom:w:eeprom.hex<\/code><\/pre>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0425\u0430\u0431\u0440\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 Makefile \u0432 \u0441\u0442\u043e \u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u043c\u043e\u0435\u0433\u043e, \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u043e\u0447\u0438\u0442\u0430\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438. \u0423\u0442\u043e\u0447\u043d\u044e \u043f\u0430\u0440\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 Makefile. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>TARGET = habr_2<\/code> &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 \u0425\u0430\u0431\u0440\u0435, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>AVRCCDIR = \/usr\/bin\/<\/code> &#8212; \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443 \u0412\u0430\u0441 avr-gcc. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 Windows, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433. \u0421\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 <em>PATH<\/em> \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043c\u0430\u043b\u043e \u043b\u0438 \u0433\u0434\u0435 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0432\u0438\u043d\u0434\u0430 \u0432\u0441\u0451 \u0436\u0435\u0436. \u0412 <code>C_SOURCES = \\<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441\u0432\u043e\u0438 <em>*.c-\u0444\u0430\u0439\u043b\u044b*<\/em>. \u0426\u0435\u043b\u044c <em>prog:<\/em> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0430 <em>read_eeprom:<\/em> \u0438 <em>write_eeprom:<\/em> &#8212; \u043d\u0443\u0436\u043d\u044b \u0447\u0442\u043e \u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c EEPROM, \u043c\u0430\u043b\u043e \u043b\u0438 \u0447\u0435\u0433\u043e \u0412\u044b \u0442\u0430\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0435. \u0417\u0430\u0447\u0435\u043c \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e \u0435\u0449\u0451 \u0438 <em>.s<\/em> \u0444\u0430\u0439\u043b\u044b, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a, \u0438\u043d\u043e\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. <\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 &#8212; avrdude. \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 AVR, \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043c\u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c\u0438 Atmel Studio. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043b avrdude \u043a \u0441\u0442\u0443\u0434\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0442\u0443\u043b\u0437\u044b, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e AVR910. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u0434\u0451\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043a\u043b\u044e\u0447 <code>-c arduino<\/code>. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0443 \u043d\u0435\u0433\u043e \u043d\u0430 \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043e\u0434\u0438\u043d, \u0430 \u0432\u043e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a 115200 \u0442\u0430\u043a 57600. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043d\u0435 \u043f\u043e\u0448\u043b\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c <code>PORTSPEED<\/code>. \u0415\u0449\u0451 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 \u043f\u043e\u0440\u0442\u043e\u043c &#8212; \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c USB \u2192 UART \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u044f \u043f\u043e\u0440\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0438\u0441\u0438\u0442 \u0432\u0430\u0448\u0430 \u043f\u043b\u0430\u0442\u0430. \u041b\u0438\u0447\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0438 \u043f\u043b\u0430\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u043a\u0430\u043a <em>*ttyACM0*<\/em>. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 `PORT = \/dev\/ttyUSB0`<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u044d\u0442\u043e \u043a\u043b\u044e\u0447<code>MCU = atmega328p<\/code> \u0438 \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435<code>-D__AVR_ATmega328P__<\/code>, \u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 <code>DUDE_MCU = m328p<\/code>.<\/p>\n<p>\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451. \u041d\u0443\u0436\u043d\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 VSCode \u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <em>make<\/em> \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>build<\/em> \u0444\u0430\u0439\u043b <em>habr_2.hex<\/em>. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0430\u0448\u0443 Adruino \u0438 \u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <em>make prog<\/em>. \u041f\u043e\u0431\u0435\u0433\u0443\u0442 \u0431\u0443\u043a\u043e\u0432\u043a\u0438 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u0438\u0442\u0430 \u0442\u0430\u043a\u043e\u0433\u043e<\/p>\n<blockquote>\n<p>&#8230; Reading | ################################################## | 100% 0.03s<\/p>\n<p>avrdude: verifying &#8230; avrdude: 186 bytes of flash verified<\/p>\n<p>avrdude: safemode: Fuses OK (E:00, H:00, L:00)<\/p>\n<p>avrdude done.  Thank you.<\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u0432\u0430\u0448 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043c\u0438\u0433\u0430\u0435\u0442. <\/p>\n<p><strong>\u041f\u043e\u0437\u0440\u0430\u0432\u043b\u044f\u044e!!!<\/strong><\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c tasks.json \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043b\u0435\u043d\u044c.<\/p>\n<p><strong>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0435<\/strong><\/p>\n<p>\u0414\u0443\u043c\u0430\u043b \u043d\u0430 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u0441\u0432\u043e\u0439 AVR Dragon, \u0432\u0435\u0434\u044c \u0432 \u043a\u0430\u043c\u043d\u044f\u0445 \u043f\u043e\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0438 \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u0437\u043d\u0430\u0447\u0438\u0442 &#8212; \u0431\u0435\u0437 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0442\u0435\u043c\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0430. \u0412 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f ATMega16A \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c JTAG &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c. \u0421\u043e\u0431\u0440\u0430\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0435\u0440\u0443\u043d\u0434\u0443.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0437\u0435\u043b\u0451\u043d\u043e\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0435 \u043f\u0440\u0438\u043f\u0430\u044f\u043d SMD-\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0441 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u043c.<\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u0430\u043a\u0435\u0442\u044b <em>avarice<\/em> \u0438 <em>avr-gdb<\/em>. \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0438 \u0434\u0430\u0451\u0442 gdb-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u043f\u043e\u0440\u0442\u0443, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0451 VSCode \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0415\u0441\u043b\u0438 \u0433\u0434\u0435 \u043d\u0435\u043f\u0440\u0430\u0432, \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0442\u0430 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>func()<\/em> \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>t<\/em>, \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e \u0431\u044b \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0430 \u0442\u043e \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043e\u0442.<\/p>\n<pre><code class=\"cpp\">void func(void) { volatile uint8_t t = 0;  for (;;) { asm(\"NOP\"); t = t ? 0 : 1; PORTB = 1 &lt;&lt; PB5; _delay_ms(500); PORTB &amp;= ~(1 &lt;&lt; PB5); _delay_ms(500); } }<\/code><\/pre>\n<p>\u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0434\u0440\u0443\u0433\u0438\u0435 &#8212; \u0432 Makefile \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. <\/p>\n<pre><code class=\"cmake\">... MCU = atmega16a ... DUDE_MCU = m16 ... clean: rm -f $(BUILD_DIR)\/*  prog: $(TARGET).hex<\/code><\/pre>\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-387123","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/387123","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=387123"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/387123\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=387123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=387123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=387123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}