{"id":359933,"date":"2024-05-21T00:42:49","date_gmt":"2024-05-21T00:42:49","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=359933"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=359933","title":{"rendered":"<span>\u041d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 \u00ab\u041c\u044b\u0441\u043b\u044c\u00bb<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f <strong>Atomic Heart<\/strong> \u0443\u00a0\u043c\u0435\u043d\u044f \u0432\u0441\u0451 \u0432\u0435\u0440\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0435, \u0447\u0435\u0433\u043e\u00a0\u0431\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u00a0\u043b\u043e\u0440\u0443 \u0438\u0433\u0440\u044b, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e \u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u0430\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0431\u043e\u043b\u0435\u0435\u2011\u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e \u0432\u00a0\u0440\u0435\u0430\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0445\u00a0\u0436\u0435 \u043f\u0447\u0451\u043b \u0432\u00a0\u0440\u0435\u0430\u043b\u0435, \u043a\u0430\u043a\u00a0\u0432\u00a0\u0438\u0433\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043b\u0435\u0442\u0430\u043b\u0438).<\/p>\n<p>\u0421\u00a0\u0432\u044b\u0445\u043e\u0434\u043e\u043c <strong>DLC 1<\/strong> \u0434\u043b\u044f\u00a0\u0438\u0433\u0440\u044b \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u0430 \u0441\u0430\u043c\u0430 \u0441\u043e\u0431\u043e\u0439.:) \u0413\u0443\u0441\u044c! \u0422\u043e\u0447\u043d\u0435\u0435, \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441\u00a0\u043d\u0430\u0434\u0435\u0442\u044b\u043c \u043d\u0430\u00a0\u0433\u0443\u0441\u044f \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u00ab\u041c\u044b\u0441\u043b\u044c\u00bb \u0438 \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b \u043c\u0435\u043d\u044f \u043d\u0430\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0445\u043e\u0436\u0435\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430 (\u0430 \u043d\u0430\u00a0\u043d\u043e\u0441\u0443 \u043a\u0430\u043a\u00a0\u0440\u0430\u0437\u00a0\u0431\u044b\u043b \u0425\u044d\u043b\u043b\u043e\u0443\u0438\u043d \u043d\u0430\u00a0\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u0447\u0442\u043e\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0436\u0438\u0433\u0430\u043b\u043e\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0445\u043e\u0442\u044f\u00a0\u0431\u044b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043d\u0430\u00a0\u043a\u043e\u043b\u0435\u043d\u043a\u0435).<\/p>\n<p>\u041d\u0443, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u0447\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u0432\u0430\u0439\u0441 \u043d\u0430 <strong>Black\u2011Pill<\/strong> (STM32F401CCU6), \u0442. \u043a. \u043e\u043d\u0430\u00a0\u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u00a0\u0440\u0443\u043a\u043e\u0439, \u0438, \u0432\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c, \u041c\u041a \u0438\u043c\u0435\u043b \u043d\u0430\u00a0\u0431\u043e\u0440\u0442\u0443. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0438 \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u044b\u0439 \u0434\u0435\u0432\u0430\u0439\u0441 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0437\u0430\u00a0\u043c\u0435\u0441\u044f\u0446 \u044f \u043d\u0435\u00a0\u0443\u0441\u043f\u0435\u043b\u00a0\u0431\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u00a0\u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043b\u0430\u0442\u0430\u0445\u2011\u043a\u0443\u0431\u0438\u043a\u0430\u0445, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043f\u0440\u044f\u0442\u0430\u0432 \u0434\u0435\u0432\u0430\u0439\u0441 \u00ab\u0437\u0430 \u0432\u043e\u0440\u043e\u0442\u043d\u0438\u043a\u00bb. \ud83d\ude00<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/01e\/521\/a3b\/01e521a3b850610483f4b74d0d28e63c.png\" width=\"500\" height=\"514\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/01e\/521\/a3b\/01e521a3b850610483f4b74d0d28e63c.png\"\/><\/figure>\n<p>\u0418\u0442\u0430\u043a, \u0432\u043e\u0442 \u0441\u0445\u043e\u0434\u0443 \u0432\u0438\u0434\u043e\u0441 \u0441 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u043d\u0430 \u041b\u043e\u043a\u0438 (\u0438\u043c\u044f \u043a\u043e\u0442\u044d \ud83d\ude42 ):<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65b6a02bee68229db6dafbc2\" data-style=\"\" id=\"65b6a02bee68229db6dafbc2\" width=\"\"><\/div>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043e<\/h2>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0434\u0435\u0432\u0430\u0439\u0441\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/117\/669\/37b\/11766937bca8a849af99924284486841.PNG\" alt=\"\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u0443\u043c\u0430\u044e \u0443\u0436\u0435 \u0438 \u0442\u0430\u043a \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435...\" title=\"\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u0443\u043c\u0430\u044e \u0443\u0436\u0435 \u0438 \u0442\u0430\u043a \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435...\" width=\"1036\" height=\"608\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u0443\u043c\u0430\u044e \u0443\u0436\u0435 \u0438 \u0442\u0430\u043a \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0451 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \ud83d\ude42 \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043c\u043e\u0437\u0433\u0430 &#8212; \u041c\u041a, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u0443\u0431 \u0438 \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c, \u0447\u0451 \u043a\u0430\u043a \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u0442\u044c \u043f\u043e \u043f\u0438\u043d\u0430\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/68b\/dcb\/b42\/68bdcbb42c92fc1ec61c839727b7c009.PNG\" alt=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u041c\u041a \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443\" title=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u041c\u041a \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443\" width=\"645\" height=\"625\"\/><\/p>\n<div><figcaption>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u041c\u041a \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><strong>SPI<\/strong>\u00a0\u2014 SPI1\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PA4&#8230;7\u00a0\u0434\u043b\u044f\u00a0SPI Flash<\/p>\n<\/li>\n<li>\n<p><strong>I2C<\/strong>\u00a0\u2014 I2C1\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PB6, PB7\u00a0\u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u043e\u043c<\/p>\n<\/li>\n<li>\n<p><strong>I2S<\/strong>\u00a0\u2014 I2S3\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PB3&#8230;5, PA15\u00a0\u0434\u043b\u044f\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u0432\u0443\u043a\u0430<\/p>\n<\/li>\n<li>\n<p><strong>TIM PWM<\/strong>\u00a0\u2014 TIM1\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PA8&#8230;10\u00a0\u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p><strong>SWD<\/strong>\u00a0\u2014 \u043d\u0430\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0438\u043d\u0430\u0445 PA13, PA4\u00a0\u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438 RTT<\/p>\n<\/li>\n<li>\n<p><strong>RCC<\/strong>\u00a0\u2014 \u043d\u0430\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0438\u043d\u0430\u0445 PH0, PH1\u00a0\u0441\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043a\u0432\u0430\u0440\u0446\u0435\u043c 16\u00a0\u041c\u0413\u0446<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f\u00a0\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e\u0444\u0430\u0439\u043b\u043e\u0432 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043f\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u043f\u043b\u0430\u0442\u0443 \u0442\u0438\u043f\u0430 \u0442\u0430\u043a\u043e\u0439 \u0434\u043b\u044f\u00a0SPI Flash:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/445\/c64\/5bc\/445c645bcbc782100e43bf55d692b420.png\" alt=\"\u041d\u0430\u043f\u0430\u044f\u0432 \u043d\u0430 \u043d\u0435\u0451 128 \u041c\u0431\u0438\u0442 \u0411\u0423 \u0444\u043b\u0435\u0448\u043a\u0443\" title=\"\u041d\u0430\u043f\u0430\u044f\u0432 \u043d\u0430 \u043d\u0435\u0451 128 \u041c\u0431\u0438\u0442 \u0411\u0423 \u0444\u043b\u0435\u0448\u043a\u0443\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/445\/c64\/5bc\/445c645bcbc782100e43bf55d692b420.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u043f\u0430\u044f\u0432 \u043d\u0430 \u043d\u0435\u0451 128 \u041c\u0431\u0438\u0442 \u0411\u0423 \u0444\u043b\u0435\u0448\u043a\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u044f \u0432\u0437\u044f\u043b \u0434\u0430\u0432\u043d\u043e \u0432\u0430\u043b\u044f\u0432\u0448\u0443\u044e\u0441\u044f \u043f\u043b\u0430\u0442\u0443 \u043d\u0430\u00a0\u0434\u0435\u0448\u0451\u0432\u043e\u043c <strong>ADXL345<\/strong>, \u0432\u044b\u0431\u0438\u0440\u0430\u044f \u043f\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u0441 \u0447\u0435\u043c \u044f \u0443\u0449\u0451 \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438 \u0447\u0442\u043e +\\\u2011 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043f\u043e\u0434\u00a0\u0437\u0430\u0434\u0430\u0447\u0443\u00bb:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50c\/182\/212\/50c18221203db4fc8b03a27ad2202710.png\" alt=\"\u0410\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440, \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\" title=\"\u0410\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440, \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50c\/182\/212\/50c18221203db4fc8b03a27ad2202710.png\"\/><\/p>\n<div><figcaption>\u0410\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440, \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u0432\u0443\u043a\u0430 \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0441\u00a0I2S \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448\u0451\u043b \u043e\u0444\u0438\u0433\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u043e \u0426\u0410\u041f \u0441\u00a0I2S \u0432\u0445\u043e\u0434\u043e\u043c \u0438 \u043d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u0435 \u0443\u00a0\u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c D \u043a\u043b\u0430\u0441\u0441\u0430\u00a0\u2014 <strong>MAX98\u00a0357A<\/strong>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1de\/393\/2e7\/1de3932e73de33e09367eb61f329776c.png\" alt=\"\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e I2C \u043a\u0430\u043a \u0443 I2S \u0426\u0410\u041f, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0438 \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!\" title=\"\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e I2C \u043a\u0430\u043a \u0443 I2S \u0426\u0410\u041f, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0438 \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1de\/393\/2e7\/1de3932e73de33e09367eb61f329776c.png\"\/><\/p>\n<div><figcaption>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e I2C \u043a\u0430\u043a \u0443 I2S \u0426\u0410\u041f, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0438 \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0443 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434&#8230; \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0437<s>\u044a<\/s>\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u0432\u0437\u044f\u043b, \u0447\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u043f\u043e\u0434\u00a0\u0440\u0443\u043a\u043e\u0439\u00a0\u2014 SMD RGB \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 <a href=\"https:\/\/www.lcsc.com\/product-detail\/Light-Emitting-Diodes-LED_Foshan-NationStar-Optoelectronics-FC-B1010RGBT-HG_C158099.html\" rel=\"noopener noreferrer nofollow\">FC\u2011B1010RGBT\u2011HG<\/a>:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f0\/986\/b82\/5f0986b82fed070c97ed788021f31db3.png\" alt=\"\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 :D\" title=\"\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 :D\" width=\"445\" height=\"313\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f0\/986\/b82\/5f0986b82fed070c97ed788021f31db3.png\"\/><\/p>\n<div><figcaption>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \ud83d\ude00<\/figcaption><\/div>\n<\/figure>\n<p> \u0417\u0430\u0442\u043e \u043a \u043d\u0435\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0430\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b67\/541\/a70\/b67541a70c11b97b288ea54d5d236df4.png\" alt=\"\u041d\u0435 \u043d\u0443 \u0430 \u0447\u0451, \u043f\u0430\u0434 \u0430\u043a\u043a\u0443\u0440\u0430\u0442 \u043f\u043e\u0434 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0443, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0442\u043e ?\" title=\"\u041d\u0435 \u043d\u0443 \u0430 \u0447\u0451, \u043f\u0430\u0434 \u0430\u043a\u043a\u0443\u0440\u0430\u0442 \u043f\u043e\u0434 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0443, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0442\u043e ?\" width=\"1234\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b67\/541\/a70\/b67541a70c11b97b288ea54d5d236df4.png\"\/><\/p>\n<div><figcaption>\u041d\u0435 \u043d\u0443 \u0430 \u0447\u0451, \u043f\u0430\u0434 \u0430\u043a\u043a\u0443\u0440\u0430\u0442 \u043f\u043e\u0434 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0443, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0442\u043e ?<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/29b\/bd6\/fac\/29bbd6fac9470d8de2c87f77223ecc48.png\" alt=\"4 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0438\" title=\"4 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0438\" width=\"1151\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/29b\/bd6\/fac\/29bbd6fac9470d8de2c87f77223ecc48.png\"\/><\/p>\n<div><figcaption>4 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0444\u043e\u0442\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u0434 \u043a\u043e\u043d\u0435\u0446 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0430\u043a\u0435\u0442\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/91a\/5ca\/283\/91a5ca283af90bb06af932b5d4e89e9d.png\" alt=\"\u0414\u0430, \u0442\u0443\u0442 \u044f \u0435\u0449\u0451 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0443\u043c\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0435 RTL-01, \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b\" title=\"\u0414\u0430, \u0442\u0443\u0442 \u044f \u0435\u0449\u0451 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0443\u043c\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0435 RTL-01, \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b\" width=\"1300\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/91a\/5ca\/283\/91a5ca283af90bb06af932b5d4e89e9d.png\"\/><\/p>\n<div><figcaption>\u0414\u0430, \u0442\u0443\u0442 \u044f \u0435\u0449\u0451 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0443\u043c\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0435 RTL-01, \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u041b\u043e\u043a\u0438 \u0443\u0436\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u0445\u043e\u0440\u043e\u0448\u0435\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/186\/56b\/94a\/18656b94a731077c55084a3cc5af2190.png\" width=\"1422\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/186\/56b\/94a\/18656b94a731077c55084a3cc5af2190.png\"\/><\/figure>\n<h2>\u041a\u043e\u0440\u043f\u0443\u0441<\/h2>\n<p>\u041f\u043e\u00a0\u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043c\u0430\u043a\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443, \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0435\u0432\u0430\u0439\u0441 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f57\/286\/eee\/f57286eeedc8f2924c126460b649af2b.PNG\" width=\"570\" height=\"841\"\/><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u043e \u0437\u0430\u0431\u0438\u0442\u044c \u043d\u0430\u00a0\u0442\u043e\u0447\u043d\u044b\u0435 \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u0438 \u043f\u043b\u044f\u0441\u0430\u0442\u044c \u043e\u0442\u00a0\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432\u00a0\u043a\u043e\u0440\u043f\u0443\u0441, \u0441\u043f\u0440\u044f\u0442\u0430\u0432 \u0432\u0441\u044e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0443 \u043f\u043e\u0434\u00a0\u043e\u0434\u0435\u0436\u0434\u0443 (\u0432\u043e\u0440\u043e\u0442\u043d\u0438\u043a) \u043a\u043e\u0442\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/284\/52e\/56e\/28452e56e4008e92064e029f4f55cb47.png\" alt=\"\u041d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e\" title=\"\u041d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e\" width=\"753\" height=\"730\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/284\/52e\/56e\/28452e56e4008e92064e029f4f55cb47.png\"\/><\/p>\n<div><figcaption>\u041d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/755\/a58\/ca9\/755a58ca9dae31c6ca1318aa77efdcd4.png\" alt=\"\u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0431\u044b \u0435\u0449\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043d\u043e \u044f \u0437\u0430\u0431\u0438\u043b\" title=\"\u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0431\u044b \u0435\u0449\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043d\u043e \u044f \u0437\u0430\u0431\u0438\u043b\" width=\"905\" height=\"559\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/755\/a58\/ca9\/755a58ca9dae31c6ca1318aa77efdcd4.png\"\/><\/p>\n<div><figcaption>\u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0431\u044b \u0435\u0449\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043d\u043e \u044f \u0437\u0430\u0431\u0438\u043b<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0434\u0438\u043d\u0430\u043c\u0438\u043a \u0441\u00a0\u0447\u0451\u0440\u043d\u043e\u0439 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u0440\u044f\u043f\u043e\u0447\u043a\u043e\u0439 \u0432\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0445\u0443, \u0441\u0431\u043e\u043a\u0443 \u043f\u0440\u043e\u0441\u0432\u0435\u0440\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0440\u0441\u0442\u0438\u0435 \u043f\u043e\u0434\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u0441\u043d\u0438\u0437\u0443 \u0432\u0441\u0451 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043b\u0435\u0435\u043c. <\/p>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a (\u0437\u0430\u0431\u044b\u043b \u0441\u0444\u043e\u0442\u0430\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0430\u00a0\u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0436\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043e \u0432\u0441\u0451):<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0d2\/fa5\/65f\/0d2fa565fd1b0b1a3c072c7ab2f4c12e.png\" alt=\"\u041d\u0443... \u0442\u0438\u043f\u0430... \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\" title=\"\u041d\u0443... \u0442\u0438\u043f\u0430... \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\" width=\"386\" height=\"317\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0d2\/fa5\/65f\/0d2fa565fd1b0b1a3c072c7ab2f4c12e.png\"\/><\/p>\n<div><figcaption>\u041d\u0443&#8230; \u0442\u0438\u043f\u0430&#8230; \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440<\/figcaption><\/div>\n<\/figure>\n<h2>\u0410\u0443\u0434\u0438\u043e-\u0444\u0430\u0439\u043b\u044b<\/h2>\n<p>\u0410\u00a0\u0431\u0443\u0434\u0435\u043c \u043c\u044b \u0438\u0445 \u0431\u0440\u0430\u0442\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435, \u0438\u0437\u00a0\u0438\u0433\u0440\u044b \ud83d\ude42 \u041d\u0430\u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd7\/ce4\/bf1\/bd7ce4bf1127e309d3003b7844129a03.PNG\" alt=\"\u0414\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446 \u044f \u043d\u0430\u0448\u0451\u043b, \u043a\u0430\u043a \u0435\u0449\u0451 \u0434\u043e\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 100 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0432\u0443\u043a\u043e\u0432\\\u0444\u0440\u0430\u0437.. \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0438\u043b\u043e ;)\" title=\"\u0414\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446 \u044f \u043d\u0430\u0448\u0451\u043b, \u043a\u0430\u043a \u0435\u0449\u0451 \u0434\u043e\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 100 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0432\u0443\u043a\u043e\u0432\\\u0444\u0440\u0430\u0437.. \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0438\u043b\u043e ;)\" width=\"771\" height=\"764\"\/><\/p>\n<div><figcaption>\u0414\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446 \u044f \u043d\u0430\u0448\u0451\u043b, \u043a\u0430\u043a \u0435\u0449\u0451 \u0434\u043e\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 100 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0432\u0443\u043a\u043e\u0432\\\u0444\u0440\u0430\u0437.. \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0438\u043b\u043e \ud83d\ude09<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u0430\u044f \u0438\u0433\u0440\u0430 \u0441 DLC 1 \u043d\u0430 \u041f\u041a \u0438 <a href=\"https:\/\/UnrealPakTool\" rel=\"noopener noreferrer nofollow\">UnrealPakTool<\/a>. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c <strong>pakchunk13-WindowsNoEditor.pak<\/strong> \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>UnrealPakTool\\UnrealPak.exe \"%path-to-game%\\AtomicHeart\\Content\\Paks\\pakchunk13-WindowsNoEditor.pak\" -Extract \"D:\\atomic unpack\\unpacked\"<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/hcs64\/ww2ogg\" rel=\"noopener noreferrer nofollow\">ww2ogg<\/a> &#8212; \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f wem (\u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432) \u0432 ogg<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/BtbN\/FFmpeg-Builds\" rel=\"noopener noreferrer nofollow\">FFmpeg-Builds<\/a> &#8212; \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f ogg \u0432 wav (\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c ffmpeg-master-latest-win64-gpl.zip)<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 wem \u0444\u0430\u0439\u043b\u044b \u0432 ogg \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>set folder=D:\\atomic unpack\\unpacked\\WwiseAudio\\Windows\\Ru for %%f in (\"%folder%\\*.wem\") do ww2ogg.exe \"%%f\" --pcb packed_codebooks_aoTuV_603.bin<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044f \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u043b \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 ogg \u0444\u0430\u0439\u043b\u044b, \u043e\u0442\u043e\u0431\u0440\u0430\u043b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f\u0432\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u044b, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0447\u0442\u043e \u044d\u0442\u043e \u0433\u0443\u0441\u044c, \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0431\u0440\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0431\u043e\u0440 \u0444\u0440\u0430\u0437 \u0431\u044b\u043b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c). <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 ogg \u0432 wav \u043c\u043e\u043d\u043e \u0438 32 \u043a\u0413\u0446 (\u0447\u0442\u043e\u0431\u044b \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0435\u0441\u0438\u043b\u0438, \u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u043e\u043b\u043e\u0441\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u043f\u0430\u043b\u043e, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 8 \u0438\u043b\u0438 16 \u043a\u0413\u0446) \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>for %%f in (\"*.ogg\") do ffmpeg -hide_banner -loglevel error -i \"%%f\" -ab 128 -ar 32000 \"%%f.wav\"<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044f \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0443 + \u043d\u043e\u043c\u0435\u0440\u0443 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/463\/879\/f75\/463879f755a99b7648bd32ce65ff782b.png\" alt=\"\u0422\u0443\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u0442\u044c 2 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f - Idle \u0438 Move, \u0430 \u0442\u0430\u043a \u0436\u0435 Special \u0444\u0440\u0430\u0437\u0430\" title=\"\u0422\u0443\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u0442\u044c 2 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f - Idle \u0438 Move, \u0430 \u0442\u0430\u043a \u0436\u0435 Special \u0444\u0440\u0430\u0437\u0430\" width=\"205\" height=\"420\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/463\/879\/f75\/463879f755a99b7648bd32ce65ff782b.png\"\/><\/p>\n<div><figcaption>\u0422\u0443\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u0442\u044c 2 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f &#8212; Idle \u0438 Move, \u0430 \u0442\u0430\u043a \u0436\u0435 Special \u0444\u0440\u0430\u0437\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0451, \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043e\u0431\u0440\u0430\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u00a0SPI Flash \u043b\u044e\u0431\u044b\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.:)<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0441\u00a0\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f\u00a0\u2014 <\/em><a href=\"https:\/\/protocoder.ru\/games\/atomicheart\/unpacking\" rel=\"noopener noreferrer nofollow\"><em>ATOMIC HEART \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043c\u0443\u0437\u044b\u043a\u0443 \u0438 \u0437\u0432\u0443\u043a\u0438<\/em><\/a><em>.<\/em><\/p>\n<h3>\u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430<\/h3>\n<p>\u0411\u044b\u043b\u0430 \u0432\u0437\u044f\u0442\u0430 \u0438\u0437\u00a0open\u2011source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/pvvx\/RTL00_WEB\/tree\/master\" rel=\"noopener noreferrer nofollow\">RTL00_WEB<\/a>, \u0431\u0435\u0440\u0451\u043c \u0438\u0437\u00a0\u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u044b <a href=\"https:\/\/github.com\/pvvx\/RTL00_WEB\/blob\/master\/project\/src\/webfs\/webfs.c\" rel=\"noopener noreferrer nofollow\"><strong>webfs.c<\/strong><\/a>  \\ <a href=\"https:\/\/github.com\/pvvx\/RTL00_WEB\/blob\/master\/project\/inc\/webfs\/webfs.h\" rel=\"noopener noreferrer nofollow\"><strong>webfs.h \u0441<\/strong><\/a> \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u00a0\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u00a0\u043f\u0430\u043c\u044f\u0442\u044c\u044e \u041c\u041a \\ SoC, \u0430\u00a0\u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u043b\u0435\u0448\u043a\u043e\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u00a0SPI.<\/p>\n<p>\u0421\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b, \u043a\u0430\u043a\u00a0\u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e \u0432\u044b\u0448\u0435, \u043f\u0440\u043e\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u0432\u043e\u0442 \u0434\u043b\u044f\u00a0\u0447\u0435\u0433\u043e. \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 (\u043a\u043e\u0442):<\/p>\n<pre><code class=\"cpp\">typedef enum {    NC_STATE_IDLE = 0,    NC_STATE_MOVE,    NC_STATE_ATTACK,    NC_STATE_FREE_FALL,    NC_STATE_ERROR = 0xff, } nc_state_t;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0432 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">typedef struct {    char prefix; \/\/ 'x'    uint8_t start; \/\/0 ...    uint8_t end; \/\/\/ n    uint8_t luck; \/\/ to play audio 0...100    uint32_t timeout; \/\/ ms to maybe play next file } nc_state_audiofile_t;<\/code><\/pre>\n<p>\u041d\u0443 \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044c\u044f\u0432\u0438\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430):<\/p>\n<pre><code class=\"cpp\">typedef struct {    uint8_t playing_flag;    uint8_t special_flag;    uint32_t timeout;    uint32_t timeout_sp;    void *hi2s;    void *hi2c;    void *hspi;    void *cs_port;    uint16_t cs_pin;    wav_header_t wavh;    webfs_handle_t hfs;    nc_state_t state;    nc_state_audiofile_t audio[4]; \/\/ NC_STATE_IDLE ... NC_STATE_FREE_FALL } nc_t;<\/code><\/pre>\n<p>\u0410 \u0438\u043d\u0438\u0442\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">   nc.audio[NC_STATE_IDLE].prefix = 'I';    nc.audio[NC_STATE_IDLE].start = 0;    nc.audio[NC_STATE_IDLE].end = 10;    nc.audio[NC_STATE_IDLE].luck = 30;    nc.audio[NC_STATE_IDLE].timeout = 50000;     nc.audio[NC_STATE_MOVE].prefix = 'M';    nc.audio[NC_STATE_MOVE].start = 0;    nc.audio[NC_STATE_MOVE].end = 19;    nc.audio[NC_STATE_MOVE].luck = 50;    nc.audio[NC_STATE_MOVE].timeout = 10000;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043a\u00a0\u043d\u0443\u0436\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438 \u0438\u0437\u00a0\u043d\u0435\u0451 \u0447\u0438\u0442\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f\u00a0\u0432\u044b\u0431\u043e\u0440\u0430, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f\u00a0\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0fd\/7e5\/403\/0fd7e54035985a3fd6e9ef4497004753.png\" alt=\"\u041e\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f! :O\" title=\"\u041e\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f! :O\" width=\"784\" height=\"576\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0fd\/7e5\/403\/0fd7e54035985a3fd6e9ef4497004753.png\"\/><\/p>\n<div><figcaption>\u041e\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f! :O<\/figcaption><\/div>\n<\/figure>\n<h2>\u0420\u0430\u043d\u0434\u043e\u043c\u0430\u0439\u0437\u0435\u0440<\/h2>\n<p>\u0414\u0430-\u0434\u0430&#8230;. \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u043b\u043e\u0440 \u0438\u0433\u0440\u044b, \u043d\u0438\u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u043b\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u043c\u0438 \u0442\u0443\u0442 \u043d\u0435 \u043f\u0430\u0445\u043d\u0435\u0442. \ud83d\ude41<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c93\/300\/6b6\/c933006b6dbd5c7d52dc0f7f3e91f42d.png\" alt=\"\u0424\u0430\u043b\u044c\u0448\u0438\u0432\u043a\u0430...\" title=\"\u0424\u0430\u043b\u044c\u0448\u0438\u0432\u043a\u0430...\" width=\"889\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c93\/300\/6b6\/c933006b6dbd5c7d52dc0f7f3e91f42d.png\"\/><\/p>\n<div><figcaption>\u0424\u0430\u043b\u044c\u0448\u0438\u0432\u043a\u0430&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u042f \u043d\u0435 \u043f\u043e\u0433\u0440\u0430\u043c\u0438\u0441\u0442 \u0438 \u043d\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u0449\u0438\u043a&#8230; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u0434\u043b\u043e\u043a\u043e\u0434\u0438\u043c \u0432 \u043b\u043e\u0431 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u043d\u0434\u043e\u043c\u0430\u0439\u0437\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">void nc_RandomPlay() {    static char filename[10];    static uint8_t s;    uint8_t luck = rand() % 101;     SysView_LogInfo(\"[nc] Luck: %u (Threshold: %u)\\r\\n\", luck, nc.audio[nc.state].luck);    if (luck &lt;= nc.audio[nc.state].luck)    {       for (;;)       {          uint8_t n = rand() % (nc.audio[nc.state].end + 1);          if (s != n)          {             s = n;             break;          }       }        if (s &lt; nc.audio[nc.state].start)       {          s = nc.audio[nc.state].start;       }        snprintf(&amp;filename[0], 10, \"%c%u.wav\", nc.audio[nc.state].prefix, s);       \/\/SysView_LogInfo(\"[nc] Generated filename: %s\\r\\n\", filename);       nc_PlayFile(&amp;filename[0]);    } }<\/code><\/pre>\n<p>\u041a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0432\u0435\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"cpp\">void nc_Routine() {    led_Routine();     if ((LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_8)) &amp;&amp; (nc.playing_flag == 0))    {       adxl345_GetIntSource(&amp;adxl);        if (((adxl.int_src &amp; ADXL345_INT_EN_BIT_DOUBLE_TAP) > 0) &amp;&amp;             SysTick_GetCurrentTick() - nc.timeout_sp > 5000)       {          nc_TapSpecialPlay();          nc.state = NC_STATE_ATTACK;          nc.timeout_sp = SysTick_GetCurrentTick();          nc_UpdateLedStatus();       }       else if ((adxl.int_src &amp; ADXL345_INT_EN_BIT_ACTIVITY) > 0)       {          nc.state = NC_STATE_MOVE;          nc_UpdateLedStatus();       }       else if ((adxl.int_src &amp; ADXL345_INT_EN_BIT_INACTIVITY) > 0)       {          nc.state = NC_STATE_IDLE;          nc_UpdateLedStatus();       }        SysView_LogInfo(\"\\r\\n[nc] Set State: %u\\r\\n\", nc.state);       SysView_LogInfo(\"[nc] Int Status: 0x%x\\r\\n\", adxl.int_src);    }     switch (nc.state)    {       case NC_STATE_IDLE:       case NC_STATE_MOVE:          if (nc.playing_flag == 0)          {             if (SysTick_GetCurrentTick() - nc.timeout > nc.audio[nc.state].timeout)             {                nc.timeout = SysTick_GetCurrentTick();                nc_RandomPlay();             }          }       break;        case NC_STATE_ATTACK:       case NC_STATE_FREE_FALL:          if (nc.playing_flag == 0)          {             nc.state = NC_STATE_MOVE;             nc_UpdateLedStatus();             SysView_LogInfo(\"\\r\\n[nc] Set State: %u\\r\\n\", nc.state);             nc.timeout = SysTick_GetCurrentTick();          }       break;        default: \/\/ NC_STATE_ERROR       break;    } }<\/code><\/pre>\n<p>\u0423\u0432\u044b, \u0442\u0443\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u044f\u043c\u043e \u0443\u0436 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0435\u0442.<\/p>\n<h2>\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0430\u0443\u0434\u0438\u043e<\/h2>\n<p>\u0421 \u044d\u0442\u0438\u043c \u043e\u0441\u043e\u0431\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 FS \u0444\u0430\u0439\u043b \u043a\u0440\u0430\u0442\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 (\u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 PLAYBACK_BUF_SIZE = 1024 \u0431\u0430\u0439\u0442), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f I2S DMA 2 \u0440\u0430\u0437\u0430 (\u0432 wav \u0444\u0430\u0439\u043b\u0435 \u0443 \u043d\u0430\u0441 mono, \u0430 \u0434\u043b\u044f I2S \u0432 STM32 \u043d\u0443\u0436\u043d\u043e stereo, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0441\u043b\u043e\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c 2 \u0440\u0430\u0437\u0430) \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">void nc_PlayFile(char *name) {    nc.hfs = webfs_Open(name);    if (nc.hfs != WEBFS_INVALID_HANDLE)    {       SysView_LogInfo(\"[wav] File %d name: %s (size %u)\\r\\n\", nc.hfs, name, webfs_GetBytesRem(nc.hfs));       uint8_t filedata[78];       webfs_GetArray(nc.hfs, &amp;filedata[0], 78);       if (wav_parser_ParseHeader(&amp;filedata[0], &amp;nc.wavh) == 0x00)       {          SysView_LogInfo(\"[wav] Type %u Sample rate: %u Bits per sample: %u Channels: %u Size: %u Data Offset: %u\\r\\n\",                           nc.wavh.type, nc.wavh.sample_rate, nc.wavh.bits_per_sample, nc.wavh.channels, nc.wavh.size, nc.wavh.data_offset);       }        \/\/ wavh.size \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 (2 \u043d\u0430 \u043f\u043e\u043b\u0443\u0441\u043b\u043e\u0432\u043e), \u0430 \u0432 playback_Start \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u043f\u043e\u043b\u0443\u0441\u043b\u043e\u0432\u0430\u0445, \u043d\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 2 (!)       playback_Start(read_buf, nc.wavh.size, 0);       nc.playing_flag = 1;       nc_UpdateLedStatus();    } }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430, \u043d\u0430\u0447\u0430\u0442\u043e\u0433\u043e \u0432 <strong>nc_PlayFile,<\/strong> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u0443\u0444\u0435\u0440 \u0438 callback:<\/p>\n<pre><code class=\"cpp\">static uint16_t buf[PLAYBACK_BUF_SIZE]; static void read_buf(uint16_t *dest, uint32_t count) {    \/\/ count \u0432 \u043f\u043e\u043b\u0443\u0441\u043b\u043e\u0432\u0430\u0445 (2 \u043a\u0430\u043d\u0430\u043b\u0430)    \/\/ webfs_GetArray \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0432 \u0431\u0430\u0439\u0442\u0430\u0445    \/\/ \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0430\u043b \u0441 \u0444\u043b\u0435\u0448\u043a\u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u043d\u0430 2     \/\/SysView_LogInfo(\"[wav] req %u\\r\\n\", count);    webfs_GetArray(nc.hfs, (uint8_t *)&amp;buf[0], count);    for (uint32_t i = 0; i &lt; count \/ 2; i++)    {       dest[i * 2 + 0] = buf[i];       dest[i * 2 + 1] = buf[i];    } }<\/code><\/pre>\n<p>\u0418\u043d\u0438\u0442\u0438\u043c \u043c\u0438\u043a\u0440\u043e-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043d\u0430\u0434 I2S HAL:<\/p>\n<pre><code>   playback_Init(nc.hi2s);    playback_SetStop_Callback(&amp;nc_FileDone);<\/code><\/pre>\n<p>\u0418, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p><strong>playback.h<\/strong><\/p>\n<pre><code class=\"cpp\">#ifndef _PLAYBACK_H_ #define _PLAYBACK_H_  #include \"main.h\" #include &lt;string.h>  #define PLAYBACK_BUF_SIZE                 1024 \/\/ 256 \/\/ 4096  typedef void (*fill_audio_buf_cb_t)(uint16_t *dest, uint32_t count);  void playback_Init(void *hi2s); int playback_Start(fill_audio_buf_cb_t cb, const uint32_t len, uint8_t loop_audio); void playback_Stop(void); void playback_Pause(void); void playback_Resume(void); void playback_SetStop_Callback(void (*callback)(void));  void playback_I2S_Tx_Cplt_Callback(void); void playback_I2S_Tx_HalfCplt_Callback(void);  #endif \/\/ _PLAYBACK_H_<\/code><\/pre>\n<p><strong>playback.c<\/strong><\/p>\n<pre><code class=\"cpp\">#include \"playback.h\" #include \"stm32f4xx_hal.h\"  static fill_audio_buf_cb_t fill_audio_buf_cb; static I2S_HandleTypeDef *i2s; static uint8_t loop; static uint32_t offset; static uint32_t total_len; static void (*on_playback_stopped)(void); static uint16_t audio_bufs[2][PLAYBACK_BUF_SIZE];  void playback_Init(void *hi2s) {    i2s = (I2S_HandleTypeDef *) hi2s; }  static void update_audio_buf(uint8_t buf_number) {    uint16_t *dest = audio_bufs[buf_number];    size_t len = total_len - offset;     if (!fill_audio_buf_cb)    {       return;    }     if (len > PLAYBACK_BUF_SIZE)    {       len = PLAYBACK_BUF_SIZE;    }     fill_audio_buf_cb(dest, len);    offset += len; }  void playback_Stop(void) {    HAL_I2S_DMAStop(i2s); }  void playback_Pause(void) {    HAL_I2S_DMAPause(i2s); }  void playback_Resume(void) {    HAL_I2S_DMAResume(i2s); }  int playback_Start(fill_audio_buf_cb_t cb, const uint32_t len, uint8_t loop_audio) {    total_len = len;    offset = 0;    fill_audio_buf_cb = cb;    update_audio_buf(0);    loop = loop_audio;    size_t count = len;    if (count > PLAYBACK_BUF_SIZE)    {       count = PLAYBACK_BUF_SIZE;    }     return HAL_I2S_Transmit_DMA(i2s, (uint16_t *)&amp;audio_bufs[0], count * 2); }  void playback_SetStop_Callback(void (*callback)(void)) {    on_playback_stopped = callback; }  void playback_I2S_Tx_Cplt_Callback(void) {    if (offset >= total_len)    {       if (loop)       {          offset = 0;       }       else       {          playback_Stop();          if (on_playback_stopped)          {             on_playback_stopped();          }       }    }    else    {       update_audio_buf(1);    } }  void playback_I2S_Tx_HalfCplt_Callback(void) {    if (loop || offset &lt; total_len)    {       update_audio_buf(0);    } } <\/code><\/pre>\n<p>\u0414\u0430, \u0435\u0449\u0451 \u043c\u043e\u043c\u0435\u043d\u0442, \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 wav-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432.<\/p>\n<p><strong>wav_parser.h<\/strong> :<\/p>\n<pre><code class=\"cpp\">#ifndef _WAV_PARSER_H_ #define _WAV_PARSER_H_  #include &lt;stdint.h>  #define WAV_PARSER_HEADER_LEN             44  typedef struct {    uint8_t type;    uint16_t sample_rate;    uint8_t bits_per_sample;    uint8_t channels;    uint32_t size;    uint32_t data_offset; } wav_header_t;  int wav_parser_ParseHeader(const uint8_t *header, wav_header_t *format);  #endif \/\/ _WAV_PARSER_H_ <\/code><\/pre>\n<p><strong>wav_parser.\u0441 <\/strong>:<\/p>\n<pre><code class=\"cpp\">#include \"wav_parser.h\" #include &lt;string.h>  int wav_parser_ParseHeader(const uint8_t *header, wav_header_t *format) {    const char *p = (char *)header;    if (strncmp(p, \"RIFF\", 4) != 0) \/\/ 0    {       return 1;    }     p += 8;    if (strncmp(p, \"WAVE\", 4) != 0) \/\/ 8    {       return 1;    }     p += 4;    if (strncmp(p, \"fmt\", 3) != 0) \/\/ 12    {       return 1;    }     p += 8;    format->type = p[0] | (p[1] &lt;&lt; 8); \/\/ 20     p += 2;    format->channels = p[0] | (p[1] &lt;&lt; 8); \/\/ 22     p += 2;    format->sample_rate = 0; \/\/ 24    for (uint8_t i = 0; i &lt; 4; i++)    {       format->sample_rate |= p[i] &lt;&lt; (8 * i);    }     p += 10;    format->bits_per_sample = p[0] | (p[1] &lt;&lt; 8); \/\/ 34     p += 2;    for (uint8_t i = 0; i &lt; 10; i++) \/\/ 10 chunks Max    {       if (strncmp(p, \"data\", 4) != 0)       {          p += 4;          uint32_t chunk_len = (p[0] | (p[1] &lt;&lt; 8) | (p[2] &lt;&lt; 16) | (p[3] &lt;&lt; 24));          p += (4 + chunk_len);       }       else       {          p += 4;          format->size = (p[0] | (p[1] &lt;&lt; 8) | (p[2] &lt;&lt; 16) | (p[3] &lt;&lt; 24));          \/\/format->data_offset = (uint32_t)*p;          format->data_offset = 78;\/\/+= 4; \/\/ TODO: \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u0431\u0430\u0433, \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e 90, \u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 78          break;       }    }     return 0; } <\/code><\/pre>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f I2S \u0438 DMA \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">void SysInit_DMA(void) {    LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);     hdma_spi3_tx.Instance = DMA1_Stream5;    hdma_spi3_tx.Init.Channel = DMA_CHANNEL_0;    hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;    hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE;    hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE;    hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;    hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;    hdma_spi3_tx.Init.Mode = DMA_CIRCULAR;    hdma_spi3_tx.Init.Priority = DMA_PRIORITY_HIGH;    hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; \/\/ DMA_FIFOMODE_ENABLE    hdma_spi3_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;    hdma_spi3_tx.Init.MemBurst = DMA_MBURST_SINGLE;    hdma_spi3_tx.Init.PeriphBurst = DMA_PBURST_SINGLE;     HAL_DMA_Init(&amp;hdma_spi3_tx);    __HAL_LINKDMA(&amp;hi2s3, hdmatx, hdma_spi3_tx);     \/\/NVIC_SetPriority(SPI3_IRQn, 0);    \/\/NVIC_EnableIRQ(SPI3_IRQn);    NVIC_SetPriority(DMA1_Stream5_IRQn, 0);    NVIC_EnableIRQ(DMA1_Stream5_IRQn); }  void SysInit_I2S(void) {    LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI3);     \/\/ I2S3: SD (PB5), extSD (PB4), CK (PB3), WS (PA15)    LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_5, LL_GPIO_MODE_ALTERNATE);    LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_3, LL_GPIO_MODE_ALTERNATE);    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_15, LL_GPIO_MODE_ALTERNATE);    LL_GPIO_SetAFPin_0_7(GPIOB, LL_GPIO_PIN_5, LL_GPIO_AF_6);    LL_GPIO_SetAFPin_0_7(GPIOB, LL_GPIO_PIN_3, LL_GPIO_AF_6);    LL_GPIO_SetAFPin_8_15(GPIOA, LL_GPIO_PIN_15, LL_GPIO_AF_6);     hi2s3.Instance = SPI3;    hi2s3.Init.Mode = I2S_MODE_MASTER_TX;    hi2s3.Init.Standard = I2S_STANDARD_PHILIPS;    hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B;    hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;    hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_32K;    hi2s3.Init.CPOL = I2S_CPOL_LOW;    hi2s3.Init.ClockSource = I2S_CLOCK_PLL;    hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE;    HAL_I2S_Init(&amp;hi2s3); }<\/code><\/pre>\n<p>\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">void DMA1_Stream5_IRQHandler(void) {    HAL_DMA_IRQHandler(&amp;hdma_spi3_tx); } void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef * i2s) {    playback_I2S_Tx_Cplt_Callback(); }  void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) {    playback_I2S_Tx_HalfCplt_Callback(); }<\/code><\/pre>\n<h2>\u0412\u044b\u0432\u043e\u0434<\/h2>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438, \u0431\u043b\u0438\u043d, \u0443\u0433\u0430\u0440\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u0438\u0433\u0440\u0430\u0435\u0448\u044c\u0441\u044f \u0441\u00a0\u043a\u043e\u0442\u043e\u043c \u0438 \u043e\u043d <s>\u0442\u0435\u0431\u044f \u043a\u0440\u043e\u0435\u0442 \u043c\u0430\u0442\u043e\u043c<\/s> \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0447\u0435\u043d\u044c \u0432\u00a0\u0442\u0435\u043c\u0443 \u043a\u0438\u0434\u0430\u0435\u0442 \u0444\u0440\u0430\u0437\u044b:D<\/p>\n<p>\u0411\u044b\u043b \u043a\u0430\u043a\u2011\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u044f \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u044b (\u0447\u0442\u043e \u043f\u043e\u00a0\u0434\u0432\u043e\u0439\u043d\u043e\u043c\u0443 \u0442\u0430\u043f\u0443 \u043f\u043e\u00a0\u043a\u043e\u0442\u0443 \u0438\u0437\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0438\u0434\u0435\u043e) \u0438 \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u0430 \u043d\u0430\u0446\u0435\u043f\u0438\u043b \u0434\u0435\u0432\u0430\u0439\u0441 \u043d\u0430\u00a0\u043a\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043b\u044f\u043b\u0441\u044f \u043d\u0430\u00a0\u043f\u043b\u0435\u0434\u0438\u043a\u0435 \u0440\u044f\u0434\u043e\u043c. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u00ab\u043f\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0432\u00bb, \u044f \u043e\u0442\u043e\u0448\u0451\u043b \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a\u00a0\u043a\u043e\u043c\u043f\u0443 \u0438 \u0437\u0430\u043b\u0438\u043f \u0432\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0438 \u0442\u0430\u043a \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u0447\u0442\u043e\u00a0\u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u00a0Idle \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0432\u044b\u0432\u043e\u0434\u0438\u043b \u0438 \u044f \u0437\u0430\u0431\u044b\u043b \u043e\u00a0\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0434\u0435\u0432\u0430\u0439\u0441\u0435.:) \u0421\u0438\u0436\u0443 \u044f \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u0438\u0436\u0443 \u0438 \u0442\u0443\u0442:<\/p>\n<p>\u2014 <strong>\u0411\u0423!<\/strong> \u0418\u0441\u043f\u0443\u0433\u0430\u043b\u0441\u044f?!<\/p>\n<p>\u042f \u0430\u0436 \u0432\u0437\u0434\u0440\u043e\u0433\u043d\u0443\u043b XD<\/p>\n<p>\u0421\u0430\u043c\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u044f \u0434\u0443\u043c\u0430\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u043d\u044c\u0448\u0435 (\u0441 \u0425\u044d\u043b\u043b\u043e\u0443\u0438\u043d\u0430 \u0442\u0430\u043a\u2011\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0448\u043b\u043e), \u043d\u043e\u00a0\u043d\u0430\u0432\u0430\u043b\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043f\u043e\u0442\u043e\u043c \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u043b\u0435\u043d\u044c. \u0417\u0430\u0442\u043e \u0434\u043e\u00a0\u041d\u043e\u0432\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e, \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e\u00a0\u0436\u0435\u043b\u0435\u0437\u0430 \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/846\/20f\/296\/84620f296ccda02ad2beec15ab54d973.png\" alt=\"\u041f\u043e\u043a\u0430 \u043c\u0438\u043a\u0440\u043e-\u0441\u0438\u043a\u0440\u0435\u0442, \u043d\u0430 \u0447\u0451\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043e)\" title=\"\u041f\u043e\u043a\u0430 \u043c\u0438\u043a\u0440\u043e-\u0441\u0438\u043a\u0440\u0435\u0442, \u043d\u0430 \u0447\u0451\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043e)\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/846\/20f\/296\/84620f296ccda02ad2beec15ab54d973.png\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043a\u0430 \u043c\u0438\u043a\u0440\u043e-\u0441\u0438\u043a\u0440\u0435\u0442, \u043d\u0430 \u0447\u0451\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043e)<\/figcaption><\/div>\n<\/figure>\n<p>\u0423\u0441\u043f\u0435\u043b \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0440\u0430\u0431\u043e\u0442\u0443 SWD \u043f\u043e\u0432\u0435\u0440\u0445 Type-C \u0441 \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u043c, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043a\u0430\u043a \u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/49b\/d5d\/2ec\/49bd5d2ec152f8e87f41271204a91a78.png\" alt=\"\u041a \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e J-Link, \u0430 \u0442\u0430\u043a\u0436\u0435 USB Type-C, data \u043b\u0438\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u041c\u041a (\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 USB Device)\" title=\"\u041a \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e J-Link, \u0430 \u0442\u0430\u043a\u0436\u0435 USB Type-C, data \u043b\u0438\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u041c\u041a (\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 USB Device)\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/49b\/d5d\/2ec\/49bd5d2ec152f8e87f41271204a91a78.png\"\/><\/p>\n<div><figcaption>\u041a \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e J-Link, \u0430 \u0442\u0430\u043a\u0436\u0435 USB Type-C, data \u043b\u0438\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u041c\u041a (\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 USB Device)<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u0434\u0430\u043f\u0442\u0435\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 Type\u2011C \u043a\u0430\u0431\u0435\u043b\u044f, \u0443\u043c\u0435\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 SWDIO\\SWCLK\u00a0\u043b\u0438\u043d\u0438\u0438 \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043e\u0441\u044f\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0442\u0443\u0442 \u043d\u0435\u00a0\u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0439\u00a0\u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f\u00a0Reset, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0430\u00a0\u0446\u0435\u043b\u0435\u0432\u043e\u043c \u041c\u041a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0442\u043e \u0435\u0433\u043e \u0442\u0430\u043a \u043d\u0435\u00a0\u043f\u0440\u043e\u0448\u0438\u0442\u044c \u0438 \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u00a0\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c&#8230; \u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 USB \u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c\u00a0\u043b\u0438\u043d\u0438\u0438 CC1\\2, \u043d\u043e\u00a0\u044f \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u00a0\u0441\u0442\u0430\u043b.<\/p>\n<p>\u0412\u00a0\u043e\u0431\u0449\u0435\u043c \u044d\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044e \u043f\u043b\u0430\u0442\u0443 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0442\u043e \u0434\u0443\u043c\u0430\u044e \u0442\u043e\u0433\u0434\u0430 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u043f\u0443 \u043d\u0430\u00a0\u0433\u0438\u0442\u0435, \u0434\u0430\u00a0\u0441\u0442\u0430\u0442\u0435\u0439\u043a\u0443 \u043e\u00a0\u043d\u0451\u043c \u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435.;)<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438! \u041d\u0430\u0434\u0435\u044e\u0441\u044c,\u00a0\u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0445\u043e\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/773384\/\"> https:\/\/habr.com\/ru\/articles\/773384\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f <strong>Atomic Heart<\/strong> \u0443\u00a0\u043c\u0435\u043d\u044f \u0432\u0441\u0451 \u0432\u0435\u0440\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0435, \u0447\u0435\u0433\u043e\u00a0\u0431\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u00a0\u043b\u043e\u0440\u0443 \u0438\u0433\u0440\u044b, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e \u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u0430\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0431\u043e\u043b\u0435\u0435\u2011\u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e \u0432\u00a0\u0440\u0435\u0430\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0445\u00a0\u0436\u0435 \u043f\u0447\u0451\u043b \u0432\u00a0\u0440\u0435\u0430\u043b\u0435, \u043a\u0430\u043a\u00a0\u0432\u00a0\u0438\u0433\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043b\u0435\u0442\u0430\u043b\u0438).<\/p>\n<p>\u0421\u00a0\u0432\u044b\u0445\u043e\u0434\u043e\u043c <strong>DLC 1<\/strong> \u0434\u043b\u044f\u00a0\u0438\u0433\u0440\u044b \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u0430 \u0441\u0430\u043c\u0430 \u0441\u043e\u0431\u043e\u0439.:) \u0413\u0443\u0441\u044c! \u0422\u043e\u0447\u043d\u0435\u0435, \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441\u00a0\u043d\u0430\u0434\u0435\u0442\u044b\u043c \u043d\u0430\u00a0\u0433\u0443\u0441\u044f \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u00ab\u041c\u044b\u0441\u043b\u044c\u00bb \u0438 \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b \u043c\u0435\u043d\u044f \u043d\u0430\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0445\u043e\u0436\u0435\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430 (\u0430 \u043d\u0430\u00a0\u043d\u043e\u0441\u0443 \u043a\u0430\u043a\u00a0\u0440\u0430\u0437\u00a0\u0431\u044b\u043b \u0425\u044d\u043b\u043b\u043e\u0443\u0438\u043d \u043d\u0430\u00a0\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u0447\u0442\u043e\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0436\u0438\u0433\u0430\u043b\u043e\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0445\u043e\u0442\u044f\u00a0\u0431\u044b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043d\u0430\u00a0\u043a\u043e\u043b\u0435\u043d\u043a\u0435).<\/p>\n<p>\u041d\u0443, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u0447\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u0432\u0430\u0439\u0441 \u043d\u0430 <strong>Black\u2011Pill<\/strong> (STM32F401CCU6), \u0442. \u043a. \u043e\u043d\u0430\u00a0\u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u00a0\u0440\u0443\u043a\u043e\u0439, \u0438, \u0432\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c, \u041c\u041a \u0438\u043c\u0435\u043b \u043d\u0430\u00a0\u0431\u043e\u0440\u0442\u0443. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0438 \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u044b\u0439 \u0434\u0435\u0432\u0430\u0439\u0441 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0437\u0430\u00a0\u043c\u0435\u0441\u044f\u0446 \u044f \u043d\u0435\u00a0\u0443\u0441\u043f\u0435\u043b\u00a0\u0431\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u00a0\u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043b\u0430\u0442\u0430\u0445\u2011\u043a\u0443\u0431\u0438\u043a\u0430\u0445, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043f\u0440\u044f\u0442\u0430\u0432 \u0434\u0435\u0432\u0430\u0439\u0441 \u00ab\u0437\u0430 \u0432\u043e\u0440\u043e\u0442\u043d\u0438\u043a\u00bb. \ud83d\ude00<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0418\u0442\u0430\u043a, \u0432\u043e\u0442 \u0441\u0445\u043e\u0434\u0443 \u0432\u0438\u0434\u043e\u0441 \u0441 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u043d\u0430 \u041b\u043e\u043a\u0438 (\u0438\u043c\u044f \u043a\u043e\u0442\u044d \ud83d\ude42 ):<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65b6a02bee68229db6dafbc2\" data-style=\"\" id=\"65b6a02bee68229db6dafbc2\" width=\"\"><\/div>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043e<\/h2>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0434\u0435\u0432\u0430\u0439\u0441\u0430:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u0443\u043c\u0430\u044e \u0443\u0436\u0435 \u0438 \u0442\u0430\u043a \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0451 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \ud83d\ude42 \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043c\u043e\u0437\u0433\u0430 &#8212; \u041c\u041a, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u0443\u0431 \u0438 \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c, \u0447\u0451 \u043a\u0430\u043a \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u0442\u044c \u043f\u043e \u043f\u0438\u043d\u0430\u043c:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u041c\u041a \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><strong>SPI<\/strong>\u00a0\u2014 SPI1\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PA4&#8230;7\u00a0\u0434\u043b\u044f\u00a0SPI Flash<\/p>\n<\/li>\n<li>\n<p><strong>I2C<\/strong>\u00a0\u2014 I2C1\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PB6, PB7\u00a0\u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u043e\u043c<\/p>\n<\/li>\n<li>\n<p><strong>I2S<\/strong>\u00a0\u2014 I2S3\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PB3&#8230;5, PA15\u00a0\u0434\u043b\u044f\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u0432\u0443\u043a\u0430<\/p>\n<\/li>\n<li>\n<p><strong>TIM PWM<\/strong>\u00a0\u2014 TIM1\u00a0\u043d\u0430\u00a0\u043f\u0438\u043d\u0430\u0445 PA8&#8230;10\u00a0\u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p><strong>SWD<\/strong>\u00a0\u2014 \u043d\u0430\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0438\u043d\u0430\u0445 PA13, PA4\u00a0\u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438 RTT<\/p>\n<\/li>\n<li>\n<p><strong>RCC<\/strong>\u00a0\u2014 \u043d\u0430\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0438\u043d\u0430\u0445 PH0, PH1\u00a0\u0441\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043a\u0432\u0430\u0440\u0446\u0435\u043c 16\u00a0\u041c\u0413\u0446<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f\u00a0\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e\u0444\u0430\u0439\u043b\u043e\u0432 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043f\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u043f\u043b\u0430\u0442\u0443 \u0442\u0438\u043f\u0430 \u0442\u0430\u043a\u043e\u0439 \u0434\u043b\u044f\u00a0SPI Flash:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0430\u043f\u0430\u044f\u0432 \u043d\u0430 \u043d\u0435\u0451 128 \u041c\u0431\u0438\u0442 \u0411\u0423 \u0444\u043b\u0435\u0448\u043a\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u044f \u0432\u0437\u044f\u043b \u0434\u0430\u0432\u043d\u043e \u0432\u0430\u043b\u044f\u0432\u0448\u0443\u044e\u0441\u044f \u043f\u043b\u0430\u0442\u0443 \u043d\u0430\u00a0\u0434\u0435\u0448\u0451\u0432\u043e\u043c <strong>ADXL345<\/strong>, \u0432\u044b\u0431\u0438\u0440\u0430\u044f \u043f\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u0441 \u0447\u0435\u043c \u044f \u0443\u0449\u0451 \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438 \u0447\u0442\u043e +\\\u2011 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043f\u043e\u0434\u00a0\u0437\u0430\u0434\u0430\u0447\u0443\u00bb:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0410\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440, \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u0432\u0443\u043a\u0430 \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0441\u00a0I2S \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448\u0451\u043b \u043e\u0444\u0438\u0433\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u043e \u0426\u0410\u041f \u0441\u00a0I2S \u0432\u0445\u043e\u0434\u043e\u043c \u0438 \u043d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u0435 \u0443\u00a0\u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c D \u043a\u043b\u0430\u0441\u0441\u0430\u00a0\u2014 <strong>MAX98\u00a0357A<\/strong>:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e I2C \u043a\u0430\u043a \u0443 I2S \u0426\u0410\u041f, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0438 \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0443 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434&#8230; \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0437<s>\u044a<\/s>\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u0432\u0437\u044f\u043b, \u0447\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u043f\u043e\u0434\u00a0\u0440\u0443\u043a\u043e\u0439\u00a0\u2014 SMD RGB \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 <a href=\"https:\/\/www.lcsc.com\/product-detail\/Light-Emitting-Diodes-LED_Foshan-NationStar-Optoelectronics-FC-B1010RGBT-HG_C158099.html\" rel=\"noopener noreferrer nofollow\">FC\u2011B1010RGBT\u2011HG<\/a>:<\/p>\n<figure class=\"\">\n<div><figcaption>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \ud83d\ude00<\/figcaption><\/div>\n<\/figure>\n<p> \u0417\u0430\u0442\u043e \u043a \u043d\u0435\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0430\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0438:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0435 \u043d\u0443 \u0430 \u0447\u0451, \u043f\u0430\u0434 \u0430\u043a\u043a\u0443\u0440\u0430\u0442 \u043f\u043e\u0434 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0443, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0442\u043e ?<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>4 \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0444\u043e\u0442\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u0434 \u043a\u043e\u043d\u0435\u0446 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0430\u043a\u0435\u0442\u0430:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0414\u0430, \u0442\u0443\u0442 \u044f \u0435\u0449\u0451 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0443\u043c\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0435 RTL-01, \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u041b\u043e\u043a\u0438 \u0443\u0436\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u0445\u043e\u0440\u043e\u0448\u0435\u0435:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>\u041a\u043e\u0440\u043f\u0443\u0441<\/h2>\n<p>\u041f\u043e\u00a0\u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043c\u0430\u043a\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443, \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0435\u0432\u0430\u0439\u0441 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u043e \u0437\u0430\u0431\u0438\u0442\u044c \u043d\u0430\u00a0\u0442\u043e\u0447\u043d\u044b\u0435 \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u0438 \u043f\u043b\u044f\u0441\u0430\u0442\u044c \u043e\u0442\u00a0\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432\u00a0\u043a\u043e\u0440\u043f\u0443\u0441, \u0441\u043f\u0440\u044f\u0442\u0430\u0432 \u0432\u0441\u044e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0443 \u043f\u043e\u0434\u00a0\u043e\u0434\u0435\u0436\u0434\u0443 (\u0432\u043e\u0440\u043e\u0442\u043d\u0438\u043a) \u043a\u043e\u0442\u0443.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0431\u044b \u0435\u0449\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043d\u043e \u044f \u0437\u0430\u0431\u0438\u043b<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0434\u0438\u043d\u0430\u043c\u0438\u043a \u0441\u00a0\u0447\u0451\u0440\u043d\u043e\u0439 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u0440\u044f\u043f\u043e\u0447\u043a\u043e\u0439 \u0432\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0445\u0443, \u0441\u0431\u043e\u043a\u0443 \u043f\u0440\u043e\u0441\u0432\u0435\u0440\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0440\u0441\u0442\u0438\u0435 \u043f\u043e\u0434\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u0441\u043d\u0438\u0437\u0443 \u0432\u0441\u0451 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043b\u0435\u0435\u043c. <\/p>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a (\u0437\u0430\u0431\u044b\u043b \u0441\u0444\u043e\u0442\u0430\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0430\u00a0\u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0436\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043e \u0432\u0441\u0451):<\/p>\n<figure class=\"\">\n<div><figcaption>\u041d\u0443&#8230; \u0442\u0438\u043f\u0430&#8230; \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440<\/figcaption><\/div>\n<\/figure>\n<h2>\u0410\u0443\u0434\u0438\u043e-\u0444\u0430\u0439\u043b\u044b<\/h2>\n<p>\u0410\u00a0\u0431\u0443\u0434\u0435\u043c \u043c\u044b \u0438\u0445 \u0431\u0440\u0430\u0442\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435, \u0438\u0437\u00a0\u0438\u0433\u0440\u044b \ud83d\ude42 \u041d\u0430\u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0414\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446 \u044f \u043d\u0430\u0448\u0451\u043b, \u043a\u0430\u043a \u0435\u0449\u0451 \u0434\u043e\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 100 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0432\u0443\u043a\u043e\u0432\\\u0444\u0440\u0430\u0437.. \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0438\u043b\u043e \ud83d\ude09<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u0430\u044f \u0438\u0433\u0440\u0430 \u0441 DLC 1 \u043d\u0430 \u041f\u041a \u0438 <a href=\"https:\/\/UnrealPakTool\" rel=\"noopener noreferrer nofollow\">UnrealPakTool<\/a>. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c <strong>pakchunk13-WindowsNoEditor.pak<\/strong> \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>UnrealPakTool\\UnrealPak.exe \"%path-to-game%\\AtomicHeart\\Content\\Paks\\pakchunk13-WindowsNoEditor.pak\" -Extract \"D:\\atomic unpack\\unpacked\"<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/hcs64\/ww2ogg\" rel=\"noopener noreferrer nofollow\">ww2ogg<\/a> &#8212; \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f wem (\u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432) \u0432 ogg<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/BtbN\/FFmpeg-Builds\" rel=\"noopener noreferrer nofollow\">FFmpeg-Builds<\/a> &#8212; \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f ogg \u0432 wav (\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c ffmpeg-master-latest-win64-gpl.zip)<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 wem \u0444\u0430\u0439\u043b\u044b \u0432 ogg \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>set folder=D:\\atomic unpack\\unpacked\\WwiseAudio\\Windows\\Ru for %%f in (\"%folder%\\*.wem\") do ww2ogg.exe \"%%f\" --pcb packed_codebooks_aoTuV_603.bin<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044f \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u043b \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 ogg \u0444\u0430\u0439\u043b\u044b, \u043e\u0442\u043e\u0431\u0440\u0430\u043b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f\u0432\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u044b, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0447\u0442\u043e \u044d\u0442\u043e \u0433\u0443\u0441\u044c, \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0431\u0440\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0431\u043e\u0440 \u0444\u0440\u0430\u0437 \u0431\u044b\u043b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c). <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 ogg \u0432 wav \u043c\u043e\u043d\u043e \u0438 32 \u043a\u0413\u0446 (\u0447\u0442\u043e\u0431\u044b \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0435\u0441\u0438\u043b\u0438, \u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u043e\u043b\u043e\u0441\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u043f\u0430\u043b\u043e, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 8 \u0438\u043b\u0438 16 \u043a\u0413\u0446) \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>for %%f in (\"*.ogg\") do ffmpeg -hide_banner -loglevel error -i \"%%f\" -ab 128 -ar 32000 \"%%f.wav\"<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044f \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0443 + \u043d\u043e\u043c\u0435\u0440\u0443 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0422\u0443\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u0442\u044c 2 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f &#8212; Idle \u0438 Move, \u0430 \u0442\u0430\u043a \u0436\u0435 Special \u0444\u0440\u0430\u0437\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0451, \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043e\u0431\u0440\u0430\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u00a0SPI Flash \u043b\u044e\u0431\u044b\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.:)<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0441\u00a0\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f\u00a0\u2014 <\/em><a href=\"https:\/\/protocoder.ru\/games\/atomicheart\/unpacking\" rel=\"noopener noreferrer nofollow\"><em>ATOMIC HEART \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043c\u0443\u0437\u044b\u043a\u0443 \u0438 \u0437\u0432\u0443\u043a\u0438<\/em><\/a><em>.<\/em><\/p>\n<h3>\u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430<\/h3>\n<p>\u0411\u044b\u043b\u0430 \u0432\u0437\u044f\u0442\u0430 \u0438\u0437\u00a0open\u2011source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/pvvx\/RTL00_WEB\/tree\/master\" rel=\"noopener noreferrer nofollow\">RTL00_WEB<\/a>, \u0431\u0435\u0440\u0451\u043c \u0438\u0437\u00a0\u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u044b <a href=\"https:\/\/github.com\/pvvx\/RTL00_WEB\/blob\/master\/project\/src\/webfs\/webfs.c\" rel=\"noopener noreferrer nofollow\"><strong>webfs.c<\/strong><\/a>  \\ <a href=\"https:\/\/github.com\/pvvx\/RTL00_WEB\/blob\/master\/project\/inc\/webfs\/webfs.h\" rel=\"noopener noreferrer nofollow\"><strong>webfs.h \u0441<\/strong><\/a> \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u00a0\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u00a0\u043f\u0430\u043c\u044f\u0442\u044c\u044e \u041c\u041a \\ SoC, \u0430\u00a0\u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u043b\u0435\u0448\u043a\u043e\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u00a0SPI.<\/p>\n<p>\u0421\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b, \u043a\u0430\u043a\u00a0\u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e \u0432\u044b\u0448\u0435, \u043f\u0440\u043e\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u0432\u043e\u0442 \u0434\u043b\u044f\u00a0\u0447\u0435\u0433\u043e. \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0439\u0440\u043e\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 (\u043a\u043e\u0442):<\/p>\n<pre><code class=\"cpp\">typedef enum {    NC_STATE_IDLE = 0,    NC_STATE_MOVE,    NC_STATE_ATTACK,    NC_STATE_FREE_FALL,    NC_STATE_ERROR = 0xff, } nc_state_t;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0432 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">typedef struct {    char prefix; \/\/ 'x'    uint8_t start; \/\/0 ...    uint8_t end; \/\/\/ n    uint8_t luck; \/\/ to play audio 0...100    uint32_t timeout; \/\/ ms to maybe play next file } nc_state_audiofile_t;<\/code><\/pre>\n<p>\u041d\u0443 \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044c\u044f\u0432\u0438\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430):<\/p>\n<pre><code class=\"cpp\">typedef struct {    uint8_t playing_flag;    uint8_t special_flag;    uint32_t timeout;    uint32_t timeout_sp;    void *hi2s;    void *hi2c;    void *hspi;    void *cs_port;    uint16_t cs_pin;    wav_header_t wavh;    webfs_handle_t hfs;    nc_state_t state;    nc_state_audiofile_t audio[4]; \/\/ NC_STATE_IDLE ... NC_STATE_FREE_FALL } nc_t;<\/code><\/pre>\n<p>\u0410 \u0438\u043d\u0438\u0442\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">   nc.audio[NC_STATE_IDLE].prefix = 'I';    nc.audio[NC_STATE_IDLE].start = 0;    nc.audio[NC_STATE_IDLE].end = 10;    nc.audio[NC_STATE_IDLE].luck = 30;    nc.audio[NC_STATE_IDLE].timeout = 50000;     nc.audio[NC_STATE_MOVE].prefix = 'M';    nc.audio[NC_STATE_MOVE].start = 0;    nc.audio[NC_STATE_MOVE].end = 19;    nc.audio[NC_STATE_MOVE].luck = 50;    nc.audio[NC_STATE_MOVE].timeout = 10000;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043a\u00a0\u043d\u0443\u0436\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438 \u0438\u0437\u00a0\u043d\u0435\u0451 \u0447\u0438\u0442\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f\u00a0\u0432\u044b\u0431\u043e\u0440\u0430, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f\u00a0\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f! :O<\/figcaption><\/div>\n<\/figure>\n<h2>\u0420\u0430\u043d\u0434\u043e\u043c\u0430\u0439\u0437\u0435\u0440<\/h2>\n<p>\u0414\u0430-\u0434\u0430&#8230;. \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u043b\u043e\u0440 \u0438\u0433\u0440\u044b, \u043d\u0438\u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u043b\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u043c\u0438 \u0442\u0443\u0442 \u043d\u0435 \u043f\u0430\u0445\u043d\u0435\u0442. \ud83d\ude41<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0424\u0430\u043b\u044c\u0448\u0438\u0432\u043a\u0430&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u042f \u043d\u0435 \u043f\u043e\u0433\u0440\u0430\u043c\u0438\u0441\u0442 \u0438 \u043d\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u0449\u0438\u043a&#8230; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u0434\u043b\u043e\u043a\u043e\u0434\u0438\u043c \u0432 \u043b\u043e\u0431 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u043d\u0434\u043e\u043c\u0430\u0439\u0437\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">void nc_RandomPlay() {    static char filename[10];    static uint8_t s;    uint8_t luck = rand() % 101;     SysView_LogInfo(\"[nc] Luck: %u (Threshold: %u)\\r\\n\", luck, nc.audio[nc.state].luck);    if (luck &lt;= nc.audio[nc.state].luck)    {       for (;;)       {          uint8_t n = rand() % (nc.audio[nc.state].end + 1);          if (s != n)          {             s = n;             break;          }       }        if (s &lt; nc.audio[nc.state].start)       {          s = nc.audio[nc.state].start;       }        snprintf(&amp;filename[0], 10, \"%c%u.wav\", nc.audio[nc.state].prefix, s);       \/\/SysView_LogInfo(\"[nc] Generated filename: %s\\r\\n\", filename);       nc_PlayFile(&amp;filename[0]);    } }<\/code><\/pre>\n<p>\u041a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0432\u0435\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"cpp\">void nc_Routine() {    led_Routine();     if ((LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_8)) &amp;&amp; (nc.playing_flag == 0))    {       adxl345_GetIntSource(&amp;adxl);        if (((adxl.int_src &amp; ADXL345_INT_EN_BIT_DOUBLE_TAP) > 0) &amp;&amp;             SysTick_GetCurrentTick() - nc.timeout_sp > 5000)       {          nc_TapSpecialPlay();          nc.state = NC_STATE_ATTACK;          nc.timeout_sp = SysTick_GetCurrentTick();          nc_UpdateLedStatus();       }       else if ((adxl.int_src &amp; ADXL345_INT_EN_BIT_ACTIVITY) > 0)       {          nc.state = NC_STATE_MOVE;          nc_UpdateLedStatus();       }       else if ((adxl.int_src &amp; ADXL345_INT_EN_BIT_INACTIVITY) > 0)       {          nc.state = NC_STATE_IDLE;          nc_UpdateLedStatus();       }        SysView_LogInfo(\"\\r\\n[nc] Set State: %u\\r\\n\", nc.state);       SysView_LogInfo(\"[nc] Int Status: 0x%x\\r\\n\", adxl.int_src);    }     switch (nc.state)    {       case NC_STATE_IDLE:       case NC_STATE_MOVE:          if (nc.playing_flag == 0)          {             if (SysTick_GetCurrentTick() - nc.timeout > nc.audio[nc.state].timeout)             {                nc.timeout = SysTick_GetCurrentTick();                nc_RandomPlay();             }          }       break;        case NC_STATE_ATTACK:       case NC_STATE_FREE_FALL:          if (nc.playing_flag == 0)          {             nc.state = NC_STATE_MOVE;             nc_UpdateLedStatus();             SysView_LogInfo(\"\\r\\n[nc] Set State: %u\\r\\n\", nc.state);             nc.timeout = SysTick_GetCurrentTick();          }       break;        default: \/\/ NC_STATE_ERROR       break;    } }<\/code><\/pre>\n<p>\u0423\u0432\u044b, \u0442\u0443\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u044f\u043c\u043e \u0443\u0436 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0435\u0442.<\/p>\n<h2>\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0430\u0443\u0434\u0438\u043e<\/h2>\n<p>\u0421 \u044d\u0442\u0438\u043c \u043e\u0441\u043e\u0431\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 FS \u0444\u0430\u0439\u043b \u043a\u0440\u0430\u0442\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 (\u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 PLAYBACK_BUF_SIZE = 1024 \u0431\u0430\u0439\u0442), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-359933","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359933","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=359933"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359933\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=359933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=359933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=359933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}