{"id":377938,"date":"2024-06-04T03:00:10","date_gmt":"2024-06-04T03:00:10","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=377938"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=377938","title":{"rendered":"<span>\u041a\u0430\u043a \u0421\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0424\u0443\u043d\u043a\u0446\u0438\u044e \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0413\u0440\u0430\u0444\u043e\u0432)<\/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\/getpro\/habr\/upload_files\/94d\/90b\/b7c\/94d90bb7cb7dadcb492fecb431588752.JPG\" width=\"1191\" height=\"548\"\/><\/figure>\n<p>\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c &#8212; \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.  \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u0435. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b. <\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/p>\n<pre><code class=\"cpp\">bool xxx_init(void);<\/code><\/pre>\n<p>\u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c. \u0422\u043e \u0435\u0441\u0442\u044c, \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e xyz_init()?<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u043a\u0443\u0445\u043e\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0442\u0440\u043e\u043c \u043c\u044b \u043d\u0430\u0434\u0435\u0432\u0430\u0435\u043c \u043e\u0434\u0435\u0436\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0439\u0442\u0438 \u043d\u0430 \u0443\u043b\u0438\u0446\u0443. \u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0447\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0430\u0434\u0435\u0432\u0430\u0442\u044c \u043d\u043e\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430\u0434\u0435\u0442\u0430 \u043e\u0431\u0443\u0432\u044c. \u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0430\u0434\u0435\u0432\u0430\u0442\u044c \u0440\u0443\u0431\u0430\u0448\u043a\u0443, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u0435\u0442\u0430 \u043a\u0443\u0440\u0442\u043a\u0430 \u0438 \u0442. \u043f. \u0422\u0430\u043a \u0436\u0435 \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u041d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 UART, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d GPIO.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438. \u0418 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0442\u043e\u0436\u0435 \u043c\u043d\u043e\u0433\u043e: \u043f\u043e 5-7 \u0448\u0442\u0443\u043a. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0438\u0448\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b\u0438\u043a \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u0432\u0430\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u0434\u043e, \u043f\u043e \u043c\u0435\u0440\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u043e\u0441\u044c \u0438 \u043f\u043e \u0445\u043e\u0434\u0443 \u043d\u0435 \u0437\u0430\u043a\u043b\u0438\u043d\u0438\u043b\u043e. <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0420\u0430\u0434\u043e\u0441\u0442\u044c \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0447\u0438\u0441\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043a \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438! <\/p>\n<p><strong>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/strong><br \/>\u0415\u0441\u0442\u044c \u043d\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a (\u0442\u043e\u043a\u0435\u043d\u043e\u0432), \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.<\/p>\n<pre><code class=\"swift\">Button,FlashFs,I2S,Log,StartPause,Writer,NVIC,Clk,SysTick, Flash,Timer,GPIO,UART,Swd,ADC,I2C,SPI,CAN ,WatchDog,Pwm,DMA,Mcu,SwDac, RS485,StringReader,CLI,IsoTp, UDS,Relay,LedMono,NVS,Param,Heap,Time, SuperCycle,task,UnitTest,Nau8814<\/code><\/pre>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0435\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0423 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<pre><code class=\"cpp\">start_pause,Clk Writer,UART Log UART Clk, Flash SysTick,Clk Timer, Clk GPIO, UART, GPIO Swd,GPIO... ADC,AdcChannels,.. I2C,GPIO UART SPI,GPIO UART CAN,GPIO I2S,GPIO DMA WatchDog, RS232,GPIO UART RS485,GPIO StringReader, CLI,RS232 Relay,GPIO Time LedMonoInit, NVS,Flash Flash_FS, NVS Flash Param, Flash_FS SuperCycle, task, SuperCycle <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0440\u0430\u0444 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043a\u0443\u043b\u044c\u0442\u043e\u0432\u043e\u0433\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 <strong>Pastilda<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d52\/874\/8d8\/d528748d8ad453a8a074debdcd79e3bc.png\" width=\"1560\" height=\"1392\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d52\/874\/8d8\/d528748d8ad453a8a074debdcd79e3bc.png\"\/><\/figure>\n<p>\u041e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043d\u0435 \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043c\u0430\u043b\u043e, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043f\u0440\u0430\u0432\u0430 (->). \u0422\u0435 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u043b\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 &#8212; \u0441\u043b\u0435\u0432\u0430 (&lt;-). \u0422\u043e\u043b\u044c\u043a\u043e \u0438 \u0432\u0441\u0435\u0433\u043e..<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0434\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0433\u0440\u0430\u0444 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0412 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u044d\u0442\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 <\/strong>\u0433\u0440\u0430\u0444\u0430<strong>.<\/p>\n<p><\/strong>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f<strong>, <\/strong>\u043d\u0430\u0434\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u044e \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u043d\u0430\u0441.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f.<\/strong><\/p>\n<p>\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u043a\u0430\u043a \u0431\u044b \u0434\u0432\u0430 \u0438\u043b\u0438 \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u0438 \u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0430 \u043b\u0435\u0441.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0445\u043e\u0434\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e. \u041c\u043d\u0435, \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e, \u0438\u0431\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430\u0445 \u0434\u043b\u044f \u041c\u041a \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0437\u043e\u043b\u043e\u0442\u044b\u0445 MISRA \u0437\u0430\u043f\u0440\u0435\u0442\u0430:<\/p>\n<p>1&#8212;\u0417\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. <\/p>\n<p>2&#8212;\u0417\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e. <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0437\u043b\u043e\u0436\u0443 \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0430\u0438\u0432\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0433\u0440\u0430\u0444\u0430\u043c\u0438, \u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438! <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0442\u0430\u043d\u0446\u0443\u0435\u043c \u043e\u0442 \u043f\u0435\u0447\u043a\u0438&#8230; \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0435\u0446\u043a\u0438\u0439 \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/244\/747\/760\/2447477603a511033e55a910090f6195.png\" width=\"658\" height=\"590\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/244\/747\/760\/2447477603a511033e55a910090f6195.png\"\/><\/figure>\n<p>\u0418\u0434\u0435\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430. \u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <strong>g,n,a, t<\/strong>. <\/p>\n<p><strong>\u0424\u0430\u0437\u0430 1 (\u0412\u0441\u0442\u0430\u0432\u043a\u0430)<\/strong><\/p>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0412\u043e\u0442 \u0442\u0430\u043a.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e29\/298\/afc\/e29298afcc512167eb704b9b24b516a5.png\" width=\"878\" height=\"251\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e29\/298\/afc\/e29298afcc512167eb704b9b24b516a5.png\"\/><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 2 (\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044b)<\/strong><br \/>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044b. \u0422\u043e \u0435\u0441\u0442\u044c w. \u041f\u0440\u0438\u0447\u0435\u043c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043d\u0430\u0434\u043e \u0441\u043b\u0435\u0432\u0430 (&lt;). \u0418\u0431\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0430 (>). \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u0430 \u043f\u043e\u0440\u043e\u0439 \u0438 \u0432\u043e\u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u043a\u043b\u0438\u043d\u0438\u0432\u0430\u043d\u0438\u044e \u0438 \u043e\u0441\u0435\u0447\u043a\u0430\u043c \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435.<\/p>\n<p><strong>\u0424\u0430\u0437\u0430 3 (\u041f\u043e\u0432\u0442\u043e\u0440)<\/strong><\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b  \u0437\u0430\u043c\u0435\u043d\u044b (\u0444\u0430\u0437\u04301 ) \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0441\u043b\u0435\u0432\u0430 (\u0444\u0430\u0437\u04302 ) \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9e1\/758\/b6a\/9e1758b6ad2358f6b451615fa24b0a76.png\" width=\"547\" height=\"727\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e1\/758\/b6a\/9e1758b6ad2358f6b451615fa24b0a76.png\"\/><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 4 (\u0417\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435)<\/strong><\/p>\n<p>\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0441\u0443\u0445\u043e\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c c y k t o b a p x l w q v n j q.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u0445\u043e\u0434 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0434\u043e\u043b\u044c \u0440\u0451\u0431\u0435\u0440 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0430. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f  \u043d\u043e\u0432\u043e\u0441\u0442\u044c. \u0417\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8c5\/755\/5ed\/8c57555ed733f127a9b416428cdbb92f.png\" width=\"581\" height=\"568\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c5\/755\/5ed\/8c57555ed733f127a9b416428cdbb92f.png\"\/><\/figure>\n<p><strong>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c.<\/strong><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u043a\u043e\u0434\u0435. \u041f\u0440\u0438\u0447\u0435\u043c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0421\u0438, \u0438\u0431\u043e \u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043d\u0430 \u0421\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0443\u0436\u0435 \u043e\u0431\u043e\u0433\u0430\u0449\u0451\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 CSV \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445. <\/p>\n<p>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u0421\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e Win \u0443\u0442\u0438\u043b\u0438\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u044e \u044d\u0442\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 CSV \u0441\u0442\u0440\u043e\u0447\u0435\u043a. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u044f \u043f\u043e\u0434\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043b\u0435\u0441\u0430 <\/p>\n<pre><code class=\"cpp\">ADC,GPIO,NVIC,DMA AdcChannels Array Audio,SwDac,Math Button,GPIO,Time CAN,GPIO,NVIC,DMA CRC Cli,Log,StringReader Clk,StartPause DID DMA,NVIC,DmaChannels DmaChannels Fifo Flash,Array FlashFs,NVS,Flash GPIO,Time Heap I2C,GPIO,NVIC,DMA I2S,GPIO,SPI,NVIC,DMA Intervals IsoTp,CAN,Time LedMono,GPIO,Time,Math Limiter,Time,Flash Log,Time,Writer Math NVIC NVS,Flash,CRC,Intervals Nau8814,I2S,I2C,GPIO,Pwm,Task,Cli,Audio Param,Flash,FlashFs Pwm,GPIO,Timer RS232,UART,Fifo RS485,UART,Fifo Relay,GPIO,Time SPI,GPIO,Time,DMA StartPause, Stream,Fifo String,Array StringReader,Fifo,UART,String SuperCycle,Task,Time SwDac,Array,Math,Time,Heap Swd,GPIO SysTick,Clk,NVIC Task,Time,Flash,Limiter Time,Timer,SysTick Timer,Clk,NVIC,Math,DMA UART,GPIO,Fifo,Time,NVIC,DMA UDS,IsoTp,DID,CAN UnitTest,Cli WatchDog,Clk Writer,Stream <\/code><\/pre>\n<p> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u044f \u043f\u043e\u0434\u0430\u043b CSV \u0441\u0442\u0440\u043e\u043a\u0443 <\/p>\n<pre><code class=\"cpp\">StartPause,Writer,Log,NVIC,Clk,SysTick,Flash, Timer,GPIO,UART,Swd,ADC,AdcChannels,I2C,SPI, CAN,I2S,WatchDog,Pwm,DMA,DmaChannels,SwDac,RS232, RS485,StringReader,Cli,IsoTp,UDS,DID,Relay,LedMono, NVS,FlashFs,Param,Heap,Time,SuperCycle,Task,Button,UnitTest,Nau8814<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043b\u044e\u0431\u0435\u0437\u043d\u0435\u0439\u0448\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b\u0430 \u043c\u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043e\u0442 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">Math,Heap,NVIC,,StartPause,Clk,SysTick, DmaChannels,DMA,Timer,Time,Array,SwDac,Audio,String, Fifo,GPIO,UART,StringReader,Stream,Writer,Log,Cli,Flash, Limiter,Task,Pwm,I2C,SPI,I2S,Nau8814,UnitTest,Button, SuperCycle,Intervals,CRC,NVS,FlashFs,Param,LedMono,Relay, DID,CAN,IsoTp,UDS,RS485,RS232,WatchDog,ADC,Swd,AdcChannels<\/code><\/pre>\n<p>\u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u043e\u0436\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u043b\u0430\u043d \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u043f\u0440\u043e\u0432\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u0441\u0451 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0421\u0438-\u043a\u043e\u0434 \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"topo_sort.h\"  #include &lt;math.h> #include &lt;math.h> #include &lt;stddef.h> #include &lt;string.h> #include &lt;stdio.h>  #include \"str_utils_ex.h\" #include \"topo_sort_diag.h\" #include \"log.h\" #include \"code_generator.h\" #include \"csv.h\"  #define RES_SIZE 5000 #define ONE_DEP_SIZE 1000 #define MAX_DEP_LIST 200  typedef struct  {     char name[ONE_DEP_SIZE];     bool valid;     uint32_t size;     uint32_t child_cnt; }DepNode_t;  #define TOPO_SORT_COMMON_VARIABLES          \\     uint8_t num;                          \\     char* name;                           \\     bool valid;  typedef struct {     TOPO_SORT_COMMON_VARIABLES DepNode_t DepArray[MAX_DEP_LIST];     char result[RES_SIZE];     char result2[RES_SIZE]; }TopoSortHandle_t;  typedef struct {     TOPO_SORT_COMMON_VARIABLES }TopoSortConfig_t;   COMPONENT_GET_NODE(TopoSort, topo_sort) COMPONENT_GET_CONFIG(TopoSort, topo_sort)  bool topo_sort_init_custom(void) {     bool res = true ;     LG_level_get_set(LINE, LG_LEVEL_INFO  );     LG_level_get_set(TOPO_SORT, LG_LEVEL_INFO  );     return res; }  static DepNode_t* TopoSortNameToDep(TopoSortHandle_t* Node, char* name){     DepNode_t*  Dep = NULL;     uint32_t i = 0 ;     bool res = false;     uint32_t cnt = MAX_DEP_LIST;     for(i=0;i&lt;cnt;i++) {         if(Node->DepArray[i].valid) {             char node_name[100]={0};             res = csv_parse_text(Node->DepArray[i].name, ',', 0, node_name, sizeof(node_name));             if(res) {                 int ret = 0;                 ret=strcmp(name,node_name);                 if(0==ret){                     Dep=&amp;Node->DepArray[i];                 }             }         }     }     return Dep; }  bool csv_delete_duplicat_left(char * csv_text){     bool res = false ;     if(csv_text){         uint32_t node_cnt=0;         node_cnt = csv_cnt(csv_text, ',');         LG_PARN(TOPO_SORT, \"SwCnt:[%u]\", node_cnt);         uint32_t i = 0;         for(i=0; i&lt;node_cnt; i++) {             LG_PARN(TOPO_SORT, \"%u:Text[%s]\",i, csv_text);             char node_name[100] = {0};             res = csv_parse_text(csv_text, ',', i, node_name, sizeof(node_name));             if(res) {                 int ret = 0 ;                 ret = strcmp(\"\",node_name);                 if(0!=ret) {                     uint32_t dup_cnt = csv_count_node(csv_text, ',' ,node_name);                     if(1 &lt; dup_cnt) {                         LG_DEBUG(TOPO_SORT, \"%u:Duplicant:[%s][%u]\",i, node_name,dup_cnt);                         uint32_t d=0;                         for(d=0 ; d&lt;(dup_cnt-1); d++){                             char temp[200] = {0};                             snprintf(temp,sizeof(temp),\",%s,\",node_name);                             LG_DEBUG(TOPO_SORT, \"TryDel[%s]\",temp);                             \/\/str_del_substr_inplace_firts(csv_text, temp);                             \/\/res = replace_substring_first( csv_text, temp, \",\") ;                             replaceFirstOccurrence( csv_text, temp, \",\") ;                             i=0;                         }                     }                 }             } else {                 LG_ERROR(TOPO_SORT, \"%u:NoNode\",i);             }             node_cnt = csv_cnt(csv_text, ',');             LG_PARN(TOPO_SORT, \"SwCnt:[%u]\", node_cnt);         }     }     return res; }  bool topo_sort_proc_ll(TopoSortHandle_t* Node){     bool res = false ;     if(Node) {         LG_DEBUG(TOPO_SORT, \"Proc:\");         memset(Node->result2,0,sizeof(Node->result2));         uint32_t node_cnt = csv_cnt(Node->result, ',');         LG_DEBUG(TOPO_SORT, \"SwCnt:[%u]\", node_cnt);         uint32_t i = 0;         for(i=0;i&lt;node_cnt;i++) {             char node_name[200] = {0};             res = csv_parse_text(Node->result, ',', i, node_name, sizeof(node_name));             if(res) {                DepNode_t* DepNode=TopoSortNameToDep(Node, node_name);                if(DepNode) {                    LG_DEBUG(TOPO_SORT, \"i:%u,+Deps[%s]\", i,DepNode->name);                    if(0&lt;i) {                        sprintf(Node->result2,\"%s,%s\",Node->result2,DepNode->name);                    } else {                    sprintf(Node->result2,\"%s\",DepNode->name);                    }                    LG_PARN(TOPO_SORT, \"%u,Raw[%s]\",i, Node->result2);                }else{                    LG_ERROR(TOPO_SORT, \"NoDeps:i:%u,[%s]\", i,node_name);                }             }else{                 LG_ERROR(TOPO_SORT, \"Err:i:%u\", i);             }         }          LG_DEBUG(TOPO_SORT, \"Raw[%s]\", Node->result2);         \/*Delete duplicat from left*\/         res  =csv_delete_duplicat_left(Node->result2);         LG_WARNING(TOPO_SORT, \"-Dups[%s]\", Node->result2);         memcpy(Node->result,Node->result2,sizeof(Node->result2));     }     return res; }  bool topo_sort_load_dep(uint8_t num,  char* const sw_dep){     bool res = false ;     LG_WARNING(TOPO_SORT, \"LoadDep:[%s]\", sw_dep);     TopoSortHandle_t* Node=TopoSortGetNode(num);     if(Node){          strcpy(Node->result, \"\");          strcpy(Node->result2, \"\");          FILE* FilePrt = NULL;          char str_line[1000] = {0};          FilePrt = fopen(sw_dep, \"r\");          uint32_t cnt=0;           if(FilePrt) {              strcpy(str_line, \"\");              LG_INFO(TOPO_SORT, \"File [%s] OpenOk\", sw_dep);              while(NULL != fgets(str_line, sizeof(str_line), FilePrt)) {                  size_t len=strlen(str_line);                  if(len){                      uint32_t node_cnt = csv_cnt(str_line, ',');                      LG_INFO(TOPO_SORT, \"+L:%u,[%s]%u],DepCnt:[%u]\",cnt,str_line,len, node_cnt);                      str_del_char_inplace(str_line, '\\n');                      str_del_char_inplace(str_line, '\\r');                      memset(Node->DepArray[cnt].name,0,sizeof(Node->DepArray[cnt].name));                      memcpy(Node->DepArray[cnt].name,str_line,len-1);                      Node->DepArray[cnt].size = len-1;                      Node->DepArray[cnt].valid = true;                      Node->DepArray[cnt].child_cnt=node_cnt-1;                       char node_name[100]={0};                          res = csv_parse_text(str_line, ',', 0, node_name, sizeof(node_name));                          if(res){                              LG_INFO(TOPO_SORT, \"%u,SwCom:[%s]Child:%u\",cnt, node_name,node_cnt-1);                              res = true;                          }else{                              res = false;                              LG_ERROR(TOPO_SORT, \"GetErr:%u\",cnt);                     }                  }             strcpy(str_line, \"\");             cnt++;         }         fclose(FilePrt);     }else{           LG_ERROR(TOPO_SORT, \"FileOpenErr\");     }     }     return res; }  bool topo_sort_run(uint8_t num, char* const sw_comps, char* const sw_dep){     bool res = false ;      TopoSortHandle_t* Node=TopoSortGetNode(num);     if(Node) {         strcpy(Node->result, \"\");          LG_WARNING(TOPO_SORT, \"GenerateInit:[%s]Dep:[%s]\", sw_comps,sw_dep);         res = topo_sort_load_dep(num, sw_dep);         FILE* FilePrt = NULL;         char csv_line[1000] = {0};         FilePrt = fopen(sw_comps, \"r\");         uint32_t cnt = 1;         if(FilePrt) {             LG_INFO(TOPO_SORT, \"File [%s] OpenOk\", sw_comps);             strcpy(csv_line, \"\");             while(NULL != fgets(csv_line, sizeof(csv_line), FilePrt)) {                 uint32_t node_cnt = csv_cnt(csv_line, ',');                 LG_INFO(TOPO_SORT, \"Line:%u,SwComCnt:[%u]\",cnt, node_cnt);                 uint32_t i = 0 ;                 for(i=0;i&lt;node_cnt;i++){                     char node_name[100] = {0};                     res = csv_parse_text(csv_line, ',',   i, node_name, sizeof(node_name));                     if (res) {                         LG_DEBUG(TOPO_SORT, \"%u,SwCom:[%s]\",i, node_name);                         if(0&lt;cnt){                             snprintf(Node->result,RES_SIZE,\"%s,%s\",Node->result,node_name);                         }else{                             snprintf(Node->result,RES_SIZE,\"%s\",node_name);                         }                         uint32_t cnt = csv_cnt(Node->result, ',');                         LG_DEBUG(TOPO_SORT, \"+Set:%u:[%s]\",cnt, Node->result);                     } else {                         LG_ERROR(TOPO_SORT, \"GetErr:%u\",i);                     }                 }                  res = true;                  strcpy(csv_line, \"\");                 cnt++;             }             fclose(FilePrt);         }else{               LG_ERROR(TOPO_SORT, \"FileOpenErr\");         }          uint32_t i=0 ;         for(i=0;i&lt;10;i++) {             LG_NOTICE(TOPO_SORT, \"Set:[%s]\",Node->result);             topo_sort_proc_ll(Node);         }     }     return res; }  bool topo_sort_init_one(uint8_t num) {     LG_WARNING(TOPO_SORT, \"INIT:%u\", num);     bool res = false;     const TopoSortConfig_t* Config = TopoSortGetConfig(num);     if(Config) {         LG_WARNING(TOPO_SORT, \"%s\", TopoSortConfigToStr(Config));         TopoSortHandle_t* Node = TopoSortGetNode(num);         if(Node) {             Node->num = Config->num;             Node->valid = true;              memset(Node->result2,0,sizeof(Node->result2));             memset(Node->result,0,sizeof(Node->result));             strcpy(Node->result2,\"\");             strcpy(Node->result,\"\");             LG_level_get_set(TOPO_SORT, LG_LEVEL_INFO  );             LG_level_get_set(LINE, LG_LEVEL_INFO  );             res = true;         }     }     return res; }  COMPONENT_INIT_PATTERT(TOPO_SORT, TOPO_SORT, topo_sort) <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/strong><\/p>\n<p>\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043f\u0440\u0438 \u043c\u043e\u043d\u0442\u0430\u0436\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0442 PCB. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0447\u0442\u043e \u043f\u0440\u0438\u043f\u0430\u044f\u0432 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435 \u0432\u043b\u0435\u0437\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0440\u044f\u0434\u043e\u043c. \u041f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u0443 \u0436\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442 \u043f\u043e \u043f\u0430\u0439\u043a\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 PCB.<\/p>\n<p><strong>\u0412\u044b\u0432\u043e\u0434<\/strong><\/p>\n<p>\u0423\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0443 \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. <\/p>\n<p>\u0423\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e C\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043c\u0435\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u042d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0440\u043e\u0433\u0443 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0442\u043e \u043f\u0438\u0448\u0438\u0442\u0435, \u044f \u043f\u0440\u0438\u0448\u043b\u044e *.exe \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432.<\/p>\n<p><strong>Links<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"56\" width=\"56\">\n<p align=\"left\"><strong>\u2116<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"200\" width=\"200\">\n<p align=\"left\"><strong>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>URL<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"56\" width=\"56\">\n<p align=\"left\">1<\/p>\n<\/td>\n<td data-colwidth=\"200\" width=\"200\">\n<p align=\"left\">\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0433\u0440\u0430\u0444\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/www.youtube.com\/watch?v=o0P8oNXoA_w\" rel=\"noopener noreferrer nofollow\">https:\/\/www.youtube.com\/watch?v=o0P8oNXoA_w<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"56\" width=\"56\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"200\" width=\"200\">\n<p align=\"left\">\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/habr.com\/ru\/companies\/otus\/articles\/499138\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/companies\/otus\/articles\/499138\/<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/818917\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0412\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043e\u0440\u0438\u044e \u0433\u0440\u0430\u0444\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">20% <\/span><span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 20%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">80% <\/span><span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span><span class=\"tm-article-poll__answer-votes\">4<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 80%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 5 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0441\u044f 1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. <\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/818917\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0412\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u043f\u0430\u0439\u043a\u0435 PCB?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">25% <\/span><span class=\"tm-article-poll__answer-label\">\u0434\u0430<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 25%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">75% <\/span><span class=\"tm-article-poll__answer-label\">\u043d\u0435\u0442<\/span><span class=\"tm-article-poll__answer-votes\">3<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 75%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 4 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.    \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0441\u044f 1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/818917\/\"> https:\/\/habr.com\/ru\/articles\/818917\/<\/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\"><\/figure>\n<p>\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c &#8212; \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.  \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u0435. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b. <\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/p>\n<pre><code class=\"cpp\">bool xxx_init(void);<\/code><\/pre>\n<p>\u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c. \u0422\u043e \u0435\u0441\u0442\u044c, \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e xyz_init()?<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u043a\u0443\u0445\u043e\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0442\u0440\u043e\u043c \u043c\u044b \u043d\u0430\u0434\u0435\u0432\u0430\u0435\u043c \u043e\u0434\u0435\u0436\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0439\u0442\u0438 \u043d\u0430 \u0443\u043b\u0438\u0446\u0443. \u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0447\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0430\u0434\u0435\u0432\u0430\u0442\u044c \u043d\u043e\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430\u0434\u0435\u0442\u0430 \u043e\u0431\u0443\u0432\u044c. \u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0430\u0434\u0435\u0432\u0430\u0442\u044c \u0440\u0443\u0431\u0430\u0448\u043a\u0443, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u0435\u0442\u0430 \u043a\u0443\u0440\u0442\u043a\u0430 \u0438 \u0442. \u043f. \u0422\u0430\u043a \u0436\u0435 \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u041d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 UART, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d GPIO.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438. \u0418 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0442\u043e\u0436\u0435 \u043c\u043d\u043e\u0433\u043e: \u043f\u043e 5-7 \u0448\u0442\u0443\u043a. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0438\u0448\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b\u0438\u043a \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u0432\u0430\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u0434\u043e, \u043f\u043e \u043c\u0435\u0440\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u043e\u0441\u044c \u0438 \u043f\u043e \u0445\u043e\u0434\u0443 \u043d\u0435 \u0437\u0430\u043a\u043b\u0438\u043d\u0438\u043b\u043e. <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0420\u0430\u0434\u043e\u0441\u0442\u044c \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0447\u0438\u0441\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043a \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438! <\/p>\n<p><strong>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/strong><br \/>\u0415\u0441\u0442\u044c \u043d\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a (\u0442\u043e\u043a\u0435\u043d\u043e\u0432), \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.<\/p>\n<pre><code class=\"swift\">Button,FlashFs,I2S,Log,StartPause,Writer,NVIC,Clk,SysTick, Flash,Timer,GPIO,UART,Swd,ADC,I2C,SPI,CAN ,WatchDog,Pwm,DMA,Mcu,SwDac, RS485,StringReader,CLI,IsoTp, UDS,Relay,LedMono,NVS,Param,Heap,Time, SuperCycle,task,UnitTest,Nau8814<\/code><\/pre>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0435\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0423 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<pre><code class=\"cpp\">start_pause,Clk Writer,UART Log UART Clk, Flash SysTick,Clk Timer, Clk GPIO, UART, GPIO Swd,GPIO... ADC,AdcChannels,.. I2C,GPIO UART SPI,GPIO UART CAN,GPIO I2S,GPIO DMA WatchDog, RS232,GPIO UART RS485,GPIO StringReader, CLI,RS232 Relay,GPIO Time LedMonoInit, NVS,Flash Flash_FS, NVS Flash Param, Flash_FS SuperCycle, task, SuperCycle <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0440\u0430\u0444 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043a\u0443\u043b\u044c\u0442\u043e\u0432\u043e\u0433\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 <strong>Pastilda<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043d\u0435 \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043c\u0430\u043b\u043e, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043f\u0440\u0430\u0432\u0430 (->). \u0422\u0435 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u043b\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 &#8212; \u0441\u043b\u0435\u0432\u0430 (&lt;-). \u0422\u043e\u043b\u044c\u043a\u043e \u0438 \u0432\u0441\u0435\u0433\u043e..<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0434\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0433\u0440\u0430\u0444 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0412 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u044d\u0442\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 <\/strong>\u0433\u0440\u0430\u0444\u0430<strong>.<\/p>\n<p><\/strong>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f<strong>, <\/strong>\u043d\u0430\u0434\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u044e \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u043d\u0430\u0441.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f.<\/strong><\/p>\n<p>\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u043a\u0430\u043a \u0431\u044b \u0434\u0432\u0430 \u0438\u043b\u0438 \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u0438 \u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0430 \u043b\u0435\u0441.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0445\u043e\u0434\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e. \u041c\u043d\u0435, \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e, \u0438\u0431\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430\u0445 \u0434\u043b\u044f \u041c\u041a \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0437\u043e\u043b\u043e\u0442\u044b\u0445 MISRA \u0437\u0430\u043f\u0440\u0435\u0442\u0430:<\/p>\n<p>1&#8212;\u0417\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. <\/p>\n<p>2&#8212;\u0417\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e. <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0437\u043b\u043e\u0436\u0443 \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0430\u0438\u0432\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0433\u0440\u0430\u0444\u0430\u043c\u0438, \u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438! <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0442\u0430\u043d\u0446\u0443\u0435\u043c \u043e\u0442 \u043f\u0435\u0447\u043a\u0438&#8230; \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0435\u0446\u043a\u0438\u0439 \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0418\u0434\u0435\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430. \u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <strong>g,n,a, t<\/strong>. <\/p>\n<p><strong>\u0424\u0430\u0437\u0430 1 (\u0412\u0441\u0442\u0430\u0432\u043a\u0430)<\/strong><\/p>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0412\u043e\u0442 \u0442\u0430\u043a.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 2 (\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044b)<\/strong><br \/>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044b. \u0422\u043e \u0435\u0441\u0442\u044c w. \u041f\u0440\u0438\u0447\u0435\u043c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043d\u0430\u0434\u043e \u0441\u043b\u0435\u0432\u0430 (&lt;). \u0418\u0431\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0430 (>). \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u0430 \u043f\u043e\u0440\u043e\u0439 \u0438 \u0432\u043e\u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u043a\u043b\u0438\u043d\u0438\u0432\u0430\u043d\u0438\u044e \u0438 \u043e\u0441\u0435\u0447\u043a\u0430\u043c \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435.<\/p>\n<p><strong>\u0424\u0430\u0437\u0430 3 (\u041f\u043e\u0432\u0442\u043e\u0440)<\/strong><\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b  \u0437\u0430\u043c\u0435\u043d\u044b (\u0444\u0430\u0437\u04301 ) \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0441\u043b\u0435\u0432\u0430 (\u0444\u0430\u0437\u04302 ) \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>\u0424\u0430\u0437\u0430 4 (\u0417\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435)<\/strong><\/p>\n<p>\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0441\u0443\u0445\u043e\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c c y k t o b a p x l w q v n j q.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u0445\u043e\u0434 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0434\u043e\u043b\u044c \u0440\u0451\u0431\u0435\u0440 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0430. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f  \u043d\u043e\u0432\u043e\u0441\u0442\u044c. \u0417\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c.<\/strong><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u043a\u043e\u0434\u0435. \u041f\u0440\u0438\u0447\u0435\u043c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0421\u0438, \u0438\u0431\u043e \u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043d\u0430 \u0421\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0443\u0436\u0435 \u043e\u0431\u043e\u0433\u0430\u0449\u0451\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 CSV \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445. <\/p>\n<p>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u0421\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e Win \u0443\u0442\u0438\u043b\u0438\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u044e \u044d\u0442\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 CSV \u0441\u0442\u0440\u043e\u0447\u0435\u043a. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u044f \u043f\u043e\u0434\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043b\u0435\u0441\u0430 <\/p>\n<pre><code class=\"cpp\">ADC,GPIO,NVIC,DMA AdcChannels Array Audio,SwDac,Math Button,GPIO,Time CAN,GPIO,NVIC,DMA CRC Cli,Log,StringReader Clk,StartPause DID DMA,NVIC,DmaChannels DmaChannels Fifo Flash,Array FlashFs,NVS,Flash GPIO,Time Heap I2C,GPIO,NVIC,DMA I2S,GPIO,SPI,NVIC,DMA Intervals IsoTp,CAN,Time LedMono,GPIO,Time,Math Limiter,Time,Flash Log,Time,Writer Math NVIC NVS,Flash,CRC,Intervals Nau8814,I2S,I2C,GPIO,Pwm,Task,Cli,Audio Param,Flash,FlashFs Pwm,GPIO,Timer RS232,UART,Fifo RS485,UART,Fifo Relay,GPIO,Time SPI,GPIO,Time,DMA StartPause, Stream,Fifo String,Array StringReader,Fifo,UART,String SuperCycle,Task,Time SwDac,Array,Math,Time,Heap Swd,GPIO SysTick,Clk,NVIC Task,Time,Flash,Limiter Time,Timer,SysTick Timer,Clk,NVIC,Math,DMA UART,GPIO,Fifo,Time,NVIC,DMA UDS,IsoTp,DID,CAN UnitTest,Cli WatchDog,Clk Writer,Stream <\/code><\/pre>\n<p> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u044f \u043f\u043e\u0434\u0430\u043b CSV \u0441\u0442\u0440\u043e\u043a\u0443 <\/p>\n<pre><code class=\"cpp\">StartPause,Writer,Log,NVIC,Clk,SysTick,Flash, Timer,GPIO,UART,Swd,ADC,AdcChannels,I2C,SPI, CAN,I2S,WatchDog,Pwm,DMA,DmaChannels,SwDac,RS232, RS485,StringReader,Cli,IsoTp,UDS,DID,Relay,LedMono, NVS,FlashFs,Param,Heap,Time,SuperCycle,Task,Button,UnitTest,Nau8814<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043b\u044e\u0431\u0435\u0437\u043d\u0435\u0439\u0448\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b\u0430 \u043c\u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043e\u0442 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">Math,Heap,NVIC,,StartPause,Clk,SysTick, DmaChannels,DMA,Timer,Time,Array,SwDac,Audio,String, Fifo,GPIO,UART,StringReader,Stream,Writer,Log,Cli,Flash, Limiter,Task,Pwm,I2C,SPI,I2S,Nau8814,UnitTest,Button, SuperCycle,Intervals,CRC,NVS,FlashFs,Param,LedMono,Relay, DID,CAN,IsoTp,UDS,RS485,RS232,WatchDog,ADC,Swd,AdcChannels<\/code><\/pre>\n<p>\u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u043e\u0436\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u043b\u0430\u043d \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u043f\u0440\u043e\u0432\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u0441\u0451 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0421\u0438-\u043a\u043e\u0434 \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"topo_sort.h\"  #include &lt;math.h> #include &lt;math.h> #include &lt;stddef.h> #include &lt;string.h> #include &lt;stdio.h>  #include \"str_utils_ex.h\" #include \"topo_sort_diag.h\" #include \"log.h\" #include \"code_generator.h\" #include \"csv.h\"  #define RES_SIZE 5000 #define ONE_DEP_SIZE 1000 #define MAX_DEP_LIST 200  typedef struct  {     char name[ONE_DEP_SIZE];     bool valid;     uint32_t size;     uint32_t child_cnt; }DepNode_t;  #define TOPO_SORT_COMMON_VARIABLES          \\     uint8_t num;                          \\     char* name;                           \\     bool valid;  typedef struct {     TOPO_SORT_COMMON_VARIABLES DepNode_t DepArray[MAX_DEP_LIST];     char result[RES_SIZE];     char result2[RES_SIZE]; }TopoSortHandle_t;  typedef struct {     TOPO_SORT_COMMON_VARIABLES }TopoSortConfig_t;   COMPONENT_GET_NODE(TopoSort, topo_sort) COMPONENT_GET_CONFIG(TopoSort, topo_sort)  bool topo_sort_init_custom(void) {     bool res = true ;     LG_level_get_set(LINE, LG_LEVEL_INFO  );     LG_level_get_set(TOPO_SORT, LG_LEVEL_INFO  );     return res; }  static DepNode_t* TopoSortNameToDep(TopoSortHandle_t* Node, char* name){     DepNode_t*  Dep = NULL;     uint32_t i = 0 ;     bool res = false;     uint32_t cnt = MAX_DEP_LIST;     for(i=0;i&lt;cnt;i++) {         if(Node->DepArray[i].valid) {             char node_name[100]={0};             res = csv_parse_text(Node->DepArray[i].name, ',', 0, node_name, sizeof(node_name));             if(res) {                 int ret = 0;                 ret=strcmp(name,node_name);                 if(0==ret){                     Dep=&amp;Node->DepArray[i];                 }             }         }     }     return Dep; }  bool csv_delete_duplicat_left(char * csv_text){     bool res = false ;     if(csv_text){         uint32_t node_cnt=0;         node_cnt = csv_cnt(csv_text, ',');         LG_PARN(TOPO_SORT, \"SwCnt:[%u]\", node_cnt);         uint32_t i = 0;         for(i=0; i&lt;node_cnt; i++) {             LG_PARN(TOPO_SORT, \"%u:Text[%s]\",i, csv_text);             char node_name[100] = {0};             res = csv_parse_text(csv_text, ',', i, node_name, sizeof(node_name));             if(res) {                 int ret = 0 ;                 ret = strcmp(\"\",node_name);                 if(0!=ret) {                     uint32_t dup_cnt = csv_count_node(csv_text, ',' ,node_name);                     if(1 &lt; dup_cnt) {                         LG_DEBUG(TOPO_SORT, \"%u:Duplicant:[%s][%u]\",i, node_name,dup_cnt);                         uint32_t d=0;                         for(d=0 ; d&lt;(dup_cnt-1); d++){                             char temp[200] = {0};                             snprintf(temp,sizeof(temp),\",%s,\",node_name);                             LG_DEBUG(TOPO_SORT, \"TryDel[%s]\",temp);                             \/\/str_del_substr_inplace_firts(csv_text, temp);                             \/\/res = replace_substring_first( csv_text, temp, \",\") ;                             replaceFirstOccurrence( csv_text, temp, \",\") ;       <\/code><\/pre>\n<\/div>\n<\/details>\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-377938","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/377938","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=377938"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/377938\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=377938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=377938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=377938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}