{"id":417187,"date":"2024-06-30T01:24:22","date_gmt":"2024-06-30T01:24:22","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=417187"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-30T01:24:22","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=417187","title":{"rendered":"<span>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Julia \u043d\u0430 Arduino<\/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-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/673992\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/yz\/uv\/-h\/yzuv-hofhv6gj9qs2lp0-qexm_w.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/yz\/uv\/-h\/yzuv-hofhv6gj9qs2lp0-qexm_w.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><\/a><br \/>  \u0423 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441 Arduino, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u043c\u043e\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Raspberry Pi, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0439 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u042f \u043f\u0440\u043e\u0448\u0451\u043b \u043e\u0434\u0438\u043d \u043a\u0443\u0440\u0441 \u043f\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441 \u043d\u0438\u043c \u0443\u0436\u0430\u0441\u043d\u043e, \u0435\u0434\u0432\u0430 \u043d\u0430\u0431\u0440\u0430\u0432 \u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u043b\u043b. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u043d\u0438 \u043c\u0435\u043d\u044f \u0432\u043e\u0441\u0445\u0438\u0449\u0430\u044e\u0442 \u2014 \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0438 \u043d\u0435 \u0441\u0442\u0440\u0435\u043b\u044f\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443.<\/p>\n<p>  \u041f\u0440\u0438 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 Julia \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0432\u0443\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432: \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f Julia (\u0434\u0430 \u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043e\u0434\u0430) \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0434\u0432\u0443\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c:<\/p>\n<ol>\n<li>\u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u043b\u0438,<\/li>\n<li>\u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0433\u0434\u0435 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/li>\n<\/ol>\n<p>  \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 1 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043d\u0435 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 GC, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u00bb, \u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 2 \u2014 \u043a \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u00bb, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u0438 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u0441\u0442\u0438.<br \/>  <a name=\"habracut\"><\/a><br \/>  [\u0417\u0430\u0431\u0430\u0432\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f, \u044d\u0442\u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u044f\u0434\u0440\u043e\u043c Linux, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0442\u0440\u0430\u0442\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 Python \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 C.]<\/p>\n<p>  \u042f \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u043a \u043a \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e 1 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u043c\u043e\u0449\u0438 \u043b\u044e\u0434\u044f\u043c \u0432 Slack \u0438 Discourse; \u0430 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043b\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0443\u0447\u0448\u0435, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>Julia \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 LLVM \u0438, \u043f\u043e \u0441\u0443\u0442\u0438, \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c.<\/li>\n<li>\u0423 \u043c\u0435\u043d\u044f \u0437\u0430\u0432\u0430\u043b\u044f\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0445 Arduino.<\/li>\n<li>\u042f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0431\u043b\u043e\u0431 AVR \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0445 \u043a\u043e\u0434\u0430.<\/li>\n<li>LLVM \u0438\u043c\u0435\u0435\u0442 \u0431\u044d\u043a\u0435\u043d\u0434 AVR.<\/li>\n<\/ol>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u00ab\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u0440\u0430\u0432\u0434\u0430?\u00bb.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u00ab\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e\u00bb \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 Julia \u0432 Arduino.<\/p>\n<h2><font color=\"#3AC1EF\">&lt;blink> \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u043d\u0430 C<\/font><\/h2>\n<p>  \u0418\u0442\u0430\u043a, \u0441 \u0447\u0435\u043c \u0436\u0435 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e? \u0414\u0430\u0436\u0435 \u0441\u0430\u0439\u0442 Arduino \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0451\u0442 \u0442\u0430\u043a\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/f8\/lp\/ri\/f8lpriat4zxj8hexnxcbeotz_ee.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/f8\/lp\/ri\/f8lpriat4zxj8hexnxcbeotz_ee.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  \u042d\u0442\u043e <a href=\"https:\/\/docs.arduino.cc\/retired\/boards\/arduino-ethernet-rev3-without-poe\">Arduino Ethernet R3<\/a> \u2014 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e Arduino UNO. \u042d\u0442\u043e \u0442\u0440\u0435\u0442\u044c\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 ATmega328p, \u0440\u0430\u0437\u044a\u0451\u043c Ethernet, \u0440\u0430\u0437\u044a\u0451\u043c \u0434\u043b\u044f SD-\u043a\u0430\u0440\u0442\u044b \u0438 14 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u0435\u0442 32 \u041a\u0438\u0411 \u0444\u043b\u044d\u0448-\u043f\u0430\u043c\u044f\u0442\u0438, 2 \u041a\u0438\u0411 SRAM \u0438 1 \u041a\u0438\u0411 EEPROM. \u0422\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 16 \u041c\u0413\u0446, \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430, \u0432\u0435\u0441 28 \u0433.<\/p>\n<p>  \u0418\u043c\u0435\u044f \u044d\u0442\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, <a href=\"https:\/\/www.arduino.cc\/en\/uploads\/Main\/arduino-ethernet-R3-schematic.pdf\">\u0441\u0445\u0435\u043c\u0443<\/a> \u043f\u043b\u0430\u0442\u044b, <a href=\"https:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf\">\u0434\u0430\u0442\u0430\u0448\u0438\u0442<\/a> \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u00ab\u0431\u044b\u0432\u0430\u043b\u0438 \u0432\u0435\u0449\u0438 \u0438 \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435\u00bb, \u044f \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043b \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u0446\u0435\u043b\u0438: \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 <code>L9<\/code> (\u0432 \u043b\u0435\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u043f\u043b\u0430\u0442\u044b \u043d\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0432\u044b\u0448\u0435, \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u0434 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c <code>on<\/code> \u0438 \u0440\u0430\u0437\u044a\u0451\u043c\u043e\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u044f).<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f (\u0438 \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e), \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c Arduino, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 C \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">#include &lt;avr\/io.h> #include &lt;util\/delay.h>  #define MS_DELAY 3000  int main (void) {     DDRB |= _BV(DDB1);      while(1) {         PORTB |= _BV(PORTB1);          _delay_ms(MS_DELAY);          PORTB &amp;= ~_BV(PORTB1);          _delay_ms(MS_DELAY);     } }<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 LED \u043a\u0430\u043a \u0432\u044b\u0445\u043e\u0434, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 <code>DDB1<\/code> \u0432 <code>DDRB<\/code> (\u044d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a <strong>D<\/strong>ata <strong>D<\/strong>irection <strong>R<\/strong>egister Port <strong>B<\/strong>). [\u041f\u043e\u0438\u0441\u043a \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 <a href=\"https:\/\/docs.arduino.cc\/retired\/boards\/arduino-ethernet-rev3-without-poe#input-and-output\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f<\/a>, \u0447\u0442\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u00abdigital pin 9\u00bb, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e\u0449\u0435\u043c\u0443\u0441\u044f \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 <code>L9<\/code> \u0440\u044f\u0434\u043e\u043c \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c. \u0414\u0430\u043b\u0435\u0435 \u0432 \u043d\u0435\u0439 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043b\u0430\u0442 Arduino \u044d\u0442\u043e\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u043c\u0435\u0449\u0451\u043d \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 13, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043c\u043e\u0435\u0439 \u043f\u043b\u0430\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u043e\u0434 SPI. \u042d\u0442\u043e \u0441\u0431\u0438\u0432\u0430\u0435\u0442 \u0441 \u0442\u043e\u043b\u043a\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u0430\u0442\u0430\u0448\u0438\u0442 \u043c\u043e\u0435\u0439 \u043f\u043b\u0430\u0442\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c 13 (<code>PB1<\/code>, \u043f\u043e\u0440\u0442 B \u0431\u0438\u0442 1) \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u044f\u044e\u0449\u0443\u044e\u0441\u044f \u0434\u043e\u0440\u043e\u0436\u043a\u0443, \u0432\u0435\u0434\u0443\u0449\u0443\u044e \u043a pin 9 \u0432\u044b\u0432\u043e\u0434\u0430 <code>J5<\/code>. \u042f \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u00abpin 9\u00bb \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0447\u0435\u0440\u0435\u0437 <code>PD5<\/code> (\u043f\u043e\u0440\u0442 D, \u0431\u0438\u0442 5), \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0432 \u0441\u0432\u043e\u044e \u043e\u0448\u0438\u0431\u043a\u0443. \u041f\u043b\u044e\u0441 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043c\u0435\u043d\u044f \u0438\u043c\u0435\u043b\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u0434\u0430\u0436\u0435 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435.] \u042d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0445\u043e\u0434 \u0438\u043b\u0438 \u043a\u0430\u043a \u0432\u044b\u0445\u043e\u0434. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0434\u0430\u0451\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <code>PORTB1<\/code> \u0432 <code>PORTB<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>HIGH<\/code> (\u0438\u043b\u0438 <code>1<\/code>), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0437\u0430\u0436\u0435\u0447\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0436\u0434\u0451\u043c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 <code>MS_DELAY<\/code> \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u0438\u043b\u0438 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0442\u043e\u043c\u0443 \u0436\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <code>PORTB1<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>LOW<\/code> (\u0438\u043b\u0438 <code>0<\/code>). \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"plaintext\">avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o blink_led.o blink_led.c avr-gcc -mmcu=atmega328p -o blink_led.elf blink_led.o avr-objcopy -O ihex blink_led.elf blink_led.hex avrdude -V -c arduino -p ATMEGA328P -P \/dev\/ttyACM0 -U flash:w:blink_led.hex<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0438\u0433\u0430\u044e\u0449\u0438\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434. [<code>-DF_CPU=16000000UL<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b <code>_delay_ms<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0430 \u0432 \u0446\u0438\u043a\u043b\u0430\u0445 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432 \u00ab\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0442\u043e\u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u00bb. \u0425\u043e\u0442\u044c \u044d\u0442\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0438\u0433\u0430\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 Julia.]<\/p>\n<p>  \u042d\u0442\u0438 shell-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442 \u043d\u0430\u0448 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 <code>.c<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>.o<\/code> \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u043c\u043f\u043e\u043d\u0443\u044e\u0442 \u0435\u0433\u043e \u0432 <code>.elf<\/code>, \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u044e\u0442 \u0435\u0433\u043e \u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442 Intel <code>.hex<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 <code>avrdude<\/code>. \u0412\u0441\u0451 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0422\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c, \u043d\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u0432 \u0447\u0451\u043c \u0436\u0435 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c?<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0430 C, \u044d\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 C, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0435\u043b\u0430\u0442\u044c. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 Julia \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b <code>.h<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u043d\u0430\u0447\u0430\u0442. \u042f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043d\u043e \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 <code>_delay_ms<\/code> \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e <code>avr-gcc<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c Julia \u0434\u043b\u044f AVR. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <code>.o<\/code>, \u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0442\u0443\u043b\u0447\u0435\u0439\u043d \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, <code>avr-gcc<\/code> \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Julia <code>.o<\/code> \u043e\u0442 <code>.o<\/code>, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e <code>avr-gcc<\/code>.<\/p>\n<h2><font color=\"#3AC1EF\">\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 Julia<\/font><\/h2>\n<p>  \u0418\u0442\u0430\u043a, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0438\u0448\u0435\u043c, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"julia\">const DDRB = ?? const PORTB = ??  function main()     set_high(DDRB, DDB1) # ??      while true         set_high(PORTB, PORTB1) # ??          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end          set_low(PORTB, PORTB1) # ??          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end     end end<\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442\u044b, \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0431\u0438\u0442\u044b, \u0446\u0438\u043a\u043b. \u042f \u043f\u043e\u043c\u0435\u0442\u0438\u043b \u0432\u0441\u0435 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u043f\u043e\u043a\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c <code>??<\/code>. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0447\u0430\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u043a\u0430\u043a \u043d\u0430\u043c \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u044b C <code>DDRB<\/code>, <code>DDB1<\/code>, <code>PORTB<\/code> \u0438 <code>PORTB1<\/code>?<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0414\u0430\u0442\u0430\u0448\u0438\u0442\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438<\/font><\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0430\u0433 \u043d\u0430\u0437\u0430\u0434, \u0437\u0430\u0431\u044b\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b, \u043a\u0430\u043a \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043d\u0430 C \u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0436\u0435 \u043e\u043d\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442. <code>DDRB<\/code> \u0438 <code>PORTB<\/code> \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. <code>DDB1<\/code> \u0438 <code>PORTB1<\/code> \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u00ab\u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043e\u0442 \u043d\u0443\u043b\u044f\u00bb \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0437\u0430\u043c\u0438\u0433\u0430\u043b, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438\u0448\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u044d\u0442\u0438 \u0431\u0438\u0442\u044b \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u041e\u0434\u043d\u0430\u043a\u043e \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0442\u044c \u0431\u0438\u0442 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435? \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 C. \u0412 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u043d\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u0430 C \u0438\u043b\u0438 Julia \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>  \u0418\u0437\u0443\u0447\u0430\u044f \u0434\u0430\u0442\u0430\u0448\u0438\u0442 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0433\u043b\u0430\u0432\u0435 <code>36. Register Summary<\/code> \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 621 \u0435\u0441\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0412 \u043d\u0435\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441, \u0438\u043c\u044f, \u0438\u043c\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0438\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0414\u043e\u0439\u0434\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e:<\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<th align=\"center\">Address<\/th>\n<th align=\"center\">Name<\/th>\n<th align=\"center\">Bit 7<\/th>\n<th align=\"center\">Bit 6<\/th>\n<th align=\"center\">Bit 5<\/th>\n<th align=\"center\">Bit 4<\/th>\n<th align=\"center\">Bit 3<\/th>\n<th align=\"center\">Bit 2<\/th>\n<th align=\"center\">Bit 1<\/th>\n<th align=\"center\">Bit 0<\/th>\n<th align=\"center\">Page<\/th>\n<\/tr>\n<tr>\n<td align=\"center\">0x05 (0x25)<\/td>\n<td align=\"center\">PORTB<\/td>\n<td align=\"center\">PORTB7<\/td>\n<td align=\"center\">PORTB6<\/td>\n<td align=\"center\">PORTB5<\/td>\n<td align=\"center\">PORTB4<\/td>\n<td align=\"center\">PORTB3<\/td>\n<td align=\"center\">PORTB2<\/td>\n<td align=\"center\">PORTB1<\/td>\n<td align=\"center\">PORTB0<\/td>\n<td align=\"center\">100<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">0x04 (0x24)<\/td>\n<td align=\"center\">DDRB<\/td>\n<td align=\"center\">DDR7<\/td>\n<td align=\"center\">DDR6<\/td>\n<td align=\"center\">DDR5<\/td>\n<td align=\"center\">DDR4<\/td>\n<td align=\"center\">DDR3<\/td>\n<td align=\"center\">DDR2<\/td>\n<td align=\"center\">DDR1<\/td>\n<td align=\"center\">DDR0<\/td>\n<td align=\"center\">100<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  \u0418\u0442\u0430\u043a, <code>PORTB<\/code> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 <code>0x05<\/code> \u0438 <code>0x25<\/code>, \u0430 <code>DDRB<\/code> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 <code>0x04<\/code> \u0438 <code>0x24<\/code>. \u041a \u043a\u0430\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430? \u0412\u0435\u0434\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c EEPROM, \u0444\u043b\u044d\u0448-\u043f\u0430\u043c\u044f\u0442\u044c \u0438 SRAM. \u0422\u0443\u0442 \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u0442\u0430\u0448\u0438\u0442: \u0432 \u0433\u043b\u0430\u0432\u0435 <code>8 AVR Memories<\/code> \u0435\u0441\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 SRAM \u0441 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u043c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/g5\/ch\/jt\/g5chjtedawg_sgs77chotplodec.png\" data-src=\"https:\/\/habrastorage.org\/webt\/g5\/ch\/jt\/g5chjtedawg_sgs77chotplodec.png\"\/><\/div>\n<p>  \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c:<\/p>\n<blockquote><p>\u041f\u0435\u0440\u0432\u044b\u0435 32 \u044f\u0447\u0435\u0439\u043a\u0438 SRAM \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442 Register File, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 64 \u044f\u0447\u0435\u0439\u043a\u0438 \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, \u0437\u0430\u0442\u0435\u043c \u0438\u0434\u0443\u0442 160 \u044f\u0447\u0435\u0435\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 512\/1024\/1024\/2048 \u044f\u0447\u0435\u0435\u043a \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442 SRAM \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p><\/blockquote>\n<p>  \u0418\u0442\u0430\u043a, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u0434\u0438\u043d \u0432 \u043e\u0434\u0438\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430\u043c SRAM. [\u042d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u044f\u0434\u0440\u0430 \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e RAM \u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u043b\u044e\u0437\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u00ab\u0433\u043e\u043b\u043e\u0439\u00bb \u043c\u0430\u0448\u0438\u043d\u043e\u0439 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u044b\u0440\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439.] \u041e\u0442\u043b\u0438\u0447\u043d\u043e!<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043a\u043e\u0434, \u0442\u043e \u043d\u0430\u0448 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a<\/p>\n<pre><code class=\"julia\">const DDRB  = Ptr{UInt8}(36) # 0x25, \u043e\u0434\u043d\u0430\u043a\u043e Julia \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Int const PORTB = Ptr{UInt8}(37) # 0x26  # \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0431\u0438\u0442\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u0431\u0438\u0442\u0435 1 #                76543210 const DDB1   = 0b00000010 const PORTB1 = 0b00000010  function main_pointers()     unsafe_store!(DDRB, DDB1)      while true         pb = unsafe_load(PORTB)         unsafe_store!(PORTB, pb | PORTB1) # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end          pb = unsafe_load(PORTB)         unsafe_store!(PORTB, pb &amp; ~PORTB1) # \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end     end end builddump(main_pointers, Tuple{})<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u0430\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>  \u041e\u0434\u043d\u0438\u043c \u043c\u0430\u0445\u043e\u043c \u043c\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043e\u0442 \u0432\u0441\u0435\u0445 \u043d\u0430\u0448\u0438\u0445 <code>??<\/code> \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e! \u041f\u043e\u0445\u043e\u0436\u0435, \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 C, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0441\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439: \u043a\u0430\u043a \u043d\u0430\u043c \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c?<\/p>\n<h2><font color=\"#3AC1EF\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043a\u043e\u0434\u0430<\/font><\/h2>\n<p>  Julia \u0443\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 x86(_64), \u0432 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0438 Linux, \u0430 \u0442\u0430\u043a\u0436\u0435 macOS \u043d\u0430 ARM. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e LLVM \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 ARM. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430 Julia \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e: GPU. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/github.com\/JuliaGPU\/GPUCompiler.jl\">GPUCompiler.jl<\/a> \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e Julia \u0434\u043b\u044f <code>NVPTX<\/code> \u0438 <code>AMDGPU<\/code> \u2014 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 NVidia \u0438 AMD, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 LLVM. \u0422\u0430\u043a \u043a\u0430\u043a GPUCompiler.jl \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 LLVM, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c AVR \u2014 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439!<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c LLVM<\/font><\/h3>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Julia \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u0431\u044d\u043a\u0435\u043d\u0434 AVR \u0434\u043b\u044f LLVM, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c LLVM \u0438 Julia \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0435\u0442\u0430-\u0432\u0435\u0440\u0441\u0438\u0439 <code>1.8<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>v1.8.0-beta3<\/code>. \u0411\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b \u043f\u043e\u043a\u0430 \u043b\u043e\u043c\u0430\u044e\u0442 GPUCompiler.jl, \u0447\u0442\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e.<\/p>\n<p>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, Julia \u0443\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u0432\u043e\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0434\u0432\u0430 <code>Makefile<\/code>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u044d\u043a\u0435\u043d\u0434.<\/p>\n<pre><code class=\"cmake\">diff --git a\/deps\/llvm.mk b\/deps\/llvm.mk index 5afef0b83b..8d5bbd5e08 100644 --- a\/deps\/llvm.mk +++ b\/deps\/llvm.mk @@ -60,7 +60,7 @@ endif  LLVM_LIB_FILE := libLLVMCodeGen.a    # \u0417\u0430\u0434\u0430\u0451\u043c \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 -LLVM_TARGETS := host;NVPTX;AMDGPU;WebAssembly;BPF +LLVM_TARGETS := host;NVPTX;AMDGPU;WebAssembly;BPF;AVR  LLVM_EXPERIMENTAL_TARGETS :=    LLVM_CFLAGS :=<\/code><\/pre>\n<p>  \u0438 \u043f\u0440\u0438\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c Julia \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 LLVM, \u0437\u0430\u0434\u0430\u0432 \u0444\u043b\u0430\u0433 \u0432 <code>Make.user<\/code>:<\/p>\n<pre><code class=\"cmake\">USE_BINARYBUILDER_LLVM=0<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <code>make<\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 LLVM \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0430\u0442\u0447\u0438\u0442\u0441\u044f \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 Julia. \u041d\u0430 \u043c\u043e\u0451\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 LLVM \u0437\u0430\u043d\u044f\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 40 \u043c\u0438\u043d\u0443\u0442. \u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u043e\u0436\u0438\u0434\u0430\u043b \u0445\u0443\u0434\u0448\u0435\u0433\u043e.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443<\/font><\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 LLVM, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b GPUCompiler.jl \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0435\u0451 <a href=\"https:\/\/wiki.osdev.org\/Target_Triplet\">target triplet<\/a>:<\/p>\n<pre><code class=\"julia\">using GPUCompiler using LLVM  ##### # Compiler Target #####  struct Arduino &lt;: GPUCompiler.AbstractCompilerTarget end  GPUCompiler.llvm_triple(::Arduino) = \"avr-unknown-unkown\" GPUCompiler.runtime_slug(::GPUCompiler.CompilerJob{Arduino}) = \"native_avr-jl_blink\"  struct ArduinoParams &lt;: GPUCompiler.AbstractCompilerParams end<\/code><\/pre>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u043c\u0430\u0448\u0438\u043d\u0443, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0443\u044e <code>avr<\/code> \u0431\u0435\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0438 \u0431\u0435\u0437 \u041e\u0421 \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u00ab\u0433\u043e\u043b\u043e\u0439\u00bb \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c runtime slug, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0448 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0415\u0449\u0451 \u0432 \u043a\u043e\u0434\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u041d\u0430\u043c \u043e\u043d\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043f\u0443\u0441\u0442\u044b\u043c\u0438 \u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Julia \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 GPU, GPUCompiler.jl \u0442\u0430\u043a\u0436\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0443\u043a\u0430\u0436\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0437\u0430\u043c\u0435\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0438\u043b\u0438 \u0434\u043b\u044f \u0432\u044b\u0434\u0430\u0447\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u0443\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c:<\/p>\n<pre><code class=\"julia\">module StaticRuntime     # the runtime library     signal_exception() = return     malloc(sz) = C_NULL     report_oom(sz) = return     report_exception(ex) = return     report_exception_name(ex) = return     report_exception_frame(idx, func, file, line) = return end  GPUCompiler.runtime_module(::GPUCompiler.CompilerJob{&lt;:Any,ArduinoParams}) = StaticRuntime GPUCompiler.runtime_module(::GPUCompiler.CompilerJob{Arduino}) = StaticRuntime GPUCompiler.runtime_module(::GPUCompiler.CompilerJob{Arduino,ArduinoParams}) = StaticRuntime<\/code><\/pre>\n<p>  \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e bump-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0448\u0438\u043d\u0443 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Arduino. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u043a\u0430 \u044d\u0442\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u00ab\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u00bb, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. [\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f Rust \u2014 \u043d\u0435\u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u043d\u0435\u0447\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u0418 \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430, \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e \u0441\u0440\u0435\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438, \u043a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 Rust \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>malloc<\/code> \u0438 <code>free<\/code> \u2014 \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u044d\u0442\u043e\u0433\u043e (\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e) \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430.]<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c job \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430:<\/p>\n<pre><code class=\"julia\">function native_job(@nospecialize(func), @nospecialize(types))     @info \"Creating compiler job for '$func($types)'\"     source = GPUCompiler.FunctionSpec(                 func, # \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f                 Base.to_tuple_type(types), # \u0435\u0451 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430                 false, # \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u044f\u0434\u0440\u043e\u043c GPU                 GPUCompiler.safe_name(repr(func))) # \u0438\u043c\u044f \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 asm     target = Arduino()     params = ArduinoParams()     job = GPUCompiler.CompilerJob(target, source, params) end<\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0443 LLVM IR:<\/p>\n<pre><code class=\"julia\">function build_ir(job, @nospecialize(func), @nospecialize(types))     @info \"Bulding LLVM IR for '$func($types)'\"     mi, _ = GPUCompiler.emit_julia(job)     ir, ir_meta = GPUCompiler.emit_llvm(                     job, # \u043d\u0430\u0448 job                     mi; # \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438                     libraries=false, # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438                     deferred_codegen=false, # \u0435\u0441\u0442\u044c \u043b\u0438 codegen \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f?                     optimize=true, # \u0445\u043e\u0442\u0438\u043c \u043b\u0438 \u043c\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c llvm?                     only_entry=false, # \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430?                     ctx=JuliaContext()) # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 LLVM     return ir, ir_meta end<\/code><\/pre>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u0437 \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Julia \u0438 \u043f\u0440\u043e\u0441\u0438\u043c GPUCompiler \u0434\u0430\u0442\u044c \u043d\u0430\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 LLVM IR \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e job, \u0442. \u0435. \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u041c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c codegen, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 Julia \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u0443\u0431\u0438\u0440\u0430\u044e\u0442, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043c\u0451\u0440\u0442\u0432\u044b\u0439 \u043a\u043e\u0434, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0439\u0441\u044f \u043a \u0441\u0440\u0435\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Julia, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0432 IR, \u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 ASM \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0430\u0451\u043c AVR ASM:<\/p>\n<pre><code class=\"julia\">function build_obj(@nospecialize(func), @nospecialize(types); kwargs...)     job = native_job(func, types)     @info \"Compiling AVR ASM for '$func($types)'\"     ir, ir_meta = build_ir(job, func, types)     obj, _ = GPUCompiler.emit_asm(                 job, # \u043d\u0430\u0448 job                 ir; # \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 IR                 strip=true, # \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u0438 \u0438\u0437 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e?                 validate=true, # \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438 LLVM IR ?                 format=LLVM.API.LLVMObjectFile) # \u043a\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c?     return obj end<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0443\u0434\u0430\u043b\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0451 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0438\u043c LLVM \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 IR \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c!<\/p>\n<h2><font color=\"#3AC1EF\">\u0418\u0437\u0443\u0447\u0430\u0435\u043c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/font><\/h2>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0432\u0438\u0434\u0430 <code>build_obj(main_pointers, Tuple{})<\/code> (\u043c\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 <code>main<\/code>) \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <code>String<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u044d\u0442\u043e \u043d\u0430\u0448 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"julia\">obj = build_obj(main_pointers, Tuple{})<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"julia\">\\x7fELF\\x01\\x01\\x01\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\0S\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\xf8\\0\\0\\0\\x02\\0\\0\\x004\\0\\0\\0\\0\\0(\\0\\x05\\0\\x01\\0\\x82\\xe0\\x84\\xb9\\0\\xc0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\a\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x04\\0\\xf1\\xff\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x03\\0\\x02\\0\\e\\0\\0\\0\\0\\0\\0\\0\\x06\\0\\0\\0\\x12\\0\\x02\\0?\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x10\\0\\0\\0\\f\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x10\\0\\0\\0\\x04\\0\\0\\0\\x03\\x02\\0\\0\\x04\\0\\0\\0\\0.rela.text\\0__do_clear_bss\\0julia_main_pointers\\0.strtab\\0.symtab\\0__do_copy_data\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\/\\0\\0\\0\\x03\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\xa8\\0\\0\\0N\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\x06\\0\\0\\0\\x01\\0\\0\\0\\x06\\0\\0\\0\\0\\0\\0\\x004\\0\\0\\0\\x06\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x04\\0\\0\\0\\0\\0\\0\\0\\x01\\0\\0\\0\\x04\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x9c\\0\\0\\0\\f\\0\\0\\0\\x04\\0\\0\\0\\x02\\0\\0\\0\\x04\\0\\0\\0\\f\\0\\0\\x007\\0\\0\\0\\x02\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0&lt;\\0\\0\\0`\\0\\0\\0\\x01\\0\\0\\0\\x03\\0\\0\\0\\x04\\0\\0\\0\\x10\\0\\0\\0 <\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043c\u044b \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c:<\/p>\n<pre><code class=\"julia\">function builddump(fun, args)     obj = build_obj(fun, args)     mktemp() do path, io         write(io, obj)         flush(io)         str = read(`avr-objdump -dr $path`, String)     end |> print end builddump(main_pointers, Tuple{})<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/tmp\/jl_uOAUKI:     file format elf32-avr   Disassembly of section .text:  00000000 &lt;julia_main_pointers>:    0:    82 e0           ldi    r24, 0x02    ; 2    2:    84 b9           out    0x04, r24    ; 4    4:    00 c0           rjmp    .+0          ; 0x6 &lt;julia_main_pointers+0x6>             4: R_AVR_13_PCREL    .text+0x4<\/code><\/pre>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u043f\u0430\u043b \u0432\u0435\u0441\u044c \u043d\u0430\u0448 \u043a\u043e\u0434? \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d <code>out<\/code>, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u043d\u0438\u0447\u0435\u0433\u043e. \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 C, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u0447\u0442\u043e:<\/p>\n<pre><code class=\"powershell\">$ avr-objdump -d blink_led.elf<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">[...] 00000080 &lt;main>:   80:    21 9a           sbi    0x04, 1    ; 4   82:    2f ef           ldi    r18, 0xFF    ; 255   84:    8b e7           ldi    r24, 0x7B    ; 123   86:    92 e9           ldi    r25, 0x92    ; 146   88:    21 50           subi    r18, 0x01    ; 1   8a:    80 40           sbci    r24, 0x00    ; 0   8c:    90 40           sbci    r25, 0x00    ; 0   8e:    e1 f7           brne    .-8          ; 0x88 &lt;main+0x8>   90:    00 c0           rjmp    .+0          ; 0x92 &lt;main+0x12>   92:    00 00           nop   94:    29 98           cbi    0x05, 1    ; 5   96:    2f ef           ldi    r18, 0xFF    ; 255   98:    8b e7           ldi    r24, 0x7B    ; 123   9a:    92 e9           ldi    r25, 0x92    ; 146   9c:    21 50           subi    r18, 0x01    ; 1   9e:    80 40           sbci    r24, 0x00    ; 0   a0:    90 40           sbci    r25, 0x00    ; 0   a2:    e1 f7           brne    .-8          ; 0x9c &lt;main+0x1c>   a4:    00 c0           rjmp    .+0          ; 0xa6 &lt;main+0x26>   a6:    00 00           nop   a8:    ec cf           rjmp    .-40         ; 0x82 &lt;main+0x2> [...]<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0436\u0435 \u0431\u0438\u0442 \u0432 <code>0x04<\/code>, \u0447\u0442\u043e \u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b<code>DDRB<\/code>), \u0432 \u0442\u0440\u0451\u0445 \u0441\u043b\u043e\u0432\u0430\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0446\u0438\u043a\u043b\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0441\u0431\u0440\u043e\u0441 \u0431\u0438\u0442\u043e\u0432. \u041f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0451 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e?<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e Julia, LLVM \u0438 gcc \u2014 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u043e\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u044b.<\/p>\n<p>  \u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<ol>\n<li>\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f <code>unsafe_load<\/code> \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e. LLVM \u0443\u0432\u0438\u0434\u0435\u043b \u044d\u0442\u043e, \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438 \u0443\u0434\u0430\u043b\u0438\u043b \u0447\u0442\u0435\u043d\u0438\u0435 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u00ab\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0435\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0439.<\/li>\n<li>\u041f\u0443\u0441\u0442\u044b\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0446\u0438\u043a\u043b\u044b \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u043e\u0436\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f.<\/li>\n<\/ol>\n<p>  \u0412 C \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>volatile<\/code>. \u042d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443: \u00ab\u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0438. \u041d\u0435 \u0443\u0434\u0430\u043b\u044f\u0439 \u0438\u0445 \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0439 (\u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u043d\u0435\u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (non-volatile), \u0438\u0445 \u043c\u043e\u0436\u0435\u0448\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c). \u0412 Julia \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u043d\u0435\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u0445 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438 \u0438\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043d\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. [<i>\u00bbAtomic \u0438 volatile \u0432 IR \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b; \u00abvolatile\u00bb \u2014 \u044d\u0442\u043e volatile \u0438\u0437 C\/C++, \u043e\u043d\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0442, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f volatile-\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041f\u0430\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432: \u0435\u0441\u043b\u0438 \u0437\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c SequentiallyConsistent \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 SequentiallyConsistent \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443, \u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u042d\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u0430\u0440\u044b volatile-\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439&#187;. <a href=\"https:\/\/www.llvm.org\/docs\/Atomics.html#id4\">LLVM Documentation \u2014 Atomics<\/a><\/i>].<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c<\/font><\/h3>\n<p>  \u0421 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"julia\">const DDRB  = Ptr{UInt8}(36) # 0x25, \u043d\u043e Julia \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Int const PORTB = Ptr{UInt8}(37) # 0x26  # \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0431\u0438\u0442\u044b - \u044d\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u0431\u0438\u0442, \u0447\u0442\u043e \u0438 \u0432 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0435 #                76543210 const DDB1   = 0b00000010 const PORTB1 = 0b00000010  function main_atomic()     ddrb = unsafe_load(PORTB)     Core.Intrinsics.atomic_pointerset(DDRB, ddrb | DDB1, :sequentially_consistent)      while true         pb = unsafe_load(PORTB)         Core.Intrinsics.atomic_pointerset(PORTB, pb | PORTB1, :sequentially_consistent) # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end          pb = unsafe_load(PORTB)         Core.Intrinsics.atomic_pointerset(PORTB, pb &amp; ~PORTB1, :sequentially_consistent) # \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end     end end<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 Julia \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f <em>\u043d\u0435 \u0442\u0430\u043a<\/em>. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e intrinsics \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 LLVM \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438. \u0412 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u043c \u043a\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/docs.julialang.org\/en\/v1\/base\/multi-threading\/#Base.@atomic\"><code>@atomic<\/code><\/a> \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440.<\/p><\/blockquote>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">\/tmp\/jl_UfT1Rf:     file format elf32-avr   Disassembly of section .text:  00000000 &lt;julia_main_atomic>:    0:    85 b1           in    r24, 0x05    ; 5    2:    82 60           ori    r24, 0x02    ; 2    4:    a4 e2           ldi    r26, 0x24    ; 36    6:    b0 e0           ldi    r27, 0x00    ; 0    8:    0f b6           in    r0, 0x3f    ; 63    a:    f8 94           cli    c:    8c 93           st    X, r24    e:    0f be           out    0x3f, r0    ; 63   10:    85 b1           in    r24, 0x05    ; 5   12:    a5 e2           ldi    r26, 0x25    ; 37   14:    b0 e0           ldi    r27, 0x00    ; 0   16:    98 2f           mov    r25, r24   18:    92 60           ori    r25, 0x02    ; 2   1a:    0f b6           in    r0, 0x3f    ; 63   1c:    f8 94           cli   1e:    9c 93           st    X, r25   20:    0f be           out    0x3f, r0    ; 63   22:    98 2f           mov    r25, r24   24:    9d 7f           andi    r25, 0xFD    ; 253   26:    0f b6           in    r0, 0x3f    ; 63   28:    f8 94           cli   2a:    9c 93           st    X, r25   2c:    0f be           out    0x3f, r0    ; 63   2e:    00 c0           rjmp    .+0          ; 0x30 &lt;julia_main_atomic+0x30>             2e: R_AVR_13_PCREL    .text+0x18<\/code><\/pre>\n<p>  \u041f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e. \u041a\u043e\u0434\u0430 \u0441\u0442\u0430\u043b\u043e \u0447\u0443\u0442\u044c \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>out<\/code>, \u0437\u043d\u0430\u0447\u0438\u0442, \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435? \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435\u0442. \u0415\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d <code>rjmp<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 <code>unsafe_load<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c segfault \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u0445\u043e\u0436\u0435, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u2014 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>0x3f<\/code> (\u0438\u043b\u0438 <code>63<\/code>), \u0447\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <code>SREG<\/code>, \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0415\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u0434 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043e \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">8:    0f b6           in    r0, 0x3f    ; 63 a:    f8 94           cli ... e:    0f be           out    0x3f, r0    ; 63<\/code><\/pre>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>SREG<\/code> \u0432 <code>r0<\/code>, \u0437\u0430\u0442\u0435\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0434\u0430\u043b\u0435\u0435 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042f \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u043e \u0432 \u043a\u043e\u0434, \u043d\u043e \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u044d\u0442\u043e. \u0422\u043e \u0435\u0441\u0442\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 LLVM-IR<\/font><\/h3>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043d\u0430\u0441 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0435\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e LLVM-IR. \u0412 Julia \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u043c\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f:<\/p>\n<pre><code class=\"julia\">const DDRB  = Ptr{UInt8}(36) const PORTB = Ptr{UInt8}(37) const DDB1   = 0b00000010 const PORTB1 = 0b00000010 const PORTB_none = 0b00000000 # \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b - \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u0437\u0434\u0435 \u043d\u0438\u0437\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b  function volatile_store!(x::Ptr{UInt8}, v::UInt8)     return Base.llvmcall(         \"\"\"         %ptr = inttoptr i64 %0 to i8*         store volatile i8 %1, i8* %ptr, align 1         ret void         \"\"\",         Cvoid,         Tuple{Ptr{UInt8},UInt8},         x,         v     ) end  function main_volatile()     volatile_store!(DDRB, DDB1)      while true         volatile_store!(PORTB, PORTB1) # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end          volatile_store!(PORTB, PORTB_none) # \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for _ in 1:500000             # \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b         end     end end<\/code><\/pre>\n<p>  \u0410 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">\/tmp\/jl_3twwq9:     file format elf32-avr   Disassembly of section .text:  00000000 &lt;julia_main_volatile>:    0:    82 e0           ldi    r24, 0x02    ; 2    2:    84 b9           out    0x04, r24    ; 4    4:    90 e0           ldi    r25, 0x00    ; 0    6:    85 b9           out    0x05, r24    ; 5    8:    95 b9           out    0x05, r25    ; 5    a:    00 c0           rjmp    .+0          ; 0xc &lt;julia_main_volatile+0xc>             a: R_AVR_13_PCREL    .text+0x6<\/code><\/pre>\n<p>  \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435! \u041d\u0430\u0448\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>out<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0446\u0438\u043a\u043b\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u0437 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u043e\u0432, \u0437\u0430\u043f\u0438\u0441\u0430\u0432 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 SRAM, \u043d\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u044f\u044f \u0442\u0440\u0430\u0442\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u2014 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0438\u0436\u0435 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 AVR \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 LLVM-IR:<\/p>\n<pre><code class=\"julia\">const DDRB  = Ptr{UInt8}(36) const PORTB = Ptr{UInt8}(37) const DDB1   = 0b00000010 const PORTB1 = 0b00000010 const PORTB_none = 0b00000000 # \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b - \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u0437\u0434\u0435 \u043d\u0438\u0437\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b  function volatile_store!(x::Ptr{UInt8}, v::UInt8)     return Base.llvmcall(         \"\"\"         %ptr = inttoptr i64 %0 to i8*         store volatile i8 %1, i8* %ptr, align 1         ret void         \"\"\",         Cvoid,         Tuple{Ptr{UInt8},UInt8},         x,         v     ) end  function keep(x)     return Base.llvmcall(         \"\"\"         call void asm sideeffect \"\", \"X,~{memory}\"(i16 %0)         ret void         \"\"\",         Cvoid,         Tuple{Int16},         x ) end  function main_keep()     volatile_store!(DDRB, DDB1)      while true         volatile_store!(PORTB, PORTB1) # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for y in Int16(1):Int16(3000)             keep(y)         end          volatile_store!(PORTB, PORTB_none) # \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c LED          for y in Int16(1):Int16(3000)             keep(y)         end     end end<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u0442\u0432\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0438\u043c\u0435\u044e\u0449\u0443\u044e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0448\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u042f \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0446\u0438\u043a\u043b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434\u2026<\/p>\n<pre><code class=\"cpp\">\/tmp\/jl_xOZ5hH:     file format elf32-avr   Disassembly of section .text:  00000000 &lt;julia_main_keep>:    0:    82 e0           ldi    r24, 0x02    ; 2    2:    84 b9           out    0x04, r24    ; 4    4:    21 e0           ldi    r18, 0x01    ; 1    6:    30 e0           ldi    r19, 0x00    ; 0    8:    9b e0           ldi    r25, 0x0B    ; 11    a:    40 e0           ldi    r20, 0x00    ; 0    c:    85 b9           out    0x05, r24    ; 5    e:    62 2f           mov    r22, r18   10:    73 2f           mov    r23, r19   12:    e6 2f           mov    r30, r22   14:    f7 2f           mov    r31, r23   16:    31 96           adiw    r30, 0x01    ; 1   18:    68 3b           cpi    r22, 0xB8    ; 184   1a:    79 07           cpc    r23, r25   1c:    6e 2f           mov    r22, r30   1e:    7f 2f           mov    r23, r31   20:    01 f4           brne    .+0          ; 0x22 &lt;julia_main_keep+0x22>             20: R_AVR_7_PCREL    .text+0x16   22:    45 b9           out    0x05, r20    ; 5   24:    62 2f           mov    r22, r18   26:    73 2f           mov    r23, r19   28:    e6 2f           mov    r30, r22   2a:    f7 2f           mov    r31, r23   2c:    31 96           adiw    r30, 0x01    ; 1   2e:    68 3b           cpi    r22, 0xB8    ; 184   30:    79 07           cpc    r23, r25   32:    6e 2f           mov    r22, r30   34:    7f 2f           mov    r23, r31   36:    01 f4           brne    .+0          ; 0x38 &lt;julia_main_keep+0x38>             36: R_AVR_7_PCREL    .text+0x2c   38:    00 c0           rjmp    .+0          ; 0x3a &lt;julia_main_keep+0x3a>             38: R_AVR_13_PCREL    .text+0xc<\/code><\/pre>\n<p>  \u0423\u0440\u0430! \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c:<\/p>\n<ul>\n<li>\u041c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <code>0x05<\/code> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>out<\/code><\/li>\n<li>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <code>brne<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043d\u044f\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b<\/li>\n<li>\u041c\u044b \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430<\/li>\n<\/ul>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0435 \u0442\u0430\u043a\u0438\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441 <code>-Os<\/code> \u0438\u0437 C, \u043d\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c! \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u2014 \u044d\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 <code>.+0<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043d\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0446\u0438\u043a\u043b\u044b. \u0422\u0430\u043a\u0436\u0435 \u044f \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0434\u0430\u043c\u043f\u0438\u043d\u0433 \u043c\u0435\u0442\u043e\u043a \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0438 (\u043e\u043d\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a <code>R_AVR_7_PCREL<\/code>), \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u043c\u043e\u0433 \u0440\u0435\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0444\u0430\u0439\u043b ELF \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b (\u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u0430\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0432 \u044d\u0442\u0438 \u043c\u0435\u0442\u043a\u0438 \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0438) \u0438 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Arduino:<\/p>\n<pre><code class=\"powershell\">$ avr-ld -o jl_blink.elf jl_blink.o  $ avr-objcopy -O ihex jl_blink.elf jl_blink.hex  $ avrdude -V -c arduino -p ATMEGA328P -P \/dev\/ttyACM0 -U flash:w:jl_blink.hex avrdude: AVR device initialized and ready to accept instructions  Reading | ################################################## | 100% 0.00s  avrdude: Device signature = 0x1e950f (probably m328p) avrdude: NOTE: \"flash\" memory has been specified, an erase cycle will be performed          To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file \"jl_blink.hex\" avrdude: input file jl_blink.hex auto detected as Intel Hex avrdude: writing flash (168 bytes):  Writing | ################################################## | 100% 0.04s  avrdude: 168 bytes of flash written  avrdude done.  Thank you.<\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u2026<\/p>\n<h2><font color=\"#3AC1EF\">&lt;blink> \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u043d\u0430 Julia<\/font><\/h2>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62b4601f41d6a34fa4f7f20f\" data-style=\"\" id=\"62b4601f41d6a34fa4f7f20f\" width=\"\"><\/div>\n<\/div>\n<p>  \u0414\u0432\u0430 \u0434\u043d\u044f \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u044b \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0439! \u041f\u0438\u0442\u0430\u043d\u0438\u0435 \u043d\u0430 Arduino \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u044a\u0451\u043c \u0441\u043f\u0440\u0430\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c.<\/p>\n<p>  \u0425\u043e\u0447\u0443 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Slack-\u043a\u0430\u043d\u0430\u043b\u0430 Julialang <code>#static-compilation<\/code> \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b! \u0411\u0435\u0437 \u043d\u0438\u0445 \u044f \u043d\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u0431\u044b \u043e \u043c\u0435\u0442\u043a\u0430\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0435 \u0438 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c \u0431\u044b\u043b\u0430 \u043d\u0435\u043e\u0446\u0435\u043d\u0438\u043c\u043e\u0439 \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 Julia \u0434\u043b\u044f \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u043d\u043e\u0439, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.<\/p>\n<h2><font color=\"#3AC1EF\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/font><\/h2>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043b\u0438 \u0431\u044b \u044f \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435? \u041c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0440\u0435\u0434\u043b\u0438\u0432\u043e\u0439, \u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0443\u0442\u043e\u043c\u043b\u044f\u043b\u0438. \u041d\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434, \u0447\u0442\u043e \u0432\u0441\u0451 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e! \u042f \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u044d\u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043e\u043d\u0430 \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 GPU FPGA (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u043d\u0435 \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043b\u0438: Julia \u043d\u0430 FPGA \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438). \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u0437\u043d\u0430\u044e, \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 Julia, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u043d\u0430 \u00ab\u0433\u043e\u043b\u043e\u043c\u00bb \u0447\u0438\u043f\u0435 Arduino\/ATmega, \u0447\u0442\u043e \u0432\u043e\u0441\u0445\u0438\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e (Julia \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447 libuv, \u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043d\u0430 Arduino \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e) \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u0443\u0434\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0441\u043e\u0431\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<p>  \u041c\u043d\u0435 \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u00ab\u043a\u0443\u0447\u00bb. \u041f\u043e\u043a\u0430 \u044f \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b, \u043d\u043e \u0434\u0443\u043c\u0430\u044e, \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u043e\u043d\u0438 \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 ATmega328p \u0435\u0441\u0442\u044c!) \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb.<\/p>\n<p>  \u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e i\u00b2c \u0438 SPI, \u043d\u043e \u043c\u043e\u044f \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043c\u043d\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043e\u0434\u0430 \u043d\u0430 C (\u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u044f \u043d\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code>malloc<\/code> \u0438\u0437 <a href=\"https:\/\/github.com\/brenhinkeller\/StaticTools.jl\">StaticTools.jl<\/a>).<\/p>\n<h2><font color=\"#3AC1EF\">\u0421\u0441\u044b\u043b\u043a\u0438 \u0438 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/font><\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/docs.arduino.cc\/retired\/boards\/arduino-ethernet-rev3-without-poe\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Arduino Ethernet R3<\/a><\/li>\n<li><a href=\"https:\/\/www.arduino.cc\/en\/uploads\/Main\/arduino-ethernet-R3-schematic.pdf\">\u0421\u0445\u0435\u043c\u0430 Arduino Ethernet R3<\/a><\/li>\n<li><a href=\"https:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf\">\u0414\u0430\u0442\u0430\u0448\u0438\u0442 ATmega328p<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/JuliaGPU\/GPUCompiler.jl\">GPUCompiler<\/a><\/li>\n<li><a href=\"https:\/\/www.llvm.org\/docs\/Atomics.html#id4\">LLVM Documentation \u2014 Atomics<\/a><\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/bit.ly\/3N6JBGr?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=ru_vds&amp;utm_content=zapuskaem_julia_na_arduino\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/xb\/o4\/gm\/xbo4gmrlicdllfwrmtuypqrlcgg.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/xb\/o4\/gm\/xbo4gmrlicdllfwrmtuypqrlcgg.jpeg\" data-blurred=\"true\"\/><\/a><\/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\/673992\/\"> https:\/\/habr.com\/ru\/articles\/673992\/<\/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-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/673992\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/yz\/uv\/-h\/yzuv-hofhv6gj9qs2lp0-qexm_w.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/yz\/uv\/-h\/yzuv-hofhv6gj9qs2lp0-qexm_w.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><\/a><br \/>  \u0423 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441 Arduino, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u043c\u043e\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Raspberry Pi, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0439 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u042f \u043f\u0440\u043e\u0448\u0451\u043b \u043e\u0434\u0438\u043d \u043a\u0443\u0440\u0441 \u043f\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441 \u043d\u0438\u043c \u0443\u0436\u0430\u0441\u043d\u043e, \u0435\u0434\u0432\u0430 \u043d\u0430\u0431\u0440\u0430\u0432 \u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u043b\u043b. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u043d\u0438 \u043c\u0435\u043d\u044f \u0432\u043e\u0441\u0445\u0438\u0449\u0430\u044e\u0442 \u2014 \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0438 \u043d\u0435 \u0441\u0442\u0440\u0435\u043b\u044f\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443.<\/p>\n<p>  \u041f\u0440\u0438 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 Julia \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0432\u0443\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432: \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f Julia (\u0434\u0430 \u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043e\u0434\u0430) \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0434\u0432\u0443\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c:<\/p>\n<ol>\n<li>\u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u043b\u0438,<\/li>\n<li>\u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0433\u0434\u0435 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/li>\n<\/ol>\n<p>  \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 1 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043d\u0435 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 GC, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u00bb, \u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 2 \u2014 \u043a \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u00bb, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u0438 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u0441\u0442\u0438.  <\/p>\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-417187","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/417187","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=417187"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/417187\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=417187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=417187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=417187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}