{"id":486884,"date":"2026-07-10T10:47:25","date_gmt":"2026-07-10T10:47:25","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=486884"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=486884","title":{"rendered":"\u041e\u00a0Raspberry Pi Pico, RP2040\u00a0\u0438 Baremetal"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/658\/1ef\/ffa\/6581efffaca7b67420b9c180e143c80e.jpg\" width=\"2880\" height=\"2507\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/658\/1ef\/ffa\/6581efffaca7b67420b9c180e143c80e.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/658\/1ef\/ffa\/6581efffaca7b67420b9c180e143c80e.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<div class=\"floating-image\">\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u043e\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043e\u0442\u00a0Raspberry Pi Foundation\u00a0\u2014 RP2040\u00a0\u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0432\u0443\u0445 \u044f\u0434\u0435\u0440 ARM Cortex\u2011M0+, \u0438 \u043e\u00a0\u043f\u043b\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0447\u0438\u043f\u0435\u00a0\u2014 Raspberry Pi Pico.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u0430 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b RP2040\u00a0\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0432\u00a0\u0446\u0435\u043b\u043e\u043c.<\/p>\n<p>RP2040\u00a0\u2014 \u043e\u0447\u0435\u043d\u044c \u0434\u0435\u0448\u0435\u0432\u044b\u0439 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (\u041c\u041a) \u0441\u00a0\u0434\u0432\u0443\u0445\u044a\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 USB \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 PIO (Programmable I\/O), \u0447\u0435\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0434\u043b\u044f\u00a0\u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 Macintosh 128K \u0441\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 VGA, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0438 \u043c\u044b\u0448\u0438.<\/p>\n<\/div>\n<p>\u041e\u0431\u0449\u0430\u044f \u0442\u0435\u043e\u0440\u0438\u044f \u043f\u043e\u00a0RP2040\u00a0\u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043f\u043e\u00a0\u0442\u0435\u043c \u0438\u043b\u0438\u00a0\u0438\u043d\u044b\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u0441\u00a0\u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u043d\u044b\u0445: \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0431\u0430\u0437\u0438\u0441 \u0434\u043b\u044f\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c.<\/p>\n<p>\u0412\u0435\u0441\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434\u00a0\u2014\u00a0\u043b\u0438\u0448\u044c \u043c\u043e\u0435 \u043d\u0435\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0434\u043b\u044f\u00a0\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f. \u041e\u0441\u043d\u043e\u0432\u043d\u0443\u044e\u00a0\u0436\u0435 \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u0431\u0435\u0437\u00a0\u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/Shelbyconniy\/RP2040-Baremetal\/tree\/main\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h2>\u0412\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430<\/h2>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u043d\u0430\u00a0MicroPython, CircuitPython, C\/C++ \u0438\u043b\u0438\u00a0\u0432\u00a0\u0441\u0440\u0435\u0434\u0435 Arduino IDE. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430\u00a0\u0421\u0438 (+ \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430), \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043a\u0443\u0440\u0441 \u0432\u0437\u044f\u0442 \u043d\u0430\u00a0\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>Raspberry Pi Foundation \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 Pico C\/C++ SDK. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f\u00a0VS Code \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u00a0\u043a\u043e\u0434\u0435 breakpoint\u2019\u044b, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 SWD \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<p>Pico SDK \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b RP2040\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0438), \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0438\u0445 \u0438\u0434\u0435\u0439, \u0447\u0442\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043e\u0434\u0430 \u043b\u0435\u0433\u043a\u043e\u0439, \u043d\u043e\u00a0\u0431\u043e\u043b\u0435\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f SDK, \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441\u00a0\u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u00a0\u0432\u0430\u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u043c.<\/p>\n<p>RP2040\u00a0\u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0433\u0438\u0431\u043a\u0438\u0439 \u0438 \u043c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u00a0\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0438 \u0434\u043b\u044f\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0431\u0435\u0437\u00a0\u043e\u043f\u043e\u0440\u044b \u043d\u0430\u00a0SDK.<\/p>\n<h2>\u041e\u0431\u0437\u043e\u0440 RP2040\u00a0\u0438 Raspberry Pi Pico<\/h2>\n<p>\u0414\u0430\u0442\u0430\u0448\u0438\u0442 \u043a\u00a0RP2040<a href=\"https:\/\/pip-assets.raspberrypi.com\/categories\/814-rp2040\/documents\/RP-008371-DS-1-rp2040-datasheet.pdf\" rel=\"noopener noreferrer nofollow\"> \u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0430\u0440\u0441\u0435\u043d\u0430\u043b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a1b\/2a3\/798\/a1b2a3798b576a06bfc765486a1520d7.png\" alt=\"\u0420\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 Raspberry Pi Pico\" title=\"\u0420\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 Raspberry Pi Pico\" width=\"2339\" height=\"1654\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a1b\/2a3\/798\/a1b2a3798b576a06bfc765486a1520d7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a1b\/2a3\/798\/a1b2a3798b576a06bfc765486a1520d7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 Raspberry Pi Pico<\/figcaption><\/div>\n<\/figure>\n<div class=\"floating-image\"><\/div>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf3\/064\/da3\/cf3064da33b5d815e10ee87ed2c6060e.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 RP2040\" title=\"\u0421\u0445\u0435\u043c\u0430 RP2040\" width=\"1858\" height=\"1326\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/cf3\/064\/da3\/cf3064da33b5d815e10ee87ed2c6060e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf3\/064\/da3\/cf3064da33b5d815e10ee87ed2c6060e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 RP2040<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e:<\/p>\n<ul>\n<li>\n<p>2\u00a0\u044f\u0434\u0440\u0430 ARM Cortex\u2011M0+ \u0441\u00a0\u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0434\u043e 133\u00a0\u041c\u0413\u0446<\/p>\n<\/li>\n<li>\n<p>264\u041a\u0411 \u041e\u0417\u0423 (SRAM) + 16\u041a\u0411 BootROM<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e 16\u041c\u0411 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 (2\u00a0\u041c\u0411 \u0432\u00a0Pico)<\/p>\n<\/li>\n<li>\n<p>30\u00a0\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 GPIO (25\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432\u00a0Pico)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e 2\u00a0\u0431\u043b\u043e\u043a\u0430 UART, SPI \u0438 I2C<\/p>\n<\/li>\n<li>\n<p>PWM, 12-\u0431\u0438\u0442\u043d\u044b\u0439 ADC, RTC, \u0442\u0430\u0439\u043c\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>DMA\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>USB 2.0\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (Host\/Device)<\/p>\n<\/li>\n<li>\n<p>2\u00a0\u0431\u043b\u043e\u043a\u0430 PIO (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0432\u0432\u043e\u0434\u2011\u0432\u044b\u0432\u043e\u0434)<\/p>\n<\/li>\n<li>\n<p>FIFO\u2011\u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0434\u0440\u0430\u043c\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0438\u0442\u0430\u0435\u0442\u0441\u044f Raspberry Pi Pico \u043e\u0442 1.8\u20135.5\u0412, \u0430\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432\u00a0\u2014 3.3\u0412, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u044c\u0442\u0435 \u0431\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u00a0\u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u0438\u043d\u0430\u043c \u043a\u0430\u043a\u0438\u0445\u2011\u043d\u0438\u0431\u0443\u0434\u044c 5-\u0432\u043e\u043b\u044c\u0442\u043e\u0432\u044b\u0445 \u0430\u0434\u0440\u0443\u0438\u043d\u043e\u0432\u0441\u043a\u0438\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0430\u043b\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0418\u0437 26\u00a0\u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u00a0\u043f\u043b\u0430\u0442\u0435 GPIO \u043f\u0438\u043d\u043e\u0432 25\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f\u00a0\u043c\u043e\u043d\u0442\u0430\u0436\u0430, \u043e\u0434\u0438\u043d \u0437\u0430\u043d\u044f\u0442 \u043f\u043e\u0434\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434. \u0412\u044b\u0432\u0435\u0434\u0435\u043d\u044b \u0442\u0440\u0438 \u043f\u0438\u043d\u0430 \u043f\u043e\u0434\u00a0SWD\u2011\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u00a0\u043f\u043b\u0430\u0442\u0435 \u0440\u0430\u0441\u043f\u0430\u044f\u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u044f\u044f Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u043e\u043c 2\u00a0\u041c\u0411 \u0438 \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 12\u00a0\u041c\u0413\u0446.<\/p>\n<p>RP2040\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 UF2\u00a0\u043e\u0442\u00a0Microsoft. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0447\u0438\u043f \u0432\u00a0\u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u043a\u00a0\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043f\u043e\u00a0USB \u0441\u00a0\u0437\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 SELBOOT. RP2040\u00a0\u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c, \u0438 \u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c \u0432\u00a0\u043e\u043a\u043d\u043e \u0441\u00a0\u0434\u0438\u0441\u043a\u043e\u043c \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435.uf2<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d20\/9a5\/7bf\/d209a57bf24843aa57e5ccfca52224b5.png\" alt=\"Drag and drop\" title=\"Drag and drop\" width=\"1996\" height=\"1370\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d20\/9a5\/7bf\/d209a57bf24843aa57e5ccfca52224b5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d20\/9a5\/7bf\/d209a57bf24843aa57e5ccfca52224b5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Drag and drop<\/figcaption><\/div>\n<\/figure>\n<h3>\u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>\u0410\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/724\/1ca\/cb4\/7241cacb49d630435989c77d98868164.png\" width=\"1236\" height=\"1349\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/724\/1ca\/cb4\/7241cacb49d630435989c77d98868164.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/724\/1ca\/cb4\/7241cacb49d630435989c77d98868164.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<ul>\n<li>\n<p>0\u00d700000000\u2026.\u00a0\u2014 <strong>BootROM<\/strong>: \u0417\u0430\u0448\u0438\u0442\u0430\u044f \u0432\u00a0\u0447\u0438\u043f \u043d\u0430\u00a0\u0437\u0430\u0432\u043e\u0434\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>0\u00d710000000\u2026.\u00a0\u2014 <strong>Flash\u2011XIP<\/strong>: \u0414\u043e\u0441\u0442\u0443\u043f \u043a\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 Read\u2011Only \u0434\u043b\u044f\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u0430 \u043f\u0440\u044f\u043c\u043e \u0438\u0437\u00a0Flash, \u0431\u0435\u0437\u00a0\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u041e\u0417\u0423<\/p>\n<\/li>\n<li>\n<p>0\u00d720000000\u2026.\u00a0\u2014 <strong>SRAM<\/strong>: \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u041c\u041a. \u0417\u0434\u0435\u0441\u044c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p>0\u00d740000000\u2026.\u00a0\u2014 \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u044f\u0434\u0435\u0440 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044f\u044f, RP2040\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <strong>SSI<\/strong> (\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0447\u0435\u0440\u0435\u0437 SPI) \u0434\u043b\u044f\u00a0\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u00a0\u043d\u0435\u0439. \u0421\u00a0\u0435\u0433\u043e\u00a0\u0436\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f <strong>XIP<\/strong> (eXecute\u2011In\u2011Place), \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043a\u0430\u043a\u00a0\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432\u00a0\u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e RP2040, \u043d\u043e\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u0447\u0442\u0435\u043d\u0438\u044f. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0441\u00a0\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u043c \u043d\u0430\u00a0Raspberry Pi Pico, \u0433\u0434\u0435 \u043e\u0431\u044a\u0435\u043c Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 2\u00a0\u041c\u0411.<\/p>\n<p>\u042f\u0434\u0440\u0430 Cortex\u2011M0+ \u043d\u0435\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 FPU, \u043d\u043e\u00a0\u0432\u00a0ROM \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440 \u0432\u044b\u0441\u043e\u043a\u043e\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/51c\/d2c\/844\/51cd2c8445c6736454056e4015e40895.png\" width=\"1846\" height=\"1058\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/51c\/d2c\/844\/51cd2c8445c6736454056e4015e40895.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/51c\/d2c\/844\/51cd2c8445c6736454056e4015e40895.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0Rp2040\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0448\u0438\u043d\u044b:<\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u0431\u0435\u0437 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f)\u00a0\u2014 \u043f\u0440\u044f\u043c\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0438\u043b\u0438\u00a0\u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>XOR (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u00d71000)\u00a0\u2014 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 (\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u00ab\u0438\u043b\u0438\u00bb)<\/p>\n<\/li>\n<li>\n<p>CLR (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u00d72000)\u00a0\u2014 \u0441\u0431\u0440\u043e\u0441 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435<\/p>\n<\/li>\n<li>\n<p>SET (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u00d71000)\u00a0\u2014 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 (\u00ab\u0438\u043b\u0438\u00bb)<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u00a0\u044f\u0437\u044b\u043a\u0435 \u0421\u0438:<\/p>\n<pre><code class=\"cpp\">#define XOR_OFFSET 0x1000#define SET_OFFSET 0x2000#define CLR_OFFSET 0x3000static inline void mmio_write_32(uint32_t addr, uint32_t value) {    *(volatile uint32_t *)addr = value;}static inline uint32_t mmio_read_32(uint32_t addr) {    return *(volatile uint32_t *)addr;}static inline void setBits(uint32_t addr, uint32_t value) {    mmio_write_32(addr + SET_OFFSET, value);}static inline void clearBits(uint32_t addr, uint32_t value) {    mmio_write_32(addr + CLR_OFFSET, value);}static inline void invertBits(uint32_t addr, uint32_t value) {    mmio_write_32(addr + XOR_OFFSET, value);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u044b. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f\u00a0\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0432\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0434\u0432\u0443\u0445\u044a\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Rp2040.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 4\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430. \u0414\u043e\u0441\u0442\u0443\u043f \u043a\u00a0PIO, USB \u0438 DMA \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0437\u0430 1\u00a0\u0442\u0430\u043a\u0442 \u0448\u0438\u043d\u044b, \u0430\u00a0\u043a\u00a0\u0442\u0430\u043a\u0438\u043c \u0431\u043b\u043e\u043a\u0430\u043c \u043a\u0430\u043a\u00a0UART, SPI, I2C, PWM \u0438 \u043f\u0440. (\u0441\u043c. \u0441\u0445\u0435\u043c\u0443 \u0432\u044b\u0448\u0435)\u00a0\u2014 \u0437\u0430 3\u00a0\u0442\u0430\u043a\u0442\u0430.<\/p>\n<h4>\u0411\u0430\u0440\u044c\u0435\u0440\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438<\/h4>\n<p>\u0412\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u043d\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <strong>\u0431\u0430\u0440\u044c\u0435\u0440\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438<\/strong>. \u041e\u043d\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0432\u00a0\u0441\u0438\u043b\u0443 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<p>\u0412\u00a0\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARM \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u2011\u0431\u0430\u0440\u044c\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><strong>DMB (Data Memory Barrier)<\/strong> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>DSB (Data Synchronization Barrier)<\/strong> <strong>\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442<\/strong> \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <strong>\u043b\u044e\u0431\u044b\u0445<\/strong> \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0434\u043e\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b<\/p>\n<\/li>\n<li>\n<p><strong>ISB (Instruction Synchronization Barrier)<\/strong> \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0437\u044f\u0442\u044b \u0438\u0437\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u043e\u0432\u043e<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">static inline void __DMB() {    asm volatile (\"dmb\" : : : \"memory\");}static inline void __DSB() {    asm volatile (\"dsb\" : : : \"memory\");}static inline void __ISB() {    asm volatile (\"isb\" : : : \"memory\");}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u00abmemory\u00bb \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043e\u00a0\u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0441\u00a0\u0435\u0433\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<h3>\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/h3>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/42d\/ce0\/527\/42dce05273516b9d625d6d49bc55b026.png\" alt=\"\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0441 \u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 IRQ (Interrupt ReQuest)\" width=\"1868\" height=\"626\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/42d\/ce0\/527\/42dce05273516b9d625d6d49bc55b026.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/42d\/ce0\/527\/42dce05273516b9d625d6d49bc55b026.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0441\u00a0\u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 IRQ (Interrupt ReQuest)<\/figcaption><\/div>\n<\/figure>\n<div class=\"floating-image\">\n<p>\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 RP2040\u00a0\u0438\u043c\u0435\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a\u00a0\u0441\u0432\u043e\u0438\u043c IRQ: <\/p>\n<\/div>\n<ul>\n<li>\n<p><strong>INTR (Interrupt Raw Status)<\/strong>\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u00ab\u0441\u044b\u0440\u043e\u0439\u00bb \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0444\u0430\u043a\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u00a0\u044d\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u0417\u0430\u043f\u0438\u0441\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<li>\n<p><strong>INTE (Interrupt Enable)<\/strong>\u00a0\u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c\/\u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>INTF (Interrupt Force)<\/strong>\u00a0\u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p><strong>INTS (Interrupt Status)<\/strong>\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0417\u0430\u043f\u0438\u0441\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0432\u00a0INTE, \u0442\u043e \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e\u00a0NVIC (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439) \u043e\u0431\u043e\u0438\u0445 \u044f\u0434\u0435\u0440. \u0415\u0441\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0432\u00a0NVIC \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u0442\u043e \u043e\u043d\u043e \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e\u00a0\u044f\u0434\u0440\u0430.<\/p>\n<p>\u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0434\u0432\u0443\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430) \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0448\u043b\u043e \u0434\u043e\u00a0\u044f\u0434\u0440\u0430, \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0438 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u0432\u00a0NVIC<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0INTE \u0438\u043b\u0438\u00a0INTR \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f\u00a0\u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f: \u0435\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u00a0NVIC, \u044f\u0434\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u0430\u043c NVIC \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u044f\u0434\u0440\u0435 ARM Cortex\u2011M0+ \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0431\u0440\u043e\u0441\u0430 \u0438 \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439.<\/p>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u044f\u0434\u0440\u043e ARM Cortex\u2011M \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0444\u043b\u0430\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 PRIMASK, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u00a0\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043e\u043d \u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u0442\u043e \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u043e\u0442\u00a0NVIC, \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u043d\u0435\u00a0\u0430\u043a\u0442\u0438\u0432\u0435\u043d. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0443\u043c\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438. <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/acd\/d75\/e75\/acdd75e75320c71ec938997b35567be5.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u043b\u0438\u043d\u0438\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 rp2040\" width=\"1625\" height=\"630\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/acd\/d75\/e75\/acdd75e75320c71ec938997b35567be5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/acd\/d75\/e75\/acdd75e75320c71ec938997b35567be5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430\u00a0\u043b\u0438\u043d\u0438\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 rp2040<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"cpp\">#define CORTEX_BASE 0xE0000000#define NVIC_IRQ_SET_EN         (CORTEX_BASE + 0xE100) #define NVIC_IRQ_CLR_EN         (CORTEX_BASE + 0xE180) #define NVIC_IRQ_SET_PENDING    (CORTEX_BASE + 0xE200) #define NVIC_IRQ_CLR_PENDING    (CORTEX_BASE + 0xE280)static inline void NVIC_EnableIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_SET_EN, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}static inline void NVIC_DisableIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_CLR_EN, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}static inline void NVIC_SetPendingIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_SET_PENDING, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}static inline void NVIC_ClearPendingIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_CLR_PENDING, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"cpp\">static inline void __enable_irq() {    asm volatile (\"cpsie i\" : : : \"memory\");}static inline void __disable_irq() {    asm volatile (\"cpsid i\" : : : \"memory\");}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u041c\u0435\u0436\u044a\u044f\u0434\u0435\u0440\u043d\u0430\u044f \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f (Mailbox)<\/h3>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/63b\/5da\/a9f\/63b5daa9f54d988c28378ee22b1f74a6.png\" width=\"1280\" height=\"1468\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/63b\/5da\/a9f\/63b5daa9f54d988c28378ee22b1f74a6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/63b\/5da\/a9f\/63b5daa9f54d988c28378ee22b1f74a6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<div class=\"floating-image\">\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 <strong>FIFO\u2011\u0431\u0443\u0444\u0435\u0440\u0430<\/strong> (First In, First Out) \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u043e\u0431\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 \u0432 8\u00a0\u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0432. \u0427\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 (RX) \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437\u00a0\u043d\u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u0442\u0430\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u042f\u0434\u0440\u0430 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0443\u00a0\u043d\u0438\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 32\u00a0\u0431\u0438\u0442\u0430. <\/p>\n<\/div>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0442\u0430\u0442\u0443\u0441\u0430.<\/p>\n<pre><code class=\"cpp\">#define SIO_BASE 0xD0000000#define FIFO_TX_REG (SIO_BASE + 0x054)#define FIFO_RX_REG (SIO_BASE + 0x058)#define FIFO_STATUS_REG (SIO_BASE + 0x050)\/* 1: True, 0: False *\/\/* [0] RX-\u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u043f\u0443\u0441\u0442 *\/ \/* [1] TX-\u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u043f\u043e\u043b\u043e\u043d *\/\/* [2] TX-\u0431\u0443\u0444\u0435\u0440 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d *\/\/* [3] RX-\u0431\u0443\u0444\u0435\u0440 \u0431\u044b\u043b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d \u0431\u0443\u0434\u0443\u0447\u0438 \u043f\u0443\u0441\u0442\u044b\u043c *\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u00a0\u0441\u0432\u043e\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u0430\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0444\u043b\u0430\u0433\u0430 \u043e\u0447\u0438\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u0431\u0443\u0444\u0435\u0440. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u043e\u0432 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u044f\u0434\u0440\u0435\u2011\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435 \u043f\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u00ab\u0438\u043b\u0438\u00bb.<\/p>\n<h4>\u041e\u00a0\u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0441\u043d\u0430<\/h4>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b ARM Cortex\u2011M \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f\u00a0\u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043e\u043d (sleep) \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 (sleepdeep). \u0412\u044b\u0431\u043e\u0440 \u0440\u0435\u0436\u0438\u043c\u0430 \u0441\u043d\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 SCR.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u044f\u0434\u0440\u0430 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (\u0441\u043d\u0430)\u00a0\u2014 <strong>WFE<\/strong> \u0438 <strong>WFI<\/strong>.<\/p>\n<pre><code class=\"cpp\">static inline void __WFE() {    asm volatile (\"wfe\");}static inline void __WFI() {    asm volatile (\"wfi\");}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>WFE (Wait For Event)<\/strong> \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u044f\u0434\u0440\u043e \u0432\u00a0\u0441\u043e\u043d \u0434\u043e\u00a0\u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u0412\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u00a0\u043d\u0438\u0445:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0435 \u0432\u00a0NVIC (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 IRQ \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b \u0432\u00a0PRIMASK)<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <strong>SEV<\/strong> <strong>(Send\u2011event)<\/strong> \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0434\u0440\u0435<\/p>\n<p>\u042f\u0434\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0448\u0438\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 SEV \u043d\u0430\u00a0\u043e\u0434\u043d\u043e\u043c \u044f\u0434\u0440\u0435 \u0432\u0437\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u043e\u043c, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u044f \u0435\u0433\u043e \u0438\u0437\u00a0WFE.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"cpp\">static inline void __SEV() {    asm volatile (\"sev\");}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>WFI (Wait For Interrupt)<\/strong> \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u044f\u0434\u0440\u043e \u0432\u00a0\u0441\u043e\u043d \u0434\u043e\u00a0\u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u00a0NVIC.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f\u00a0\u043c\u0435\u0436\u044a\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">static inline uint32_t mailbox_read() {    return mmio_read_32(FIFO_RX_REG);}static inline uint32_t mailbox_read_blocking() {    while (!(mmio_read_32(FIFO_STATUS_REG) &amp; (1 &lt;&lt; 0))) \/\/ \u043f\u043e\u043a\u0430 RX-\u0431\u0443\u0444\u0435\u0440 \u043f\u0443\u0441\u0442        __WFE();    return mailbox_read();}static inline void mailbox_send(uint32_t data) {    mmio_write_32(FIFO_TX_REG, data);    __SEV();}static inline void mailbox_send_blocking(uint32_t data) {    while (!(mmio_read_32(FIFO_STATUS_REG) &amp; (1 &lt;&lt; 1))); \/\/ \u041f\u043e\u043a\u0430 TX-\u0431\u0443\u0444\u0435\u0440 \u043f\u043e\u043b\u043e\u043d    mmio_write_32(FIFO_TX_REG, data);    __SEV();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0434\u0440\u0430<\/h3>\n<p>\u0412\u00a0\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a\u00a0\u043f\u0435\u0440\u0432\u043e\u0435 \u044f\u0434\u0440\u043e (Core 0) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434, \u0432\u0442\u043e\u0440\u043e\u0435 \u044f\u0434\u0440\u043e (Core 1) \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0434\u0443 \u0432\u00a0BootROM \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 <strong>WFE<\/strong>.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 BootROM \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d<a href=\"https:\/\/github.com\/raspberrypi\/pico-bootrom-rp2040\" rel=\"noopener noreferrer nofollow\"> \u0437\u0434\u0435\u0441\u044c<\/a>. \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043e\u0431\u043e\u0438\u0445 \u044f\u0434\u0435\u0440 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 bootrom_rt0.S (\u0444\u0443\u043d\u043a\u0446\u0438\u044f _start)<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f\u00a0\u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 BootROM:<\/p>\n<ol>\n<li>\n<p>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e FIFO (RX) \u043e\u0442\u00a0\u043c\u0443\u0441\u043e\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>WFE, \u0435\u0441\u043b\u0438 TX\u2011\u0431\u0443\u0444\u0435\u0440 \u043f\u043e\u043b\u043e\u043d<\/p>\n<\/li>\n<li>\n<p>\u042d\u0445\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432\u00a0TX FIFO (\u043d\u043e\u043b\u044c \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435)<\/p>\n<\/li>\n<li>\n<p>SEV (\u0441\u0438\u0433\u043d\u0430\u043b Core 0\u00a0\u043e\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f)<\/p>\n<\/li>\n<li>\n<p>WFE (\u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u00a0Core 0)<\/p>\n<\/li>\n<li>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 FIFO<\/p>\n<\/li>\n<\/ol>\n<p>Core 1\u00a0\u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b \u043e\u0442\u00a0Core 0:<\/p>\n<ul>\n<li>\n<p>\u0415\u0434\u0438\u043d\u0438\u0446\u0430 <\/p>\n<\/li>\n<li>\n<p>\u0410\u0434\u0440\u0435\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 (\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u00a0VTOR)<\/p>\n<\/li>\n<li>\n<p>\u0410\u0434\u0440\u0435\u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0435\u043a\u0430 (\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0MSP)<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 (\u0430\u0434\u0440\u0435\u0441 main\u2011\u0444\u0443\u043d\u043a\u0446\u0438\u0438)<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0443\u043d\u043a\u0442\u044b 2\u20136\u00a0\u0434\u043b\u044f\u00a0Core 1\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u043d\u043e, \u043f\u043e\u043a\u0430 \u044f\u0434\u0440\u043e \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0432\u0441\u0435 4\u00a0\u0447\u0438\u0441\u043b\u0430 \u0438\u0437\u00a0FIFO \u043e\u0442\u00a0Core 0. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e Core 1\u00a0\u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u00a0TX FIFO (Core 1\u00a0\u2192 Core 0) \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 (\u043f\u0443\u043d\u043a\u0442\u044b 2\u20134) \u0438 \u043f\u0440\u044b\u0433\u043d\u0435\u0442 \u0432\u00a0\u043d\u0435\u0451.<\/p>\n<p>\u0415\u0441\u043b\u0438 Core 1\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442\u00a0Core 0\u00a0\u043d\u043e\u043b\u044c, \u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u0437\u0430\u043d\u043e\u0432\u043e, \u0438 \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0447\u0438\u0441\u043b\u0430\u043c\u0438: \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0434\u0440\u0430\u043c\u0438 (\u0435\u0441\u043b\u0438 \u044d\u0445\u043e \u043d\u0435\u00a0\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c) Core 0\u00a0\u043d\u0430\u0447\u043d\u0435\u0442 \u0446\u0438\u043a\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043d\u043e\u0432\u043e, \u0438 Core 1, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u043d\u043e\u043b\u044c, \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u0430 \u044f\u0434\u0440\u0430 \u043d\u0430\u0447\u043d\u0443\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0438\u0437\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0412\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0442\u00a0Raspberry Pi Foundation \u043d\u043e\u043b\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f\u00a0Core 0\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043d\u0443\u043b\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c Core 1\u00a0(\u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0443\u043d\u043a\u0442\u0443 2\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 Core 1). \u0412\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u043d\u0443\u043b\u044f.<br \/>\u0414\u0430\u043b\u0435\u0435 Core 0\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0438\u0441\u043b\u043e, \u0441\u043d\u043e\u0432\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 SEV \u0438 \u0436\u0434\u0435\u0442 \u044d\u0445\u043e. \u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0435\u00a0\u0441\u043e\u0448\u0435\u043b\u0441\u044f \u0441\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u0437\u0430\u043d\u043e\u0432\u043e. \u0418\u043d\u0430\u0447\u0435\u00a0\u2014 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">void core1_start(uint32_t *vector_table, uint32_t *stack_pointer, void (*func_ptr) (void)) {    uint32_t init_buf[] =     {    0,    0,    1,    (uint32_t) vector_table,    (uint32_t) stack_pointer,    (uint32_t) func_ptr,    };    uint32_t seq_ind = 0;    uint32_t mbox_rx;    while (seq_ind &lt; 6) {        if (init_buf[seq_ind] == 0) {            mailbox_clear();            __SEV();        }        mailbox_send_blocking(init_buf[seq_ind]);        mbox_rx = mailbox_read_blocking();        seq_ind = (mbox_rx == init_buf[seq_ind]) ? seq_ind + 1 : 0;    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0421\u043f\u0438\u043d\u043b\u043e\u043a\u0438<\/h3>\n<p>\u0414\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043e\u0431\u043e\u0438\u0445 \u044f\u0434\u0435\u0440 \u043a\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443\u00a0\u0436\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443 RP2040\u00a0\u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 32<strong> \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u043e\u0432 (spinlocks)<\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u043e \u044f\u0434\u0440\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0441\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e <em>\u00ab\u0447\u0442\u0435\u043d\u0438\u0435\u2011\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u2011\u0437\u0430\u043f\u0438\u0441\u044c\u00bb<\/em>, \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043f\u0435\u0440\u0432\u0430 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u043d\u043b\u043e\u043a \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d. \u0418\u043d\u0430\u0447\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u0415\u0441\u043b\u0438 \u0441\u043f\u0438\u043d\u043b\u043e\u043a \u0437\u0430\u043d\u044f\u0442, \u044f\u0434\u0440\u043e \u0436\u0434\u0435\u0442 (\u00ab\u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f\u00bb\u00a0\u2014 \u00abspin\u00bb), \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435\u00a0\u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0438\u00a0\u2014 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438, \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u0438\u0440\u0438\u0436\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0434\u0435\u0440.<\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0437\u0430\u0445\u0432\u0430\u0442\u0430\/\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0439: \u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0430\u00a0\u2014 \u044d\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u0415\u0441\u043b\u0438 \u043e\u043d\u00a0\u0431\u044b\u043b \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438\u043d\u0430\u0447\u0435\u00a0\u2014 \u043d\u043e\u043b\u044c. \u0417\u0430\u043f\u0438\u0441\u044c \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0441\u043f\u0438\u043d\u043b\u043e\u043a. \u0415\u0441\u043b\u0438 \u043e\u0431\u0430 \u044f\u0434\u0440\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u043d\u043b\u043e\u043a, \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u044f\u0434\u0440\u0443.<\/p>\n<p>\u041f\u043e\u0434\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u0438\u043d\u043b\u043e\u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0432\u043e\u0439 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u043e\u0432 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p>\u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u00a0\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <strong>\u0432\u0437\u0430\u0438\u043c\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 (deadlock)<\/strong>: \u0415\u0441\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u00a0\u0431\u044b\u043b \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u0434\u043e\u00a0\u0435\u0433\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u0432\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u0442\u0435\u043c\u00a0\u0436\u0435 (\u0443\u0436\u0435 \u0432\u0437\u044f\u0442\u044b\u043c) \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u043e\u043c, \u0442\u043e \u044f\u0434\u0440\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0432\u044b\u0439\u0434\u0435\u0442 \u0438\u0437\u00a0\u0446\u0438\u043a\u043b\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 PRIMASK \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0445\u0432\u0430\u0442\u043e\u043c, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 PRIMASK \u043f\u043e\u0441\u043b\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f. \u041f\u043e\u00a0\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0430\u043c\u0438 \u0432\u00a0\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c SDK.<\/p>\n<pre><code class=\"cpp\">#define SPINLOCK_STATUS_REG (SIO_BASE + 0x05C)\/* Spinlocks (0-31) registers *\/#define SPINLOCK_BASE (SIO_BASE + 0x100) \/\/ RW#define SPINLOCK_SIZE 0x04\/* Reading values: *\/\/* 0:       Spinlock is already locked *\/\/* Nonzero: Spinlock was succesfully claimed *\/static inline uint32_t __save_PRIMASK() {    uint32_t state_var;    asm volatile(\"mrs %0, PRIMASK\" : \"=r\" (state_var) :: \"memory\");    return state_var;}static inline void __set_PRIMASK(uint32_t state_var) {    asm volatile(\"msr PRIMASK,%0\" :: \"r\" (state_var) : \"memory\");}static inline uint32_t claim_spinlock_blocking(uint32_t number) {    uint32_t primask_state = __save_PRIMASK();    __disable_irq();    while (!mmio_read_32(SPINLOCK_BASE + SPINLOCK_SIZE * number));    __DMB();    return primask_state;}static inline void free_spinlock(uint32_t number, uint32_t primask_state) {    __DMB();    mmio_write_32(SPINLOCK_BASE + SPINLOCK_SIZE * number, 1);    __set_PRIMASK(primask_state);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 RP2040.<\/p>\n<h3>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 Resets<\/h3>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u041c\u041a \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0430\u0447\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f <strong>\u0432\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u0431\u0440\u043e\u0441\u0430<\/strong> <strong>(Reset state)<\/strong>.<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430\u00a0\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u00a0\u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u0434\u043e\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u044f\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u00a0\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0438\u0437\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0431\u0440\u043e\u0441\u0430. \u0412\u00a0RP2040\u00a0\u0437\u0430\u00a0\u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>RESET<\/strong>:<\/p>\n<pre><code>#define RESET0x4000C000 \/\/ RW\/*[31:25] Reserved[24]    USB[23]    UART1[22]    UART0[21]    TIMER[20]    TBMAN[19]    SYSINFO[18]    SYSCONFIG[17]    SPI1[16]    SPI0[15]    RTC[14]    PWM[13]    PLL_USB[12]    PLL_SYS[11]    PIO1[10]    PIO0[9]     PADS_QSPI[8]     PADS_BANK0[7]     JTAG[6]     IO_ASPI[5]     IO_BANK0[4]     I2C1[3]     I2C0[2]     DMA[1]     BUSCTRL[0]     ADC*\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0441 0\u00a0\u043f\u043e 24\u00a0\u0440\u0430\u0432\u043d\u044b \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0447\u0442\u043e\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0441\u0431\u0440\u043e\u0441\u0430. \u0417\u0430\u043f\u0438\u0441\u044c \u043d\u0443\u043b\u044f \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0438\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0431\u0440\u043e\u0441\u0430. \u041f\u043e\u00a0\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0442\u043e\u0442\u00a0\u0436\u0435 \u0431\u0438\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u0432\u0435\u0434\u0435\u043d \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <strong>RESET DONE<\/strong>:<\/p>\n<pre><code class=\"cpp\">#define RESET_DONE      (RESET + 0x008) \/\/ RO<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437\u00a0\u0441\u0431\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"cpp\">static inline void enable_devices (uint32_t resets) {    clearBits(RESET, resets);    while((mmio_read_32(RESET_DONE) &amp; (resets)) != resets);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>GPIO<\/h3>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043d RP2040\u00a0\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 GPIO (\u0440\u0435\u0436\u0438\u043c 5). \u0414\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b \u043f\u0438\u043d\u043e\u0432\u00a0\u2014 UART, SPI, I2C, PIO, PWM \u0438 \u0434\u0440. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u00a0\u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u00a0\u043f\u0438\u043d\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0432\u00a0\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0435 (\u0440\u0430\u0437\u0434\u0435\u043b 2.19.2).<\/p>\n<p>\u0411\u043b\u043e\u043a SIO \u043d\u0435\u00a0\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a\u00a0\u043e\u0431\u0449\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0439 \u0448\u0438\u043d\u0435, \u043d\u043e\u00a0\u0443\u00a0\u043d\u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0441\u043e \u0441\u0445\u043e\u0436\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0432 1\u00a0\u0442\u0430\u043a\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e, \u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0438\u043d GPIO \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u0431\u0435\u0437\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0442\u0435\u043d\u0438\u0435\u2011\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u2011\u0437\u0430\u043f\u0438\u0441\u044c. \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">#define GPIO(X)             (1UL &lt;&lt; (X))#define SIO_BASE 0xD0000000#define GPIO_INPUT_VAL      (SIO_BASE + 0x004) \/\/ [29:0] RO#define GPIO_OUTPUT_VAL     (SIO_BASE + 0x010) \/\/ [29:0] RW#define GPIO_OUTPUT_SET     (SIO_BASE + 0x014) \/\/ [29:0] WO#define GPIO_OUTPUT_CLR     (SIO_BASE + 0x018) \/\/ [29:0] WO#define GPIO_OUTPUT_XOR     (SIO_BASE + 0x01C) \/\/ [29:0] WO\/* 1: Output, 0: Input *\/#define GPIO_OUTPUT_EN      (SIO_BASE + 0x020) \/\/ [29:0] RW#define GPIO_OUTPUT_EN_SET  (SIO_BASE + 0x024) \/\/ [29:0] WO#define GPIO_OUTPUT_EN_CLR  (SIO_BASE + 0x028) \/\/ [29:0] WO#define GPIO_OUTPUT_EN_XOR  (SIO_BASE + 0x02C) \/\/ [29:0] WOstatic inline void gpio_set(uint32_t gpio_num) {    mmio_write_32(GPIO_OUTPUT_SET, GPIO(gpio_num));}static inline void gpio_clear(uint32_t gpio_num) {    mmio_write_32(GPIO_OUTPUT_CLR, GPIO(gpio_num));}static inline void gpio_invert(uint32_t gpio_num) {    mmio_write_32(GPIO_OUTPUT_XOR, GPIO(gpio_num));}static inline uint32_t gpio_read(uint32_t gpio_num) {    return (mmio_read_32(GPIO_INPUT_VAL) &amp; GPIO(gpio_num));}static inline void gpio_mode_output(uint32_t gpio_num) {    mmio_write_32(GPIO_OUTPUT_EN_SET, GPIO(gpio_num));}static inline void gpio_mode_input(uint32_t gpio_num) {    mmio_write_32(GPIO_OUTPUT_EN_CLR, GPIO(gpio_num));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 GPIO\u2011\u043f\u0438\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0432\u00a0\u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445:<\/p>\n<ul>\n<li>\n<p><strong>High Level<\/strong> (\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430)<\/p>\n<\/li>\n<li>\n<p><strong>Low Level<\/strong> (\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u043e\u043b\u044c)<\/p>\n<\/li>\n<li>\n<p><strong>Edge High<\/strong> (\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442\u00a0\u043d\u0443\u043b\u044f \u043a\u00a0\u0435\u0434\u0438\u043d\u0438\u0446\u0435)<\/p>\n<\/li>\n<li>\n<p><strong>Edge Low<\/strong> (\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442\u00a0\u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043a\u00a0\u043d\u0443\u043b\u044e)<\/p>\n<\/li>\n<\/ul>\n<p>High\/Low Level \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u00a0\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043f\u0438\u043d\u0430. \u0414\u043b\u044f\u00a0\u0441\u0431\u0440\u043e\u0441\u0430<strong> <\/strong>Edge High\/Low \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440 INTR.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f\u00a0\u043b\u0438\u043d\u0438\u044f IRQ \u0441\u00a0\u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 INTE, INTF, INTS (\u041f\u043e 7\u20138\u00a0\u043f\u0438\u043d\u043e\u0432 \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, 4\u00a0\u0431\u0438\u0442\u0430 \u043f\u043e\u0434\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439). \u0413\u0440\u0443\u043f\u043f\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 INTR \u043e\u0431\u0449\u0430\u044f \u0434\u043b\u044f\u00a0\u043e\u0431\u043e\u0438\u0445 \u044f\u0434\u0435\u0440.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0430\u043d\u043a GPIO \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0430\u0434\u0440\u0435\u0441\u0430 0\u00d740014000, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 8\u00a0\u0431\u0430\u0439\u0442. \u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u00a0\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 0\u00d7004\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0438\u043d\u0430. \u0412\u00a0\u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e:<\/p>\n<ol>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u00a0\u043b\u0438\u043d\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\/\u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\/\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\/\u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u044b\u0445\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0438\u0437\u043a\u0438\u0439\/\u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u043b\u044f\u00a0\u043b\u0438\u043d\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\/\u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\/\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\/\u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u044b\u0445\u043e\u0434\u0430 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438\u043b\u0438\u00a0\u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u044b\u0445\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0438\u043d\u0430<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"cpp\">#define GPIO_BASE 0x40014000#define GPIO_STATUS_BASE    (GPIO_BASE + 0x000)#define GPIO_CTRL_BASE      (GPIO_BASE + 0x004)\/*[31:30] Reserved[29:28] IRQOVER    - 0x0 -&gt; Normal    - 0x1 -&gt; Invert the interrupt    - 0x2 -&gt; Drive the interrupt low    - 0x3 -&gt; Drive the interrupt high[27:18] Reserved[17:16] INOVER    - 0x0 -&gt; Normal    - 0x1 -&gt; Invert the input signal     - 0x2 -&gt; Drive the input signal low    - 0x3 -&gt; Drive the input signal high[15:14] Reserved[13:12] OEOVER    - 0x0 -&gt; Normal    - 0x1 -&gt; Invert output enable value    - 0x2 -&gt; Disable output (forced)    - 0x3 -&gt; Enable output (forced)[11:10] Reserved[9:8]   OUTOVER    - 0x0 -&gt; Normal    - 0x1 -&gt; Invert the output signal     - 0x2 -&gt; Drive the output signal low    - 0x3 -&gt; Drive the output signal high[7:6]   Reserved[4:0]   FUNCSEL*\/#define GPIO_SIZE           0x08#define GPIO_INTR_BASE      (GPIO_BASE + 0x0F0)#define GPIO_INTE_BASE      (GPIO_BASE + 0x100)#define GPIO_INTF_BASE      (GPIO_BASE + 0x110)#define GPIO_INTS_BASE      (GPIO_BASE + 0x120)#define GPIO_CORE_SIZE      0x30#define GPIO_EDGE_HIGH      0x3#define GPIO_EDGE_LOW       0x2#define GPIO_LEVEL_HIGH     0x1#define GPIO_LEVEL_LOW      0x0static inline void gpio_enable_interrupt(uint32_t core, uint32_t gpio_num, uint32_t int_mode) {    uint32_t addr = GPIO_INTE_BASE + (GPIO_CORE_SIZE * core) + (0x04 * (gpio_num \/ 8));    uint32_t mask = 1 &lt;&lt; (((gpio_num % 8) * 4) + int_mode);    setBits(addr, mask);}static inline void gpio_mask_interrupt(uint32_t core, uint32_t gpio_num, uint32_t int_mode) {    uint32_t addr = GPIO_INTE_BASE + (GPIO_CORE_SIZE * core) + (0x04 * (gpio_num \/ 8));    uint32_t mask = 1 &lt;&lt; (((gpio_num % 8) * 4) + int_mode);    clearBits(addr, mask);}static inline void pinmux_set(uint32_t gpio_num, uint32_t func) {    mmio_write_32(GPIO_CTRL_BASE + GPIO_SIZE * gpio_num, func &amp; 0x1F);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0422\u0430\u0439\u043c\u0435\u0440<\/h3>\n<p>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432\u00a0rp2040\u00a0\u0442\u0430\u0439\u043c\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 64-\u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 (2\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043f\u043e 32\u00a0\u0431\u0438\u0442\u0430) \u0438 4\u00a0\u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0430\u00a0\u2014 Alarm0-Alarm3<\/p>\n<p><strong>\u0421\u0447\u0435\u0442\u0447\u0438\u043a<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0438\u043a\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u044b\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c Watchdog. \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0430\u043c\u043e\u0433\u043e Watchdog\u00a0\u2014 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435\u00a0\u0437\u0430\u0432\u0438\u0441\u043b\u0430, \u0432\u00a0\u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c\u00a0\u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0451 (soft reset). \u041d\u043e\u00a0\u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u043c\u044b \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u043c.<\/p>\n<p><strong>\u0411\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a (Alarm)<\/strong> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a\u00a0\u043c\u043b\u0430\u0434\u0448\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u0438 \u043f\u043e\u00a0\u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043b\u0438\u043c\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 72\u00a0\u043c\u0438\u043d\u0443\u0442\u044b) \u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f. \u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0441\u0432\u043e\u0439 IRQ.<\/p>\n<p>\u0411\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f callback\u2011\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u00a0\u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0443 \u0438\u043b\u0438\u00a0\u0434\u043b\u044f\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &gt;100\u00a0\u043c\u043a\u0441), \u043a\u043e\u0433\u0434\u0430 \u044f\u0434\u0440\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 <strong>WFI<\/strong> (Wait For Interrupt).<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u044f\u0434\u0440\u043e \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 WFI \u0434\u043e\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u00a0\u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0430, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043f\u0440\u0438\u00a0\u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044f\u0434\u0440\u043e \u0441\u043d\u043e\u0432\u0430 \u0443\u0441\u043d\u0435\u0442.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">void sleep_us(uint32_t delay, uint32_t alarm) {    uint32_t start_time = mmio_read_32(TIME_L_READ); \/\/ \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f    uint32_t target_time = start_time + delay; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f    mmio_write_32(TIMER_ALARM0 + (ALARM_SIZE * alarm), target_time); \/\/ \u0417\u0430\u0432\u043e\u0434\u0438\u043c \u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a    setBits(TIME_INTE, (1 &lt;&lt; alarm)); \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0430    if (mmio_read_32(TIME_L_READ) - start_time &gt;= delay) { \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u043b\u0438 \u0443\u0436\u0435 \u043d\u0443\u0436\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f        clearBits(TIME_INTE, (1 &lt;&lt; 0));        return;    }    while(1) {        __disable_irq(); \/\/ \u0417\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f        if (mmio_read_32(TIME_L_READ) - start_time &gt;= delay) { \/\/ \u0415\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0448\u043b\u043e            clearBits(TIME_INTE, (1 &lt;&lt; alarm));            __enable_irq(); \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f            break; \/\/ \u0438 \u0432\u044b\u0439\u0442\u0438        }        __WFI(); \/\/ \u0417\u0430\u0441\u043d\u0443\u0442\u044c \u0434\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f        __enable_irq(); \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c    }}static inline void sleep_ms(uint32_t delay, uint32_t alarm) {    sleep_us(delay * 1000, alarm);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u044f\u0434\u0440\u043e \u043d\u0435\u00a0\u0443\u0439\u0434\u0435\u0442 \u0432\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043e\u043d\u043e \u0437\u0430\u0441\u043d\u0435\u0442. \u0417\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u00a0\u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438 \u043f\u043e\u00a0\u0441\u0435\u0431\u0435, \u0438 \u044f\u0434\u0440\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435 \u0441\u043d\u044f\u0442\u0438\u044f \u043c\u0430\u0441\u043a\u0438. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044c \u043e\u0434\u043d\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c PRIMASK, \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442 WFI \u0438 \u043d\u0435\u00a0\u0443\u0441\u043d\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0435.<\/p>\n<p>\u0412\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0431\u0438\u0442 \u0432\u00a0INTR\/INTE \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438 \u0432\u00a0NVIC (\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f\u00a0Alarm0):<\/p>\n<pre><code class=\"cpp\">void Timer0_IRQHandler() {    mmio_write_32(TIME_INTR, (1 &lt;&lt; 0)); \/\/ \u0421\u0431\u0440\u043e\u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432 Alarm0    NVIC_ClearPendingIRQ(TIMER_IRQ_0); \/\/ \u0421\u0431\u0440\u043e\u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432 NVIC}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u043f\u043e\u0434\u00a0\u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u043b\u0438\u00a0\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f, \u0447\u0442\u043e\u00a0\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u00a0\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u044f\u0434\u0440\u0430 \u0432\u00a0\u0441\u043e\u043d \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0432\u044b\u0433\u043e\u0434\u043d\u043e, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">static inline void busy_wait_us(uint32_t delay) {    uint32_t start_time = mmio_read_32(TIME_L_READ);    while(mmio_read_32(TIME_L_READ) - start_time &lt; delay); \/\/ \u041f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f...}static inline void busy_wait_ms(uint32_t delay) {    busy_wait_us(delay * 1000);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u041c\u041a \u043a\u0430\u0436\u0434\u043e\u0435 \u044f\u0434\u0440\u043e \u0438\u043c\u0435\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043b\u044f\u00a0Cortex\u2011M 24-\u0431\u0438\u0442\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 SysTick, \u0441\u0438\u0433\u043d\u0430\u043b \u043a\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0434\u0435\u0442 \u0441\u00a0\u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 watchdog.<\/p>\n<h3>PIO<\/h3>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 RP2040\u00a0\u2014 <strong>\u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430\u2011\u0432\u044b\u0432\u043e\u0434\u0430 (PIO)<\/strong>. \u0412\u0441\u0435\u0433\u043e \u0438\u0445 \u0434\u0432\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 4\u00a0\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 32\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dad\/801\/bda\/dad801bdaa80ba42151090c02ba0e55a.png\" width=\"1296\" height=\"1120\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/dad\/801\/bda\/dad801bdaa80ba42151090c02ba0e55a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dad\/801\/bda\/dad801bdaa80ba42151090c02ba0e55a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b<\/strong> \u043c\u043e\u0433\u0443\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u044e\u0431\u044b\u043c\u0438 \u043f\u0438\u043d\u0430\u043c\u0438 GPIO, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f \u0438\u0445 \u0441\u00a0\u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e, \u0447\u0442\u043e\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u044f\u0434\u0435\u0440. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u044f\u0434\u0440\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0439 FIFO\u2011\u0431\u0443\u0444\u0435\u0440 (\u0441\u043c. \u0441\u0445\u0435\u043c\u0443 \u0432\u044b\u0448\u0435). \u0414\u043b\u044f\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PIO \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0432\u0441\u0435\u0433\u043e \u0438\u0437 9\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. <\/p>\n<h3>DMA<\/h3>\n<p>\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0441\u043d\u0430\u0449\u0435\u043d 12-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u043c DMA\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c. \u041e\u043d \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f\u00a0\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0435\u0437\u00a0\u0443\u0447\u0430\u0441\u0442\u0438\u044f \u044f\u0434\u0435\u0440. \u0412\u00a0RP2040\u00a0\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u043a\u0430 DMA\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 PIO: \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0432\u0435\u0441\u0442\u0438 \u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443 \u0442\u0440\u0430\u0442\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u00a0\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c DMA \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0434\u0440\u0430. \u0417\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442 DMA (\u043d\u043e \u043d\u0435\u00a0\u043a\u0430\u043d\u0430\u043b) \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0440\u0430\u0437\u043c\u0435\u0440\u0435 32\u00a0\u0431\u0438\u0442. \u041f\u0440\u0438\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u0448\u0438\u043d\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e.<\/p>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0440\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041f\u0430\u043c\u044f\u0442\u044c \u2192 \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f<\/p>\n<p>\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443\u00a0DMA \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u00a0TX\u2011\u0431\u0443\u0444\u0435\u0440\u0435 UART \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e <\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u2192 \u041f\u0430\u043c\u044f\u0442\u044c<\/p>\n<p>\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 DMA \u043e\u00a0\u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u043c\u044f\u0442\u044c \u2192 \u041f\u0430\u043c\u044f\u0442\u044c <\/p>\n<p>DMA \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e. \u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 32, 16\u00a0\u0438\u043b\u0438 8\u00a0\u0431\u0438\u0442<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u043d\u0430\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0432\u00a0\u0446\u0435\u043f\u043e\u0447\u043a\u0438: \u043f\u043e\u00a0\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0430\u043b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e).<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0438\u043b\u0438\u00a0\u0438\u043d\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432:<\/p>\n<ol>\n<li>\n<p><strong>READ_ADDR<\/strong> \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f (\u043e\u0442\u043a\u0443\u0434\u0430) <\/p>\n<\/li>\n<li>\n<p><strong>WRITE_ADDR<\/strong> \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 (\u043a\u0443\u0434\u0430)<\/p>\n<\/li>\n<li>\n<p><strong>TRANS_COUNT<\/strong> \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 (\u0443\u0431\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a). \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0442\u043e\u0447\u043a\u043e\u0439 \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u0430\u043d\u0430\u043b\u0430<\/p>\n<\/li>\n<li>\n<p><strong>CTRL<\/strong> \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 READ_ADDR_ \u0438 WRITE_ADDR, \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440. \u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u0430\u043a\u00a0\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u00a0\u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (DREQ\u00a0\u2014 Data Request)<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a70\/446\/c32\/a70446c32772ee7ea235a495487d68c4.png\" alt=\"\" title=\"\" width=\"1328\" height=\"816\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a70\/446\/c32\/a70446c32772ee7ea235a495487d68c4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a70\/446\/c32\/a70446c32772ee7ea235a495487d68c4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0435\u0441\u0442\u044c 3\u00a0\u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u0430 (\u0430\u043b\u0438\u0430\u0441\u0430). \u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e 4\u00a0\u043d\u0430\u0431\u043e\u0440\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432\u00a0\u0440\u0430\u0437\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 (\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043d\u044b\u0439) \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443: <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96c\/e54\/be6\/96ce54be6227fbb8f188aff6fc84929f.png\" width=\"1666\" height=\"406\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/96c\/e54\/be6\/96ce54be6227fbb8f188aff6fc84929f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96c\/e54\/be6\/96ce54be6227fbb8f188aff6fc84929f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u0430\u043a\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0434\u0438\u043d DMA\u2011\u043a\u0430\u043d\u0430\u043b \u043c\u043e\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u043f\u0443\u0442\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0\u043d\u0443\u0436\u043d\u043e\u0439 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. <\/p>\n<pre><code class=\"cpp\">#define DMA_BASE                0x50000000#define CH_SIZE                 0x040#define CH0_READ_ADDR           (DMA_BASE + 0x000)#define CH0_WRITE_ADDR          (DMA_BASE + 0x004)#define CH0_COUNT               (DMA_BASE + 0x008)#define CH0_CTRL_TRIG           (DMA_BASE + 0x00C)\/*[31]    AHB_ERROR       \/\/ RO[30]    READ_ERROR      \/\/ WC[29]    WRITE_ERROR     \/\/ WC[28:25] Reserved[24]    BUSY_FLAG       \/\/ RO[23]    SNIFF_EN        \/\/ RW[22]    BSWAP_EN        \/\/ RW[21]    IRQ_QUIET       \/\/ RW[20:15] DREQ_SEL        \/\/ RW[14:11] CHAIN_TO        \/\/ RW[10]    RING_SEL        \/\/ RW[9:6]   RING_SIZE       \/\/ RW[5]     INCR_WRITE      \/\/ RW[4]     INCR_READ       \/\/ RW[3:2]   DATA_SIZE       \/\/ RW        - 0x0 BYTE        - 0x1 HALFWORD        - 0x2 WORD[1]     HIGH_PRIORITY   \/\/ RW[0]     ENABLE          \/\/ RW*\/#define CH0_AL1_CTRL            (DMA_BASE + 0x010)#define CH0_AL1_READ_ADDR       (DMA_BASE + 0x014)#define CH0_AL1_WRITE_ADDR      (DMA_BASE + 0x018)#define CH0_AL1_COUNT_TRIG      (DMA_BASE + 0x01C)#define DMA_INTE_0              (DMA_BASE + 0x404)#define DMA_INTE_1              (DMA_BASE + 0x414)\/* some flags *\/#define IRQ_QUIET               (1UL &lt;&lt; 21)#define INCR_WRITE              (1UL &lt;&lt; 5)#define INCR_READ               (1UL &lt;&lt; 4)#define SIZE_BYTE               (0UL &lt;&lt; 2)#define SIZE_HALFWORD           (1UL &lt;&lt; 2)#define SIZE_WORD               (2UL &lt;&lt; 2)#define ENABLE                  (1UL &lt;&lt; 0)static inline void dma_config(uint32_t channel, uint32_t ctrl_flags) {    mmio_write_32(CH0_AL1_CTRL + channel * CH_SIZE, ctrl_flags);}static inline void dma_toggle(uint32_t channel, uint32_t *read_addr, uint32_t *write_addr, uint32_t count) {    __DMB();    mmio_write_32(CH0_READ_ADDR      + CH_SIZE * channel, (uint32_t) read_addr);    mmio_write_32(CH0_WRITE_ADDR     + CH_SIZE * channel, (uint32_t) write_addr);    mmio_write_32(CH0_AL1_COUNT_TRIG + CH_SIZE * channel,            count);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e DMA\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u00a0\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0435 (\u0440\u0430\u0437\u0434\u0435\u043b 2.5).<\/p>\n<h2>\u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 main()<\/h2>\n<p>\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">#define TIMER_RST       (1 &lt;&lt; 21)#define GPIO_RST        (1 &lt;&lt; 5)#define TIMER_IRQ_0 0#define LED 25#define GPIO_FUNC 5void core0_main(){    \/\/ 1. \u0412\u044b\u0432\u043e\u0434 GPIO \u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438\u0437 \u0441\u0431\u0440\u043e\u0441\u0430    enable_devices(GPIO_RST | TIMER_RST);\/\/ 2. \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 Alarm0 \u0432 NVIC    NVIC_EnableIRQ(TIMER_IRQ_0);\/\/ 3. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u043a\u0430\u043a GPIO Output    pinmux_set(LED, GPIO_FUNC);    gpio_mode_output(LED);\/\/ 4. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b    while (1) {        sleep_ms(1000); \/\/ \u0436\u0434\u0430\u0442\u044c 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443        gpio_invert(LED); \/\/ \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u00a0\u0432\u044b\u0437\u043e\u0432\u0430 main.<\/p>\n<h2>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 RP2040<\/h2>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 ARM, \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0430\u0447\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u044f\u0434\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 <strong>\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u0431\u0440\u043e\u0441\u0430<\/strong>\u00a0\u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>Reset Handler<\/strong>. Reset Handler \u0432\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u0441\u043e\u0441\u0442\u0430\u0432 <strong>\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439\u00a0<\/strong>. \u0410\u0434\u0440\u0435\u0441 \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 VTOR, \u0438 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0440\u0430\u0432\u0435\u043d 0\u00d700000000, \u0447\u0442\u043e\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 <strong>BootROM<\/strong>. <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2e9\/d0d\/c18\/2e9d0dc18a5e9e8335c0cade158df9a3.png\" alt=\"\u0418\u0437 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u043a rp2040\" width=\"1816\" height=\"1848\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2e9\/d0d\/c18\/2e9d0dc18a5e9e8335c0cade158df9a3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2e9\/d0d\/c18\/2e9d0dc18a5e9e8335c0cade158df9a3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u0437\u00a0\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u043a\u00a0rp2040<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0431\u0440\u043e\u0441\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0448\u0430\u0433\u0438: <\/p>\n<ol>\n<li>\n<p>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0432 \u0441\u0435\u0431\u044f, \u0432\u0442\u043e\u0440\u043e\u0435 \u044f\u0434\u0440\u043e \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442 \u0434\u043e\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043e\u0442\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435\u00a0\u0436\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u043d\u0430\u0436\u0430\u0442\u0430\u00a0\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0430 SELBOOT.<br \/> \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0447\u0438\u043f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c USB\u2011UF2\u00a0\u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u0412\u00a0\u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 SSI \u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0435\u0440\u0432\u044b\u0445 256\u00a0\u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438\u0437\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u00a0SRAM (\u0432 \u0441\u0430\u043c\u044b\u0439 \u0435\u0451 \u0432\u0435\u0440\u0445: 0\u00d720041F00-0\u00d720041FFF).<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u0432\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 252\u00a0\u0431\u0430\u0439\u0442\u0430 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u043e\u0434 <strong>\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0437\u044b<\/strong>, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 4\u00a0\u0431\u0430\u0439\u0442\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 <strong>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443<\/strong> <strong>(CRC32)<\/strong>, \u0430\u00a0\u0443\u0436\u0435 \u043f\u043e\u0442\u043e\u043c \u0438\u0434\u0435\u0442 \u043a\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/85d\/e64\/541\/85de64541be2f009aceff8182e7d2798.png\" width=\"1695\" height=\"850\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/85d\/e64\/541\/85de64541be2f009aceff8182e7d2798.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/85d\/e64\/541\/85de64541be2f009aceff8182e7d2798.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 (boot2\u00a0\u043d\u0430\u00a0\u0441\u0445\u0435\u043c\u0435 \u0432\u044b\u0448\u0435) \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 (CRC32\u00a0\u043d\u0430\u00a0\u0441\u0445\u0435\u043c\u0435).<br \/>\u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u043b\u0438, \u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0437\u044b \u043f\u0440\u0438\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c, \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043d\u0435\u0433\u043e. \u0418\u043d\u0430\u0447\u0435 \u0447\u0438\u043f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c USB\u2011UF2. \u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430 BootROM \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0437\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 Flash \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043a\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\u00a0\u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 Reset Handler \u0443\u0436\u0435 \u0438\u0437\u00a0\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u0412\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u0431\u0440\u043e\u0441\u0430 \u0440\u0435\u0447\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u00a0\u043d\u0435\u043c.<\/p>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438<\/h2>\n<p>\u0412\u0432\u0438\u0434\u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/610\/231\/928\/61023192808b45bee97fd66d66c125df.png\" width=\"1532\" height=\"1344\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/610\/231\/928\/61023192808b45bee97fd66d66c125df.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/610\/231\/928\/61023192808b45bee97fd66d66c125df.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<div class=\"floating-image\">\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:<\/p>\n<\/div>\n<ol>\n<li>\n<p><strong>boot2.S<\/strong> \u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a (\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c \u0438 SSI \u0432\u00a0\u0440\u0435\u0436\u0438\u043c XIP)<\/p>\n<\/li>\n<li>\n<p><strong>startup.c<\/strong> \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 Reset Handler (\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 main)<\/p>\n<\/li>\n<li>\n<p><strong>core0_main.c<\/strong> \u041a\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Core 0<\/p>\n<\/li>\n<li>\n<p><strong>core1_main.c <\/strong>\u041a\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Core 1<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0434\u043b\u044f\u00a0\u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 RP2040\u00a0\u2014 <strong>arm\u2011none\u2011eabi<\/strong>.<\/p>\n<h3>\u0421\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435<\/h3>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u041c\u041a \u0441\u00a0\u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0438\u043f\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0415\u0441\u043b\u0438 \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c, \u0432\u00a0\u0441\u043e\u0441\u0442\u0430\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u0445\u043e\u0434\u044f\u0442: \u0441\u0430\u043c <strong>\u043a\u043e\u0434<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438; <strong>\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/strong>; <strong>\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/strong>.<\/p>\n<p>\u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u00a0\u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u043e\u00a0\u0441\u0435\u043a\u0446\u0438\u044f\u043c, \u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u0430\u043a\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0438 \u043d\u0435\u00a0\u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a\u00a0\u0438\u043c\u0435\u043d\u0443\u044e\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0435\u043a\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><strong>text\u00a0<\/strong>\u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p><strong>data<\/strong>\u00a0\u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435\/\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p><strong>bss<\/strong>\u00a0\u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435\/\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p><strong>rodata<\/strong>\u00a0\u2014 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0435 (\u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435) \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <strong>\u0441\u0442\u0435\u043a<\/strong> \u0434\u043b\u044f\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e) <strong>\u043a\u0443\u0447\u0443<\/strong> \u0434\u043b\u044f\u00a0\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u00a0\u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438. \u042d\u0442\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0445\u043e\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f\u00a0\u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"cpp\">#include &lt;stdlib.h&gt;int x = 5; \/\/ -&gt; .dataint a;    \/\/ -&gt; .bssconst float pi = 3.142; \/\/ -&gt; .rodataint main() {static int b;\/\/  -&gt; .bsschar c = 'F';\/\/-&gt; stack (\u0441\u0442\u0435\u043a)char *s = (char *) malloc(5); \/\/  -&gt; heap (\u043a\u0443\u0447\u0430)...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u0441\u0442\u0435\u043a \u043d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u00a0\u0441\u0430\u043c\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043a\u0443\u0447\u0435\u0439 \u0432\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0412\u0430\u0436\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u0438 <strong>.bss<\/strong>: \u041d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0435\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0446\u0435\u043b\u044f\u0445 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<h3>\u041b\u0438\u043d\u043a\u043e\u0432\u043a\u0430<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0430\u043f \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\u00a0\u2014 <strong>\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430<\/strong>, \u043e\u043d\u0430\u00a0\u0436\u0435 <strong>\u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0430<\/strong>. <strong>\u041b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a<\/strong> \u0431\u0435\u0440\u0435\u0442 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445 \u0432\u00a0\u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b, \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044f \u0432\u0441\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u043e\u00a0\u043d\u0443\u0436\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0438 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043e\u0442\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430 \u0438 \u0443\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 RP2040\u00a0\u0435\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u00a0\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u043d\u0435\u0439, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0430\u043c\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443, \u043a\u0430\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u043a\u0443\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0441\u0435 \u043b\u0435\u0433\u043b\u043e \u043d\u0430\u00a0\u0441\u0432\u043e\u0438 \u043c\u0435\u0441\u0442\u0430.<\/p>\n<h4>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0439<\/h4>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432\u043e\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 XIP \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 Read\u2011only. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u043a\u0446\u0438\u044f <strong>.data<\/strong>, \u043b\u0435\u0436\u0430\u0449\u0430\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u00a0Flash, \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0430 \u0432\u00a0SRAM, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043c\u043e\u0433 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u00a0\u0441\u0435\u043a\u0446\u0438\u044e <strong>.bss<\/strong>, \u043d\u0435\u00a0\u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0443\u044e \u043c\u0435\u0441\u0442\u0430 \u0432\u043e\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438, \u0434\u043e\u043b\u0436\u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043c\u0435\u0441\u0442\u043e \u0432\u00a0SRAM, \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0443\u043b\u044f\u043c\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u044f\u0437\u044b\u043a\u0430 \u0421, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <strong>.bss<\/strong> \u043d\u0435\u00a0\u0438\u043c\u0435\u043b\u0438 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0434\u0432\u0430 \u043f\u0443\u043d\u043a\u0442\u0430 \u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <strong>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c <strong>Reset Handler<\/strong> \u0438\u0437\u00a0startup.c. \u0427\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430, \u043a\u0443\u0434\u0430 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <strong>.data<\/strong>), \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043e\u0442\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u0447\u0430\u043b \u0438 \u043a\u043e\u043d\u0446\u043e\u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u0439.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u043e\u0442\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0443\u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0434\u043e\u043b\u0436\u043d\u044b\u00a0\u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u0435\u043a\u0446\u0438\u0438 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 (<strong>.boot2<\/strong>), \u0441\u0442\u0435\u043a\u043e\u0432 \u0434\u043b\u044f\u00a0\u0434\u0432\u0443\u0445 \u044f\u0434\u0435\u0440 (<strong>.stack0<\/strong> \u0438 <strong>.stack1<\/strong>) \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (<strong>.vector<\/strong>).<\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u043e\u00a0Flash, \u0430\u00a0\u043c\u043e\u0436\u0435\u043c, \u043a\u0430\u043a <strong>.data<\/strong>, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0432\u00a0SRAM \u0434\u043b\u044f\u00a0\u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0435\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u00a0\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430\u00a0\u043b\u0435\u0442\u0443. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d. \u0411\u0443\u0434\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0449\u0435\u0439 \u0434\u043b\u044f\u00a0\u043e\u0431\u043e\u0438\u0445 \u044f\u0434\u0435\u0440.<\/p>\n<p>SRAM \u0432\u00a0RP2040\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 6\u00a0\u0431\u0430\u043d\u043a\u043e\u0432. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433 \u043a\u00a0\u0434\u0440\u0443\u0433\u0443, \u0447\u0442\u043e\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u00a0\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437\u00a0\u043d\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u043d\u043a\u0443 \u043f\u043e\u0434\u00a0\u0441\u0442\u0435\u043a \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0434\u0440\u0430. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u0432\u0430 \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u0430 \u043f\u043e 4\u00a0\u041a\u0411 \u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u041e\u0417\u0423.<\/p>\n<p>\u0410\u00a0\u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u00a0\u043a\u0443\u0447\u0435\u0439? \u041e\u043d\u0430 \u043d\u0435\u00a0\u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a\u00a0\u0436\u0435\u043b\u0435\u0437\u0443. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438\u00a0\u2014 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0432\u00a0SRAM \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e <strong>.heap<\/strong> \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0449\u0435\u0439 \u0434\u043b\u044f\u00a0\u043e\u0431\u043e\u0438\u0445 \u044f\u0434\u0435\u0440 \u043a\u0443\u0447\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430\u00a0\u0442\u0440\u0438 \u0442\u0438\u043f\u0430:<\/p>\n<ol>\n<li>\n<p>\u041b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u043e\u00a0Flash \u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u043e\u0442\u0442\u0443\u0434\u0430\u00a0\u0436\u0435: <strong>.boot2<\/strong>, <strong>.text<\/strong>, <strong>.rodata<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u0432\u00a0SRAM \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043e\u0442\u0442\u0443\u0434\u0430\u00a0\u0436\u0435: <strong>.bss<\/strong>, <strong>.heap<\/strong>, <strong>.stack0<\/strong>, <strong>.stack1<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u043e\u00a0Flash, \u043d\u043e\u00a0\u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u00a0SRAM \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043e\u0442\u0442\u0443\u0434\u0430: <strong>.data<\/strong>, <strong>.vector<\/strong><\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/162\/bc8\/bb8\/162bc8bb8b85b307466581d53804410a.png\" alt=\"\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0446\u0438\u0439\" width=\"2338\" height=\"730\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/162\/bc8\/bb8\/162bc8bb8b85b307466581d53804410a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/162\/bc8\/bb8\/162bc8bb8b85b307466581d53804410a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0446\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 <strong>\u0441\u043a\u0440\u0438\u043f\u0442\u0435\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430 (linker.ld)<\/strong>.<\/p>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430<\/h4>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043e\u043f\u0438\u0448\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u044b (\u043e\u0431\u043b\u0430\u0441\u0442\u0438) \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u043a\u0446\u0438\u0438. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b (\u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u043f\u0440.), \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0431\u043b\u043e\u043a\u0435 <strong>MEMORY<\/strong> \u043f\u043e\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443:<\/p>\n<pre><code>\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435_\u0440\u0435\u0433\u0438\u043e\u043d\u0430 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b) : ORIGIN = \u0431\u0430\u0437\u043e\u0432\u044b\u0439_\u0430\u0434\u0440\u0435\u0441, LENGTH = \u0440\u0430\u0437\u043c\u0435\u0440_\u0440\u0435\u0433\u0438\u043e\u043d\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434\u00a0\u0441\u0435\u043a\u0446\u0438\u0438 <strong>.boot2<\/strong>, <strong>.stack0<\/strong> \u0438 <strong>.stack1<\/strong> \u0434\u043b\u044f\u00a0\u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u043d\u0435\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u0434\u043b\u044f\u00a0\u043d\u0438\u0445 \u0447\u0435\u0442\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u0441\u0435\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u00a0\u043d\u0438\u043c. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u00a0\u0440\u0435\u0433\u0438\u043e\u043d\u0430\u0445 sram \u0438 flash (\u0445\u043e\u0442\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, <strong>.boot2<\/strong>, <strong>.stack0<\/strong> \u0438 <strong>.stack1<\/strong> \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432\u043e\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438\u00a0\u041e\u0417\u0423).<\/p>\n<pre><code>MEMORY{    boot2   (rx)    : ORIGIN = 0x10000000, LENGTH = 256    flash   (rx)    : ORIGIN = 0x10000100, LENGTH = 2040k    sram    (rwx)   : ORIGIN = 0x20000000, LENGTH = 256k    stack_x (rwx)   : ORIGIN = 0x20040000, LENGTH = 4k    stack_y (rwx)   : ORIGIN = 0x20041000, LENGTH = 4k}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u0442\u0440\u0438\u0431\u0443\u0442 <strong>rx<\/strong> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u0440\u0435\u0433\u0438\u043e\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f\u00a0\u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, <strong>rwx<\/strong>\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0447\u0442\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0437\u0430 <strong>MEMORY<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b <strong>SECTIONS<\/strong>, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>\u0438\u043c\u044f_\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439_\u0441\u0435\u043a\u0446\u0438\u0438 :{*(\u0438\u043c\u044f_\u0432\u0445\u043e\u0434\u043d\u043e\u0439_\u0441\u0435\u043a\u0446\u0438\u0438)} &gt; \u0440\u0435\u0433\u0438\u043e\u043d_\u043f\u0430\u043c\u044f\u0442\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>SECTIONS {.text : ALIGN(4)    {        *(.text*)    } &gt; flash    .rodata : ALIGN(4)    {        *(.rodata*)    } &gt; flash}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443 \u043e\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0432\u00a0\u0440\u0435\u0433\u0438\u043e\u043d\u0435 <strong>flash<\/strong> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434, \u0437\u0430\u0442\u0435\u043c\u00a0\u2014 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043d\u0435\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u0435\u043d.<\/p>\n<p>\u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <strong>ALIGN(4)<\/strong> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u043e 4\u00a0\u0431\u0430\u0439\u0442\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043c\u043e\u0433 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a\u00a0\u0435\u0451 \u0430\u0434\u0440\u0435\u0441\u0430\u043c.<\/p>\n<p>\u041c\u044b \u043f\u0438\u0448\u0435\u043c<\/p>\n<pre><code>*(.text*)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u00a0\u043d\u0435<\/p>\n<pre><code>*(.text)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430, \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u00ab.text\u00bb (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u00ab.text.main\u00bb). \u0417\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0430 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0412\u0445\u043e\u0434\u043d\u0430\u044f \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0438\u043c\u044f.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043d\u043e\u00a0\u043e\u043d\u0430 \u043d\u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u043a\u043e\u0434\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e BootROM \u0431\u0435\u0437\u00a0\u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u043d\u0435\u00a0\u0443\u0434\u0430\u043b\u0438\u043b \u0435\u0451 \u00ab\u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e\u00bb, \u0435\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u00a0\u0441\u0435\u043a\u0446\u0438\u044e \u0441\u00a0\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c <strong>KEEP<\/strong>.<\/p>\n<p>\u041d\u0430\u0448\u0430 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 252\u00a0\u0431\u0430\u0439\u0442, \u043d\u043e\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0442\u043a\u043e \u0432\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 4\u0445 \u0431\u0430\u0439\u0442\u0430\u0445 \u0441\u0435\u043a\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a\u00a0\u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443. <\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <strong>\u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c<\/strong> \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f <strong>\u0442\u043e\u0447\u043a\u043e\u0439<\/strong>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0441\u0435\u043a\u0446\u0438\u044e, \u043a\u0443\u0440\u0441\u043e\u0440 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u0435\u0440\u0435\u0434.<\/p>\n<p>\u041d\u043e\u00a0\u043e\u043d \u043d\u0435\u00a0\u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0437\u0430\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 252\u00a0\u0431\u0430\u0439\u0442, \u0442\u043e\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u0432\u044b\u0434\u0430\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u043d\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443.<\/p>\n<pre><code>.boot2 : ALIGN(4)    {        KEEP(*(.boot2))        . = ORIGIN(boot2) + 252;        LONG(0x00000000)    } &gt; boot2<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>LONG(0\u00d700000000)<\/strong> \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b 32\u00a0\u0431\u0438\u0442\u0430 \u043d\u0443\u043b\u044f\u043c\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u043e\u0437\u0436\u0435. \u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u0430\u0434\u0440\u0435\u0441\u0430 0\u00d710000000, \u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 <strong>flash<\/strong>.<\/p>\n<p>\u0421\u0435\u043a\u0446\u0438\u0438 <strong>.bss<\/strong>, <strong>.stack0<\/strong>, <strong>.stack1<\/strong> \u0438 <strong>.heap<\/strong> \u043d\u0435\u00a0\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435, \u043d\u0430\u043c\u00a0\u043b\u0438\u0448\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u00a0\u043d\u0438\u0445 \u043c\u0435\u0441\u0442\u043e \u0432\u00a0SRAM. \u0412\u00a0\u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <strong>NOLOAD<\/strong>.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043a\u0443\u0447\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u043c 8\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u043a\u0430\u043a\u00a0\u0431\u044b\u043b\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u0435\u043d\u043e \u0440\u0430\u043d\u0435\u0435, Reset Handler\u2019\u0443 \u043d\u0443\u0436\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u0447\u0430\u043b \u0438 \u043a\u043e\u043d\u0446\u043e\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u0439. \u0412\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0435\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430 \u043e\u043d\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a <strong>\u043c\u0435\u0442\u043a\u0438<\/strong>, \u0430\u00a0\u0432\u00a0startup.c \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u043a\u0430\u043a\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. <\/p>\n<p>\u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 ARM Cortex\u2011M \u0441\u0442\u0435\u043a \u0440\u0430\u0441\u0442\u0435\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437.<\/p>\n<pre><code>.bss (NOLOAD) : ALIGN(4){    _bss_st = .;    *(.bss*)    *(COMMON). = ALIGN(4);    _bss_end = .;} &gt; sram.heap (NOLOAD) : ALIGN(4){    _heap_st = .;    . = . + 8k;    _heap_end = .;} &gt; sram.stack0 (NOLOAD) :{    _stack0_bot = .;    . = . + LENGTH(stack_x);    _stack0_top = .;} &gt; stack_x.stack1 (NOLOAD) :{    _stack1_bot = .;    . = . + LENGTH(stack_y);    _stack1_top = .;} &gt; stack_y<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p><strong>COMMON<\/strong>\u00a0\u2014 \u044d\u0442\u043e \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f \u0434\u043b\u044f\u00a0\u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0432\u00a0\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a.bss \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u00a0\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0412\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u0444\u043b\u0430\u0433\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 <strong>COMMON<\/strong> \u0438 <strong>.bss<\/strong> \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0438\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u00a0\u043d\u0438\u0445 \u043a\u0430\u043a\u00a0\u043e\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 <strong>.bss<\/strong> \u0438 \u0432\u00a0\u0442\u043e\u00a0\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438.<\/p>\n<\/blockquote>\n<p>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u0438 <strong>.data<\/strong> \u0438 <strong>.vector<\/strong> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0430\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u044c\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443, \u0447\u0442\u043e\u00a0\u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u2011\u043f\u043e\u0434 SRAM. \u0422\u043e \u0435\u0441\u0442\u044c, \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0441\u0441\u044b\u043b\u043a\u0438,\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e <strong>\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043a\u0446\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u00a0SRAM, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u00a0\u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043d\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432\u043e\u00a0Flash<\/strong>.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e <strong>\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0445 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432<\/strong>\u00a0\u2014 <strong>LMA (Load Memory Address) \u0438 VMA (Virtual Memory Address)<\/strong>, \u0433\u0434\u0435 LMA\u00a0\u2014 \u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u043a\u0446\u0438\u044e, \u0430\u00a0VMA\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0438\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u00a0\u0434\u0430\u043d\u043d\u044b\u043c. <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c2\/706\/d60\/0c2706d60f138a6ed87a3105e9404b52.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f .data\" title=\"\" width=\"1075\" height=\"865\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0c2\/706\/d60\/0c2706d60f138a6ed87a3105e9404b52.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c2\/706\/d60\/0c2706d60f138a6ed87a3105e9404b52.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418 \u0435\u0441\u043b\u0438 \u0443\u00a0\u0441\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 <strong>.text<\/strong>, \u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0443, <strong>LMA<\/strong> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <strong>VMA<\/strong>, \u0430\u00a0\u0443 <strong>.bss<\/strong> LMA \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u0434\u043b\u044f\u00a0\u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <strong>AT<\/strong>: <\/p>\n<pre><code>\u0438\u043c\u044f_\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439_\u0441\u0435\u043a\u0446\u0438\u0438 :{......} &gt; \u0440\u0435\u0433\u0438\u043e\u043d_vma AT &gt; \u0440\u0435\u0433\u0438\u043e\u043d_lma<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>LOADADDR<\/strong>. \u0422\u0430\u043a\u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u0430 \u043f\u043e 256\u00a0\u0431\u0430\u0439\u0442\u0430\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM, \u0438, \u043f\u043e\u00a0\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 <strong>.boot2<\/strong>, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e \u0432\u0445\u043e\u0434\u043d\u0443\u044e <strong>.vector<\/strong> \u0441\u00a0\u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 <strong>KEEP<\/strong>.<\/p>\n<pre><code>.data : ALIGN(4){    _data_st = .;    *(.data*). = ALIGN(4);    _data_end = .;} &gt; sram AT &gt; flash_data_src = LOADADDR(.data);.vector : ALIGN(256){    _vector_st = .;    KEEP(*(.vector)). = ALIGN(4);    _vector_end = .;} &gt; sram AT &gt; flash_vector_src = LOADADDR(.vector);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e\u00a0\u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430\u00a0\u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u0432\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 <strong>ENTRY<\/strong>:<\/p>\n<pre><code>ENTRY(boot2)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 <strong>linker.ld<\/strong> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code>ENTRY(boot2)MEMORY{    boot2   (rx)    : ORIGIN = 0x10000000, LENGTH = 256    flash   (rx)    : ORIGIN = 0x10000100, LENGTH = 2040k    sram    (rwx)   : ORIGIN = 0x20000000, LENGTH = 256k    stack_x (rwx)   : ORIGIN = 0x20040000, LENGTH = 4k    stack_y (rwx)   : ORIGIN = 0x20041000, LENGTH = 4k}SECTIONS{       .boot2 :    {        KEEP(*(.boot2))        . = ORIGIN(boot2) + 252;        LONG(0x00000000)    } &gt; boot2    .vector : ALIGN(256)    {        _vector_st = .;        KEEP(*(.vector))        . = ALIGN(4);        _vector_end = .;    } &gt; sram AT &gt; flash    _vector_src = LOADADDR(.vector);    .text : ALIGN(4)    {        *(.text*)    } &gt; flash    .rodata : ALIGN(4)    {        *(.rodata*)    } &gt; flash    .data : ALIGN(4)    {        _data_st = .;        *(.data*)        . = ALIGN(4);        _data_end = .;    } &gt; sram AT &gt; flash    _data_src = LOADADDR(.data);    .bss (NOLOAD) : ALIGN(4)    {        . = ALIGN(4);        _bss_st = .;        *(.bss*)        *(COMMON)        . = ALIGN(4);        _bss_end = .;    } &gt; sram    .heap (NOLOAD) : ALIGN(4)    {        . = ALIGN(4);        _heap_st = .;        . = . + 8k;        _heap_end = .;    } &gt; sram    .stack0 (NOLOAD) :    {        _stack0_bot = .;        . = . + LENGTH(stack_x);        _stack0_top = .;    } &gt; stack_x    .stack1 (NOLOAD) :    {        _stack1_bot = .;        . = . + LENGTH(stack_y);        _stack1_top = .;    } &gt; stack_y}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0SRAM \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u0441\u0430\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 (\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438), \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<h2>\u041a\u043e\u0434 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043d\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u0441\u043a\u0435\u043b\u0435\u0442 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u00a0\u0435\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0438.<\/p>\n<h3>\u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a<\/h3>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u043d\u0430\u00a0\u044f\u0437\u044b\u043a\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d <a href=\"https:\/\/github.com\/Shelbyconniy\/RP2040-Baremetal\/blob\/main\/startup\/boot2_QuadIO.S\" rel=\"noopener noreferrer nofollow\">\u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u00a0\u0421\u0438 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u00a0\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445 \u0432 252\u00a0\u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 <strong>\u0432\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430<\/strong> (\u043e\u043d\u00a0\u0436\u0435 <strong>\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0437\u044b<\/strong>)\u00a0\u2014 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 SSI\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c XIP, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0434\u043b\u044f\u00a0\u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f\u00a0\u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u00a0\u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0435? \u041d\u0430\u00a0\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0447\u0438\u043d:<\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u0440\u0430\u0437\u043d\u044b\u0435 \u0447\u0438\u043f\u044b Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u00a0BootROM, \u043d\u0435\u0442<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u00a0XIP \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0432\u00a0SRAM \u0441\u00a0\u0446\u0435\u043b\u044c\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f: \u0434\u0430\u0436\u0435 \u0441\u00a0\u0443\u0447\u0435\u0442\u043e\u043c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f XIP \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u00a0\u041e\u0417\u0423\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u043e\u00a0\u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u043c<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 SSI \u0432\u00a0RP2040\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0447\u0442\u0435\u043d\u0438\u044f Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<ol>\n<li>\n<p><strong>Standart SPI<\/strong> (\u043e\u043d\u00a0\u0436\u0435 <strong>Single SPI<\/strong>)\u00a0\u2014 \u043f\u043e 1\u00a0\u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430<\/p>\n<\/li>\n<li>\n<p><strong>Dual SPI<\/strong>\u00a0\u2014 2\u00a0\u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e 1\u00a0\u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430<\/p>\n<\/li>\n<li>\n<p><strong>Quad\u2011Output SPI<\/strong>\u00a0\u2014 4\u00a0\u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e 1\u00a0\u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430<\/p>\n<\/li>\n<li>\n<p><strong>Quad\u2011IO SPI\u00a0<\/strong>\u2014 \u043f\u043e 4\u00a0\u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a\u0430\u043a\u00a0\u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0439 (\u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u0438 \u0434\u043b\u044f\u00a0Single\u2011SPI, \u0438 \u0434\u043b\u044f\u00a0Quad\u2011IO). \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 Flash\u2011\u0447\u0438\u043f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c. \u0412\u00a0\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 Raspberry Pi Pico \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f Flash \u043e\u0442\u00a0\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Winbond, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0437\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c Quad\u2011IO SPI.<\/p>\n<p>\u0414\u0430\u0442\u0430\u0448\u0438\u0442 \u0434\u043b\u044f\u00a0Flash \u043b\u0435\u0436\u0438\u0442 <a href=\"https:\/\/docs.rs-online.com\/068a\/0900766b81622f8d.pdf\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h4>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0435\u043a\u0430<\/h4>\n<p>\u0421\u0442\u0435\u043a \u043d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u00a0\u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439: \u0432\u00a0\u043d\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043a\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c <strong>LIFO<\/strong> (Last In, First Out)\u00a0\u2014 \u00ab\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u0440\u0438\u0448\u0435\u043b, \u043f\u0435\u0440\u0432\u044b\u043c \u0432\u044b\u0448\u0435\u043b\u00bb.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u043c\u043e\u0433\u043b\u0430 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0434\u043b\u044f\u00a0\u043d\u0435\u0433\u043e \u0441\u0442\u0435\u043a, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0435\u0433\u043e \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>MSP (Main Stack Pointer)<\/strong>. \u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e\u00a0\u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c Reset Handler. \u0414\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u044f\u0434\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043a, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 BootROM.<\/p>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e\u00a0\u0432 <strong>linker.ld<\/strong> \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u043c\u0435\u0442\u043a\u0438 \u0432\u0435\u0440\u0445\u0443\u0448\u0435\u043a \u0438 \u043a\u043e\u043d\u0446\u043e\u0432 \u0441\u0442\u0435\u043a\u043e\u0432. <strong>MSP<\/strong> \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0437\u0430\u043d\u044f\u0442\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0438 \u0440\u0430\u0441\u0442\u0435\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437: \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0430\u0434\u0440\u0435\u0441 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 4, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/108\/ffb\/386\/108ffb386c07a88e1ad8da0879104380.png\" width=\"1592\" height=\"827\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/108\/ffb\/386\/108ffb386c07a88e1ad8da0879104380.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/108\/ffb\/386\/108ffb386c07a88e1ad8da0879104380.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9c6\/b9a\/be0\/9c6b9abe054aa491637c9befdcf691a9.png\" width=\"1592\" height=\"827\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9c6\/b9a\/be0\/9c6b9abe054aa491637c9befdcf691a9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9c6\/b9a\/be0\/9c6b9abe054aa491637c9befdcf691a9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b0d\/2af\/863\/b0d2af86308b28d2ac3869ba55b19734.png\" width=\"1592\" height=\"828\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b0d\/2af\/863\/b0d2af86308b28d2ac3869ba55b19734.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b0d\/2af\/863\/b0d2af86308b28d2ac3869ba55b19734.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0438 \u043f\u043e\u0434\u00a0\u0441\u0442\u0435\u043a \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c SRAM 0\u00d720004000-0\u00d720004FFF, \u0430\u00a0\u043d\u0430\u0448\u0430 \u043c\u0435\u0442\u043a\u0430 <code>stack0_top<\/code> \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0443 0\u00d7200041000\u00a0(0\u00d720040FFF + 1). \u041f\u0440\u0438\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u00a0\u0441\u0442\u0435\u043a \u043f\u043e\u00a0\u0430\u0434\u0440\u0435\u0441\u0443 0\u00d7200040FFC (0\u00d72004100\u00a0\u2014 4) \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0447\u0442\u043e\u00a0\u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u0437\u0430\u0439\u043c\u0435\u0442 4\u00a0\u044f\u0447\u0435\u0439\u043a\u0438 \u0441 0\u00d7200040FFC \u043f\u043e 0\u00d7200040FFF.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 boot2\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0441\u0431\u0440\u043e\u0441\u0430.<\/p>\n<h3>Reset_handler<\/h3>\n<p>\u041a\u0430\u043a\u00a0\u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, BootROM\u2011\u043e\u0432\u0441\u043a\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0431\u0440\u043e\u0441\u0430 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u041c\u041a\u00a0\u043b\u0438\u0448\u044c \u043d\u0430\u00a0\u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d 252\u00a0\u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043a\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 Reset_Handler. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b<\/h4>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/326\/6ee\/6a4\/3266ee6a45fda0f919aa0fcb32a686aa.png\" alt=\"\u0418\u0437 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u043a RP2040\" width=\"1850\" height=\"1250\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/326\/6ee\/6a4\/3266ee6a45fda0f919aa0fcb32a686aa.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/326\/6ee\/6a4\/3266ee6a45fda0f919aa0fcb32a686aa.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u0437\u00a0\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u043a\u00a0RP2040<\/figcaption><\/div>\n<\/figure>\n<p>RP2040\u00a0\u0438\u043c\u0435\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u00a0\u2014 <strong>ROSC<\/strong> (\u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u043e\u0441\u0446\u0438\u043b\u043b\u044f\u0442\u043e\u0440), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u044d\u043d\u0435\u0440\u0433\u0438\u0438, \u043d\u043e\u00a0\u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u0437\u043a\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c: \u0441\u0438\u0433\u043d\u0430\u043b, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438\u043c, \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f. \u0427\u0438\u043f \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u00a0\u043d\u0435\u043c \u043d\u0430\u00a0\u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 6\u201312\u00a0\u041c\u0413\u0446, \u0447\u0442\u043e\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e. \u0427\u0430\u0441\u0442\u043e\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f\u00a0\u0437\u0430\u0434\u0430\u0447, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b UART), ROSC \u043d\u0435\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. ROSC \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <strong>\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u2011\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b<\/strong>. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u0442. <\/p>\n<p>\u0412\u00a0RP2040\u00a0\u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0431\u043b\u043e\u043a <strong>XOSC<\/strong> (\u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439 \u043e\u0441\u0446\u0438\u043b\u043b\u044f\u0442\u043e\u0440), \u0441\u0430\u043c \u043a\u0432\u0430\u0440\u0446\u00a0\u2014 \u0432\u043d\u0435\u0448\u043d\u0438\u0439. \u0412\u00a0Raspberry Pi Pico \u043e\u043d \u0432\u044b\u0434\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 12\u00a0\u041c\u0413\u0446 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u043c\u0443 \u0434\u0438\u0437\u0430\u0439\u043d\u0443 RP2040. \u0421\u0438\u0433\u043d\u0430\u043b \u0441\u00a0XOSC \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u0434\u043b\u044f\u00a0\u043c\u043e\u0434\u0443\u043b\u0435\u0439 <strong>\u0424\u0430\u0437\u043e\u0432\u043e\u0439 \u0430\u0432\u0442\u043e\u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b<\/strong> (<strong>PLL<\/strong>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u043d\u043e\u0436\u0430\u044e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442\u00a0\u043a\u0432\u0430\u0440\u0446\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043d\u0430\u00a0\u043d\u0443\u0436\u043d\u043e\u0439\u00a0\u043b\u0438\u043d\u0438\u0438.<\/p>\n<p>Rp2040\u00a0\u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435\u00a0\u043b\u0438\u043d\u0438\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432: \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u044f\u0434\u0435\u0440, \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439\u00a0\u043b\u0438\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430\u00a0\u0432\u044b\u0431\u043e\u0440 (\u0441\u043c. \u0441\u0445\u0435\u043c\u0443 \u0432\u044b\u0448\u0435).<\/p>\n<p><strong>PLL_SYS<\/strong> \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u044f\u0434\u0435\u0440 \u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438. \u0418\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u00a0\u043b\u0438\u043d\u0438\u0438 <strong>clk_sys<\/strong> \u0438 <strong>clk_peri<\/strong>. \u0414\u043b\u044f\u00a0\u0431\u043b\u043e\u043a\u043e\u0432 USB \u0438 ADC, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u044b 48\u00a0\u041c\u0413\u0446, \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d <strong>PLL_USB<\/strong>. \u0412\u00a0\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a\u00a0\u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0448\u0438\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u041c\u041a,\u00a0\u043b\u0438\u043d\u0438\u044f <strong>clk_ref<\/strong>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430\u00a0\u0440\u0430\u0431\u043e\u0442\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u00a0\u043d\u0435\u0451 \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u0434\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u00a0XOSC.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8c\/c0e\/d73\/f8cc0ed73b542e3445666e78a49957be.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0445\u0435\u043c\u044b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\" width=\"1315\" height=\"920\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f8c\/c0e\/d73\/f8cc0ed73b542e3445666e78a49957be.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8c\/c0e\/d73\/f8cc0ed73b542e3445666e78a49957be.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0445\u0435\u043c\u044b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<ol>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 XOSC<\/p>\n<\/li>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 PLL<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u00a0\u043b\u0438\u043d\u0438\u0439 \u043d\u0430\u00a0\u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>(\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 ROSC<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u00a0\u043b\u0438\u0448\u044c <a href=\"https:\/\/github.com\/Shelbyconniy\/RP2040-Baremetal\/blob\/main\/startup\/startup.c\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a> \u0441\u00a0\u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u044f\u0434\u0435\u0440 125\u00a0\u041c\u0413\u0446. \u0422\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <strong>\u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (Watchdog)<\/strong>, \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 rp2040. \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u00a0\u043b\u0438\u043d\u0438\u0438 <strong>clk_ref<\/strong> (12\u00a0\u041c\u0413\u0446), \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d 12\u00a0(12\u00a0\u0442\u0438\u043a\u043e\u0432 = 1\u00a0\u043c\u043a\u0441, 12\u202f000\u202f000\u00a0\u0442\u0438\u043a\u043e\u0432 = 1\u00a0\u0441):<\/p>\n<pre><code class=\"cpp\">#define WATCHDOG_BASE   0x40058000#define WATCHDOG_TICK   (WATCHDOG_BASE + 0x2C)\/\/      [9]     Enable (0x1 by default)\/\/      [8:0]   Cycles (12 for 12 MHz)...void Reset_Handler() {...clearBits(WATCHDOG_TICK, 0x1FF); \/\/ [8:0]setBits(WATCHDOG_TICK, (12 &lt;&lt; 0));...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/h4>\n<p>\u0421\u0443\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f \u0441\u043a\u0435\u043b\u0435\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430: \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c <strong>.vector<\/strong> \u0438 <strong>.data<\/strong> \u0438\u0437\u00a0Flash \u0432\u00a0SRAM, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0435 \u044f\u0434\u0440\u0430 \u043c\u043e\u0433\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435; \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u0443\u043b\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434 <strong>.bss<\/strong> \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438. \u0417\u0434\u0435\u0441\u044c\u00a0\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430, \u043d\u043e\u00a0\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b \u044d\u0442\u043e \u0432\u00a0boot2.<\/p>\n<p>\u0412\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 startup.c \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043a\u0430\u043a\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0432\u00a0linker.ld \u043c\u0435\u0442\u043a\u0438, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <strong>VTOR<\/strong>.<\/p>\n<pre><code class=\"cpp\">#include &lt;stdint.h&gt;extern uint32_t _vector_src, _vector_st, _vector_end;extern uint32_t _data_src, _data_st, _data_end;extern uint32_t _bss_st, _bss_end;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043a\u0430\u043a\u00a0\u0441\u0435\u043a\u0446\u0438\u044f <strong>.vector<\/strong>. \u0427\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <strong>section<\/strong>:<\/p>\n<pre><code class=\"cpp\">typedef void (*vectFunc) (void); \/\/ \u0442\u0438\u043f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044evectFunc vector_table[] __attribute__((section(\".vector\"))) ={...};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u0431\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439\u00a0\u2014 \u044d\u0442\u043e \u043f\u043e\u00a0\u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0412\u00a0Cortex\u2011M \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/400\/11b\/a69\/40011ba69187e4f9758b2efc98e7f032.png\" width=\"1453\" height=\"1620\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/400\/11b\/a69\/40011ba69187e4f9758b2efc98e7f032.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/400\/11b\/a69\/40011ba69187e4f9758b2efc98e7f032.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/strong> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0441\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c RP2040), \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a <strong>\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/strong> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u044f\u0434\u0440\u0435 (\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c Cortex\u2011M0+).<\/p>\n<p>\u0412\u00a0startup.c \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u2011\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0441\u00a0\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c <strong>weak<\/strong> (\u00ab\u0441\u043b\u0430\u0431\u044b\u0439\u00bb), \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u0438 \u0441\u0441\u044b\u043b\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044e\u2011\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443 (Default Handler, \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <strong>alias<\/strong>), \u043d\u043e\u00a0\u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u00a0Reset_Handler \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <strong>.data<\/strong> \u0438 <strong>.vector<\/strong> \u0438\u0437\u00a0Flash \u0432\u00a0SRAM \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0443\u043b\u044f\u043c\u0438 <strong>.bss<\/strong>. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>VTOR<\/strong>, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (NVIC) \u043f\u0440\u0438\u00a0\u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u043a\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043d\u0430\u0439\u0434\u0435\u0442 \u0432\u00a0\u043d\u0435\u0439 \u043d\u0443\u0436\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<pre><code class=\"cpp\">void Reset_Handler() {\/\/ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f...\/\/ \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 .vector \u0432 SRAM    uint32_t *src = &amp;_vector0_src; \/\/ LMA    uint32_t *st = &amp;_vector0_st; \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 VMA    while (st &lt; &amp;_vector0_end) \/\/ \u0422\u0435\u043a\u0443\u0449\u0438\u0439 VMA &lt; \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e VMA        *st++ = *src++;st = &amp;_vector_st;    mmio_write_32(VTOR_ADDR, (uint32_t) st); \/\/ \u0422\u0435\u043f\u0435\u0440\u044c VTOR \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0448\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432    \/\/ \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 .data \u0432 SRAM    src = &amp;_data_src;    st = &amp;_data_st;    while (st &lt; &amp;_data_end)        *st++ = *src++;    \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f .bss \u0432 SRAM    st = &amp;_bss_st;    while (st &lt; &amp;_bss_end)        *st++ = 0;...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u043a\u0446\u0438\u0438 <strong>.data<\/strong> \u0438 <strong>.vector<\/strong> \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 (\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u0442\u0435\u043c, \u043a\u0430\u043a\u00a0\u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0430\u0434\u0440\u0435\u0441\u0430), \u0430\u00a0\u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0443\u043b\u044f\u043c\u0438 \u0441\u0435\u043a\u0446\u0438\u0438 <strong>.bss<\/strong> \u0435\u0451 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u043a\u0446\u0438\u0439 (\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f VTOR) \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0440\u044c\u0435\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<h4>\u0417\u0430\u0449\u0438\u0442\u0430 \u0441\u0442\u0435\u043a\u0430 \u043e\u0442\u00a0\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0437\u043e\u0432 main()<\/h4>\n<p>\u0421\u0442\u0435\u043a \u0440\u0430\u0441\u0442\u0435\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437, \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442, \u0433\u0434\u0435 \u0435\u0433\u043e \u043d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u044f\u0434\u0440\u043e \u043d\u0435\u00a0\u0437\u0430\u0434\u0435\u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0435\u043a\u043e\u043c, \u043f\u0440\u0438\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0435\u043a\u0430. \u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 \u0441\u0435\u0440\u0438\u0438 ARM Cortex\u2011M \u0434\u043b\u044f\u00a0\u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d <strong>MPU<\/strong> <strong>\u2014 Memory Protection Unit<\/strong> (\u041c\u043e\u0434\u0443\u043b\u044c \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438). \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 32\u00a0\u0431\u0430\u0439\u0442\u0430). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438\u0437\u00a0\u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0438\u043b\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0\u043d\u0435\u0433\u043e.<\/p>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u00a0\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0438\u0436\u043d\u0438\u0435 32\u00a0\u0431\u0430\u0439\u0442\u0430 \u0441\u0442\u0435\u043a\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u043f\u043e\u0434\u00a0\u043a\u0440\u0430\u0441\u043d\u0443\u044e \u0437\u043e\u043d\u0443: \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u0442 <strong>HardFault<\/strong>\u00a0\u2014 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435).<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0431\u0430\u0440\u044c\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0443\u0436\u0435 \u0441\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">...volatile uint32_t mpu_ctrl;void mpu_config(uint32_t ctrl_flags) {    mpu_ctrl = ctrl_flags;    mmio_write_32(MPU_CTRL, ctrl_flags);    __DSB();    __ISB();}void mpu_set_region(uint8_t region, uint32_t addr, uint32_t region_flags) {    mmio_write_32(MPU_RBAR, VALID | REGION(region) | REGION_ADDR(addr));    mmio_write_32(MPU_RASR, region_flags);    __DSB();    __ISB();}void Reset_Handler() {...mpu_config(MPU_ENABLE | PRIVDEFENA);mpu_set_region(0, (uint32_t) &amp;_stack0_bot, REGION_SIZE(5) | NO_ACCESS | NO_EXECUTE | EN_REGION);...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 Reset_Handler\u00a0\u2014 \u0432\u044b\u0437\u043e\u0432 <strong>main<\/strong>. \u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u041c\u041a \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 <strong>Core 0<\/strong> \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043a\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0441\u0432\u043e\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0440\u0430\u043d\u0435\u0435).<\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438<\/h2>\n<p><strong>Makefile<\/strong> \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d <a href=\"https:\/\/github.com\/Shelbyconniy\/RP2040-Baremetal\/blob\/main\/Makefile\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u0412\u00a0\u043d\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0438\u0441\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 header\u2019\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0430\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e source\u2011\u0444\u0430\u0439\u043b\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0445 \u0432\u00a0\u0444\u0430\u0439\u043b\u044b \u0441\u00a0\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c.d, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 make \u0441\u0430\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0446\u0435\u043b\u0438.<\/p>\n<pre><code>RP2040_Baremetal_Project\/\u251c\u2500\u2500 build\/\u2502   \u251c\u2500\u2500 core0_main.o\u2502   \u251c\u2500\u2500 core0_main.d\u2502   \u251c\u2500\u2500 ...\u2502   \u2514\u2500\u2500 output\/\u2502 \u251c\u2500\u2500 firmware.uf2\u2502 \u2514\u2500\u2500 ...\u251c\u2500\u2500 drivers\/\u2502   \u251c\u2500\u2500 mpu\/\u2502   \u2502\u251c\u2500\u2500 mpu.c\u2502   \u2502\u2514\u2500\u2500 mpu.h\u2502   \u2514\u2500\u2500 ...\u251c\u2500\u2500 startup\/\u2502   \u251c\u2500\u2500 boot2.S\u2502   \u2514\u2500\u2500 startup.c\u251c\u2500\u2500 tools\/\u2502   \u251c\u2500\u2500 add_crc32\/\u2502   \u2502\u2514\u2500\u2500 rp2040_crc32.py\u2502   \u2514\u2500\u2500 uf2conv\/\u2502   \u251c\u2500\u2500 uf2conv.py\u2502       \u2514\u2500\u2500 uf2families.json\u251c\u2500\u2500 core0_main.c\u251c\u2500\u2500 core1_main.c\u251c\u2500\u2500 linker.ld\u2514\u2500\u2500 Makefile<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0424\u0430\u0439\u043b\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/strong> \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432 <strong>\u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/strong> \u0432\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 <strong>arm\u2011none\u2011eabi\u2011gcc<\/strong>. \u041e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u00a0\u043f\u0430\u043f\u043a\u0443 build.<\/p>\n<pre><code>GCC:= arm-none-eabi-gccOBJDUMP := arm-none-eabi-objdumpOBJCOPY:= arm-none-eabi-objcopyLD := arm-none-eabi-ldUF2:= tools\/uf2\/uf2conv.pyCRC32:= tools\/add_crc32\/crc32_rp2040.pydrivers_dir := $(wildcard drivers\/*)src_drivers := $(notdir $(wildcard drivers\/*\/*.c))src_c:= core0_main.c core1_main.c startup.csrc_c+= $(src_drivers)src_asm:= boot2_QuadIO.SBUILD_DIR:= buildOUTPUT_DIR:= $(BUILD_DIR)\/outputASMFLAGS:= -mcpu=cortex-m0plus $(addprefix -I, $(drivers_dir)) -gGCCFLAGS:= -mcpu=cortex-m0plus $(addprefix -I, $(drivers_dir)) -g -O3 -nostdlib -ffreestandingLDFLAGS:= -Map=$(OUTPUT_DIR)\/memory.map -T linker.ld -nostdlibvpath %.S startupvpath %.c startup $(drivers_dir)objects:= $(addprefix $(BUILD_DIR)\/, $(patsubst %.c, %.o, $(src_c))) \\$(addprefix $(BUILD_DIR)\/, $(patsubst %.S, %.o, $(src_asm)))deps:= $(patsubst %.o, %.d, $(objects))all: $(OUTPUT_DIR)\/pico_fw.uf2$(BUILD_DIR) $(OUTPUT_DIR):mkdir -p $@...-include $(deps)$(BUILD_DIR)\/%.o: %.c | $(BUILD_DIR)$(GCC) $(GCCFLAGS) -MMD -MP -MF $(patsubst %.o, %.d, $@) -c $&lt; -o $@$(BUILD_DIR)\/%.o: %.S | $(BUILD_DIR)$(GCC) $(ASMFLAGS) -MMD -MP -MF $(patsubst %.o, %.d, $@) -c $&lt; -o $@clean:rm -rf $(BUILD_DIR).PHONY: clean<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u043b\u0430\u0433\u0438 <strong>\u2011nostdlib<\/strong> \u0438 <strong>\u2011ffreestanding<\/strong> \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043e\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0431\u0435\u0437\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0421\u0438 \u0438 \u0447\u0442\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u00a0\u0436\u0435\u043b\u0435\u0437\u0435 (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432).<\/p>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u043d\u044b \u0432\u00a0\u0435\u0434\u0438\u043d\u044b\u0439 <strong>ELF\u2011\u0444\u0430\u0439\u043b<\/strong> (Executable and Linkable Format) \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c linker.ld. ELF \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u00a0build\/output. \u0422\u0430\u043c\u00a0\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0444\u0430\u0439\u043b\u044b <strong>objdump<\/strong> \u0438 <strong>map<\/strong>, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u044b \u0438\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u0440\u0438\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0435.<\/p>\n<pre><code>$(OUTPUT_DIR)\/pico_fw_raw.elf: $(objects) | $(OUTPUT_DIR)$(LD) $(LDFLAGS) $(objects) -o $@$(OBJDUMP) -hSD $@ &gt; $(OUTPUT_DIR)\/rp2040.objdump<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u043f\u0443\u0442\u044c \u043e\u0442\u00a0\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e ELF\u2011\u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u00a0\u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u044f\u00a0\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c:<\/p>\n<p><strong>ELF \u2192 bin \u2192 bin \u0441\u00a0CRC32\u00a0\u2192 uf2<\/strong><\/p>\n<p>ELF \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0441\u0435\u043a\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u00a0\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a\u00a0bin\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u044b\u0440\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f <strong>elf \u2192 bin<\/strong> \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 <strong>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b<\/strong> \u0432\u00a0\u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0435\u0451 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Python\u2011\u0441\u043a\u0440\u0438\u043f\u0442 (\u0432 \u043f\u0430\u043f\u043a\u0435 tools), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442 \u0435\u0451 \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u0432\u00a0\u043a\u043e\u043d\u0435\u0446 \u043f\u0435\u0440\u0432\u044b\u0445 256\u00a0\u0431\u0430\u0439\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430.<\/p>\n<blockquote>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/770014\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e\u00a0CRC<\/a><\/p>\n<\/blockquote>\n<pre><code>$(OUTPUT_DIR)\/pico_fw.bin: $(OUTPUT_DIR)\/pico_fw_raw.elf$(OBJCOPY) -O binary $&lt; $@python3 $(CRC32) $@<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0443\u0434\u043e\u0431\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0uf2\u00a0\u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 <strong>uf2conv<\/strong> (\u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u00a0Python) \u043e\u0442\u00a0Microsoft.<\/p>\n<pre><code>$(OUTPUT_DIR)\/pico_fw.uf2: $(OUTPUT_DIR)\/pico_fw.binpython3 $(UF2) -b 0x10000000 -f 0xe48bff56 -c $&lt; -o $@<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b: <\/p>\n<ul>\n<li>\n<p>\u2011b \u0437\u0430\u0434\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (0\u00d710000000\u00a0\u2014 \u043d\u0430\u0447\u0430\u043b\u043e flash)<\/p>\n<\/li>\n<li>\n<p>\u2011f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439. Family ID (0xe48bff56\u00a0\u0434\u043b\u044f\u00a0rp2040). \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u043b\u0435 Family ID, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043b\u044f\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0438\u043f\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u2011c\u00a0\u2014 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e\u00a0\u043d\u0435\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 <strong>make <\/strong>\u0438 \u0437\u0430\u043a\u0438\u043d\u0443\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f uf2-\u0444\u0430\u0439\u043b \u043d\u0430\u00a0\u043f\u043b\u0430\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0441\u0442\u0430\u043b \u043c\u043e\u0440\u0433\u0430\u0442\u044c!<\/p>\n<h2>\u0423\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u043d\u044b\u0439 main() \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Core 1<\/h2>\n<p>\u0414\u043b\u044f\u00a0\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0443\u0445 \u044f\u0434\u0435\u0440 \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439: \u043f\u0443\u0441\u0442\u044c Core 0\u00a0\u0437\u0430\u0436\u0438\u0433\u0430\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u0430\u00a0Core 1\u00a0\u0433\u0430\u0441\u0438\u0442.<\/p>\n<p>\u0412 <strong>core0_main.c<\/strong> \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Core 1:<\/p>\n<pre><code class=\"cpp\">extern uint32_t _stack1_top, _stack1_bot;extern uint32_t _vector_st;extern void core1_main();#define STACK1_DEFAULT&amp;_stack1_top#define VECTOR_TABLE_DEFAULT&amp;_vector_stvoid core0_main(){...    core1_start(VECTOR_TABLE_DEFAULT, STACK1_DEFAULT, core1_main);...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0430\u043a\u043e\u0439:<\/p>\n<ol>\n<li>\n<p>Core 0\u00a0\u0437\u0430\u0436\u0438\u0433\u0430\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u0436\u0434\u0435\u0442 1\u00a0\u0441 <\/p>\n<\/li>\n<li>\n<p>Core 0\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u044f\u0434\u0440\u0443 \u0441\u0438\u0433\u043d\u0430\u043b \u0438 \u0436\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 <\/p>\n<\/li>\n<li>\n<p>Core 1\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b, \u0433\u0430\u0441\u0438\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u0436\u0434\u0435\u0442 1\u00a0\u0441<\/p>\n<\/li>\n<li>\n<p>Core 1\u00a0\u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u044f\u0434\u0440\u0443, \u0438 \u0446\u0438\u043a\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u044f\u0434\u0435\u0440 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432\u00a0\u043e\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u044f:<\/p>\n<pre><code class=\"cpp\">define MAILBOX_MAGIC   0x53594E43 \/\/ \"SYNC\"static inline void mailbox_sync_master() {    uint32_t primask_state = __save_PRIMASK(); \/\/ C\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 PRIMASK    mailbox_send_blocking(MAILBOX_MAGIC); \/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u044f\u0434\u0440\u0443 \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u0441\u0438\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438    __DMB(); \/\/ \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432\u043e\u0432\u0440\u0435\u043c\u044f    while (mailbox_read_blocking() != MAILBOX_MAGIC); \/\/ \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f    __set_PRIMASK(primask_state); \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 PRIMASK}static inline void mailbox_sync_slave() {    uint32_t primask_state = __save_PRIMASK();    while (mailbox_read_blocking() != MAILBOX_MAGIC); \/\/ \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430    mailbox_send_blocking(MAILBOX_MAGIC); \/\/ \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435    __DMB();    __set_PRIMASK(primask_state);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Core 1\u00a0\u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u0441\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e Core 0. \u0414\u043b\u044f\u00a0\u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a Core 1\u00a0\u0432\u044b\u0434\u0435\u043b\u0438\u043c <strong>ALARM1<\/strong>.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<pre><code class=\"cpp\">\/* core0_main.c *\/#include &lt;stdint.h&gt;#include \"gpio.h\"#include \"resets.h\"#include \"interrupts.h\"#include \"mailbox.h\"#include \"time.h\"#include \"mmio.h\"#include \"cores.h\"#define LED             25#define GPIO_FUNC       5#define ALARM0          0#define MAILBOX_CMD_0   0extern void core1_main();void core0_main(){    \/* \u0412\u044b\u0432\u043e\u0434 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0431\u0440\u043e\u0441\u0430 *\/    enable_devices(GPIO_RST | TIMER_RST);    \/* \u0420\u0435\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 ALARM0 \u0432 NVIC *\/    NVIC_EnableIRQ(TIMER_IRQ_0);    \/* GP25 -&gt; GPIO-mode *\/    pinmux_set(LED, GPIO_FUNC);    \/* GP25 -&gt; Output *\/    gpio_mode_output(LED);    \/* \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Core 1 *\/    core1_start(VECTOR_TABLE_DEFAULT, STACK1_DEFAULT, core1_main);    \/* \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f *\/    mailbox_sync_master();    while (1) {        gpio_set(LED); \/\/ \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c LED        sleep_ms(1000, ALARM0); \/\/ \u0416\u0434\u0430\u0442\u044c 1 \u0441        mailbox_send_blocking(MAILBOX_CMD_0); \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b Core 1        mailbox_read_blocking(); \/\/ \u0416\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0442 Core 1    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"cpp\">\/* core1_main.c *\/#include &lt;stdint.h&gt;#include \"gpio.h\"#include \"mmio.h\"#include \"mpu.h\"#include \"mailbox.h\"#include \"interrupts.h\"#include \"time.h\"extern uint32_t _stack1_bot;#define MAILBOX_CMD_1   1#define LED             25void core1_main() {    \/* \u0417\u0430\u0449\u0438\u0442\u0430 stack1 *\/    mpu_config(MPU_ENABLE | PRIVDEFENA);    mpu_set_region(0, (uint32_t) &amp;_stack1_bot, REGION_SIZE(5) | NO_ACCESS | NO_EXECUTE | EN_REGION);    \/* \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 ALARM1 \u0432 NVIC *\/    NVIC_EnableIRQ(TIMER_IRQ_1);    \/* \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f *\/    mailbox_sync_slave();    while (1) {        mailbox_read_blocking(); \/\/ \u0416\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0442 Core 0        gpio_clear(LED);        \/\/ \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c LED        sleep_ms(1000, ALARM1); \/\/ \u0416\u0434\u0430\u0442\u044c 1 \u0441        mailbox_send_blocking(MAILBOX_CMD_1); \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b Core 0    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u0442\u00a0\u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e\u00a0\u0438 \u0432\u00a0\u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u00a0\u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u0430 \u043d\u0435\u00a0\u0432\u0441\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b RP2040\u00a0\u0431\u044b\u043b\u0438 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c, \u0430\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u043d\u0435\u00a0\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b \u0432\u043e\u0432\u0441\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440))). \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0PIO, PWM, ADC \u0438 \u0432\u043e\u0432\u0441\u0435 \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041a\u00a0\u0441\u043b\u043e\u0432\u0443, \u0434\u0430\u0442\u0430\u0448\u0438\u0442 \u0443\u00a0RP2040\u00a0\u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439.<\/p>\n<p>\u0415\u0449\u0435 \u043f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u00a0Baremetal: \u043d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 SDK, \u043d\u043e\u00a0\u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u00a0\u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435.<\/p>\n<p>\u041b\u0438\u0447\u043d\u043e \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f RP2040\u00a0\u0441\u0442\u0430\u043b \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043d\u0435\u043f\u0430\u0445\u0430\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c \u0434\u043b\u044f\u00a0\u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f: \u0443\u00a0\u043c\u0435\u043d\u044f \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u043f\u044b\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438\/embedded\u2011\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\u00a0\u2014 \u044d\u0442\u043e \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0443\u0441\u0432\u043e\u0438\u0442\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0420\u0430\u0434, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u0443\u2011\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430\u00a0\u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/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\/articles\/1057874\/\">https:\/\/habr.com\/ru\/articles\/1057874\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u043e\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043e\u0442\u00a0Raspberry Pi Foundation\u00a0\u2014 RP2040\u00a0\u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0432\u0443\u0445 \u044f\u0434\u0435\u0440 ARM Cortex\u2011M0+, \u0438 \u043e\u00a0\u043f\u043b\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0447\u0438\u043f\u0435\u00a0\u2014 Raspberry Pi Pico.\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u0430 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b RP2040\u00a0\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0432\u00a0\u0446\u0435\u043b\u043e\u043c.RP2040\u00a0\u2014 \u043e\u0447\u0435\u043d\u044c \u0434\u0435\u0448\u0435\u0432\u044b\u0439 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (\u041c\u041a) \u0441\u00a0\u0434\u0432\u0443\u0445\u044a\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 USB \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 PIO (Programmable I\/O), \u0447\u0435\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0434\u043b\u044f\u00a0\u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 Macintosh 128K \u0441\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 VGA, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0438 \u043c\u044b\u0448\u0438.\u041e\u0431\u0449\u0430\u044f \u0442\u0435\u043e\u0440\u0438\u044f \u043f\u043e\u00a0RP2040\u00a0\u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043f\u043e\u00a0\u0442\u0435\u043c \u0438\u043b\u0438\u00a0\u0438\u043d\u044b\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u0441\u00a0\u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u043d\u044b\u0445: \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0431\u0430\u0437\u0438\u0441 \u0434\u043b\u044f\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c.\u0412\u0435\u0441\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434\u00a0\u2014\u00a0\u043b\u0438\u0448\u044c \u043c\u043e\u0435 \u043d\u0435\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0434\u043b\u044f\u00a0\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f. \u041e\u0441\u043d\u043e\u0432\u043d\u0443\u044e\u00a0\u0436\u0435 \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u0431\u0435\u0437\u00a0\u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.\u0412\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u043d\u0430\u00a0MicroPython, CircuitPython, C\/C++ \u0438\u043b\u0438\u00a0\u0432\u00a0\u0441\u0440\u0435\u0434\u0435 Arduino IDE. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430\u00a0\u0421\u0438 (+ \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430), \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043a\u0443\u0440\u0441 \u0432\u0437\u044f\u0442 \u043d\u0430\u00a0\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.Raspberry Pi Foundation \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 Pico C\/C++ SDK. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f\u00a0VS Code \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u00a0\u043a\u043e\u0434\u0435 breakpoint\u2019\u044b, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 SWD \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.Pico SDK \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b RP2040\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0438), \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0438\u0445 \u0438\u0434\u0435\u0439, \u0447\u0442\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043e\u0434\u0430 \u043b\u0435\u0433\u043a\u043e\u0439, \u043d\u043e\u00a0\u0431\u043e\u043b\u0435\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f SDK, \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441\u00a0\u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u00a0\u0432\u0430\u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u043c.RP2040\u00a0\u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0433\u0438\u0431\u043a\u0438\u0439 \u0438 \u043c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u00a0\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0438 \u0434\u043b\u044f\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0431\u0435\u0437\u00a0\u043e\u043f\u043e\u0440\u044b \u043d\u0430\u00a0SDK.\u041e\u0431\u0437\u043e\u0440 RP2040\u00a0\u0438 Raspberry Pi Pico\u0414\u0430\u0442\u0430\u0448\u0438\u0442 \u043a\u00a0RP2040 \u0437\u0434\u0435\u0441\u044c.\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0430\u0440\u0441\u0435\u043d\u0430\u043b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u043f\u043b\u0430\u0442\u044b.\u0420\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 Raspberry Pi Pico\u0421\u0445\u0435\u043c\u0430 RP2040\u0418\u0437\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e:2\u00a0\u044f\u0434\u0440\u0430 ARM Cortex\u2011M0+ \u0441\u00a0\u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0434\u043e 133\u00a0\u041c\u0413\u0446264\u041a\u0411 \u041e\u0417\u0423 (SRAM) + 16\u041a\u0411 BootROM\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e 16\u041c\u0411 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 (2\u00a0\u041c\u0411 \u0432\u00a0Pico)30\u00a0\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 GPIO (25\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432\u00a0Pico)\u041f\u043e 2\u00a0\u0431\u043b\u043e\u043a\u0430 UART, SPI \u0438 I2CPWM, 12-\u0431\u0438\u0442\u043d\u044b\u0439 ADC, RTC, \u0442\u0430\u0439\u043c\u0435\u0440DMA\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440USB 2.0\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (Host\/Device)2\u00a0\u0431\u043b\u043e\u043a\u0430 PIO (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0432\u0432\u043e\u0434\u2011\u0432\u044b\u0432\u043e\u0434)FIFO\u2011\u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0434\u0440\u0430\u043c\u0438\u041f\u0438\u0442\u0430\u0435\u0442\u0441\u044f Raspberry Pi Pico \u043e\u0442 1.8\u20135.5\u0412, \u0430\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432\u00a0\u2014 3.3\u0412, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u044c\u0442\u0435 \u0431\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u00a0\u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u0438\u043d\u0430\u043c \u043a\u0430\u043a\u0438\u0445\u2011\u043d\u0438\u0431\u0443\u0434\u044c 5-\u0432\u043e\u043b\u044c\u0442\u043e\u0432\u044b\u0445 \u0430\u0434\u0440\u0443\u0438\u043d\u043e\u0432\u0441\u043a\u0438\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0430\u043b\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.\u0418\u0437 26\u00a0\u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u00a0\u043f\u043b\u0430\u0442\u0435 GPIO \u043f\u0438\u043d\u043e\u0432 25\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f\u00a0\u043c\u043e\u043d\u0442\u0430\u0436\u0430, \u043e\u0434\u0438\u043d \u0437\u0430\u043d\u044f\u0442 \u043f\u043e\u0434\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434. \u0412\u044b\u0432\u0435\u0434\u0435\u043d\u044b \u0442\u0440\u0438 \u043f\u0438\u043d\u0430 \u043f\u043e\u0434\u00a0SWD\u2011\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a.\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u00a0\u043f\u043b\u0430\u0442\u0435 \u0440\u0430\u0441\u043f\u0430\u044f\u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u044f\u044f Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u043e\u043c 2\u00a0\u041c\u0411 \u0438 \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 12\u00a0\u041c\u0413\u0446.RP2040\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 UF2\u00a0\u043e\u0442\u00a0Microsoft. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0447\u0438\u043f \u0432\u00a0\u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u043a\u00a0\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043f\u043e\u00a0USB \u0441\u00a0\u0437\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 SELBOOT. RP2040\u00a0\u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c, \u0438 \u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c \u0432\u00a0\u043e\u043a\u043d\u043e \u0441\u00a0\u0434\u0438\u0441\u043a\u043e\u043c \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435.uf2Drag and drop\u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u043c\u044f\u0442\u0438\u0410\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e:0\u00d700000000\u2026.\u00a0\u2014 BootROM: \u0417\u0430\u0448\u0438\u0442\u0430\u044f \u0432\u00a0\u0447\u0438\u043f \u043d\u0430\u00a0\u0437\u0430\u0432\u043e\u0434\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u04350\u00d710000000\u2026.\u00a0\u2014 Flash\u2011XIP: \u0414\u043e\u0441\u0442\u0443\u043f \u043a\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 Read\u2011Only \u0434\u043b\u044f\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u0430 \u043f\u0440\u044f\u043c\u043e \u0438\u0437\u00a0Flash, \u0431\u0435\u0437\u00a0\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u041e\u0417\u04230\u00d720000000\u2026.\u00a0\u2014 SRAM: \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u041c\u041a. \u0417\u0434\u0435\u0441\u044c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.0\u00d740000000\u2026.\u00a0\u2014 \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u044f\u0434\u0435\u0440 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435\u0422\u0430\u043a \u043a\u0430\u043a\u00a0Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044f\u044f, RP2040\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 SSI (\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0447\u0435\u0440\u0435\u0437 SPI) \u0434\u043b\u044f\u00a0\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u00a0\u043d\u0435\u0439. \u0421\u00a0\u0435\u0433\u043e\u00a0\u0436\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f XIP (eXecute\u2011In\u2011Place), \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043a\u0430\u043a\u00a0\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c Flash\u2011\u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432\u00a0\u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e RP2040, \u043d\u043e\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u0447\u0442\u0435\u043d\u0438\u044f. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0441\u00a0\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u043c \u043d\u0430\u00a0Raspberry Pi Pico, \u0433\u0434\u0435 \u043e\u0431\u044a\u0435\u043c Flash\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 2\u00a0\u041c\u0411.\u042f\u0434\u0440\u0430 Cortex\u2011M0+ \u043d\u0435\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 FPU, \u043d\u043e\u00a0\u0432\u00a0ROM \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440 \u0432\u044b\u0441\u043e\u043a\u043e\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438.\u0412\u00a0Rp2040\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0448\u0438\u043d\u044b:\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u0431\u0435\u0437 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f)\u00a0\u2014 \u043f\u0440\u044f\u043c\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0438\u043b\u0438\u00a0\u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0435XOR (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u00d71000)\u00a0\u2014 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 (\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u00ab\u0438\u043b\u0438\u00bb)CLR (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u00d72000)\u00a0\u2014 \u0441\u0431\u0440\u043e\u0441 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435SET (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u00d71000)\u00a0\u2014 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0432\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 (\u00ab\u0438\u043b\u0438\u00bb)\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u00a0\u044f\u0437\u044b\u043a\u0435 \u0421\u0438:#define XOR_OFFSET 0x1000#define SET_OFFSET 0x2000#define CLR_OFFSET 0x3000static inline void mmio_write_32(uint32_t addr, uint32_t value) {    *(volatile uint32_t *)addr = value;}static inline uint32_t mmio_read_32(uint32_t addr) {    return *(volatile uint32_t *)addr;}static inline void setBits(uint32_t addr, uint32_t value) {    mmio_write_32(addr + SET_OFFSET, value);}static inline void clearBits(uint32_t addr, uint32_t value) {    mmio_write_32(addr + CLR_OFFSET, value);}static inline void invertBits(uint32_t addr, uint32_t value) {    mmio_write_32(addr + XOR_OFFSET, value);}\u0412\u0441\u0435 \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u044b. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f\u00a0\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0432\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0434\u0432\u0443\u0445\u044a\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Rp2040.\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 4\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430. \u0414\u043e\u0441\u0442\u0443\u043f \u043a\u00a0PIO, USB \u0438 DMA \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0437\u0430 1\u00a0\u0442\u0430\u043a\u0442 \u0448\u0438\u043d\u044b, \u0430\u00a0\u043a\u00a0\u0442\u0430\u043a\u0438\u043c \u0431\u043b\u043e\u043a\u0430\u043c \u043a\u0430\u043a\u00a0UART, SPI, I2C, PWM \u0438 \u043f\u0440. (\u0441\u043c. \u0441\u0445\u0435\u043c\u0443 \u0432\u044b\u0448\u0435)\u00a0\u2014 \u0437\u0430 3\u00a0\u0442\u0430\u043a\u0442\u0430.\u0411\u0430\u0440\u044c\u0435\u0440\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438\u0412\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u043d\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0430\u0440\u044c\u0435\u0440\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u043d\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0432\u00a0\u0441\u0438\u043b\u0443 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.\u0412\u00a0\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARM \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u2011\u0431\u0430\u0440\u044c\u0435\u0440\u0430:DMB (Data Memory Barrier) \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b.DSB (Data Synchronization Barrier) \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0434\u043e\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044bISB (Instruction Synchronization Barrier) \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0437\u044f\u0442\u044b \u0438\u0437\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u043e\u0432\u043estatic inline void __DMB() {    asm volatile (&#171;dmb&#187; : : : &#171;memory&#187;);}static inline void __DSB() {    asm volatile (&#171;dsb&#187; : : : &#171;memory&#187;);}static inline void __ISB() {    asm volatile (&#171;isb&#187; : : : &#171;memory&#187;);}\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u00abmemory\u00bb \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043e\u00a0\u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0441\u00a0\u0435\u0433\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b.\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0441\u00a0\u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 IRQ (Interrupt ReQuest)\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 RP2040\u00a0\u0438\u043c\u0435\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a\u00a0\u0441\u0432\u043e\u0438\u043c IRQ: INTR (Interrupt Raw Status)\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u00ab\u0441\u044b\u0440\u043e\u0439\u00bb \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0444\u0430\u043a\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u00a0\u044d\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u0417\u0430\u043f\u0438\u0441\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430INTE (Interrupt Enable)\u00a0\u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c\/\u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435.INTF (Interrupt Force)\u00a0\u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435INTS (Interrupt Status)\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0417\u0430\u043f\u0438\u0441\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0432\u00a0INTE, \u0442\u043e \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e\u00a0NVIC (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439) \u043e\u0431\u043e\u0438\u0445 \u044f\u0434\u0435\u0440. \u0415\u0441\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0432\u00a0NVIC \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u0442\u043e \u043e\u043d\u043e \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e\u00a0\u044f\u0434\u0440\u0430.\u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0434\u0432\u0443\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430) \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0448\u043b\u043e \u0434\u043e\u00a0\u044f\u0434\u0440\u0430, \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0438 \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u0432\u00a0NVIC\u0417\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0INTE \u0438\u043b\u0438\u00a0INTR \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f\u00a0\u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f: \u0435\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u00a0NVIC, \u044f\u0434\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435\u0421\u0430\u043c NVIC \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u044f\u0434\u0440\u0435 ARM Cortex\u2011M0+ \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0431\u0440\u043e\u0441\u0430 \u0438 \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439.\u041a\u0430\u0436\u0434\u043e\u0435 \u044f\u0434\u0440\u043e ARM Cortex\u2011M \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0444\u043b\u0430\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 PRIMASK, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u00a0\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043e\u043d \u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u0442\u043e \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u043e\u0442\u00a0NVIC, \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u043d\u0435\u00a0\u0430\u043a\u0442\u0438\u0432\u0435\u043d. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0443\u043c\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438. \u0421\u0445\u0435\u043c\u0430\u00a0\u043b\u0438\u043d\u0438\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 rp2040#define CORTEX_BASE 0xE0000000#define NVIC_IRQ_SET_EN         (CORTEX_BASE + 0xE100) #define NVIC_IRQ_CLR_EN         (CORTEX_BASE + 0xE180) #define NVIC_IRQ_SET_PENDING    (CORTEX_BASE + 0xE200) #define NVIC_IRQ_CLR_PENDING    (CORTEX_BASE + 0xE280)static inline void NVIC_EnableIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_SET_EN, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}static inline void NVIC_DisableIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_CLR_EN, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}static inline void NVIC_SetPendingIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_SET_PENDING, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}static inline void NVIC_ClearPendingIRQ(uint32_t irq_number) {    mmio_write_32(NVIC_IRQ_CLR_PENDING, (1 &lt;&lt; irq_number));    __DSB();    __ISB();}static inline void __enable_irq() {    asm volatile (&#171;cpsie i&#187; : : : &#171;memory&#187;);}static inline void __disable_irq() {    asm volatile (&#171;cpsid i&#187; : : : &#171;memory&#187;);}\u041c\u0435\u0436\u044a\u044f\u0434\u0435\u0440\u043d\u0430\u044f \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f (Mailbox)\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 FIFO\u2011\u0431\u0443\u0444\u0435\u0440\u0430 (First In, First Out) \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u043e\u0431\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 \u0432 8\u00a0\u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0432. \u0427\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 (RX) \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437\u00a0\u043d\u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u0442\u0430\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u042f\u0434\u0440\u0430 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0443\u00a0\u043d\u0438\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 32\u00a0\u0431\u0438\u0442\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0442\u0430\u0442\u0443\u0441\u0430.#define SIO_BASE 0xD0000000#define&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-486884","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/486884","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=486884"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/486884\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=486884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=486884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=486884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}