{"id":270263,"date":"2015-12-14T11:36:02","date_gmt":"2015-12-14T08:36:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=270263"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=270263","title":{"rendered":"\u041a\u0430\u043a \u0441\u0436\u0430\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0442\u0430"},"content":{"rendered":"<p>       \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432 \u0441\u0442\u0443\u0434\u0435\u043d\u0443\u044e \u0437\u0438\u043c\u043d\u044e\u044e \u043f\u043e\u0440\u0443\u2026 \u0440\u043e\u0432\u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434, \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0415\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u043d\u0438\u043b\u0430\u0445, \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 16\u041c\u0413\u0446 (\u0434\u0430-\u0434\u0430, \u0432\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u0432\u0435\u0440\u0445\u043d\u0438\u0437\u043a\u043e\u0433\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0442\u0430\u043a\u0438\u0435) \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u0443, \u0442.\u0435. \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u043e\u0432 8 RAM \u0438 256 Flash. \u041a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u043e\u0432, \u041a\u0430\u0440\u043b. \u0418 \u0432 \u044d\u0442\u0438 \u0443\u043d\u044b\u043b\u044b\u0435 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 800\u0445600 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043e\u0442\u0442\u0435\u043d\u043a\u0430\u0445 \u0441\u0435\u0440\u043e\u0433\u043e. \u0411\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0438\u0432 \u0432 \u0443\u043c\u0435 800 \u043d\u0430 600 \u0438 \u043d\u0430 2 \u0431\u0438\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 120 \u0442\u044b\u0441\u044f\u0447 \u0431\u0430\u0439\u0442\u043e\u0432. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442. \u041d\u0430\u0434\u043e \u0441\u0436\u0438\u043c\u0430\u0442\u044c.<\/p>\n<p>  \u0422\u0430\u043a \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430: \u00ab\u043a\u0430\u043a \u0441\u0436\u0430\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0442\u0430\u00bb? \u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u0442\u0430? \u0414\u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430 \u043a\u043e\u0442\u0438\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438, \u043d\u0430 \u0447\u0435\u043c \u0436\u0435 \u0435\u0449\u0435 \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c. \u041d\u0435 \u043d\u0430 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432\u044b\u0445 \u0431\u0430\u043d\u043a\u043d\u043e\u0442\u0430\u0445 \u0436\u0435.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0437\u0432\u0443\u0447\u0430\u043b \u0442\u0430\u043a: \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0436\u043c\u0435\u043c \u043a\u043e\u0442\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D0%B8%D0%BD_%D1%81%D0%B5%D1%80%D0%B8%D0%B9\">RLE<\/a>. \u041a\u043e\u0442-\u0442\u043e \u043f\u043b\u043e\u0441\u043a\u0438\u0439\u2026 \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0446\u0432\u0435\u0442\u043d\u044b\u0439 \u2014 \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0442\u0442\u0435\u043d\u043a\u0430. \u041f\u0443\u0441\u0442\u044b\u0445 \u043c\u0435\u0441\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u043b\u043d\u043e, \u0442.\u0435. \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e \u0447\u0435\u0440\u0442\u0430. \u0414\u043e\u043b\u0436\u043d\u043e \u0441\u0436\u0438\u043c\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0414\u043e\u043b\u0436\u043d\u043e \u0441\u0436\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u2014 \u0441\u0436\u0430\u043b\u043e\u0441\u044c. \u0421 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u0435\u043c: \u0441\u0436\u0438\u043c\u0430\u0442\u044c-\u0442\u043e \u043d\u0430\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a, \u0441\u0436\u0438\u043c\u0430\u0435\u043c \u043c\u044b \u043d\u0430 PC, \u0430 \u0442\u043e \u0438 \u0432\u043e\u0432\u0441\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0410 \u0432\u043e\u0442 \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0442\u044c \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0431\u0430\u0439\u0442 \u0432\u044b\u0442\u0430\u0449\u0438\u043b\u0438 \u2014 \u0431\u0430\u0439\u0442 \u0432\u044b\u0432\u0435\u043b\u0438. \u0412\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440\u0430-\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442\u0443 \u043d\u0430 8 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430\u0445 RAM, \u0440\u0430\u0437\u0436\u0430\u0442\u043e\u0433\u043e \u043a\u043e\u0442\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u0433\u0434\u0435.<\/p>\n<p>  \u0421\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c. \u0421\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0442.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0436\u0430\u0442\u0438\u0435 RLE<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/****************************************************************************\/ \/* Common Utilities Library        *            (C) Componentality Oy, 2015 *\/ \/****************************************************************************\/ \/* RLE compression implementation                                           *\/ \/****************************************************************************\/ #include &quot;rle.h&quot; #include &lt;memory.h&gt;  using namespace Componentality::Common;  \/\/ Do 8-bit RLE encoding void Componentality::Common::RLE_Encode(unsigned char* source, size_t source_size, unsigned char* target, size_t& target_size) { \ttarget_size = 0; \tunsigned char previous_character = source[0]; \tunsigned char series_counter = 1; \tbool same = false; \tsize_t i; \tfor (i = 1; i &lt; source_size; i++) \t{ \t\t\/\/ If current byte is equal to previous \t\tif (source[i] == previous_character) \t\t{ \t\t\t\/\/ If we process sequence of the same characters \t\t\tif (same) \t\t\t{ \t\t\t\tif (series_counter &lt; 127) \t\t\t\t\tseries_counter++; \t\t\t\telse \t\t\t\t{ \t\t\t\t\ttarget[target_size++] = 0x80 | series_counter; \t\t\t\t\ttarget[target_size++] = previous_character; \t\t\t\t\tseries_counter = 1; \t\t\t\t} \t\t\t} \t\t\telse \t\t\t{ \t\t\t\tif (series_counter &gt; 1) \t\t\t\t{ \t\t\t\t\ttarget[target_size++] = series_counter - 1; \t\t\t\t\tmemcpy(target + target_size, source + i - series_counter, series_counter - 1); \t\t\t\t\ttarget_size += series_counter - 1; \t\t\t\t} \t\t\t\tseries_counter = 2; \t\t\t\tsame = true; \t\t\t} \t\t} \t\telse \t\t{ \t\t\tif (same) \t\t\t{ \t\t\t\tif (series_counter &gt; 1) \t\t\t\t{ \t\t\t\t\ttarget[target_size++] = 0x80 | series_counter; \t\t\t\t\ttarget[target_size++] = previous_character; \t\t\t\t\tseries_counter = 1; \t\t\t\t} \t\t\t\telse \t\t\t\t\tseries_counter += 1; \t\t\t\tsame = false; \t\t\t} \t\t\telse \t\t\t{ \t\t\t\tif (series_counter &gt; 127) \t\t\t\t{ \t\t\t\t\ttarget[target_size++] = series_counter - 1; \t\t\t\t\tmemcpy(target + target_size, source + i - (series_counter - 1), series_counter - 1); \t\t\t\t\ttarget_size += series_counter - 1; \t\t\t\t\tseries_counter = 1; \t\t\t\t} \t\t\t\telse \t\t\t\t\tseries_counter++; \t\t\t} \t\t} \t\tprevious_character = source[i]; \t} \tif (same) \t{ \t\ttarget[target_size++] = 0x80 | series_counter; \t\ttarget[target_size++] = previous_character; \t} \telse \t{ \t\ttarget[target_size++] = series_counter; \t\tmemcpy(target + target_size, source + i - (series_counter), series_counter); \t\ttarget_size += series_counter; \t} }  \/\/ Do buffered RLE decoding void Componentality::Common::RLE_Decode(unsigned char* source, size_t source_size, unsigned char* target, size_t& target_size) { \ttarget_size = 0; \tfor (size_t i = 0; i &lt; source_size;) \t{ \t\tunsigned char size = source[i] & ~0x80; \t\tif (source[i] & 0x80) \t\t{ \t\t\tmemset(target + target_size, source[i + 1], size); \t\t\ti += 2; \t\t} \t\telse \t\t{ \t\t\tmemcpy(target + target_size, source + i + 1, size); \t\t\ti += size + 1; \t\t} \t\ttarget_size += size; \t} }  \/\/ Check where two buffers are different size_t Componentality::Common::isDiff(unsigned char* left, unsigned char* right, size_t size) { \tfor (size_t i = 0; i &lt; size; i++) \t{ \t\tif (left[i] != right[i]) \t\t\treturn i; \t} \treturn (size_t)-1; }  \/\/ Incremental decoding initialization void Componentality::Common::RLE_InitDecoder(RLE_DECODE* handler, unsigned char* source) { \thandler-&gt;mDecodedPortion = 0; \thandler-&gt;mPtr = 0; \thandler-&gt;mOffset = 0; \thandler-&gt;mSource = source; }  \/\/ Decode next byte incrementally unsigned char Componentality::Common::RLE_Fetch(RLE_DECODE* handler) { \tif (handler-&gt;mDecodedPortion &gt; handler-&gt;mPtr) \t{ \t\thandler-&gt;mPtr += 1; \t\tif (handler-&gt;mMode == 0x00) \t\t\thandler-&gt;mOffset += 1; \t\treturn handler-&gt;mSource[handler-&gt;mOffset - 1]; \t} \thandler-&gt;mDecodedPortion = handler-&gt;mSource[handler-&gt;mOffset] & ~0x80; \thandler-&gt;mMode = handler-&gt;mSource[handler-&gt;mOffset] & 0x80; \thandler-&gt;mOffset += 2; \thandler-&gt;mPtr = 1; \treturn handler-&gt;mSource[handler-&gt;mOffset - 1]; }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e \u043a\u043e\u0442 \u0441\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f. \u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043e \u0431\u043e\u043b\u044c\u043d\u0438\u0446\u0435 \u0440\u0430\u0437\u0430 \u0432 4. \u041d\u043e \u043c\u044b \u0436\u0430\u0434\u043d\u044b\u0435, \u043d\u0430\u043c \u0431\u044b \u043f\u043e\u043f\u043b\u043e\u0442\u043d\u0435\u0435. \u041c\u0430\u043b\u043e \u0443 \u043d\u0430\u0441 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u043e, \u0438 \u043d\u0443\u0436\u043d\u0430 \u043e\u043d\u0430 \u043d\u0435 \u0434\u043b\u044f \u043e\u0434\u043d\u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0442\u0438\u043a\u043e\u0432, \u043d\u0430\u043c \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u0440\u0430\u043d\u0433\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0443\u044e \u0432\u0441\u044f\u043a\u0443\u044e \u0435\u0440\u0443\u043d\u0434\u0443.<\/p>\n<p>  \u041f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0435\u0449\u0435 \u0440\u0430\u0437. \u0422\u0430\u043a \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u0441\u044f\u043a \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/LZ77\">LZ77 <\/a>\u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442, \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0436\u0430\u0442\u0438\u0435 embedded-\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 LZ77 (\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c Scanback)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/****************************************************************************\/ \/* Common Utilities Library        *       (C) Componentality Oy, 2014-2015 *\/ \/****************************************************************************\/ \/* Scanback compression implementation                                      *\/ \/****************************************************************************\/ \/* Scanback - LZ77 for embedded systems                                     *\/ \/* Designed and developed by Konstantin Khait                               *\/ \/****************************************************************************\/  #include &quot;scanback.h&quot; extern &quot;C&quot; { #include &quot;bitmem.h&quot; }  using namespace Componentality::Common;  \/\/ Scan buffer (buf) back from position &lt;index&gt; - 1 for byte &lt;wtf&gt; from &lt;minfind&gt; to &lt;maxfind&gt; index static unsigned char _sb__findback(unsigned char* buf, unsigned long index, unsigned char wtf, unsigned char minfind, unsigned char maxfind) { \tunsigned char i; \tfor (i = minfind; i &lt; maxfind; i++) \t{ \t\tif (buf[index - i] == wtf) \t\t\treturn i; \t} \treturn 0; }  \/\/ Compare &lt;buf1&gt; and &lt;buf2&gt; for maximum length of &lt;size&gt; and return length of identical fragment static unsigned char _sb__match(unsigned char* buf1, unsigned char* buf2, unsigned char size) { \tunsigned char i; \tfor (i = 0; i &lt; size; i++) \t{ \t\tif (buf1[i] != buf2[i]) \t\t\tbreak; \t} \treturn i; }  \/\/ Find maximum matching sequence in buffer &lt;buf&gt; to sequence starting from &lt;index&gt; \/\/ &lt;winsize&gt; - size of window to be scanned in bytes, &lt;matchlen&gt; - maximum length of matching area in bytes, &lt;bufsize&gt; - size of &lt;buf&gt; SB_PTR _sb_scanback(unsigned char* buf, unsigned long index, unsigned char winsize, unsigned char matchlen, unsigned long bufsize) { \tSB_PTR result = { 0, 0 }; \tunsigned char i; \tif (winsize &gt; index) \t\twinsize = (unsigned char)index; \tif (matchlen &gt; winsize) \t\tmatchlen = winsize; \tfor (i = 1; i &lt; winsize; i++) \t{ \t\tregister unsigned char offset = _sb__findback(buf, index, buf[index], i, winsize); \t\tif (offset) \t\t{ \t\t\tregister unsigned char matchsize = (unsigned char)(matchlen &lt; (bufsize - index) ? matchlen : bufsize - index); \t\t\tif (matchsize &gt; offset) \t\t\t\tmatchsize = offset; \t\t\tregister unsigned char len = _sb__match(buf + index, buf + index - offset, matchsize); \t\t\tif (len &gt; result.length) \t\t\t{ \t\t\t\tresult.offset = offset; \t\t\t\tresult.length = len; \t\t\t} \t\t\ti = offset; \t\t} \t} \treturn result; }  \/\/ Do compression of buffer &lt;buf&gt; of size &lt;size&gt; to bitwise memory &lt;mem&gt;. Returns number of produced bits unsigned long Componentality::Common::SB_Compress(unsigned char* mem, unsigned char* buf, unsigned long size) { \tunsigned long bitcount = 0, i; \tSB_PTR cptr;  \tfor (i = 0; i &lt; (1 &lt;&lt; LENGTH_BITS); i++) \t\tmem[i] = buf[i]; \tbitcount += (1 &lt;&lt; LENGTH_BITS) * 8;  \tfor (i = 1 &lt;&lt; LENGTH_BITS; i &lt; size;) \t{ \t\tcptr = _sb_scanback(buf, i, 1 &lt;&lt; WINDOW_BITS, 1 &lt;&lt; LENGTH_BITS, size); \t\tif (!cptr.offset) \t\t{ \t\t\tbitmem_put1(mem, bitcount++, 0); \t\t\tbitmem_put(mem, bitcount, buf[i], 8); \t\t\tbitcount += 8; \t\t\ti += 1; \t\t} \t\telse \t\t{ \t\t\tbitmem_put1(mem, bitcount++, 1); \t\t\tbitmem_put(mem, bitcount, cptr.offset - 1, WINDOW_BITS); \t\t\tbitcount += WINDOW_BITS; \t\t\tbitmem_put(mem, bitcount, cptr.length - 1, LENGTH_BITS); \t\t\tbitcount += LENGTH_BITS; \t\t\ti += cptr.length; \t\t} \t} \treturn bitcount; }  \/\/ Initialize decoder context void Componentality::Common::SB_InitDecoder(SB_DECODER* decoder, unsigned char* mem) { \tdecoder-&gt;bitindex = 0; \tdecoder-&gt;mem = mem; \tdecoder-&gt;total_decoded = 0; \tdecoder-&gt;index = 0; \tdecoder-&gt;brb = 0; }  \/\/ Initialize decoder with ringbuffer void SB_InitDecoderRB(SB_DECODER* decoder, void* ringbuffer) { \tdecoder-&gt;bitindex = 0; \tdecoder-&gt;mem = 0; \tdecoder-&gt;total_decoded = 0; \tdecoder-&gt;index = 0; \tdecoder-&gt;brb = ringbuffer; }  \/\/ Unpack next byte from the packed stream unsigned char Componentality::Common::SB_Fetch(SB_DECODER* decoder) { \tregister unsigned char result; \tif (decoder-&gt;index &lt; (1 &lt;&lt; LENGTH_BITS)) \t{ \t\tif (!decoder-&gt;brb) \t\t\tresult = decoder-&gt;decoded_buf[decoder-&gt;index % (1 &lt;&lt; WINDOW_BITS)] = decoder-&gt;mem[decoder-&gt;index]; \t\telse \t\t\tresult = decoder-&gt;decoded_buf[decoder-&gt;index % (1 &lt;&lt; WINDOW_BITS)] = (unsigned char)bitmem_read_ringbuf((BIT_RINGBUF*)decoder-&gt;brb, 8); \t\tdecoder-&gt;index += 1; \t\tdecoder-&gt;bitindex += 8; \t\tdecoder-&gt;total_decoded += 1; \t\treturn result; \t} \tif (decoder-&gt;index &gt;= decoder-&gt;total_decoded) \t{ \t\tbit isref = bitmem_get1(decoder-&gt;mem, decoder-&gt;bitindex++); \t\tif (!isref) \t\t{ \t\t\tif (!decoder-&gt;brb) \t\t\t\tdecoder-&gt;decoded_buf[decoder-&gt;total_decoded % (1 &lt;&lt; WINDOW_BITS)] = (unsigned char)bitmem_get(decoder-&gt;mem, decoder-&gt;bitindex, 8); \t\t\telse \t\t\t\tdecoder-&gt;decoded_buf[decoder-&gt;total_decoded % (1 &lt;&lt; WINDOW_BITS)] = (unsigned char)bitmem_read_ringbuf((BIT_RINGBUF*)decoder-&gt;brb, 8);; \t\t\tdecoder-&gt;bitindex += 8; \t\t\tdecoder-&gt;total_decoded += 1; \t\t} \t\telse \t\t{ \t\t\tregister SB_PTR ptr; \t\t\tregister unsigned char i; \t\t\tif (!decoder-&gt;brb) \t\t\t\tptr.offset = (unsigned char)bitmem_get(decoder-&gt;mem, decoder-&gt;bitindex, WINDOW_BITS) + 1; \t\t\telse \t\t\t\tptr.offset = (unsigned char) bitmem_read_ringbuf((BIT_RINGBUF*)decoder-&gt;brb, WINDOW_BITS) + 1; \t\t\tdecoder-&gt;bitindex += WINDOW_BITS; \t\t\tif (!decoder-&gt;brb) \t\t\t\tptr.length = (unsigned char)bitmem_get(decoder-&gt;mem, decoder-&gt;bitindex, LENGTH_BITS) + 1; \t\t\telse \t\t\t\tptr.length = (unsigned char) bitmem_read_ringbuf((BIT_RINGBUF*)decoder-&gt;brb, LENGTH_BITS) + 1; \t\t\tdecoder-&gt;bitindex += LENGTH_BITS; \t\t\tfor (i = 0; i &lt; ptr.length; i++) \t\t\t{ \t\t\t\tregister unsigned long srcptr = decoder-&gt;total_decoded - ptr.offset; \t\t\t\tdecoder-&gt;decoded_buf[decoder-&gt;total_decoded % (1 &lt;&lt; WINDOW_BITS)] = decoder-&gt;decoded_buf[srcptr % (1 &lt;&lt; WINDOW_BITS)]; \t\t\t\tdecoder-&gt;total_decoded += 1; \t\t\t} \t\t} \t} \tresult = decoder-&gt;decoded_buf[decoder-&gt;index % (1 &lt;&lt; WINDOW_BITS)]; \tdecoder-&gt;index += 1; \treturn result; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430\u0441 \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u043b footprint \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0432\u043d\u044b\u0439 150 \u0431\u0430\u0439\u0442\u0430\u043c (\u043f\u0440\u0438 \u00ab\u043e\u043a\u043d\u0435\u00bb \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 127 \u0431\u0430\u0439\u0442\u043e\u0432). \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445 \u041b\u0435\u043c\u043f\u0435\u043b\u044f-\u0417\u0438\u0432\u0430 \u043d\u0430\u0441 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043c\u0443\u0449\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u0441\u043b\u043e\u0432\u0430\u0440\u044c. RLE-\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0432\u043e\u0432\u0441\u0435 \u0431\u0435\u0437 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438\u2026 \u041d\u043e 150 \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u043d\u0430\u0441 \u043d\u0435 \u043d\u0430\u043f\u0443\u0433\u0430\u0435\u0448\u044c.<\/p>\n<p>  \u041d\u0430\u043f\u0443\u0433\u0430\u043b\u043e \u043d\u0430\u0441 \u0434\u0440\u0443\u0433\u043e\u0435 \u2014 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u0437 \u0442\u0435\u043e\u0440\u0438\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e LZ77 \u2014 \u044d\u0442\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435 RLE, \u0437\u0430\u043c\u0435\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u0430\u0432\u0430\u043b\u0430 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438: \u0438\u043d\u043e\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u0438\u043d\u043e\u0433\u0434\u0430 \u0445\u0443\u0436\u0435, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u0442\u0430 \u0436\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0441\u0436\u0430\u0442\u0438\u044f, \u043a\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0439.<\/p>\n<p>  \u0421\u0442\u0430\u043b\u0438 \u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0440\u043e \u044d\u043d\u0442\u0440\u043e\u043f\u0438\u0439\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b: \u0425\u0430\u0444\u0444\u043c\u0430\u043d\u0430, \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0430\u0440\u0443 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432\u2026 \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438. \u0412\u0441\u0435\u043c \u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u043e\u0440\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e, \u0430 \u043f\u043e \u043d\u0430\u0448\u0438\u043c \u043c\u0435\u0440\u043a\u0430\u043c \u2014 \u043f\u0440\u044f\u043c\u043e-\u0442\u0430\u043a\u0438 \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<p>  \u0410 \u043f\u043e\u0442\u043e\u043c\u2026 \u0410 \u043f\u043e\u0442\u043e\u043c \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0441\u0436\u0430\u0442\u0438\u0435 scanback&#8217;\u043e\u043c <b>\u043f\u043e\u0432\u0435\u0440\u0445<\/b> RLE. \u0418, \u043e \u0447\u0443\u0434\u043e, \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0441\u0436\u0430\u0442\u0438\u044f \u0441 3-4 \u043f\u043e\u0434\u0441\u043a\u043e\u0447\u0438\u043b\u0430 \u0434\u043e 7-10 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u00ab\u043f\u0443\u0448\u0438\u0441\u0442\u043e\u0441\u0442\u0438 \u043a\u043e\u0442\u0430\u00bb, \u0442\u043e \u0431\u0438\u0448\u044c \u043e\u0442 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043b\u043e\u0441\u043a\u043e\u0446\u0432\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439. \u041c\u043e\u0436\u043d\u043e \u0436\u0438\u0442\u044c. \u0418, \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, RLE + SB \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c \u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u043e\u0440 RLE + Scanback<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/****************************************************************************\/ \/* Common Utilities Library        *            (C) Componentality Oy, 2015 *\/ \/****************************************************************************\/ \/* Combined RLE + Scanback implementation (compression is to be done        *\/ \/* sequentially, decompression is optimized                                 *\/ \/****************************************************************************\/ #include &quot;rlesbc.h&quot;  using namespace Componentality::Common;  \/\/ Decode next byte incrementally for stream compressed by both RLE and Scanback unsigned char Componentality::Common::RLESB_Fetch(RLE_DECODE* handler, SB_DECODER* sb_handler, unsigned char* repeating_value) { \tif (handler-&gt;mDecodedPortion &gt; handler-&gt;mPtr) \t{ \t\thandler-&gt;mPtr += 1; \t\tif (handler-&gt;mMode == 0x00) \t\t\t*repeating_value = SB_Fetch(sb_handler); \t\treturn *repeating_value; \t} \t*repeating_value = SB_Fetch(sb_handler); \thandler-&gt;mDecodedPortion = *repeating_value & ~0x80; \thandler-&gt;mMode = *repeating_value & 0x80; \t*repeating_value = SB_Fetch(sb_handler); \thandler-&gt;mPtr = 1; \treturn *repeating_value; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u043e\u0442 \u0443\u0436\u0435 \u0433\u043e\u0434, \u043a\u0430\u043a \u043d\u0430\u0448\u0438 \u043a\u043e\u0442\u0438\u043a\u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0436\u0438\u0432\u0443\u0442 \u043f\u043e\u0447\u0442\u0438 \u00ab\u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u0431\u0435\u0441\u043f\u0430\u043c\u044f\u0442\u0441\u0442\u0432\u0435\u00bb, \u043d\u0430\u0437\u043b\u043e \u0432\u0441\u044f\u043a\u0438\u043c ZLIB&#8217;\u0430\u043c. \u041a\u043e\u0442\u043e\u0440\u044b\u0435, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0436\u043c\u0443\u0442 \u043a\u0443\u0434\u0430 \u043f\u043b\u043e\u0442\u043d\u0435\u0435, \u043d\u043e \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0442 \u043d\u0435\u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e \u0431\u043e\u043b\u044c\u0448\u0435. \u0410 \u043c\u044b \u0442\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0448 RLE + SB \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043c \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u043d\u043e \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b, \u0434\u0430\u0436\u0435 \u0441 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0430\u043d\u0442\u0438\u0430\u043b\u0438\u0430\u0441\u0438\u043d\u0433\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043c\u0435\u0448\u043d\u044b\u0435 2.5-6, \u0437\u0430\u0442\u043e \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442\u0441\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430 \u0440\u0430\u0437\u0436\u0430\u0442\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435, \u0438 \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438-\u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0443\u0434\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0435\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0435 \u0436\u043c\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u043e\u0434 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F_MIT\">MIT<\/a>). \u0412\u0434\u0440\u0443\u0433 \u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0442\u044c \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430.       <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/273047\/\"> http:\/\/habrahabr.ru\/post\/273047\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432 \u0441\u0442\u0443\u0434\u0435\u043d\u0443\u044e \u0437\u0438\u043c\u043d\u044e\u044e \u043f\u043e\u0440\u0443\u2026 \u0440\u043e\u0432\u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434, \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0415\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u043d\u0438\u043b\u0430\u0445, \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 16\u041c\u0413\u0446 (\u0434\u0430-\u0434\u0430, \u0432\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u0432\u0435\u0440\u0445\u043d\u0438\u0437\u043a\u043e\u0433\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0442\u0430\u043a\u0438\u0435) \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u0443, \u0442.\u0435. \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u043e\u0432 8 RAM \u0438 256 Flash. \u041a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u043e\u0432, \u041a\u0430\u0440\u043b. \u0418 \u0432 \u044d\u0442\u0438 \u0443\u043d\u044b\u043b\u044b\u0435 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 800\u0445600 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043e\u0442\u0442\u0435\u043d\u043a\u0430\u0445 \u0441\u0435\u0440\u043e\u0433\u043e. \u0411\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0438\u0432 \u0432 \u0443\u043c\u0435 800 \u043d\u0430 600 \u0438 \u043d\u0430 2 \u0431\u0438\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 120 \u0442\u044b\u0441\u044f\u0447 \u0431\u0430\u0439\u0442\u043e\u0432. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442. \u041d\u0430\u0434\u043e \u0441\u0436\u0438\u043c\u0430\u0442\u044c.<\/p>\n<p>  \u0422\u0430\u043a \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430: \u00ab\u043a\u0430\u043a \u0441\u0436\u0430\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0442\u0430\u00bb? \u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u0442\u0430? \u0414\u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430 \u043a\u043e\u0442\u0438\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438, \u043d\u0430 \u0447\u0435\u043c \u0436\u0435 \u0435\u0449\u0435 \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c. \u041d\u0435 \u043d\u0430 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432\u044b\u0445 \u0431\u0430\u043d\u043a\u043d\u043e\u0442\u0430\u0445 \u0436\u0435.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-270263","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270263","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=270263"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270263\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=270263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=270263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=270263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}