{"id":312559,"date":"2020-11-04T21:00:34","date_gmt":"2020-11-04T21:00:34","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=312559"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=312559","title":{"rendered":"\u041e \u043a\u044d\u0448\u0430\u0445 \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 ARM"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c92\/874\/069\/c92874069b4e49d4ae65eb48e6d6af19.png\" alt=\"image\" align=\"right\"> \u041f\u0440\u0438\u0432\u0435\u0442!<\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/518258\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0432 <a href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a> \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0439 \u043a\u044d\u0448. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u00abwrite-through\u00bb. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u0445 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u00abwrite-through\u00bb \u0440\u0435\u0436\u0438\u043c\u043e\u043c, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b \u043b\u0438\u0448\u044c \u0431\u0435\u0433\u043b\u044b\u0439 \u043e\u0431\u0437\u043e\u0440. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f, \u043a\u0430\u043a \u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0438\u043f\u044b \u043a\u044d\u0448\u0435\u0439 \u0432 ARM \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u0438 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041d\u0430\u0447\u043d\u0443 \u0441 \u0442\u043e\u0433\u043e \u043d\u0430 \u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0435 \u043c\u0435\u0436\u0434\u0443 \u00abwrite-back\u00bb \u0438 \u00abwrite-through\u00bb \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e:<\/p>\n<ul>\n<li>\u00abWrite-back\u00bb. \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u0434\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u044d\u0448. \u0420\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u043a\u044d\u0448 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<li>\u00abWrite-through\u00bb. \u0417\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u201c\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u201d \u0438 \u0432 \u043a\u044d\u0448 \u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>Write-through<\/h3>\n<p>  \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 write-through \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u0443\u0434\u0442\u043e \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0441\u0430\u043c STM \u0432 \u044d\u0442\u043e\u043c <a href=\"https:\/\/www.st.com\/resource\/en\/application_note\/dm00272913-level-1-cache-on-stm32f7-series-and-stm32h7-series-stmicroelectronics.pdf\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435<\/a> \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a:  <\/p>\n<blockquote><p>Write-through: triggers a write to the memory as soon as the contents on the cache line are written to. This is safer for the data coherency, but it requires more bus accesses. In practice, the write to the memory is done in the background and has a little effect unless the same cache set is being accessed repeatedly and very quickly. It is always a tradeoff.<\/p><\/blockquote>\n<p> \u0422\u043e \u0435\u0441\u0442\u044c, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438, \u0447\u0442\u043e \u0440\u0430\u0437 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u0442\u043e \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u0431\u0435\u0437 \u043a\u044d\u0448\u0430, \u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0447\u0442\u0435\u043d\u0438\u0439. \u041e\u0434\u043d\u0430\u043a\u043e, STM \u044d\u0442\u043e \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u0430\u0435\u0442, \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u201c\u0432 \u0444\u043e\u043d\u0435\u201d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u00abwrite-back\u00bb. \u042d\u0442\u043e, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 (FMC).<\/p>\n<p>  \u041c\u0438\u043d\u0443\u0441\u044b \u0440\u0435\u0436\u0438\u043c\u0430 \u00abwrite-through\u00bb:<\/p>\n<ul>\n<li>\u041f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u0438\u0436\u0430\u0442\u044c\u0441\u044f. \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u00abwrite-back\u00bb \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0443\u0442, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043b\u044e\u0441\u043e\u043c. <\/li>\n<li>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u00abwrite-back\u00bb \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c cache invalidate \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f DMA \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <\/li>\n<li>\u0411\u0430\u0433 \u201cData corruption in a sequence of Write-Through stores and loads\u201d \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Cortex-M7. \u041d\u0430\u043c <a href=\"https:\/\/github.com\/embox\/embox\/pull\/2139#discussion_r468947327\">\u0443\u043a\u0430\u0437\u0430\u043b<\/a> \u043d\u0430 \u043d\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 LVGL. <\/li>\n<\/ul>\n<p>  <\/p>\n<h3>Write-back<\/h3>\n<p>  \u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u00abwrite-through\u00bb) \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e \u0437\u0430\u043f\u0438\u0441\u0438, \u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u044d\u0448. \u041a\u0430\u043a \u0438 \u0443 \u00abwrite-through\u00bb, \u0443 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u201c\u043f\u043e\u0434 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u201d \u2014 1) \u00abwrite allocate\u00bb, 2) \u00abno write allocate\u00bb. \u041e\u0431 \u044d\u0442\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<h3>Write Allocate<\/h3>\n<p>  \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432 \u043a\u044d\u0448\u0430\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u00abread allocate\u00bb \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u043f\u0440\u043e\u043c\u0430\u0445\u0443 (cache miss) \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u044d\u0448\u0435. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043f\u0440\u0438 \u043f\u0440\u043e\u043c\u0430\u0445\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u044d\u0448 (\u00abwrite allocate\u00bb) \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f (\u00abno write allocate\u00bb). <\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u201cwrite-back write allocate\u201d \u0438\u043b\u0438 \u201cwrite-through no write allocate\u201d. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u00abwrite allocate\u00bb, \u0430 \u0432 \u043a\u0430\u043a\u0438\u0445 \u00abno write allocate\u00bb.<\/p>\n<h3>MPU<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0436\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043a\u044d\u0448\u0430 (\u0438\u043b\u0438 \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f) \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARMv7-M \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <i>MPU<\/i> (Memory Protection Unit).<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 MPU \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARMV7-M \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e 16 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c: \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (read\/write\/execute \u0438 \u0442.\u0434.), \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u2014 TEX, cacheable, bufferable, shareable, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c cache_clean\/cache_invalidate \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0432 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 DMA \u0438 \u043f\u043e\u043c\u0435\u0442\u0438\u0432 \u044d\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u0430\u043a \u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0443\u044e.<\/p>\n<p>  \u041d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 MPU:  <\/p>\n<blockquote><p>The base address, size and attributes of a region are all configurable, with the general rule that all regions are naturally aligned. This can be stated as: <br \/>  RegionBaseAddress[(N-1):0] = 0, where N is log2(SizeofRegion_in_bytes)<\/p><\/blockquote>\n<p> \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d \u043d\u0430 \u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0440\u0435\u0433\u0438\u043e\u043d 16 \u041a\u0431, \u0442\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430 16 \u041a\u0431. \u0415\u0441\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0430\u043c\u044f\u0442\u0438 64 \u041a\u0431, \u0442\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043d\u0430 64 \u041a\u0431. \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e MPU \u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u201c\u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c\u201d \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 (\u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435).<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0432 STM32Cube \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043e\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">  MPU_InitStruct.BaseAddress = 0x20010000;   MPU_InitStruct.Size = MPU_REGION_SIZE_256KB; <\/code><\/pre>\n<p>  \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d \u043d\u0430 64 \u041a\u0431. \u0410 \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0445\u043e\u0442\u0438\u043c 256 \u041a\u0431. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c 3 \u0440\u0435\u0433\u0438\u043e\u043d\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 64 \u041a\u0431, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 128 \u041a\u0431, \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 64 \u041a\u0431.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432\u0441\u0435\u0445 \u043f\u0430\u043c\u044f\u0442\u0435\u0439 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a\u044d\u0448\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARM. \u0415\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u043c\u044f\u0442\u044c SRAM STM32F7 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u201cwrite-back write-allocate\u201d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e), \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0435\u0439, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 MPU. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u0435\u0433\u0438\u043e\u043d \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u0412\u044b\u0434\u0435\u043b\u0438\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/p>\n<h3>TCM<\/h3>\n<p>  \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 <a href=\"https:\/\/www.st.com\/resource\/en\/reference_manual\/dm00124865-stm32f75xxx-and-stm32f74xxx-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> (\u0440\u0430\u0437\u0434\u0435\u043b 2.3 Embedded SRAM), \u043f\u0435\u0440\u0432\u044b\u0435 64 \u041a\u0431 SRAM \u0432 STM32F7 \u043d\u0435\u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u0435. \u0412 \u0441\u0430\u043c\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARMv7-M \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x20000000 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c SRAM. TCM \u0442\u043e\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a SRAM, \u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0448\u0438\u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043c\u044f\u0442\u0435\u0439 (SRAM1 \u0438 SRAM2), \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u201c\u0431\u043b\u0438\u0436\u0435\u201d \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u0430\u044f, \u043f\u043e \u0441\u0443\u0442\u0438 \u0434\u0435\u043b\u0430, \u0438\u043c\u0435\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043a\u0430\u043a \u0438 \u043a\u044d\u0448. \u0418 \u0438\u0437 \u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0438 \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d \u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u043c. \u041f\u043e \u0441\u0443\u0442\u0438 TCM \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043a\u044d\u0448.<\/p>\n<h3>Instruction cache<\/h3>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u044d\u0448\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 (D-Cache). \u041d\u043e \u043a\u0440\u043e\u043c\u0435 \u043a\u044d\u0448\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 ARMv7-M \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0438 \u043a\u044d\u0448 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u2014 Instruction cache (I-Cache). I-Cache \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 (\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445) \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u043a\u044d\u0448, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0447\u0435\u043c FLASH, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, QSPI.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0441 \u043a\u044d\u0448\u0435\u043c \u043d\u0438\u0436\u0435, \u043c\u044b \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c I-Cache \u0438 \u0431\u0443\u0434\u0435\u043c \u0434\u0443\u043c\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f I-Cache \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b MPU \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 D-Cache.<\/p>\n<h3>\u0421\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0442\u0435\u0441\u0442\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0438 \u0441\u0444\u0435\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438. \u041a\u0430\u043a \u044f \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0432\u044b\u0448\u0435, \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c I-Cache \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 D-Cache. \u0422\u0430\u043a \u0436\u0435 \u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e \u0441 -O0, \u0447\u0442\u043e\u0431\u044b \u0446\u0438\u043a\u043b\u044b \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0430\u043c\u044f\u0442\u044c SDRAM. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MPU \u044f \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u043b \u0440\u0435\u0433\u0438\u043e\u043d 64 \u041a\u0431, \u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u043e\u043d\u0443 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. <\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u0441\u0442\u044b \u0441 \u043a\u044d\u0448\u0430\u043c\u0438 \u043e\u0447\u0435\u043d\u044c \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u044b\u0435 \u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u0434 \u0432\u043b\u0438\u044f\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0433\u043e \u0438 \u0432\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u2014 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043e\u0434 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c \u0438 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0422\u0430\u043a \u0436\u0435, \u0437\u0430\u043c\u0435\u0440\u044f\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0431\u0443\u0434\u0435\u043c \u043d\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430\u043c\u0438, \u0430 DWT (Data Watchpoint and Trace unit), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u0442\u0430\u043a\u0442\u043e\u0432. \u041d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 (\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430) \u043b\u044e\u0434\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u0445. \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 216 \u041c\u0413\u0446, \u043d\u043e \u0434\u043e 20 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u043c\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u044b \u0432 \u044d\u0442\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043d\u0443\u043b\u044f\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0442\u0430\u043a\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c.<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u0442\u0435\u0441\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/embox\/embox\/blob\/master\/platform\/stm32_tests\/cmds\/cpu_cache\/cpu_cache_test.c\">\u0442\u0443\u0442<\/a>. \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 <a href=\"https:\/\/www.st.com\/en\/evaluation-tools\/32f769idiscovery.html\">32F769IDISCOVERY<\/a>.<\/p>\n<h4>Non-cacheable memory VS. write-back<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0448\u0435\u043c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">    dst = (uint8_t *) DATA_ADDR;      for (i = 0; i &lt; ITERS * 8; i++) {         for (j = 0; j &lt; DATA_LEN; j++) {             *dst = VALUE;             dst++;         }         dst -= DATA_LEN;     } <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0448\u0435\u043c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u043e \u043d\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0437\u0430 \u0440\u0430\u0437, \u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0435\u043c \u0446\u0438\u043a\u043b\u044b.<\/p>\n<pre><code class=\"cpp\">    for (i = 0; i &lt; ITERS * BLOCKS * 8; i++) {         for (j = 0; j &lt; BLOCK_LEN; j++) {             *dst = VALUE;             *dst = VALUE;             *dst = VALUE;             *dst = VALUE;             dst++;         }         dst -= BLOCK_LEN;     } <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0448\u0435\u043c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0449\u0435 \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c.<\/p>\n<pre><code class=\"cpp\">    for (i = 0; i &lt; ITERS * BLOCKS * 8; i++) {         dst = (uint8_t *) DATA_ADDR;          for (j = 0; j &lt; BLOCK_LEN; j++) {             val = VALUE;             *dst = val;             val = *dst;             dst++;         }     } <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430, \u0442\u043e \u043e\u043d\u0438 \u0434\u0430\u0434\u0443\u0442 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u043a\u043e\u0439 \u0431\u044b \u0440\u0435\u0436\u0438\u043c \u0432\u044b \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043b\u0438:<\/p>\n<pre><code class=\"plaintext\">mode: nc, iters=100, data len=65536, addr=0x60100000 Test1 (Sequential write):   0s 728ms Test2 (Sequential write with 4 writes per one iteration):   7s 43ms Test3 (Sequential read\/write):   1s 216ms<\/code><\/pre>\n<p>  \u0418 \u044d\u0442\u043e \u0440\u0435\u0437\u043e\u043d\u043d\u043e, SDRAM \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0443\u0436 \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u044b FMC, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044f \u043e\u0436\u0438\u0434\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0432 \u0446\u0438\u0444\u0440\u0430\u0445, \u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u0435\u0435 \u043d\u0430 \u044d\u0442\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u043d\u0435\u0442. \u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u0431\u0443\u0434\u0435\u043c \u0434\u0443\u043c\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u201c\u043f\u043e\u0434\u043f\u043e\u0440\u0442\u0438\u0442\u044c\u201d \u0436\u0438\u0437\u043d\u044c SDRAM \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0435\u043c \u0446\u0438\u043a\u043b\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0435\u0449\u044c \u043a\u0430\u043a \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430:<\/p>\n<pre><code class=\"cpp\">    for (i = 0; i &lt; ITERS * BLOCKS; i++) {         for (j = 0; j &lt; BLOCK_LEN; j++) {             \/\/ 16 lines             arr[i]++;             arr[i]++; \t***             arr[i]++;         }     } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"plaintext\">\u041d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c:   4s 743ms Write-back:                     :   4s 187ms <\/code><\/pre>\n<p>  \u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435 \u2014 \u0441 \u043a\u044d\u0448\u0435\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043f\u043e\u043b \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u0439. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0435\u0449\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0442\u0435\u0441\u0442 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u201c\u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u043c\u201d \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">    for (i = 0; i &lt; ITERS * BLOCKS; i++) {         for (j = 0; j &lt; BLOCK_LEN; j++) {             arr[i + 0 ]++;             ***             arr[i + 3 ]++;             arr[i + 4 ]++;             arr[i + 100]++;             arr[i + 6 ]++;             arr[i + 7 ]++;             ***             arr[i + 15]++;         }     } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"plaintext\">\u041d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c:   11s 371ms Write-back:                     :   4s 551ms <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 \u043a\u044d\u0448\u0435\u043c \u0441\u0442\u0430\u043b\u0430 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u043d\u0430! \u0418 \u0432 \u0434\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0432\u0432\u0435\u0434\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441:<\/p>\n<pre><code class=\"cpp\">    for (i = 0; i &lt; ITERS * BLOCKS; i++) {         for (j = 0; j &lt; BLOCK_LEN; j++) {             arr[i + 0 ]++;             ***             arr[i + 4 ]++;             arr[i + 100]++;             arr[i + 6 ]++;             ***             arr[i + 9 ]++;             arr[i + 200]++;             arr[i + 11]++;             arr[i + 12]++;             ***             arr[i + 15]++;         }     } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"plaintext\">\u041d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c:   12s 62ms Write-back:                     :   4s 551ms <\/code><\/pre>\n<p>  \u0412\u0438\u0434\u0438\u043c \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434\u0440\u043e\u0441\u043b\u043e \u0435\u0449\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0434\u043b\u044f \u043a\u044d\u0448\u0430 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u043c.<\/p>\n<h3>Write allocate VS. no write allocate<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u201cwrite allocate\u201d. \u0422\u0443\u0442 \u0435\u0449\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0439 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443, \u0442.\u043a. \u0435\u0441\u043b\u0438 \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u201cwrite-back\u201d \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u044b \u0443\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 4-\u0433\u043e \u0442\u0435\u0441\u0442\u0430, \u0442\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u201cwrite allocate\u201d \u0438 \u201cno write allocate\u201d \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u0435 \u0432\u0441\u043a\u0440\u044b\u043b\u0438\u0441\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c \u2014 \u043a\u043e\u0433\u0434\u0430 \u201cwrite allocate\u201d \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0439? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0430\u043b\u043e. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u201cno write allocate\u201d \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0430\u0445\u0438, \u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0447\u0442\u0435\u043d\u0438\u044e \u0432 \u043a\u044d\u0448 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">    for (i = 0; i &lt; ITERS * BLOCKS; i++) {         for (j = 0; j &lt; BLOCK_LEN; j++) {             arr[j + 0 ]  = VALUE;             ***             arr[j + 7 ]  = VALUE;             arr[j + 8 ]  = arr[i % 1024 + (j % 256) * 128];             arr[j + 9 ]  = VALUE;             ***             arr[j + 15 ]  = VALUE;         }     } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432 15 \u0438\u0437 16 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 VALUE, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 (\u0438 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e) \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 arr[i % 1024 + (j % 256) * 128]. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 no write allocate \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u044d\u0448. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f (i % 1024 + (j % 256) * 128) \u2014 \u201c\u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438\u201d FMC\/SDRAM. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c (\u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c) \u0430\u0434\u0440\u0435\u0441\u0430\u043c, \u043c\u043e\u0433\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"plaintext\">Write-back                                           :   4s 720ms Write-back no write allocate:               :   4s 888ms <\/code><\/pre>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0443, \u043f\u0443\u0441\u0442\u044c \u0438 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u0443\u044e, \u043d\u043e \u0443\u0436\u0435 \u0432\u0438\u0434\u0438\u043c\u0443\u044e. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0430 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430\u0441\u044c.<\/p>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u0430\u043c\u044b\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0439, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u043b\u0443\u0447\u0430\u0439. \u0425\u043e\u0442\u0438\u043c \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u201cno write allocate\u201d \u043b\u0443\u0447\u0448\u0435 \u0447\u0435\u043c \u201cwrite allocate\u201d. \u041f\u0435\u0440\u0432\u044b\u0439 \u043b\u0443\u0447\u0448\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u201c\u0447\u0430\u0441\u0442\u043e\u201d \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0430\u0434\u0440\u0435\u0441\u0430\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u0422\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043a\u044d\u0448. <\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0442\u0435\u0441\u0442\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u201cwrite allocate\u201d \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u0447\u0442\u0435\u043d\u0438\u044e \u0438 \u043f\u043e \u0437\u0430\u043f\u0438\u0441\u0438. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043c\u0430\u0441\u0441\u0438\u0432 \u201carr2\u201d \u043d\u0430 64 \u041a\u0431, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u044d\u0448 \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u0430\u0447\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435 \u0441 \u201cno write allocate\u201d \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043c\u0430\u0441\u0441\u0438\u0432 \u201carr\u201d \u043d\u0430 4096 \u0431\u0430\u0439\u0442, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0432 \u043a\u044d\u0448, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u044d\u0448\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443\u0442. \u0417\u0430 \u0441\u0447\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448.<\/p>\n<pre><code class=\"cpp\">    arr = (uint8_t *) DATA_ADDR;     arr2 = arr;      for (i = 0; i &lt; ITERS * BLOCKS; i++) {         for (j = 0; j &lt; BLOCK_LEN; j++) {             arr2[i * BLOCK_LEN            ] = arr[j + 0 ];             arr2[i * BLOCK_LEN + j*32 + 1 ] = arr[j + 1 ];             arr2[i * BLOCK_LEN + j*64 + 2 ] = arr[j + 2 ];             arr2[i * BLOCK_LEN + j*128 + 3] = arr[j + 3 ];             arr2[i * BLOCK_LEN + j*32 + 4 ] = arr[j + 4 ];             ***             arr2[i * BLOCK_LEN + j*32 + 15] = arr[j + 15 ];         }     } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"plaintext\">Write-back                                           :   7s 601ms Write-back no write allocate:               :   7s 599ms <\/code><\/pre>\n<p>  \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u201cwrite-back\u201d \u201cwrite allocate\u201d \u0440\u0435\u0436\u0438\u043c \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0439. \u041d\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0439.<\/p>\n<p>  \u041b\u0443\u0447\u0448\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0443 \u043c\u0435\u043d\u044f \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043d\u043e \u044f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0431\u043e\u043b\u0435\u0435 \u043e\u0449\u0443\u0442\u0438\u043c\u0430. \u0427\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b!<\/p>\n<h3>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/h3>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043e\u0442 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<h4>ping<\/h4>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u2014 \u044d\u0442\u043e ping. \u0415\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0430 \u0432\u0440\u0435\u043c\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. Embox \u0431\u044b\u043b \u0441\u043e\u0431\u0440\u0430\u043d \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 -O2. \u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<pre><code class=\"plaintext\">\u041d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c  :  ~0.246 c Write-back                        :  ~0.140 c <\/code><\/pre>\n<p>  <\/p>\n<h3>OpenCV<\/h3>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b cache \u044d\u0442\u043e <a href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/457724\/\">OpenCV \u043d\u0430 STM32F7<\/a>. \u0412 \u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0438\u0437\u043a\u0430\u044f. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 Canny. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u0440\u0438\u043c \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u0435\u0448\u0430\u043c\u0438 (\u0438 D-cache \u0438 I-cache) \u0438 \u0431\u0435\u0437.<\/p>\n<pre><code class=\"cpp\">   gettimeofday(&amp;tv_start, NULL);      cedge.create(image.size(), image.type());     cvtColor(image, gray, COLOR_BGR2GRAY);      blur(gray, edge, Size(3,3));     Canny(edge, edge, edgeThresh, edgeThresh*3, 3);     cedge = Scalar::all(0);      image.copyTo(cedge, edge);      gettimeofday(&amp;tv_cur, NULL);     timersub(&amp;tv_cur, &amp;tv_start, &amp;tv_cur); <\/code><\/pre>\n<p>  \u0411\u0435\u0437 \u043a\u044d\u0448\u0430:<\/p>\n<pre><code class=\"plaintext\">&gt; edges fruits.png 20  Processing time 0s 926ms Framebuffer: 800x480 32bpp Image: 512x269; Threshold=20 <\/code><\/pre>\n<p>  \u0421 \u043a\u044d\u0448\u0435\u043c:<\/p>\n<pre><code class=\"plaintext\">&gt; edges fruits.png 20  Processing time 0s 134ms Framebuffer: 800x480 32bpp Image: 512x269; Threshold=20 <\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c, 926ms \u0438 134ms \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432 7 \u0440\u0430\u0437.<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e OpenCV \u043d\u0430 STM32, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f FPS \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439, \u043d\u043e 5 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c.<\/p>\n<h3>\u041d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0438\u043b\u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u043e \u0441 cache invalidate?<\/h3>\n<p>  \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f DMA, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u043d\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0432\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u201cwrite-through\u201d. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0443\u0441\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 DMA. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u043b\u0435\u043a\u0443\u0441\u044c. \u0412 Linux \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 <i>dma_coherent_alloc()<\/i>. \u0418 \u0434\u0430, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0432 \u041e\u0421, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u0442\u0430\u043f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0434\u043e\u0439\u0442\u0438 \u0434\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0430 \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e \u0432\u0441\u0435\u043c \u0448\u0430\u043f\u043a\u0430\u043c\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0431\u0443\u0444\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p>  \u0410 \u0435\u0441\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0438 \u043a\u043e\u0433\u0434\u0430 \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435 \u0441 DMA \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u0435\u043d clean\/invalidate? \u0414\u0430, \u0435\u0441\u0442\u044c. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0441 \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/518258\/\">\u043f\u043e\u0431\u0443\u0434\u0438\u043b\u0430<\/a> \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 cache (). \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0431\u0443\u0444\u0435\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0430 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u0440\u0438\u0441\u0443\u0435\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u0434\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443. \u0415\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u043e\u0439, \u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c clean \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043e\u0442\u0434\u0430\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0432 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0438\u0434\u0430 \u043a\u044d\u0448\u0435\u0439 \u0432 ARMv7m: write-back, write-through, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u201cwrite allocate\u201d \u0438 \u201cno write allocate\u201d. \u041f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0440\u0435\u0436\u0438\u043c \u043b\u0443\u0447\u0448\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441 ping \u0438 OpenCV. \u0412 Embox \u043c\u044b \u0435\u0449\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0425\u043e\u0442\u044f \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u044d\u0448\u0435\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u044b.<\/p>\n<p>  \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u0431\u0440\u0430\u0432 <a href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a> \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p>  <b>P.S.<\/b> <\/p>\n<p>  <b>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0442\u0435\u043c\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 OSDev, \u0442\u043e \u0443\u0436\u0435 \u0437\u0430\u0432\u0442\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f <a href=\"https:\/\/osday.ru\/\">OS Day<\/a>! \u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043e\u043d\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0435! Embox \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0437\u0430\u0432\u0442\u0440\u0430 \u0432 12.00 <\/b><\/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\/company\/embox\/blog\/526470\/\"> https:\/\/habr.com\/ru\/company\/embox\/blog\/526470\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c92\/874\/069\/c92874069b4e49d4ae65eb48e6d6af19.png\" alt=\"image\" align=\"right\"> \u041f\u0440\u0438\u0432\u0435\u0442!<\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/518258\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0432 <a href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a> \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0439 \u043a\u044d\u0448. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u00abwrite-through\u00bb. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u0445 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u00abwrite-through\u00bb \u0440\u0435\u0436\u0438\u043c\u043e\u043c, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b \u043b\u0438\u0448\u044c \u0431\u0435\u0433\u043b\u044b\u0439 \u043e\u0431\u0437\u043e\u0440. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f, \u043a\u0430\u043a \u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0438\u043f\u044b \u043a\u044d\u0448\u0435\u0439 \u0432 ARM \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u0438 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c.  <\/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-312559","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312559","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=312559"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312559\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}