{"id":368050,"date":"2024-05-21T03:34:23","date_gmt":"2024-05-21T03:34:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=368050"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=368050","title":{"rendered":"<span>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 CAN bus \u0441\u043d\u0438\u0444\u0444\u0435\u0440 \u0441 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e \u0437\u0430 $3<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b30\/ecb\/2ec\/b30ecb2ecc470f669c7350764806b925.jpg\" alt=\"ESP32-C3 + SN65HVD230 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438\" title=\"ESP32-C3 + SN65HVD230 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438\" width=\"1280\" height=\"964\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b30\/ecb\/2ec\/b30ecb2ecc470f669c7350764806b925.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>ESP32-C3 + SN65HVD230 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b CAN \u0441\u0435\u0439\u0447\u0430\u0441 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0444\u0435\u0440\u0435, \u043d\u043e \u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u0445, \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u043a\u0430\u0445, \u0438 \u0434\u0430\u0436\u0435 \u0432 \u0421\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445 \u0418\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u041c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b VESC, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440). \u0412 \u043d\u043e\u044f\u0431\u0440\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 CAN \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u043c (MIT License) \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b\u0445: <a href=\"https:\/\/github.com\/okhsunrog\/can_wizard\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/okhsunrog\/can_wizard<\/a><br \/>\u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/be9\/3ef\/62c\/be93ef62c1995a8868d2757bdb983860.gif\" alt=\"\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f UART-\u043a\u043e\u043d\u0441\u043e\u043b\u044c\" title=\"\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f UART-\u043a\u043e\u043d\u0441\u043e\u043b\u044c\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/be9\/3ef\/62c\/be93ef62c1995a8868d2757bdb983860.gif\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f UART-\u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/figcaption><\/div>\n<\/figure>\n<h4>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0435\u043d\u044f \u043f\u043e\u0434\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u043e \u043a \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e. \u041d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u0448\u0438\u043d\u044b CAN, \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043f\u0435\u0440\u0432\u0430 \u0434\u0435\u043b\u043e \u0440\u0435\u0448\u0438\u043b\u043e\u0441\u044c \u043f\u043b\u0430\u0442\u043e\u0439 Arduino Uno \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u043e\u0439 CAN \u0441 Aliexpress, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u043f\u043e SPI \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 CAN MCP2515 \u0438 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 MCP2551. \u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0437\u0430 5-10 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0431\u044b\u043b\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u0430 \u0432 UART \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 CAN-\u0444\u0440\u0435\u0439\u043c\u044b \u0438 \u0438\u043c\u0435\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0444\u0440\u0435\u0439\u043c\u043e\u0432. \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 UART \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0445 \u0432 \u0444\u0440\u0435\u0439\u043c \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043b\u0435\u043d\u044c. \u041f\u043e\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0430\u0434\u043e\u0435\u043b\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u044b\/\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434 \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c Arduino, \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435. \u041f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u044f \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f Raspberry Pi \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0438\u043b\u044c\u0434\u0438\u043a\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 MCP2551 + SN65HVD230. \u041f\u043e\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u0438 \u0434\u043e\u043c\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 CAN, \u043e\u0442\u043a\u0440\u044b\u0432 \u0434\u0432\u0430 \u043e\u043a\u043d\u0430 \u0432 tmux: candump + cansend. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0434\u0435\u0440\u0436\u0443 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u043b\u0438\u043d\u043a\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f CAN: \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 x86_64 \u0438 \u044f \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u0437\u0430\u0434\u0430\u0447, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u0435 \u0431\u044b\u043b\u0430 \u0431\u044b \u043d\u0443\u0436\u043d\u0430 \u0435\u0449\u0451 \u0438 \u043c\u0430\u043b\u0438\u043d\u0430. \u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0435, \u0434\u0435\u0448\u0435\u0432\u043e\u0435 \u0438 \u0441\u0435\u0440\u0434\u0438\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u043b\u043e \u0431\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c: \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b CAN, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 CAN, \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 CAN \u0448\u0438\u043d\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0435\u043b\u0430\u043b \u0432\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 esp32-c3, \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0451\u043c.<\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 esp32-c3?<\/h4>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0440\u0435\u0434\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043c\u043e\u0439 \u0444\u0430\u0432\u043e\u0440\u0438\u0442 &#8212; \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e esp32 \u043e\u0442 Espressif. \u0412\u0430\u0436\u043d\u0430\u044f \u0434\u043b\u044f \u043d\u0430\u0441 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c &#8212; \u043f\u043e\u0447\u0442\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 esp32 \u0435\u0441\u0442\u044c CAN-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, CAN-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0435\u0441\u0442\u044c \u0438 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0447\u0438\u043f\u0430\u0445 stm32, \u043d\u043e \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0434\u0435\u043b\u0430\u043b \u0432\u0441\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 esp32 \u0438 \u0434\u0435\u0432\u0431\u043e\u0440\u0434\u044b \u043d\u0430 stm32 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e esp32-c3 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043b \u0438\u0437-\u0437\u0430 \u0441\u0430\u043c\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0439 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0433\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0445\u0432\u0430\u0442\u0438\u0442 \u043d\u0430\u043c \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439, \u0438\u0437-\u0437\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0447\u0438\u043f usb-serial, \u043d\u0443 \u0438 \u0441\u0435\u043a\u0446\u0438\u044f errata \u0432 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0435 \u0443 \u043d\u0435\u0433\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u0435\u0435, \u0447\u0435\u043c \u0443 \u0431\u043e\u043b\u0435\u0435 \u043e\u043b\u0434\u043e\u0432\u044b\u0445 esp32. \u041f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 &#171;esp32-c3 board&#187; \u043d\u0430 \u0410\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043b\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u044f\u0442 \u0432\u0441\u0435\u0433\u043e 180 \u0440\u0443\u0431\u043b\u0435\u0439. \u041c\u043d\u0435 \u043e\u043d\u0438 \u0442\u0430\u043a \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u044f \u0437\u0430\u043a\u0443\u043f\u0438\u043b \u0446\u0435\u043b\u044b\u0445 20 \u0448\u0442\u0443\u043a. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u0443\u044e \u0434\u043e\u0431\u0440\u0443\u044e SN65HVD230. \u041d\u0430 \u0430\u043b\u0438 \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 \u0441 \u044d\u0442\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 \u043f\u043e \u0446\u0435\u043d\u0435 50-90 \u0440\u0443\u0431\u043b\u0435\u0439 (\u0447\u0435\u043c \u0434\u043e\u0440\u043e\u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u044c &#8212; \u0442\u0435\u043c \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430). \u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0446\u0435\u043d\u0430 \u0434\u0435\u0432\u0431\u043e\u0440\u0434\u044b esp32-c3 + \u043f\u043b\u0430\u0442\u044b \u0441 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u043c + \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 3 \u0434\u043e\u043b\u043b\u0430\u0440\u0430.<\/p>\n<h4>\u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u043d\u0430 \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0444\u0442?<\/h4>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 &#8212; \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0434\u043e\u0431\u0440\u043e\u043c \u0421\u0438! \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a esp-idf \u043e\u0442 Espressif. \u041e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u0430\u044f \u0432\u0435\u0449\u044c \u0441 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439, \u043a\u0443\u0447\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a\u043e\u0434\u0430. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443 \u043d\u0435\u0451 \u0444\u043e\u0440\u043a\u043d\u0443\u0442\u0430\u044f FreeRTOS, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u0447\u0438\u043f &#8212; \u043e\u0434\u043d\u043e\u044f\u0434\u0435\u0440\u043d\u044b\u0439, \u0442\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 FreeRTOS \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 C++ \u0432 esp-idf \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u0438\u0448\u043d\u044b\u0439 \u0438 \u043f\u043b\u044e\u0441\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u0442\u0435\u043c \u043f\u0430\u0447\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u044b\u0439 Arduino. \u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043a\u0430 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u043c\u043e\u0434\u043d\u043e\u0433\u043e Rust, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e Espressif \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0432\u043e\u0434\u0438\u0442 (\u043a\u043e\u043c\u043c\u0438\u0442\u044b \u0441\u044b\u043f\u044f\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e, \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435). \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 + \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u041a\u0430\u043a-\u0442\u043e \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0435 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 \u0421\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u043e \u0442\u0443\u0442 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043b\u0435\u043d\u044c, \u0438 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u043b \u0441 \u0433\u0438\u0442\u043b\u0430\u0431\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e  Linked List, \u0447\u0443\u0442\u044c \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043b \u0438 \u0434\u043e\u043f\u0438\u043b\u0438\u043b \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 CAN \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 esp-idf, \u043f\u0440\u0438\u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u041a\u0441\u0442\u0430\u0442\u0438, \u0432 Espressif \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0435 CAN, \u0430 TWAI, \u0442.\u043a. \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 CAN FD, \u043b\u0438\u0448\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN. \u042f \u043d\u0435 \u0432\u0438\u0436\u0443 \u043c\u043d\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u0442\u0430\u043a\u043e\u043c \u0438\u043c\u0435\u043d\u0438, \u043d\u043e \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b\u0438 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442, \u043a\u043e\u043c\u0443-\u0442\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \ud83d\ude42<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e\u0439 \u0432\u0435\u0449\u0438, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u0438\u0447\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 &#8212; \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u043d\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, REPL \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0432\u043e\u0434\u0430, \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0432\u0432\u043e\u0434, \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, GNU-style \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434. \u042d\u0442\u0438 \u0444\u0438\u0447\u0438 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 esp-idf \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c Console. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 &#8212; \u0437\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u0432\u043e\u0434\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <a href=\"https:\/\/github.com\/antirez\/linenoise\" rel=\"noopener noreferrer nofollow\">linenoise<\/a>, \u0430 \u0437\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <a href=\"https:\/\/www.argtable.org\" rel=\"noopener noreferrer nofollow\">argtable<\/a>. \u0417\u0430 REPL \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Console. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0442\u0430\u043c \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u0432\u0435\u0436\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 esp-idf. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u043e, \u0447\u0442\u043e \u044f \u0445\u043e\u0442\u0435\u043b, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c <a href=\"https:\/\/github.com\/okhsunrog\/console_esp-idf\" rel=\"noopener noreferrer nofollow\">\u0444\u043e\u0440\u043a<\/a>. \u0412 \u0444\u043e\u0440\u043a\u0435 \u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c linenoise \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043e\u0442 esp-idf, \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API. \u0427\u0442\u043e \u044d\u0442\u043e \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e? \u041c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430, \u043d\u043e \u0438 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e CAN-\u0444\u0440\u0435\u0439\u043c\u0430. \u041f\u0440\u0438\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043c\u0435\u0448\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 \u043e\u043f\u044f\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u0435\u0440\u044f\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0422\u0430\u043a\u0436\u0435 \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0430\u043c \u043f\u0440\u043e\u043c\u043f\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u0435 CAN. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 linenoise \u043f\u043e\u0441\u043b\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0432 \u043c\u043e\u0435\u043c \u0444\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0438 \u043d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0438 \u043f\u0430\u0442\u0447\u0438 \u043e\u0442 esp-idf, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 esp-idf. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 Serial.available() \u0438\u043b\u0438 select(2) \u0432 esp-idf (\u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 uart, \u0431\u0435\u0437 \u0447\u0442\u0435\u043d\u0438\u044f). \u0412\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u044f \u043d\u0430\u0448\u0435\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e uart_get_buffered_data_len(), \u043d\u043e \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 <code>SemaphoreHandle_t stdout_taken_sem<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043e\u0436\u0438\u0434\u0430\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430, \u043f\u043e\u043a\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u0421\u0435\u043c\u0430\u0444\u043e\u0440 \u0436\u0435 \u043d\u0435 \u0434\u0430\u0435\u0442 linenoise \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043c \u0441\u0432\u043e\u0439 \u0432\u044b\u0432\u043e\u0434.<\/p>\n<h4>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043a\u043e\u0434\u0430<\/h4>\n<p>\u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0432 esp-idf &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>void app_main(void);<\/code>. \u0412 \u043d\u0435\u0439 \u043c\u044b \u0441\u043f\u0435\u0440\u0432\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c <code>uart_tx_ringbuf<\/code> &#8212; \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430\u0448\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0438 \u043b\u043e\u0433\u043e\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041e \u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>can_task<\/code> &#8212; \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f CAN \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 <code>twai_read_alerts<\/code>, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 CAN \u0448\u0438\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430 \u043f\u0440\u0438\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0438\u0445 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0441\u043e\u0444\u0442\u0432\u0430\u0440\u043d\u044b\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 Ring Buffer <code>uart_tx_ringbuf<\/code> \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u0422\u0430\u043a\u0436\u0435 \u0432 <code>can.h<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>SemaphoreHandle_t can_mutex<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044e\u0437\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>candown<\/code> \u043d\u0435 \u043c\u043e\u0433 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 CAN, \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>can_task<\/code> \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>twai_receive<\/code> &#8212; \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u0431\u044b \u043a \u043f\u0430\u043d\u0438\u043a\u0435 \u0438 esp32 \u0443\u0448\u043b\u0430 \u0431\u044b \u0432 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 , \u043c\u044b \u0436\u0434\u0435\u043c, \u043f\u043e\u043a\u0430 <code>twai_receive<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0444\u0440\u0435\u0439\u043c, \u0438\u043b\u0438 \u0432\u044b\u0439\u0434\u0435\u0442 \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439  <code>can_task_timeout<\/code>. \u042f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u044b\u043c 200 \u043c\u0441, \u043f\u0440\u0438\u043d\u044f\u0432 \u0435\u0433\u043e \u0437\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u0430 \u0435\u0441\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c &#8212; \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 fat32 \u0432 \u043d\u0430\u0448\u0435\u0439 flash \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0451\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0433\u0434\u0435 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e USB-UART \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430\u0448\u0435\u0439 esp32-c3, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Console, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>console_task_interactive<\/code>. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u043c\u043f\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a linenoise, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0432\u043e\u0434. \u0422\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d: <code>console_task_tx<\/code>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0432\u044b\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e <code>uart_tx_ringbuf<\/code> \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u043f\u0440\u044f\u0447\u0435\u0442 \u043f\u0440\u043e\u043c\u043f\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>linenoiseHide()<\/code>, \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 Ring Buffer + \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 prompt (\u043a\u0430\u043a \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0442\u0430\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 CAN \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a), \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 prompt, \u0435\u0441\u043b\u0438 \u0438\u0441\u0442\u0451\u043a \u0442\u0430\u0439\u043c\u0430\u0443\u0442 200\u043c\u0441. \u0414\u0430\u043b\u0435\u0435 promp \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>linenoiseShow()<\/code>. \u0422\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 <code>stdout_taken_sem<\/code>, \u0447\u0442\u043e\u0431\u044b linenoise \u043d\u0435 \u043c\u0435\u0448\u0430\u043b \u043d\u0430\u0448\u0435\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0443. \u0414\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u043c\u0430\u0444\u043e\u0440 <code>console_taken_sem<\/code> &#8212; \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c &#8212; \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 \u0432 \u0438\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 <code>linenoiseEditStop()<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>linenoiseEditStart()<\/code>.<\/p>\n<h4>\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 printf<\/h4>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c &#8212; \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u043e\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c? esp-idf \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u044b ESP_LOGI, ESP_LOGE, ESP_LOGW \u0438 \u0442.\u0434. \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043b\u043e\u0433\u043e\u0432, \u0438 \u0435\u0451 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0442\u0440\u0435\u0432\u043e\u0436\u0438\u0442, \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u0432 UART \u043c\u043e\u0436\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f linenoise (\u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u043c\u044b \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0435\u0439 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u043e\u0432?). \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, esp-idf \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0438\u0431\u043e\u043a \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e esp_log_set_vprintf. \u0421 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u044e vprintf_like_t \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: <code>esp_log_set_vprintf(&amp;vxprintf);<\/code>. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">\/\/ This function will be called by the ESP log library every time ESP_LOG needs to be performed. \/\/      @important Do NOT use the ESP_LOG* macro's in this function ELSE recursive loop and stack overflow! So use printf() instead for debug messages. int vxprintf(const char *fmt, va_list args) {     char msg_to_send[300];     const size_t str_len = vsnprintf(msg_to_send, 299, fmt, args);     xRingbufferSend(uart_tx_ringbuf, msg_to_send, str_len + 1, pdMS_TO_TICKS(200));     return str_len; } <\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b ESP_LOGx \u043d\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0432 \u043d\u0430\u0448 Ring Buffer, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438\u0445 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 <code>console_task_tx<\/code>. \u041d\u043e \u0447\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0441 printf \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435? \u0412\u0435\u0434\u044c \u043e\u043d \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451 \u0441\u043b\u043e\u043c\u0430\u0442\u044c. \u041d\u0435 \u0431\u0435\u0434\u0430, \u0432\u043c\u0435\u0441\u0442\u043e printf \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e xprintf, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0443\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">int xprintf(const char *fmt, ...) {     va_list(args);     va_start(args, fmt);     return vxprintf(fmt, args); } <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e printf\/xprintf (\u043e\u0431\u044b\u0447\u043d\u044b\u0439 printf \u2013 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0433\u0434\u0430 linenoise \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0435\u043d) \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043d\u0430\u043c\u0438 \u0446\u0432\u0435\u0442\u043e\u043c + \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c timestamp \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">int print_w_clr_time(char *msg, char *color, bool use_printf) {     print_func pr_func;     if (use_printf) pr_func = printf;     else pr_func = xprintf;     char timestamp[20];     timestamp[0] = '\\0';     if (timestamp_enabled) {         snprintf(timestamp, 19, \"[%s] \", esp_log_system_timestamp());     }     if (color != NULL) {         return(pr_func(\"\\033[0;%sm%s%s\\033[0m\\n\", color, timestamp, msg));     } else {         return(pr_func(\"%s%s\\n\", timestamp, msg));     } } <\/code><\/pre>\n<h4>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c &#8212; \u044d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e. \u0410 \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b?<\/h4>\n<ul>\n<li>\n<p>\u043a\u043e\u043c\u0430\u043d\u0434\u0430 help &#8212;  \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>cmd_system.c<\/strong><\/p>\n<ul>\n<li>\n<p>free &#8212; \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043a\u0443\u0447\u0435.<\/p>\n<\/li>\n<li>\n<p>heap &#8212; \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043a\u0443\u0447\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 esp32.<\/p>\n<\/li>\n<li>\n<p>version &#8212; \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432\u0435\u0440\u0441\u0438\u044e esp-idf, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0447\u0438\u043f\u0435, \u0440\u0430\u0437\u043c\u0435\u0440 flash \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>restart &#8212; \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 esp32.<\/p>\n<\/li>\n<li>\n<p>tasks &#8212; \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 FreeRTOS \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<pre><code class=\"markdown\">error active [TEC: 0][REC: 0] > tasks Task Name       Status  Prio    HWM     Task# console tsk int X       2       5964    5 IDLE            R       0       1244    3 can task        B       5       2916    4 console tsk tx  B       2       3248    7 esp_timer       S       22      3860    1<\/code><\/pre>\n<\/li>\n<li>\n<p>log_level &#8212; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <code>none\/error\/warn\/info\/debug\/verbose<\/code> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e LOG_TAG \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0438\u043b\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>cmd_utils.c<\/strong><\/p>\n<ul>\n<li>\n<p>timestamp &#8212; \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 timestamp \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>cmd_can.c<\/strong><\/p>\n<ul>\n<li>\n<p>cansend &#8212; \u0442\u0443\u0442 \u0438 \u0435\u0436\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 CAN \u0444\u0440\u0435\u0439\u043c. \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043d\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 cansend \u0438\u0437 \u043b\u0438\u043d\u0443\u043a\u0441\u043e\u0432\u043e\u0433\u043e can-utils. \u0422.\u0435. \u0444\u0440\u0435\u0439\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a: <code>cansend FF00#0102FE<\/code>. \u0422\u0438\u043f ID (extended \u0438\u043b\u0438 standart) &#8212; \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u043b\u0438\u043d\u0435 ID. \u041c\u0435\u043d\u044c\u0448\u0435 4 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 &#8212; \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 ID, \u0438\u043d\u0430\u0447\u0435 &#8212; extended. <\/p>\n<\/li>\n<li>\n<p>canup &#8212; \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 CAN \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438, \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0440\u0435\u0436\u0438\u043c \u0438 \u0434\u0432\u0430 \u0444\u043b\u0430\u0433\u0430. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 <code>1000\/5000\/10000\/12500\/16000\/20000\/25000\/50000\/100000\/125000\/250000\/500000\/800000\/1000000<\/code>. \u0420\u0435\u0436\u0438\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e &#8212; normal, \u043d\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0436\u0438\u043c\u044b listen_only \u0438 no_ack. \u0424\u043b\u0430\u0433 -r \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u0441\u043b\u0435 \u0443\u0445\u043e\u0434\u0430 \u0432 bus-off \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a. \u0424\u043b\u0430\u0433 -f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0444\u0440\u0435\u0439\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>candown &#8212; \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440. \u041f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c CAN \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 (\u0441\u043c. \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443), \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>canstats &#8212; \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e CAN: status, TX Err Counter, RX Err Counter, Failed transmit, Arbitration lost times, Bus-off count. <br \/><em>Tip: \u0441\u0442\u0430\u0442\u0443\u0441 \u0438 RX\/TX Err Counter \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 prompt.<\/em><\/p>\n<\/li>\n<li>\n<p>canstart &#8212; \u0437\u0430\u043f\u0443\u0441\u043a CAN, \u043a\u043e\u0433\u0434\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0437 bus-off, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 <code>canrecover.<\/code><\/p>\n<\/li>\n<li>\n<p>canrecover &#8212; \u0440\u0443\u0447\u043d\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f bus-off.<\/p>\n<\/li>\n<li>\n<p>canfilter &#8212; \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 CAN, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 mask, code, \u0444\u043b\u0430\u0433 <code>dual filer mode<\/code> \u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 esp-idf, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 &#8212; \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443 \u043f\u0440\u043e TWAI \u0432 \u0434\u043e\u043a\u0430\u0445 esp-idf. <br \/><strong><em>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c<\/em><\/strong><em> <\/em><code>canup<\/code>. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043b\u0430\u0433 <code>-f<\/code> \u0434\u043b\u044f <code>canup<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u043b\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>cansmartfilter &#8212; \u043c\u0443\u0434\u0440\u0451\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440, \u043c\u043e\u044f \u0433\u043e\u0440\u0434\u043e\u0441\u0442\u044c! \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0444\u0442\u043e\u0432\u0443\u044e \u0438 \u0445\u0430\u0440\u0434\u0432\u0430\u0440\u043d\u0443\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e, \u043e\u0447\u0435\u043d\u044c \u0433\u0438\u0431\u043a\u0430\u044f \u0432\u0435\u0449\u044c. \u0414\u0430\u0432\u043d\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0434\u043b\u044f esp32, \u0438 \u0432\u043e\u0442, \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b. <br \/><strong><em>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c<\/em><\/strong><em> <\/em><code>canup<\/code>. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043b\u0430\u0433 <code>-f<\/code> \u0434\u043b\u044f <code>canup<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u043b\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u044b.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0447\u0443\u0434\u0430 \ud83d\ude42<\/p>\n<h4>cansmartfilter &#8212; \u0447\u0442\u043e \u0437\u0430 \u0437\u0432\u0435\u0440\u044c?<\/h4>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/243\/b0c\/7d5\/243b0c7d5e89a31b0ae84ebec9742cae.jpg\" alt=\"\u0414\u0430-\u0434\u0430, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a)\" title=\"\u0414\u0430-\u0434\u0430, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a)\" width=\"1200\" height=\"827\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/243\/b0c\/7d5\/243b0c7d5e89a31b0ae84ebec9742cae.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0414\u0430-\u0434\u0430, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a)<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0451 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 CAN \u0432 esp32 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0434\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u043f\u043e ID &#8212; \u0432\u0441\u0435\u0433\u043e  1-2 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0434\u0432\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u0441 extended ID &#8212; \u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c ID. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u0431\u0438\u0442\u044b \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043d\u0438\u043c, \u043d\u043e \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e &#8212; \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0444\u0442\u043e\u0432\u0443\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e. \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 CAN \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0445\u0430\u0440\u0434\u0432\u0430\u0440\u043d\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 &#8212; MCP2515.<br \/>\u041d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0433\u0440\u0443\u0441\u0442\u0438\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443! \u0418\u0442\u0430\u043a, \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 cansmartfilter \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0442 1 \u0434\u043e <code>CONFIG_CAN_MAX_SMARTFILTERS_NUM<\/code> \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u044b\u043c 10, \u043d\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043c\u043e\u0436\u043d\u043e \u0438 20 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0438 \u0431\u043e\u043b\u044c\u0448\u0435. \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>code#mask<\/code>. \u042f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0441\u043e standard ID \u0432 <code>cansmartfilter<\/code>, \u0442.\u043a. \u044d\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0441 extended ID. \u0414\u043b\u044f \u0444\u0438\u043b\u0442\u0440\u0430\u0446\u0438\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0441\u043e standart ID \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>canfilter<\/code>  \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: <code>cansmartfilter 11223344#FFEECCBB 33123A#23BBE0 90#AB<\/code> &#8212; \u0442\u0443\u0442 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 3 smart-\u0444\u0438\u043b\u044c\u0442\u0440\u0430. mask \u0438 code &#8212; uint32_t \u0447\u0438\u0441\u043b\u0430 \u0432 hex \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0432 mask \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0431\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c, \u043d\u0443\u043b\u0438 &#8212; \u0431\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 <code>0000FF00#0000FFFF<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0440\u0435\u0439\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043d\u0430 <code>FF00<\/code>, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0431\u0438\u0442\u0430\u043c \u043d\u0435\u0442. \u0422.\u0435. \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0438 <code>0029FF00<\/code>, \u0438 <code>00ABFF00<\/code>, \u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u0442 <code>00ABFF05<\/code>. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e &#8212; \u0432\u0441\u0451 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c. \u0414\u0430-\u0434\u0430, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442 \u043c\u043d\u0435 \u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0441\u044f Linked List &#8212; \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430:<\/p>\n<pre><code>typedef struct {   uint32_t filt;   uint32_t mask; } smart_filt_element_t; <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0445\u0438\u0442\u0440\u043e\u0439 bitwise \u043b\u043e\u0433\u0438\u043a\u0438 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0445\u0430\u0440\u0434\u0432\u0430\u0440\u043d\u044b\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c. \u041c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 2 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: \u043b\u0438\u0431\u043e \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u043e 1 \u0444\u0438\u043b\u044c\u0442\u0440, \u043b\u0438\u0431\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0435 \u043e\u0434\u043d\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c. \u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 &#8212; \u0435\u0441\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. \u0412 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0444\u0442\u0432\u0430\u0440\u043d\u0430\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>cansmartfilter<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 <code>canfilter<\/code>, \u043d\u043e \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c.<br \/>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 CAN \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>canup -f<\/code> \u0438  \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f.<\/p>\n<p>\u041e\u0431\u0449\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0431\u0438\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0445\u0430\u0440\u0434\u0432\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0430 \u0442\u0435 \u0444\u0440\u0435\u0439\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 &#8212; \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442\u0441\u044f \u0432 <code>can_task<\/code> \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430. \u0422\u0443\u0442 \u0432\u0441\u0451 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e:<\/p>\n<pre><code class=\"cpp\">\/\/ somewhere in can task   const BaseType_t sem_res = xSemaphoreTake(can_mutex, 0);   if (sem_res == pdTRUE) {       while ((ret = twai_receive(&amp;rx_msg, can_task_timeout)) == ESP_OK) {           char data_bytes_str[70];           if (adv_filters.sw_filtering) {               if (!matches_filters(&amp;rx_msg)) continue;           }           can_msg_to_str(&amp;rx_msg, \"recv \", data_bytes_str);            print_w_clr_time(data_bytes_str, LOG_COLOR_BLUE, false);       }       xSemaphoreGive(can_mutex);       vTaskDelay(1);   }   if (sem_res != pdTRUE || ret == ESP_ERR_INVALID_STATE || ret == ESP_ERR_NOT_SUPPORTED) {       vTaskDelay(can_task_timeout);   }         bool matches_filters(const twai_message_t *msg) {       const List *tmp_cursor = adv_filters.filters;       while (tmp_cursor != NULL) {           const smart_filt_element_t* curr_filter = tmp_cursor->data;           if ((msg->identifier &amp; curr_filter->mask) == curr_filter->filt) {               return true;           }           tmp_cursor = tmp_cursor->next;       }       return false; <\/code><\/pre>\n<h4>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c!<\/h4>\n<p>\u0421\u043f\u0430\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u0437\u0430 \u043f\u043e\u043b\u0447\u0430\u0441\u0430. \u0415\u0449\u0451 \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u0443\u0439\u0434\u0435\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 CAN, \u0434\u0435\u0448\u0435\u0432\u044b\u0439 \u0438 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0439.<br \/>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443:<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u0432\u0438\u043c \u0442\u0443\u043b\u0447\u0435\u0439\u043d esp-idf, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0443\u0431\u043c\u043e\u0434\u0443\u043b\u0435\u043c: <code>git clone --recursive https:\/\/github.com\/okhsunrog\/can_wizard.git<\/code><\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>can_wizard<\/code><\/p>\n<\/li>\n<li>\n<p><code>idf.py set-target esp32-c3<\/code>   <\/p>\n<\/li>\n<li>\n<p><code>idf.py menuconfig<\/code>     <\/p>\n<p>  \u0412 \u043c\u0435\u043d\u044e \u043d\u0430\u0439\u0434\u0438\u0442\u0435 <code>Can_wizard Configuration  ---><\/code> \u0438 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0432\u043a\u0443\u0441\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0432\u0430\u043c \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>CAN RX GPIO number<\/code> \u0438 <code>CAN TX GPIO number<\/code>, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>Max number of smartfilters<\/code>. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442. \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 &#8216;S&#8217; \u0438 \u0432\u044b\u0439\u0434\u0438\u0442\u0435, \u043d\u0430\u0436\u0430\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 <code>Esc<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043f\u0430\u044f\u0439\u0442\u0435 \u043f\u043b\u0430\u0442\u0443 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 \u043a \u043f\u043b\u0430\u0442\u0435 esp32-c3, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e 4 \u043f\u0438\u043d\u0430: \u043f\u0438\u0442\u0430\u043d\u0438\u0435 3.3v, GND, \u0430 \u0442\u0430\u043a \u0436\u0435 CTX \u0438 CRX \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0438\u043d\u0430\u043c \u0434\u043b\u044f CAN TX \u0438 CAN RX, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0443\u043d\u043a\u0442\u0435. \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u043d\u0430 \u043c\u043e\u0435\u0439 \u043f\u043b\u0430\u0442\u0435 \u0441 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0441 \u0444\u0440\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0441 \u0442\u044b\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043b\u0430\u0442\u044b. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0442\u0430 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b. \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u043d\u0430 120 \u041e\u043c. \u0415\u0441\u043b\u0438 \u043e\u043d \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d &#8212; \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u0430\u044f\u0439\u0442\u0435, \u0430 \u0435\u0449\u0451 \u043b\u0443\u0447\u0448\u0435 &#8212; \u0441\u0434\u0432\u0438\u043d\u044c\u0442\u0435, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043f\u0440\u0438\u043f\u0430\u044f\u043d\u043d\u044b\u043c \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0430\u043a\u0442. \u0422\u0430\u043a \u0432\u044b \u043b\u0435\u0433\u043a\u043e \u0432\u0435\u0440\u043d\u0451\u0442\u0435 \u0435\u0433\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 usb \u043a esp32-c3 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 <code>idf.py flash monitor<\/code><\/p>\n<p><strong><em>\u0412\u0430\u0448 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c Escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 ANSI.  \u0422\u043e\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 GNU screen, minicom, \u0438 esp-idf-monitor<\/em><\/strong><\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0432 esp-idf-monitor \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u043f\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0434\u0440\u0443\u0433\u0443\u044e serial console. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>minicom --color=on -b 115200 -D \/dev\/ttyACM0<\/code><\/p>\n<\/li>\n<\/ul>\n<h4>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/h4>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c9b7236748d7d46f5dfac5\" data-style=\"\" id=\"65c9b7236748d7d46f5dfac5\" width=\"\"><\/div>\n<p><em>\u042d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, \u043f\u0440\u043e\u0448\u0443 \u043d\u0435 \u0441\u0443\u0434\u0438\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u0433\u043e, \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u043a\u0435 \u0438 \u0441\u043e\u0432\u0435\u0442\u0430\u043c \u0431\u0443\u0434\u0443 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434! \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0433\u043e\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \ud83d\ude42<\/em><\/p>\n<h4>UPDATE<\/h4>\n<ol>\n<li>\n<p>\u0412 esp-idf v5.2 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0430\u0433, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y<\/code>. \u041f\u043e\u043a\u0430 \u0431\u0430\u0433 \u043d\u0435 \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043b\u0438 &#8212; \u0441\u043e\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 esp-idf v5.1.2<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 LittleFS \u0432\u043c\u0435\u0441\u0442\u043e FAT32. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <a href=\"https:\/\/github.com\/joltwallet\/esp_littlefs\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/joltwallet\/esp_littlefs<\/a><\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 GitHub \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 <a href=\"https:\/\/github.com\/okhsunrog\/can_wizard\/releases\/tag\/v1.0.1\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043b\u0438\u0437<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u0430\u043c \u0436\u0435 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439 &#8212; \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b <a href=\"https:\/\/okhsunrog.ru\/articles\/2024\/02\/15\/can_bus_sniffer\/\" rel=\"noopener noreferrer nofollow\">\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0442\u0430\u0442\u044c\u0438<\/a>. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0435\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 esp32-c3 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 Web Serial &#8212; \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u043e\u0444\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/793326\/\"> https:\/\/habr.com\/ru\/articles\/793326\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\">\n<div><figcaption>ESP32-C3 + SN65HVD230 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b CAN \u0441\u0435\u0439\u0447\u0430\u0441 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0444\u0435\u0440\u0435, \u043d\u043e \u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u0445, \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u043a\u0430\u0445, \u0438 \u0434\u0430\u0436\u0435 \u0432 \u0421\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445 \u0418\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u041c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b VESC, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440). \u0412 \u043d\u043e\u044f\u0431\u0440\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 CAN \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u043c (MIT License) \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b\u0445: <a href=\"https:\/\/github.com\/okhsunrog\/can_wizard\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/okhsunrog\/can_wizard<\/a><br \/>\u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f UART-\u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/figcaption><\/div>\n<\/figure>\n<h4>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0435\u043d\u044f \u043f\u043e\u0434\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u043e \u043a \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e. \u041d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u0448\u0438\u043d\u044b CAN, \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043f\u0435\u0440\u0432\u0430 \u0434\u0435\u043b\u043e \u0440\u0435\u0448\u0438\u043b\u043e\u0441\u044c \u043f\u043b\u0430\u0442\u043e\u0439 Arduino Uno \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u043e\u0439 CAN \u0441 Aliexpress, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u043f\u043e SPI \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 CAN MCP2515 \u0438 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 MCP2551. \u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0437\u0430 5-10 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0431\u044b\u043b\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u0430 \u0432 UART \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 CAN-\u0444\u0440\u0435\u0439\u043c\u044b \u0438 \u0438\u043c\u0435\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0444\u0440\u0435\u0439\u043c\u043e\u0432. \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 UART \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0445 \u0432 \u0444\u0440\u0435\u0439\u043c \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043b\u0435\u043d\u044c. \u041f\u043e\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0430\u0434\u043e\u0435\u043b\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u044b\/\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434 \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c Arduino, \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435. \u041f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u044f \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f Raspberry Pi \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0438\u043b\u044c\u0434\u0438\u043a\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 MCP2551 + SN65HVD230. \u041f\u043e\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u0438 \u0434\u043e\u043c\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 CAN, \u043e\u0442\u043a\u0440\u044b\u0432 \u0434\u0432\u0430 \u043e\u043a\u043d\u0430 \u0432 tmux: candump + cansend. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0434\u0435\u0440\u0436\u0443 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u043b\u0438\u043d\u043a\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f CAN: \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 x86_64 \u0438 \u044f \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u0437\u0430\u0434\u0430\u0447, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u0435 \u0431\u044b\u043b\u0430 \u0431\u044b \u043d\u0443\u0436\u043d\u0430 \u0435\u0449\u0451 \u0438 \u043c\u0430\u043b\u0438\u043d\u0430. \u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0435, \u0434\u0435\u0448\u0435\u0432\u043e\u0435 \u0438 \u0441\u0435\u0440\u0434\u0438\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u043b\u043e \u0431\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c: \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b CAN, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 CAN, \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 CAN \u0448\u0438\u043d\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0435\u043b\u0430\u043b \u0432\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 esp32-c3, \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0451\u043c.<\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 esp32-c3?<\/h4>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0440\u0435\u0434\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043c\u043e\u0439 \u0444\u0430\u0432\u043e\u0440\u0438\u0442 &#8212; \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e esp32 \u043e\u0442 Espressif. \u0412\u0430\u0436\u043d\u0430\u044f \u0434\u043b\u044f \u043d\u0430\u0441 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c &#8212; \u043f\u043e\u0447\u0442\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 esp32 \u0435\u0441\u0442\u044c CAN-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, CAN-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0435\u0441\u0442\u044c \u0438 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0447\u0438\u043f\u0430\u0445 stm32, \u043d\u043e \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0434\u0435\u043b\u0430\u043b \u0432\u0441\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 esp32 \u0438 \u0434\u0435\u0432\u0431\u043e\u0440\u0434\u044b \u043d\u0430 stm32 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e esp32-c3 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043b \u0438\u0437-\u0437\u0430 \u0441\u0430\u043c\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0439 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0433\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0445\u0432\u0430\u0442\u0438\u0442 \u043d\u0430\u043c \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439, \u0438\u0437-\u0437\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0447\u0438\u043f usb-serial, \u043d\u0443 \u0438 \u0441\u0435\u043a\u0446\u0438\u044f errata \u0432 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0435 \u0443 \u043d\u0435\u0433\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u0435\u0435, \u0447\u0435\u043c \u0443 \u0431\u043e\u043b\u0435\u0435 \u043e\u043b\u0434\u043e\u0432\u044b\u0445 esp32. \u041f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 &#171;esp32-c3 board&#187; \u043d\u0430 \u0410\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043b\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u044f\u0442 \u0432\u0441\u0435\u0433\u043e 180 \u0440\u0443\u0431\u043b\u0435\u0439. \u041c\u043d\u0435 \u043e\u043d\u0438 \u0442\u0430\u043a \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u044f \u0437\u0430\u043a\u0443\u043f\u0438\u043b \u0446\u0435\u043b\u044b\u0445 20 \u0448\u0442\u0443\u043a. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u0443\u044e \u0434\u043e\u0431\u0440\u0443\u044e SN65HVD230. \u041d\u0430 \u0430\u043b\u0438 \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 \u0441 \u044d\u0442\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 \u043f\u043e \u0446\u0435\u043d\u0435 50-90 \u0440\u0443\u0431\u043b\u0435\u0439 (\u0447\u0435\u043c \u0434\u043e\u0440\u043e\u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u044c &#8212; \u0442\u0435\u043c \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430). \u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0446\u0435\u043d\u0430 \u0434\u0435\u0432\u0431\u043e\u0440\u0434\u044b esp32-c3 + \u043f\u043b\u0430\u0442\u044b \u0441 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u043c + \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 3 \u0434\u043e\u043b\u043b\u0430\u0440\u0430.<\/p>\n<h4>\u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u043d\u0430 \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0444\u0442?<\/h4>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 &#8212; \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0434\u043e\u0431\u0440\u043e\u043c \u0421\u0438! \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a esp-idf \u043e\u0442 Espressif. \u041e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u0430\u044f \u0432\u0435\u0449\u044c \u0441 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439, \u043a\u0443\u0447\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a\u043e\u0434\u0430. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443 \u043d\u0435\u0451 \u0444\u043e\u0440\u043a\u043d\u0443\u0442\u0430\u044f FreeRTOS, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u0447\u0438\u043f &#8212; \u043e\u0434\u043d\u043e\u044f\u0434\u0435\u0440\u043d\u044b\u0439, \u0442\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 FreeRTOS \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 C++ \u0432 esp-idf \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u0438\u0448\u043d\u044b\u0439 \u0438 \u043f\u043b\u044e\u0441\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u0442\u0435\u043c \u043f\u0430\u0447\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u044b\u0439 Arduino. \u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043a\u0430 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u043c\u043e\u0434\u043d\u043e\u0433\u043e Rust, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e Espressif \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0432\u043e\u0434\u0438\u0442 (\u043a\u043e\u043c\u043c\u0438\u0442\u044b \u0441\u044b\u043f\u044f\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e, \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435). \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 + \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u041a\u0430\u043a-\u0442\u043e \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0435 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 \u0421\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u043e \u0442\u0443\u0442 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043b\u0435\u043d\u044c, \u0438 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u043b \u0441 \u0433\u0438\u0442\u043b\u0430\u0431\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e  Linked List, \u0447\u0443\u0442\u044c \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043b \u0438 \u0434\u043e\u043f\u0438\u043b\u0438\u043b \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 CAN \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 esp-idf, \u043f\u0440\u0438\u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u041a\u0441\u0442\u0430\u0442\u0438, \u0432 Espressif \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0435 CAN, \u0430 TWAI, \u0442.\u043a. \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 CAN FD, \u043b\u0438\u0448\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN. \u042f \u043d\u0435 \u0432\u0438\u0436\u0443 \u043c\u043d\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u0442\u0430\u043a\u043e\u043c \u0438\u043c\u0435\u043d\u0438, \u043d\u043e \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b\u0438 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442, \u043a\u043e\u043c\u0443-\u0442\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \ud83d\ude42<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e\u0439 \u0432\u0435\u0449\u0438, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u0438\u0447\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 &#8212; \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u043d\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, REPL \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0432\u043e\u0434\u0430, \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0432\u0432\u043e\u0434, \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, GNU-style \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434. \u042d\u0442\u0438 \u0444\u0438\u0447\u0438 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 esp-idf \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c Console. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 &#8212; \u0437\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u0432\u043e\u0434\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <a href=\"https:\/\/github.com\/antirez\/linenoise\" rel=\"noopener noreferrer nofollow\">linenoise<\/a>, \u0430 \u0437\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <a href=\"https:\/\/www.argtable.org\" rel=\"noopener noreferrer nofollow\">argtable<\/a>. \u0417\u0430 REPL \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Console. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0442\u0430\u043c \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u0432\u0435\u0436\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 esp-idf. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u043e, \u0447\u0442\u043e \u044f \u0445\u043e\u0442\u0435\u043b, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c <a href=\"https:\/\/github.com\/okhsunrog\/console_esp-idf\" rel=\"noopener noreferrer nofollow\">\u0444\u043e\u0440\u043a<\/a>. \u0412 \u0444\u043e\u0440\u043a\u0435 \u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c linenoise \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043e\u0442 esp-idf, \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API. \u0427\u0442\u043e \u044d\u0442\u043e \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e? \u041c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430, \u043d\u043e \u0438 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e CAN-\u0444\u0440\u0435\u0439\u043c\u0430. \u041f\u0440\u0438\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043c\u0435\u0448\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 \u043e\u043f\u044f\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u0435\u0440\u044f\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0422\u0430\u043a\u0436\u0435 \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0430\u043c \u043f\u0440\u043e\u043c\u043f\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u0435 CAN. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 linenoise \u043f\u043e\u0441\u043b\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0432 \u043c\u043e\u0435\u043c \u0444\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0438 \u043d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0438 \u043f\u0430\u0442\u0447\u0438 \u043e\u0442 esp-idf, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 esp-idf. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 Serial.available() \u0438\u043b\u0438 select(2) \u0432 esp-idf (\u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 uart, \u0431\u0435\u0437 \u0447\u0442\u0435\u043d\u0438\u044f). \u0412\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u044f \u043d\u0430\u0448\u0435\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e uart_get_buffered_data_len(), \u043d\u043e \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 <code>SemaphoreHandle_t stdout_taken_sem<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043e\u0436\u0438\u0434\u0430\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430, \u043f\u043e\u043a\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u0421\u0435\u043c\u0430\u0444\u043e\u0440 \u0436\u0435 \u043d\u0435 \u0434\u0430\u0435\u0442 linenoise \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043c \u0441\u0432\u043e\u0439 \u0432\u044b\u0432\u043e\u0434.<\/p>\n<h4>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043a\u043e\u0434\u0430<\/h4>\n<p>\u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0432 esp-idf &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>void app_main(void);<\/code>. \u0412 \u043d\u0435\u0439 \u043c\u044b \u0441\u043f\u0435\u0440\u0432\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c <code>uart_tx_ringbuf<\/code> &#8212; \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430\u0448\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0438 \u043b\u043e\u0433\u043e\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041e \u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>can_task<\/code> &#8212; \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f CAN \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 <code>twai_read_alerts<\/code>, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 CAN \u0448\u0438\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430 \u043f\u0440\u0438\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0438\u0445 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0441\u043e\u0444\u0442\u0432\u0430\u0440\u043d\u044b\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 Ring Buffer <code>uart_tx_ringbuf<\/code> \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u0422\u0430\u043a\u0436\u0435 \u0432 <code>can.h<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>SemaphoreHandle_t can_mutex<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044e\u0437\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>candown<\/code> \u043d\u0435 \u043c\u043e\u0433 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 CAN, \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>can_task<\/code> \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>twai_receive<\/code> &#8212; \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u0431\u044b \u043a \u043f\u0430\u043d\u0438\u043a\u0435 \u0438 esp32 \u0443\u0448\u043b\u0430 \u0431\u044b \u0432 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 , \u043c\u044b \u0436\u0434\u0435\u043c, \u043f\u043e\u043a\u0430 <code>twai_receive<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0444\u0440\u0435\u0439\u043c, \u0438\u043b\u0438 \u0432\u044b\u0439\u0434\u0435\u0442 \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439  <code>can_task_timeout<\/code>. \u042f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u044b\u043c 200 \u043c\u0441, \u043f\u0440\u0438\u043d\u044f\u0432 \u0435\u0433\u043e \u0437\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u0430 \u0435\u0441\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c &#8212; \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 fat32 \u0432 \u043d\u0430\u0448\u0435\u0439 flash \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0451\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0433\u0434\u0435 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e USB-UART \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430\u0448\u0435\u0439 esp32-c3, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Console, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>console_task_interactive<\/code>. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u043c\u043f\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a linenoise, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0432\u043e\u0434. \u0422\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d: <code>console_task_tx<\/code>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0432\u044b\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e <code>uart_tx_ringbuf<\/code> \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u043f\u0440\u044f\u0447\u0435\u0442 \u043f\u0440\u043e\u043c\u043f\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>linenoiseHide()<\/code>, \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 Ring Buffer + \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 prompt (\u043a\u0430\u043a \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0442\u0430\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 CAN \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a), \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 prompt, \u0435\u0441\u043b\u0438 \u0438\u0441\u0442\u0451\u043a \u0442\u0430\u0439\u043c\u0430\u0443\u0442 200\u043c\u0441. \u0414\u0430\u043b\u0435\u0435 promp \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>linenoiseShow()<\/code>. \u0422\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 <code>stdout_taken_sem<\/code>, \u0447\u0442\u043e\u0431\u044b linenoise \u043d\u0435 \u043c\u0435\u0448\u0430\u043b \u043d\u0430\u0448\u0435\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0443. \u0414\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u043c\u0430\u0444\u043e\u0440 <code>console_taken_sem<\/code> &#8212; \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c &#8212; \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 \u0432 \u0438\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 <code>linenoiseEditStop()<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>linenoiseEditStart()<\/code>.<\/p>\n<h4>\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 printf<\/h4>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c &#8212; \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u043e\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c? esp-idf \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u044b ESP_LOGI, ESP_LOGE, ESP_LOGW \u0438 \u0442.\u0434. \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043b\u043e\u0433\u043e\u0432, \u0438 \u0435\u0451 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0442\u0440\u0435\u0432\u043e\u0436\u0438\u0442, \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u0432 UART<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-368050","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368050","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=368050"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368050\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=368050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=368050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=368050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}