{"id":298418,"date":"2020-02-09T09:00:15","date_gmt":"2020-02-09T09:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=298418"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-02-09T09:00:15","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=298418","title":{"rendered":"\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u0437\u0430\u043c\u0435\u0442\u043a\u0438 embed-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430: \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430"},"content":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/487604\/\">\n<h2>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/h2>\n<p>  \u0415\u0441\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0431\u0430\u0437\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442 stm32f405rgt6). \u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441) \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (CLI \u043c\u0435\u043d\u044e \u0438\u043b\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b). \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 (\u0442\u0430\u043a \u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432). <br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0430<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0414\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 RAM (\u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0431\u044a\u0435\u043c \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043e 3 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430).<\/li>\n<li>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0434\u0432\u0443\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445 \u0432\u043e flash \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/li>\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f CRC32, \u043b\u0435\u0436\u0430\u0449\u0435\u0439 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/li>\n<li>\u041f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432\u043e flash \u043f\u0430\u043c\u044f\u0442\u0438 (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 2 \u043a\u0431, \u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043f\u043e 128 \u043a\u0431, \u0442\u043e \u0432\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0442\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a)<\/li>\n<li>\u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0435\u0441\u043b\u0438 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/li>\n<\/ul>\n<h2>\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0412 GCC (\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438) \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u043b\u0430\u0433 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043f\u0438\u0438 \u0441\u0435\u043a\u0446\u0438\u0438. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c LD \u0441\u043a\u0440\u0438\u043f\u0442 &lt;&lt;\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438&gt;&gt; \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 objcopy, \u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u044f\u0432\u043d\u044b\u0439 \u0438 \u0432\u0435\u0434\u0435\u0442 \u043a \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u043b\u043e\u0432\u0438\u043c\u044b\u043c \u043e\u0448\u0438\u0431\u043a\u0430\u043c. <\/p>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u044f\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 \u043d\u0443\u0436\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u0442.\u0434.) \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u0441\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043f\u0438\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0434 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 RAM, 2 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445 flash-\u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0438 \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u043f\u043e\u0434 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f).  <\/p>\n<pre><code class=\"cpp\">#define USER_CFG_DATA_STRUCT(TYPE,NAME,...) \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_ram_page&quot;))) \\     TYPE NAME = __VA_ARGS__; \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_flash_default_page&quot;))) \\     TYPE flash_default_page_##NAME = __VA_ARGS__; \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_flash_page_1&quot;))) \\     TYPE flash_page_1_##NAME = __VA_ARGS__; \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_flash_page_2&quot;))) \\     TYPE flash_page_2_##NAME = __VA_ARGS__;<\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u043c\u0430\u043a\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043e 4 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438. \u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f) \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0431\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 (\u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u0438\u043c\u044f), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 RAM (\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0435).<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:  <\/p>\n<pre><code class=\"cpp\">typedef struct _test_st {     uint32_t a1;     uint32_t a2; } test_st_t;  USER_CFG_DATA_STRUCT(test_st_t, name_st, {     .a1 = 1,     .a2 = 2 })<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b name_st \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u0441\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043f\u0438\u0439 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439<\/h3>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u0414\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0436\u0435 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.  <\/p>\n<pre><code class=\"cpp\">#define USER_CFG_DATA_VAR USER_CFG_DATA_STRCUT #define USER_CFG_DATA_ARRAY(TYPE,NAME,SIZE,...) \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_ram_page&quot;))) \\     TYPE NAME[SIZE] = __VA_ARGS__; \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_flash_default_page&quot;))) \\     TYPE flash_default_page_##NAME[SIZE] = __VA_ARGS__; \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_flash_page_1&quot;))) \\     TYPE flash_page_1_##NAME[SIZE] = __VA_ARGS__; \\     __attribute__((aligned(4), section (&quot;.user_cfg_data_flash_page_2&quot;))) \\     TYPE flash_page_2_##NAME[SIZE] = __VA_ARGS__;<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<h3>\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 LD \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h3>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043f\u0438\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445 \u043e\u043d\u0438 \u043b\u0435\u0436\u0430\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u0435\u043a\u0446\u0438\u0438 \u0432 LD \u0441\u043a\u0440\u0438\u043f\u0442\u0435. \u0414\u043b\u044f F4 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 LD \u0441\u043a\u0440\u043f\u0438\u0442 \u043e\u0442 ST \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">LD \u0441\u043a\u0440\u0438\u043f\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">MEMORY {     FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K - 256K \/* 256 \u041a\u0411 \u0434\u043b\u044f user_cfg *\/    USER_CFG_PAGE_1 (rx) : ORIGIN = 0x080C0000, LENGTH = 128K - 4     \/* 4 \u0411\u0430\u0439\u0442\u0430 CRC32 *\/     USER_CFG_PAGE_2 (rx) : ORIGIN = 0x080E0000, LENGTH = 128K - 4     \/* 4 \u0411\u0430\u0439\u0442\u0430 CRC32 *\/     CCM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K     RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K } <\/code><\/pre>\n<pre><code class=\"cpp\">\/* \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043f\u043e\u043b\u044f \u043f\u043e\u0434 CRC32.    \u0410 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. \u0427\u0442\u043e\u0431\u044b \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0435 \u0437\u0430\u043b\u0435\u0437\u0435\u0442 - \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c. *\/ user_cfg_data_flash_page_1_size = LENGTH(user_cfg_PAGE_1) + 4; user_cfg_data_flash_page_2_size = LENGTH(user_cfg_PAGE_2) + 4; user_cfg_data_flash_page_size = user_cfg_data_flash_page_1_size;  \/*  * The '__stack' definition is required by crt0, do not remove it.  *\/ __stack = ORIGIN(RAM) + LENGTH(RAM);  _estack = __stack;     \/* STM specific definition *\/  \/*  * Default stack sizes.  * These are used by the startup in order to allocate stacks  * for the different modes.  *\/  __Main_Stack_Size = 1024 ;  PROVIDE ( _Main_Stack_Size = __Main_Stack_Size ) ;  __Main_Stack_Limit = __stack  - __Main_Stack_Size ;  \/*&quot;PROVIDE&quot; allows to easily override these values from an object file or the command line. *\/ PROVIDE ( _Main_Stack_Limit = __Main_Stack_Limit ) ;  \/*  * There will be a link error if there is not this amount of  * RAM free at the end.  *\/ _Minimum_Stack_Size = 512 ;  \/*  * Default heap definitions.  * The heap start immediately after the last statically allocated  * .sbss\/.noinit section, and extends up to the main stack limit.  *\/ PROVIDE ( _Heap_Begin = _end_noinit ) ; PROVIDE ( _Heap_Limit = __stack - __Main_Stack_Size ) ;  SECTIONS {     .isr_vector :     {         KEEP(*(.isr_vector))         \/* Interrupt vectors *\/         KEEP(*(.cfmconfig))            \/* Freescale configuration words *\/         *(.after_vectors .after_vectors.*)    \/* Startup code and ISR *\/         . = ALIGN(4);     } &gt;FLASH      .inits :     {         . = ALIGN(4);          \/*          * These are the old initialisation sections, intended to contain          * naked code, with the prologue\/epilogue added by crti.o\/crtn.o          * when linking with startup files. The standalone startup code          * currently does not run these, better use the init arrays below.          *\/         KEEP(*(.init))         KEEP(*(.fini))          . = ALIGN(4);          \/*          * The preinit code, i.e. an array of pointers to initialisation          * functions to be performed before constructors.          *\/         PROVIDE_HIDDEN (__preinit_array_start = .);          \/*          * Used to run the SystemInit() before anything else.          *\/         KEEP(*(.preinit_array_sysinit .preinit_array_sysinit.*))          \/*          * Used for other platform inits.          *\/         KEEP(*(.preinit_array_platform .preinit_array_platform.*))          \/*          * The application inits. If you need to enforce some order in          * execution, create new sections, as before.          *\/         KEEP(*(.preinit_array .preinit_array.*))          PROVIDE_HIDDEN (__preinit_array_end = .);          . = ALIGN(4);          \/*          * The init code, i.e. an array of pointers to static constructors.          *\/         PROVIDE_HIDDEN (__init_array_start = .);         KEEP(*(SORT(.init_array.*)))         KEEP(*(.init_array))         PROVIDE_HIDDEN (__init_array_end = .);          . = ALIGN(4);          \/*          * The fini code, i.e. an array of pointers to static destructors.          *\/         PROVIDE_HIDDEN (__fini_array_start = .);         KEEP(*(SORT(.fini_array.*)))         KEEP(*(.fini_array))         PROVIDE_HIDDEN (__fini_array_end = .);         . = ALIGN(4);      } &gt;FLASH      \/*      * For some STRx devices, the beginning of the startup code      * is stored in the .flashtext section, which goes to FLASH.      *\/     .flashtext :     {         . = ALIGN(4);         *(.flashtext .flashtext.*)    \/* Startup code *\/         . = ALIGN(4);     } &gt;FLASH       \/*      * The program code is stored in the .text section,      * which goes to FLASH.      *\/     .text :     {         . = ALIGN(4);          *(.text .text.*)            \/* all remaining code *\/          *(.rodata .rodata.*)         \/* read-only data (constants) *\/          *(vtable)                    \/* C++ virtual tables *\/          KEEP(*(.eh_frame*))          \/*          * Stub sections generated by the linker, to glue together          * ARM and Thumb code. .glue_7 is used for ARM code calling          * Thumb code, and .glue_7t is used for Thumb code calling          * ARM code. Apparently always generated by the linker, for some          * architectures, so better leave them here.          *\/         *(.glue_7)         *(.glue_7t)     } &gt;FLASH      .user_cfg_data_flash_default_page :     {         . = ALIGN(4);         user_cfg_data_flash_default_page_start = .;         KEEP(*(.user_cfg_data_flash_default_page .user_cfg_data_flash_default_page.*))         . = ALIGN(4);         user_cfg_data_flash_default_page_stop = .;     } &gt;FLASH      \/* ARM magic sections *\/     .ARM.extab :        {        *(.ARM.extab* .gnu.linkonce.armextab.*)        } &gt; FLASH         __exidx_start = .;        .ARM.exidx :        {        *(.ARM.exidx* .gnu.linkonce.armexidx.*)        } &gt; FLASH        __exidx_end = .;      . = ALIGN(4);     _etext = .;     __etext = .;      \/*      * This address is used by the startup code to      * initialise the .data section.      *\/     _sidata = _etext;      \/* MEMORY_ARRAY *\/     \/*     .ROarraySection :     {          *(.ROarraySection .ROarraySection.*)     } &gt;MEMORY_ARRAY     *\/      \/*      * The initialised data section.      * The program executes knowing that the data is in the RAM      * but the loader puts the initial values in the FLASH (inidata).      * It is one task of the startup to copy the initial values from      * FLASH to RAM.      *\/     .data  : AT ( _sidata )     {         . = ALIGN(4);          \/* This is used by the startup code to initialise the .data section *\/         _sdata = . ;            \/* STM specific definition *\/         __data_start__ = . ;         *(.data_begin .data_begin.*)          *(.data .data.*)          *(.data_end .data_end.*)          *(.ramfunc*)         . = ALIGN(4);          \/* This is used by the startup code to initialise the .data section *\/         _edata = . ;            \/* STM specific definition *\/         __data_end__ = . ;      } &gt;RAM       \/*      * The uninitialised data section. NOLOAD is used to avoid      * the &quot;section `.bss' type changed to PROGBITS&quot; warning      *\/     .bss (NOLOAD) :     {         . = ALIGN(4);         __bss_start__ = .;         \/* standard newlib definition *\/         _sbss = .;              \/* STM specific definition *\/         *(.bss_begin .bss_begin.*)          *(.bss .bss.*)         *(COMMON)          *(.bss_end .bss_end.*)         . = ALIGN(4);         __bss_end__ = .;        \/* standard newlib definition *\/         _ebss = . ;             \/* STM specific definition *\/     } &gt;RAM      .user_cfg_data_ram_page :     {         . = ALIGN(4);         user_cfg_data_ram_page_start = .;         KEEP(*(.user_cfg_data_ram_page .user_cfg_data_ram_page.*))         . = ALIGN(4);         user_cfg_data_ram_page_stop = .;     } &gt; CCM      user_cfg_data_ram_page_size = user_cfg_data_ram_page_stop - user_cfg_data_ram_page_start;      .user_cfg_data_page_1 :     {         . = ALIGN(4);         user_cfg_data_flash_page_1_start = .;          KEEP(*(.user_cfg_data_flash_page_1 .user_cfg_data_flash_page_1.*))         . = ALIGN(4);         user_cfg_data_flash_page_1_stop = .;     } &gt; user_cfg_PAGE_1      .user_cfg_data_page_2 :     {         . = ALIGN(4);         user_cfg_data_flash_page_2_start = .;          KEEP(*(.user_cfg_data_flash_page_2 .user_cfg_data_flash_page_2.*))         . = ALIGN(4);         user_cfg_data_flash_page_2_stop = .;     } &gt; user_cfg_PAGE_2      .noinit (NOLOAD) :     {         . = ALIGN(4);         _noinit = .;          *(.noinit .noinit.*)           . = ALIGN(4) ;         _end_noinit = .;     } &gt; RAM      \/* Mandatory to be word aligned, _sbrk assumes this *\/     PROVIDE ( end = _end_noinit ); \/* was _ebss *\/     PROVIDE ( _end = _end_noinit );     PROVIDE ( __end = _end_noinit );     PROVIDE ( __end__ = _end_noinit );      \/*      * Used for validation only, do not allocate anything here!      *      * This is just to check that there is enough RAM left for the Main      * stack. It should generate an error if it's full.      *\/     ._check_stack :     {         . = ALIGN(4);         . = . + _Minimum_Stack_Size ;         . = ALIGN(4);     } &gt;RAM       \/* After that there are only debugging sections. *\/      \/* This can remove the debugging information from the standard libraries *\/     \/*     DISCARD :     {      libc.a ( * )      libm.a ( * )      libgcc.a ( * )      }      *\/      \/* Stabs debugging sections.  *\/     .stab          0 : { *(.stab) }     .stabstr       0 : { *(.stabstr) }     .stab.excl     0 : { *(.stab.excl) }     .stab.exclstr  0 : { *(.stab.exclstr) }     .stab.index    0 : { *(.stab.index) }     .stab.indexstr 0 : { *(.stab.indexstr) }     .comment       0 : { *(.comment) }     \/*      * DWARF debug sections.      * Symbols in the DWARF debugging sections are relative to the beginning      * of the section so we begin them at 0.      *\/     \/* DWARF 1 *\/     .debug          0 : { *(.debug) }     .line           0 : { *(.line) }     \/* GNU DWARF 1 extensions *\/     .debug_srcinfo  0 : { *(.debug_srcinfo) }     .debug_sfnames  0 : { *(.debug_sfnames) }     \/* DWARF 1.1 and DWARF 2 *\/     .debug_aranges  0 : { *(.debug_aranges) }     .debug_pubnames 0 : { *(.debug_pubnames) }     \/* DWARF 2 *\/     .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }     .debug_abbrev   0 : { *(.debug_abbrev) }     .debug_line     0 : { *(.debug_line) }     .debug_frame    0 : { *(.debug_frame) }     .debug_str      0 : { *(.debug_str) }     .debug_loc      0 : { *(.debug_loc) }     .debug_macinfo  0 : { *(.debug_macinfo) }     \/* SGI\/MIPS DWARF 2 extensions *\/     .debug_weaknames 0 : { *(.debug_weaknames) }     .debug_funcnames 0 : { *(.debug_funcnames) }     .debug_typenames 0 : { *(.debug_typenames) }     .debug_varnames  0 : { *(.debug_varnames) } } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043b\u0435\u0436\u0438\u0442 \u043d\u0435 \u0432 RAM \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0430 \u0432 CCMRAM, \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0422\u0430\u043a \u0436\u0435 \u0437\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2014 \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 2 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b flash, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 128 \u043a\u0431.<\/p>\n<h3>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043a\u043e\u043f\u0438\u0439<\/h3>\n<p>  \u0417\u0430\u0431\u043e\u0442\u0430 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 RAM \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0435. \u0414\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u0412\u043e flash \u0436\u0435 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438 \u043a\u043e\u043f\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f CRC32 (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0447\u0435\u0442\u0430 CRC32 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0430\u0448 \u043a\u043e\u0434. \u0422\u0430\u043a \u0436\u0435 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438).<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 LD \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:  <\/p>\n<pre><code class=\"cpp\">extern uint32_t user_cfg_data_flash_default_page_start; extern uint32_t user_cfg_data_flash_page_1_start; extern uint32_t user_cfg_data_flash_page_2_start; extern uint32_t user_cfg_data_ram_page_start;  extern uint32_t user_cfg_data_flash_page_size; extern uint32_t user_cfg_data_ram_page_size;<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e <i>user_cfg_data_flash_page_size<\/i> \u0438 <i>user_cfg_data_ram_page_size<\/i> \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0410 \u0432\u043e\u0442 <i>user_cfg_data_flash_page_1_start<\/i> \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435 \u0430\u0434\u0440\u0435\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 &amp;.<\/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=\"https:\/\/habr.com\/ru\/post\/487604\/\"> https:\/\/habr.com\/ru\/post\/487604\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/487604\/\">\n<h2>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/h2>\n<p>  \u0415\u0441\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0431\u0430\u0437\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442 stm32f405rgt6). \u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441) \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (CLI \u043c\u0435\u043d\u044e \u0438\u043b\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b). \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 (\u0442\u0430\u043a \u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432).   <\/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-298418","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/298418","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=298418"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/298418\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=298418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=298418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=298418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}