{"id":260911,"date":"2015-07-07T23:25:02","date_gmt":"2015-07-07T19:25:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=260911"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=260911","title":{"rendered":"STM32, C++ \u0438 FreeRTOS. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0427\u0430\u0441\u0442\u044c 3 (LCD \u0438 \u042d\u043a\u0440\u0430\u043d\u044b)"},"content":{"rendered":"<br \/>\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0412 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 <a href=\"http:\/\/habrahabr.ru\/post\/261823\/\"> STM32, C++ \u0438 FreeRTOS. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0427\u0430\u0441\u0442\u044c 1<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/post\/261823\/\">STM32, C++ \u0438 FreeRTOS. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0427\u0430\u0441\u0442\u044c 2<\/a> \u043c\u043d\u043e\u044e \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f SR0, SR7, SR4 \u0438 SR6. \u041e\u043f\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0441\u0442\u044c.<br \/>  SR0: \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 (\u0438\u043c\u0435\u0442\u044c \u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445): <u>\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/u>, <u>\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 VDDA<\/u>, <u>\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0430<\/u><br \/>  SR1: \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440<\/b>.<br \/>  SR2: \u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f <u>\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/u> \u2014 \u0433\u0440\u0430\u0434\u0443\u0441\u044b \u0426\u0435\u043b\u044c\u0441\u0438\u044f, \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u2014 \u0432\u043e\u043b\u044c\u0442\u044b.<br \/>  SR3: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 1<\/b>, \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u043a\u0440\u0430\u043d \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, <br \/>  SR4: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 1<\/b> <b> \u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 1<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<br \/>  SR5: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 2<\/b>, \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 (\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u044b \u0440\u0430\u0437 \u0432 1.5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b) \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435, <br \/>  SR6: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 2<\/b> <b>\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 2 <\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<br \/>  SR7: <b>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 3<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u043e\u0440\u0433\u0430\u0442\u044c \u0440\u0430\u0437 \u0432 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>  \u0417\u043d\u0430\u0447\u0438\u0442 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0430\u043c\u044b\u0435 \u00ab\u0432\u043a\u0443\u0441\u043d\u044b\u0435\u00bb \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0439 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435: SR1, SR2, SR3, SR5. \u041d\u0443 \u0447\u0442\u043e \u0436\u0435 \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<h4>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430<\/h4>\n<p>  \u041d\u0430\u0447\u043d\u0443 \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430. \u041f\u043e\u043c\u043d\u0438\u0442\u0441\u044f (\u0432\u0441\u0435 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 8-\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438), \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u043e\u0441\u043e\u0431\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0437\u0432\u0430\u043b\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0442\u043e \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0430 \u0442\u0443\u0442 \u0446\u0435\u043b\u044b\u0439 \u00ab\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u00bb \u0441 \u043a\u0443\u0447\u0435\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u0438\u0436\u0435 \u0441 \u043d\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f  <a href=\"http:\/\/habrahabr.ru\/users\/halleffect\/\" class=\"user_link\">HallEffect<\/a> <a href=\"http:\/\/habrahabr.ru\/post\/173709\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0416\u041a \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 STM32L-Discovery<\/a>, \u043f\u043b\u044e\u0441 \u044f \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u0434\u0435\u043c\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Olimex, \u043d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0434\u0430\u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u00ab\u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438\u00bb \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u0418 \u044d\u0442\u043e \u0434\u0430\u043b\u043e \u0441\u0432\u043e\u0438 \u043f\u043b\u043e\u0434\u044b, \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0449\u044c\u044e \u043a\u0430\u043a Bit Banding, \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0442\u0441\u0443\u043f\u043d\u043e \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u0443\u0442: <a href=\"http:\/\/blablacode.ru\/%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D1%8B\/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-bit-banding-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5-stm32.html\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Bit Banding \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 stm32<\/a>. <br \/>  \u041f\u043e\u0434\u043d\u044f\u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043a\u0438\u043b\u0441, \u044f \u0441\u0435\u043b \u0437\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 cLcdDriver. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440:<br \/>   <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/edd\/53e\/3de\/edd53e3de21d47078a30fe059bd56cbf.png\" alt=\"image\"\/>. <br \/>  <a name=\"habracut\"><\/a><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0432 \u043d\u0435\u043c 2 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f(\u0432\u0435\u0440\u0445\u043d\u044f\u044f) \u0438 \u0411\u041e\u041b\u042c\u0428\u0410\u042f \u043d\u0438\u0436\u043d\u044f\u044f \u0438 \u0435\u0449\u0435 \u043a\u0443\u0447\u0430 \u0432\u0441\u044f\u043a\u0438\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b :). \u0422\u0430\u043a\u0436\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0438\u0436\u043d\u044e\u044e \u0411\u041e\u041b\u042c\u0428\u0423\u042e \u0441\u0442\u0440\u043e\u043a\u0443. \u0415\u0451 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u041d\u0443 \u0432\u043e\u0442 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c, \u0441 \u0442\u0435\u043c \u043a\u0443\u0434\u0430 \u0438 \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c, \u0438 \u043f\u043e\u0441\u043b\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043a\u043b\u0430\u0441\u0441:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/28a\/cb4\/bd6\/28acb4bd63834ddf98775c68dc4397af.png\" alt=\"image\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u043f\u043e\u0440\u0442\u043e\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e 47 \ud83d\ude42 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e LCD. \u041d\u043e \u044f \u0443\u043f\u043e\u0440\u043d\u044b\u0439, \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 LCD \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437 \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0412\u0441\u0435 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u043e \u0432 __low_level_init().  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0432 __low_level_init<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">   \/\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 LCD \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u041d\u0427 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u0430 \u0442\u043e \u0447\u0435-\u0442\u043e     \/\/\u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u043d\u043d\u0435\u0433\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0433\u043b\u044e\u0447\u0438\u0442       RCC-&gt;CSR |= RCC_CSR_RTCRST;    RCC-&gt;CSR &= ~RCC_CSR_RTCRST;    RCC-&gt;CSR |= RCC_CSR_LSEON;    while(!(RCC-&gt;CSR&RCC_CSR_LSERDY))    {    }       RCC-&gt;CSR |= RCC_CSR_RTCSEL_LSE;    \/\/\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442\u044b \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430     \/\/\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c  PA.08 \u043d\u0430 LCD COM0     \/\/\u0420\u0410.08 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c. \u0441\u0442\u0440 174. CD00240194.pdf    GPIOA-&gt;MODER  |= GPIO_MODER_MODER8_1;    \/\/PA.08 \u043d\u0430 LCD \u0421\u041e\u041c0, \u0441\u043c \u0441\u0442\u0440.189 CD00240194.pdf    GPIOA-&gt;AFR[1]|= GPIO_AF_LCD;             \/\/\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c  PA.09 \u043d\u0430 LCD COM1     \/\/\u0420\u0410.09 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c. \u0441\u0442\u0440 174,189 CD00240194.pdf    GPIOA-&gt;MODER  |= GPIO_MODER_MODER9_1;    GPIOA-&gt;AFR[1] |= GPIO_AF_LCD &lt;&lt; PIN9_SHIFT;             \/\/\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c  PA.10 \u043d\u0430 LCD COM2     \/\/\u0420\u0410.10 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c. \u0441\u0442\u0440 174,189 CD00240194.pdf    GPIOA-&gt;MODER  |= GPIO_MODER_MODER10_1;    GPIOA-&gt;AFR[1] |= GPIO_AF_LCD &lt;&lt; PIN10_SHIFT;     \/\/\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c  PB.09 \u043d\u0430 LCD COM3     \/\/\u0420B.09 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c. \u0441\u0442\u0440 174,189 CD00240194.pdf    GPIOB-&gt;MODER  |= GPIO_MODER_MODER9_1;    GPIOB-&gt;AFR[1] |= GPIO_AF_LCD &lt;&lt; PIN9_SHIFT;       \/\/\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c  PA.01 \u043d\u0430 LCD SEG0     \/\/\u0420\u0410.01 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c. \u0441\u0442\u0440 174,189 CD00240194.pdf    GPIOA-&gt;MODER  |= GPIO_MODER_MODER1_1;    GPIOA-&gt;AFR[0] |= GPIO_AF_LCD &lt;&lt; PIN1_SHIFT;        \/\/\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c  PA.02 \u043d\u0430 LCD SEG1     \/\/\u0420\u0410.02 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c. \u0441\u0442\u0440 174189 CD00240194.pdf    GPIOA-&gt;MODER  |= GPIO_MODER_MODER2_1;    GPIOA-&gt;AFR[0] |= GPIO_AF_LCD &lt;&lt; PIN2_SHIFT;     ...    \/\/\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c  PD.02 \u043d\u0430 LCD SEG43    \/\/\u0420D.02 \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c. \u0441\u0442\u0440 174,189 CD00240194.pdf    GPIOD-&gt;MODER  |= GPIO_MODER_MODER2_1;    GPIOD-&gt;AFR[0] |= GPIO_AF_LCD &lt;&lt; PIN2_SHIFT;    \/\/\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 LCD: DUTY = 1\/4, BIAS=1\/4, MUX_SEG = disable    \/\/VSEL = 0 (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f)    \/\/PRESCALLER= 1\/2, DIVIDER = ck_ps\/20, BLINK =0, BLINKF=0, CC=VLCD4, DEAD = 0    \/\/PON = 3, UDDIE = 0,SOFIE = 0, HD = 0, \u0441\u043c. \u0441\u0442\u0440 377-378 CD00240194.pdf    \/\/DUTY 1\/4     \/\/ \u041f\u0440\u0435\u0441\u043a\u0430\u043b\u043b\u0435\u0440 \u043d\u0430 1\/2, \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043d\u0430 20 \u0441\u043c \u0441\u0442\u0440 378. CD00240194.pdf    LCD-&gt;FCR = LCD_FCR_PS_1 | (LCD_FCR_DIV_0 | LCD_FCR_DIV_2) |  (LCD_FCR_PON_0 | LCD_FCR_PON_1) | LCD_FCR_CC_2 | LCD_FCR_CC_1;       \/\/ \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440 FCR    while (!(LCD-&gt;SR & LCD_SR_FCRSR ))    {     }    LCD-&gt;CR |= (LCD_CR_DUTY_1 | LCD_CR_DUTY_0);    \/\/\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0439    LCD-&gt;CR |= LCD_CR_LCDEN; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e RAM, \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0451, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440. \u0422\u0443\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c, \u0438 \u043f\u0440\u0438\u0448\u0435\u043b Bit Banding, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c pTableSegs \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 166 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443) \u0443\u043a\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 tU32 \u044f\u0447\u0435\u0435\u043a \u2014 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0442\u043e\u0432 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 RAM. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 1 \u0438\u043b\u0438 0 \u0432 \u0442\u0430\u043a\u0443\u044e tU32 \u044f\u0447\u0435\u0439\u043a\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u043b\u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u0438\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 RAM, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d\u0430 \u0441\u043c\u0430\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u0410\u0434\u0440\u0435\u0441\u0430 \u044d\u0442\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043c\u0443\u0434\u0440\u0435\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435, \u0432\u0437\u044f\u0442\u043e\u0439 \u043c\u043d\u043e\u044e \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u043c\u043e\u043f\u0440\u043e\u0435\u043a\u0442\u0430.  <\/p>\n<pre><code class=\"cpp\">\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c BitBanding \u0441\u043c. \u0441\u0442\u0440 49. CD00240194.pdf #define SEG_MASK(seg)    (seg & (32-1)) #define SEG_EL(seg,com)  (volatile tU32 *)(PERIPH_BASE + 0x2000000 +  ((0x2400 + 0x14 + ((com*2) + ((seg&lt;32)?0:1))*4)*32) + SEG_MASK(seg)*4)) \/\/\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0434\u043b\u044f bitBandinga \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 volatile tU32* cLcdDriver::pTableSegs[] = {   SEG_EL(39,3), \/\/ +    0   SEG_EL(39,0), \/\/ -    1   SEG_EL(37,3), \/\/ 1A   2   SEG_EL(37,2), \/\/ 1B   3   SEG_EL(37,1), \/\/ 1C   4   SEG_EL(37,0), \/\/ 1D   5   SEG_EL(39,1), \/\/ 1E   6   SEG_EL(39,2), \/\/ 1F   7     ...      SEG_EL(5 ,1), \/\/ 11F  165   SEG_EL(4 ,1), \/\/ 11G  166 }; <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0438. \u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0411\u041e\u041b\u042c\u0428\u041e\u0419 \u0421\u0422\u0420\u041e\u041a\u0418 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0430 \u043d\u0438\u0436\u043d\u0435\u0439(\u0411\u043e\u043b\u044c\u0448\u043e\u0439) \u0441\u0442\u0440\u043e\u043a\u0435                \/\/       _______a_______ \/\/      |\\      |      \/|    \/\/      f  h    j    k  b    |col \/\/      |    \\  |  \/    | \/\/      |___g__\\ \/__m___|       \/\/      |      \/ \\      |    |  \/\/      e    q  p  n    c \/\/      |  \/    |    \\  | \/\/      |\/______d______\\|    |dp #define SEG_A ((tU32)1&lt;&lt;0) #define SEG_B ((tU32)1&lt;&lt;1) #define SEG_C ((tU32)1&lt;&lt;2) ... #define SEG_DP ((tU32)1&lt;&lt;14) #define SEG_COL ((tU32)1&lt;&lt;15) <\/code><\/pre>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u043a\u0430\u0436\u0435\u043c \u0431\u0443\u043a\u0432\u0443 \u0421, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0436\u0435\u0447\u044c a,d,e,f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0421 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">#define Symbol_C  (SEG_A | SEG_D | SEG_E | SEG_F) <\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u043e\u0447\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0451 \u0432 \u0442\u043e \u0436\u0435 \u043c\u0435\u0441\u0442\u043e \u043a\u0443\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0446\u0438\u0444\u0440\u0430. \u041d\u0443 \u0432\u043e\u0431\u0449\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438 \u043d\u0443\u0434\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0448\u043b\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0430 \ud83d\ude42  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">lcddriver.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;types.h&quot;            \/\/\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 tU32, tBoolean class cLcdDriver {   public:     explicit cLcdDriver(void);     void showBigString(const char* pStr);   private:     void updateDisplay(void);     tBoolean isReady(void);     void showBigSymbol(const tU32 digitPlace, const char character, const tBoolean bDot);     static volatile tU32* pTableSegs[];     static const tU32 charToLcdSymbol[];     static const tU32 bigDigitOffset[]; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">lcddriver.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;lcddriver.h&quot;       \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430  #include &lt;stm32l1xx.h&gt;        \/\/\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b STM32 #include &quot;susuassert.h&quot;       \/\/\u0434\u043b\u044f ASSERT #include &quot;types.h&quot;            \/\/\u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 tPort, tU16, tU8 #include &quot;bitutil.h&quot;          \/\/\u0434\u043b\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0442\u0430\u043c\u0438 SETBIT, CLRBIT #include &lt;stddef.h&gt;           \/\/\u0434\u043b\u044f NULL    #define BIG_SYMBOLS_COUNT 7  \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043d\u0438\u0436\u043d\u0435\u0439(\u0431\u043e\u043b\u044c\u0448\u043e\u0439) \u0441\u0442\u0440\u043e\u043a\u0435  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c BitBanding \u0441\u043c. \u0441\u0442\u0440 49. CD00240194.pdf \/\/ \u0434\u043e\u043f \u0438\u043d\u0444\u0430 \u0442\u0443\u0442: https:\/\/plus.google.com\/115316880241890152471\/posts\/M7tzhpQiC9M #define SEG_MASK(seg)    (seg & (32-1)) #define SEG_EL(seg,com)  (volatile tU32 *)(PERIPH_BASE + 0x2000000 + ((0x2400 + 0x14 + ((com*2) + ((seg&lt;32)?0:1))*4)*32) + (SEG_MASK(seg)*4)) #define SEG_A ((tU32)1&lt;&lt;0) #define SEG_B ((tU32)1&lt;&lt;1) #define SEG_C ((tU32)1&lt;&lt;2) #define SEG_D ((tU32)1&lt;&lt;3) #define SEG_E ((tU32)1&lt;&lt;4) #define SEG_F ((tU32)1&lt;&lt;5) #define SEG_G ((tU32)1&lt;&lt;6) #define SEG_H ((tU32)1&lt;&lt;7) #define SEG_J ((tU32)1&lt;&lt;8) #define SEG_K ((tU32)1&lt;&lt;9) #define SEG_M ((tU32)1&lt;&lt;10) #define SEG_N ((tU32)1&lt;&lt;11) #define SEG_P ((tU32)1&lt;&lt;12) #define SEG_Q ((tU32)1&lt;&lt;13) #define SEG_DP ((tU32)1&lt;&lt;14) #define SEG_COL ((tU32)1&lt;&lt;15) \/\/ \u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0430 \u043d\u0438\u0436\u043d\u0435\u0439(\u0411\u043e\u043b\u044c\u0448\u043e\u0439) \u0441\u0442\u0440\u043e\u043a\u0435                \/\/       _______a_______ \/\/      |\\      |      \/|    \/\/      f  h    j    k  b    |col \/\/      |    \\  |  \/    | \/\/      |___g__\\ \/__m___|       \/\/      |      \/ \\      |    |  \/\/      e    q  p  n    c \/\/      |  \/    |    \\  | \/\/      |\/______d______\\|    |dp #define Symbol_20  (tU32)0 #define Symbol_21  (tU32)0 #define Symbol_22  (tU32)0 #define Symbol_23  (tU32)0 #define Symbol_24  (tU32)0 #define Symbol_25  (tU32)0 #define Symbol_26  (tU32)0 #define Symbol_27  (tU32)0 #define Symbol_28  (tU32)0 #define Symbol_29  (tU32)0 #define Symbol_2A  (tU32)0 #define Symbol_2B (SEG_J | SEG_M | SEG_P | SEG_G) \/\/\u0441\u0438\u043c\u0432\u043e\u043b '+' #define Symbol_2C (SEG_DP) \/\/\u0441\u0438\u043c\u0432\u043e\u043b ',' #define Symbol_2D (SEG_J | SEG_M) \/\/\u0441\u0438\u043c\u0432\u043e\u043b '-' #define Symbol_2E (SEG_DP) \/\/\u0441\u0438\u043c\u0432\u043e\u043b '.' #define Symbol_2F (SEG_K | SEG_Q) \/\/\u0441\u0438\u043c\u0432\u043e\u043b '\/' #define Digit_0 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_H | SEG_N) #define Digit_1 (SEG_B | SEG_C) #define Digit_2 (SEG_A | SEG_B | SEG_G | SEG_E | SEG_D | SEG_M) #define Digit_3 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_G | SEG_M) #define Digit_4 (SEG_F | SEG_B | SEG_C | SEG_G | SEG_M) #define Digit_5 (SEG_A | SEG_F | SEG_G | SEG_C | SEG_D | SEG_M) #define Digit_6 (SEG_A | SEG_F | SEG_G | SEG_C | SEG_D | SEG_E | SEG_M) #define Digit_7 (SEG_A | SEG_B | SEG_C) #define Digit_8 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_M) #define Digit_9 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G | SEG_M) #define Symbol_3A (SEG_DP) \/\/ \u0441\u0438\u043c\u0432\u043e\u043b ':' #define Symbol_3B (SEG_COL) \/\/ \u0441\u0438\u043c\u0432\u043e\u043b ';' #define Symbol_3C (SEG_K | SEG_N) \/\/ \u0441\u0438\u043c\u0432\u043e\u043b '&lt;' #define Symbol_3D (SEG_A | SEG_G | SEG_M) \/\/\u0441\u0438\u043c\u0432\u043e\u043b '=' #define Symbol_3E (SEG_H | SEG_Q) \/\/\u0441\u0438\u043c\u0432\u043e\u043b '&gt;' #define Symbol_3F  (tU32)0 \/\/\u0441\u0438\u043c\u0432\u043e\u043b '?' \u0431\u0443\u0434\u0435\u0442 \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c :) #define Symbol_40 (SEG_D | SEG_E | SEG_F | SEG_A | SEG_B | SEG_M| SEG_J) \/\/ '@' #define Symbol_A  (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G | SEG_M) #define Symbol_B  (SEG_A | SEG_K | SEG_N | SEG_D | SEG_E | SEG_G | SEG_F) #define Symbol_C  (SEG_A | SEG_D | SEG_E | SEG_F) #define Symbol_D  (SEG_A | SEG_B | SEG_C | SEG_D | SEG_J | SEG_P)  #define Symbol_E  (SEG_A | SEG_G | SEG_M | SEG_D | SEG_E | SEG_F) #define Symbol_F  (SEG_A | SEG_G | SEG_M | SEG_E | SEG_F) #define Symbol_G  (SEG_A | SEG_N | SEG_D | SEG_E | SEG_F) #define Symbol_H  (SEG_F | SEG_E | SEG_G | SEG_M | SEG_B | SEG_C) #define Symbol_I  (SEG_G | SEG_P) #define Symbol_J  (SEG_B | SEG_C | SEG_D) #define Symbol_K  (SEG_F | SEG_E | SEG_G | SEG_K | SEG_N) #define Symbol_L  (SEG_F | SEG_E | SEG_D) #define Symbol_M  (SEG_E | SEG_F | SEG_H | SEG_K | SEG_B | SEG_C) #define Symbol_N  (SEG_E | SEG_F | SEG_H | SEG_N | SEG_B | SEG_C) #define Symbol_O   Symbol_D #define Symbol_P  (SEG_E | SEG_F | SEG_A | SEG_B | SEG_M | SEG_G) #define Symbol_Q  (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_N) #define Symbol_R  (SEG_A | SEG_B | SEG_M | SEG_N | SEG_G | SEG_E | SEG_F) #define Symbol_S  (SEG_A | SEG_F | SEG_G | SEG_M | SEG_C | SEG_D) #define Symbol_T  (SEG_A | SEG_J | SEG_P) #define Symbol_U  (SEG_F | SEG_E | SEG_D | SEG_C | SEG_B) #define Symbol_V  (SEG_H | SEG_N | SEG_C | SEG_B) #define Symbol_W  (SEG_F | SEG_E | SEG_Q | SEG_N | SEG_C | SEG_B) #define Symbol_X  (SEG_H | SEG_Q | SEG_N | SEG_K) #define Symbol_Y  (SEG_H | SEG_K | SEG_P) #define Symbol_Z  (SEG_A | SEG_K | SEG_Q | SEG_D) #define BIG_SYMBOL_SIZE (16)  \/\/1 \u0441\u0438\u043c\u0432\u043e\u043b 16 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432,\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435 \u0438 \u0442\u043e\u0447\u043a\u0443 \/\/ 1 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f 2 (+ \u0438 - \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f), \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 pTableSegs #define Big_Digit_0_offset  (tU32)2   #define Big_Digit_1_offset  (tU32)18  #define Big_Digit_2_offset  (tU32)34 #define Big_Digit_3_offset  (tU32)50 #define Big_Digit_4_offset  (tU32)66 #define Big_Digit_5_offset  (tU32)82 #define Big_Digit_6_offset  (tU32)97 \/\/ \u0423 \u043d\u0430\u0441 7 \u0446\u0438\u0444\u0440 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0435, \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0441\u0434\u0432\u0438\u0433\u0430 \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0446\u0438\u0444\u0440.  const tU32 cLcdDriver::bigDigitOffset[] =  {   Big_Digit_0_offset, Big_Digit_1_offset,    Big_Digit_2_offset, Big_Digit_3_offset,   Big_Digit_4_offset, Big_Digit_5_offset,   Big_Digit_6_offset   };  \/\/\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 (ASCI \u043a\u043e\u0434\u0430 \u0431\u0443\u043a\u0432\u044b - ASCI \u043a\u043e\u0434 ' '(\u043f\u0440\u043e\u0431\u0435\u043b\u0430)) \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 const tU32 cLcdDriver::charToLcdSymbol[] =  {   Symbol_20,   Symbol_21, Symbol_22, Symbol_23, Symbol_24, Symbol_25,   Symbol_27, Symbol_27, Symbol_28, Symbol_29, Symbol_2A,   Symbol_2B, Symbol_2C, Symbol_2D, Symbol_2E, Symbol_2F,   Digit_0, Digit_1, Digit_2, Digit_3, Digit_4,   Digit_5, Digit_6, Digit_7, Digit_8, Digit_9,   Symbol_3A, Symbol_3B, Symbol_3C, Symbol_3D,   Symbol_3D, Symbol_3F, Symbol_40, Symbol_A,   Symbol_B, Symbol_C, Symbol_D, Symbol_E, Symbol_F,   Symbol_G, Symbol_H, Symbol_I, Symbol_J, Symbol_K,   Symbol_L, Symbol_M, Symbol_N, Symbol_O, Symbol_P,   Symbol_Q, Symbol_R, Symbol_S, Symbol_T, Symbol_U,   Symbol_V, Symbol_W, Symbol_X, Symbol_Y, Symbol_Z   }; \/\/\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0434\u043b\u044f bitBandinga \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 volatile tU32* cLcdDriver::pTableSegs[] = {   SEG_EL(39,3), \/\/ +    0   SEG_EL(39,0), \/\/ -    1   SEG_EL(37,3), \/\/ 1A   2   SEG_EL(37,2), \/\/ 1B   3   SEG_EL(37,1), \/\/ 1C   4   SEG_EL(37,0), \/\/ 1D   5   SEG_EL(39,1), \/\/ 1E   6   SEG_EL(39,2), \/\/ 1F   7   SEG_EL(38,2), \/\/ 1G   8   SEG_EL(38,3), \/\/ 1H   9   SEG_EL(36,3), \/\/ 1J   10   SEG_EL(36,2), \/\/ 1K   11   SEG_EL(36,1), \/\/ 1M   12   SEG_EL(36,0), \/\/ 1N   13   SEG_EL(38,0), \/\/ 1P   14   SEG_EL(38,1), \/\/ 1Q   15   SEG_EL(35,0), \/\/ 1DP  16   SEG_EL(35,3), \/\/ 2COL 17    SEG_EL(33,3), \/\/ 2A   18   SEG_EL(33,2), \/\/ 2B   19   SEG_EL(33,1), \/\/ 2C   20   SEG_EL(33,0), \/\/ 2D   21   SEG_EL(35,1), \/\/ 2E   22   SEG_EL(35,2), \/\/ 2F   23   SEG_EL(34,2), \/\/ 2G   24   SEG_EL(34,3), \/\/ 2H   25   SEG_EL(32,3), \/\/ 2J   26   SEG_EL(32,2), \/\/ 2K   27   SEG_EL(32,1), \/\/ 2M   28   SEG_EL(32,0), \/\/ 2N   29   SEG_EL(34,0), \/\/ 2P   30   SEG_EL(34,1), \/\/ 2Q   31   SEG_EL(31,0), \/\/ 2DP  32   SEG_EL(31,3), \/\/ 3COL 33    SEG_EL(29,3), \/\/ 3A   34   SEG_EL(29,2), \/\/ 3B   35   SEG_EL(29,1), \/\/ 3C   36   SEG_EL(29,0), \/\/ 3D   37   SEG_EL(31,1), \/\/ 3E   38   SEG_EL(31,2), \/\/ 3F   39   SEG_EL(30,2), \/\/ 3G   40   SEG_EL(30,3), \/\/ 3H   41   SEG_EL(28,3), \/\/ 3J   42   SEG_EL(28,2), \/\/ 3K   43   SEG_EL(28,1), \/\/ 3M   44   SEG_EL(28,0), \/\/ 3N   45   SEG_EL(30,0), \/\/ 3P   46   SEG_EL(30,1), \/\/ 3Q   47   SEG_EL(27,0), \/\/ 3DP  48   SEG_EL(27,3), \/\/ 4COL 49    SEG_EL(25,3), \/\/ 4A   50   SEG_EL(25,2), \/\/ 4B   51   SEG_EL(25,1), \/\/ 4C   52   SEG_EL(25,0), \/\/ 4D   53   SEG_EL(27,1), \/\/ 4E   54   SEG_EL(27,2), \/\/ 4F   55   SEG_EL(26,2), \/\/ 4G   56   SEG_EL(26,3), \/\/ 4H   57   SEG_EL(24,3), \/\/ 4J   58   SEG_EL(24,2), \/\/ 4K   59   SEG_EL(24,1), \/\/ 4M   60   SEG_EL(24,0), \/\/ 4N   61   SEG_EL(26,0), \/\/ 4P   62   SEG_EL(26,1), \/\/ 4Q   63   SEG_EL(23,0), \/\/ 4DP  64   SEG_EL(23,3), \/\/ 5COL 65    SEG_EL(21,3), \/\/ 5A   66   SEG_EL(21,2), \/\/ 5B   67   SEG_EL(21,1), \/\/ 5C   68   SEG_EL(21,0), \/\/ 5D   69   SEG_EL(23,1), \/\/ 5E   70   SEG_EL(23,2), \/\/ 5F   71   SEG_EL(22,2), \/\/ 5G   72   SEG_EL(22,3), \/\/ 5H   73   SEG_EL(20,3), \/\/ 5J   74   SEG_EL(20,2), \/\/ 5K   75   SEG_EL(20,1), \/\/ 5M   76   SEG_EL(20,0), \/\/ 5N   77   SEG_EL(22,0), \/\/ 5P   78   SEG_EL(22,1), \/\/ 5Q   79   SEG_EL(19,0), \/\/ 5DP  80   SEG_EL(19,3), \/\/ 6COL 81    SEG_EL(17,3), \/\/ 6A   82   SEG_EL(17,2), \/\/ 6B   83   SEG_EL(17,1), \/\/ 6C   84   SEG_EL(17,0), \/\/ 6D   85   SEG_EL(19,1), \/\/ 6E   86   SEG_EL(19,2), \/\/ 6F   87   SEG_EL(18,2), \/\/ 6G   88   SEG_EL(18,3), \/\/ 6H   89   SEG_EL(16,3), \/\/ 6J   90   SEG_EL(16,2), \/\/ 6K   91   SEG_EL(16,1), \/\/ 6M   92   SEG_EL(16,0), \/\/ 6N   93   SEG_EL(18,0), \/\/ 6P   94   SEG_EL(18,1), \/\/ 6Q   95   SEG_EL(15,0), \/\/ 6DP  96    SEG_EL(13,3), \/\/ 7A   97   SEG_EL(13,2), \/\/ 7B   98   SEG_EL(13,1), \/\/ 7C   99   SEG_EL(13,0), \/\/ 7D   100   SEG_EL(15,1), \/\/ 7E   101   SEG_EL(15,2), \/\/ 7F   102   SEG_EL(14,2), \/\/ 7G   103   SEG_EL(14,3), \/\/ 7H   104   SEG_EL(12,3), \/\/ 7J   105   SEG_EL(12,2), \/\/ 7K   106   SEG_EL(12,1), \/\/ 7M   107   SEG_EL(12,0), \/\/ 7N   108   SEG_EL(14,0), \/\/ 7P   109   SEG_EL(14,1), \/\/ 7Q   110    SEG_EL(1 ,3), \/\/ A1   111   SEG_EL(1 ,2), \/\/ A2   112   SEG_EL(1 ,1), \/\/ A3   113   SEG_EL(1 ,0), \/\/ A4   114    SEG_EL(2 ,0), \/\/ BRBL 115   SEG_EL(2 ,3), \/\/ B0   116   SEG_EL(2 ,2), \/\/ B1   117   SEG_EL(2 ,1), \/\/ B2   118    SEG_EL(0 ,3), \/\/ PL   119   SEG_EL(0 ,2), \/\/ P0   120   SEG_EL(0 ,1), \/\/ P1   121   SEG_EL(0 ,0), \/\/ P2   122   SEG_EL(43,0), \/\/ P3   123   SEG_EL(43,1), \/\/ P4   124   SEG_EL(43,2), \/\/ P5   125   SEG_EL(43,3), \/\/ P6   126   SEG_EL(42,3), \/\/ P7   127   SEG_EL(42,2), \/\/ P8   128   SEG_EL(42,1), \/\/ P9   129   SEG_EL(42,0), \/\/ PR   130    SEG_EL(3 ,0), \/\/ AL   131   SEG_EL(3 ,1), \/\/ AU   132   SEG_EL(3 ,2), \/\/ AR   133   SEG_EL(3 ,3), \/\/ AD   134    SEG_EL(15,3), \/\/ SB   135    SEG_EL(10,0), \/\/ 8A   136   SEG_EL(10,1), \/\/ 8B   137   SEG_EL(10,2), \/\/ 8C   138   SEG_EL(11,3), \/\/ 8D   139   SEG_EL(11,2), \/\/ 8E   140   SEG_EL(11,0), \/\/ 8F   141   SEG_EL(11,1), \/\/ 8G   142   SEG_EL(10,3), \/\/ 8P   143    SEG_EL(8 ,0), \/\/ 9A   144   SEG_EL(8 ,1), \/\/ 9B   145   SEG_EL(8 ,2), \/\/ 9C   146   SEG_EL(9 ,3), \/\/ 9D   147   SEG_EL(9 ,2), \/\/ 9E   148   SEG_EL(9 ,0), \/\/ 9F   149   SEG_EL(9 ,1), \/\/ 9G   150   SEG_EL(8 ,3), \/\/ 10P  151   SEG_EL(7 ,3), \/\/ 10COLON  152    SEG_EL(7 ,0), \/\/ 10A  153   SEG_EL(6 ,0), \/\/ 10B  154   SEG_EL(6 ,2), \/\/ 10C  155   SEG_EL(6 ,3), \/\/ 10D  156   SEG_EL(7 ,2), \/\/ 10E  157   SEG_EL(7 ,1), \/\/ 10F  158   SEG_EL(6 ,1), \/\/ 10G  159    SEG_EL(5 ,0), \/\/ 11A  160   SEG_EL(4 ,0), \/\/ 11B  161   SEG_EL(4 ,2), \/\/ 11C  162   SEG_EL(4 ,3), \/\/ 11D  163   SEG_EL(5 ,2), \/\/ 11E  164   SEG_EL(5 ,1), \/\/ 11F  165   SEG_EL(4 ,1), \/\/ 11G  166 }; \/******************************************************************************* * Function:  constructor * Description:  ******************************************************************************\/ cLcdDriver::cLcdDriver(void)  {   this-&gt;updateDisplay(); } \/******************************************************************************* * Function:  showBigString * Description: \u0412\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043d\u0438\u0436\u043d\u044e\u044e(\u0431\u043e\u043b\u044c\u0448\u0443\u044e)\u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435.  ******************************************************************************\/ void cLcdDriver::showBigString(const char* pStr) {   tU32 digitPlace = 0;   tBoolean bDot = FALSE;   \/\/\u0444\u043b\u0430\u0433 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u043e\u0447\u043a\u0438   const char *pNextChar = pStr;   pNextChar++;   \/\/\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b RAM \u0438\u043d\u0434\u0438\u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438   \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0435\u0441\u043b\u0438 \u043e\u043d \u0440\u0430\u0432\u0435\u043d\u043e \u0442\u043e\u0447\u043a\u0435 \u0438\u043b\u0438 \u0437\u0430\u043f\u044f\u0442\u043e\u0439   \/\/\u0441\u0442\u0430\u0432\u0438\u043c \u0444\u043b\u0430\u0433 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0442\u043e\u0447\u043a\u0438 \u0432 TRUE   \/\/\u041f\u0443\u0441\u0442\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438   while (digitPlace &lt; BIG_SYMBOLS_COUNT)   {     if (( *pNextChar == '.' ) || (*pNextChar == ','))     {       bDot = TRUE;     }     if ((*pStr != '.') && (*pStr != ','))     {       if (*pStr != NULL)       {         this-&gt;showBigSymbol(digitPlace, *pStr, bDot);       }       else       {         this-&gt;showBigSymbol(digitPlace, ' ', FALSE);       }              digitPlace++;     }     pStr++;     pNextChar++;     bDot = FALSE;   }   \/\/\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u044f   this-&gt;updateDisplay(); } \/******************************************************************************* * Function:  showBigSymbol * Description: \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439(\u043d\u0438\u0436\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438) \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430,  *              \u043d\u043e \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 ******************************************************************************\/ void cLcdDriver::showBigSymbol(const tU32 digitPlace,                                 const char character, const tBoolean bDot) {   ASSERT(character &gt; 0);   ASSERT(character &lt; 61);   volatile tU32 **p_data = &this-&gt;pTableSegs[this-&gt;bigDigitOffset[digitPlace]];   tU32 mask = charToLcdSymbol[character - ' '];   \/\/\u0415\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0434\u043e\u043f \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0442\u043e\u0447\u043a\u0438   if (bDot == TRUE)    {     mask |= SEG_DP;   }   \/\/ \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442\u044b \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u043f\u0430\u043c\u044f\u0442\u0438 LCD-&gt;RAM \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0442\u0411\u0435\u043d\u0434\u0438\u043d\u0433   for(tU32 i = 0, j = 1; i &lt; BIG_SYMBOL_SIZE; i++, j &lt;&lt;= 1)   {     if(mask & j)     {       **p_data = 1;     }     else     {       **p_data = 0;     }     ++p_data;   }  } \/******************************************************************************* * Function:  isReady * Description: \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 ******************************************************************************\/ tBoolean cLcdDriver::isReady(void) {   tBoolean result = FALSE;    if (!CHECK_BITS_SET(LCD-&gt;SR,LCD_SR_UDR))     {     result = TRUE;   }   return result; } \/******************************************************************************* * Function:  updateDisplay * Description: \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u0432\u044b\u0437\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 *              \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 LCD ******************************************************************************\/ void cLcdDriver::updateDisplay(void) {   SETBIT(LCD-&gt;SR, LCD_SR_UDR); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0432 main() \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">cLcdDriver *pLcdDriver = new cLcdDriver(); pLcdDriver-&gt;showBigString(&quot;H.E.L.L.O&quot;); <\/code><\/pre>\n<h4>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u041b\u043e\u0433\u0438\u043a\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u043e\u0444\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440<\/h4>\n<p>  \u041d\u0443 \u0432\u043e\u0442 \u0438 \u0432\u0441\u0435 \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c \u043f\u043e\u043a\u043e\u043d\u0447\u0435\u043d\u043e. \u041f\u043e\u0440\u0430 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043b\u043e\u0433\u0438\u043a\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440. \u042f \u0440\u0435\u0448\u0438\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0434\u0443\u043c\u0430\u0442\u044c \u0438 \u043d\u0435 \u043a\u0438\u0434\u0430\u0442\u044c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u0430 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 3 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u0442\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0438 \u043a\u0430\u043a \u043e\u0434\u043d\u0438\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432. \u0412\u0441\u0435 \u044d\u043a\u0440\u0430\u043d\u044b \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e cLcdDriver \u043a\u043b\u0430\u0441\u0441, \u0430 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 cVariableDirector, \u043d\u0443 \u0438 \u044d\u043a\u0440\u0430\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u0441\u0435\u0431\u044f. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0438\u0441\u0443\u0435\u043c \u043c\u044b \ud83d\ude42<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c88\/207\/960\/c882079604274804b9b2dd420af5d8b0.png\" alt=\"image\"\/><br \/>  \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, Vdda \u0438 \u0422\u0440\u0438\u043c\u043c\u0435\u0440\u0430. \u041e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 show(), \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1ca\/9ee\/2ba\/1ca9ee2ba84a43588ca24eedaa49b5ee.png\" alt=\"image\"\/><br \/>  \u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u044b\u0431\u0438\u0440\u0430\u043b \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f tF32 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e sprintf, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u043a\u0443 \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438, \u043d\u043e \u043d\u0435 \u0441\u0442\u0430\u043b, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">iscreen.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;types.h&quot;               \/\/\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 #include &quot;lcddriver.h&quot;           \/\/\u0434\u043b\u044f cLcdDriver #include &quot;variablesdirector.h&quot;   \/\/ \u0434\u043b\u044f cVariableDirector  class iScreen {   public:     explicit iScreen(cLcdDriver *pLcdDriver, const cVariablesDirector *pVariablesDirector);     virtual void show(void) = 0;   protected:     cLcdDriver *pLcdDriver;     const cVariablesDirector *pVariablesDirector;     }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">iscreen.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;iscreen.h&quot;          \/\/ \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 #include &quot;susuassert.h&quot;       \/\/ \u0434\u043b\u044f ASSERT \/******************************************************************************* * Function:  constructor * Description:  ******************************************************************************\/ iScreen::iScreen(cLcdDriver *pLcdDriver,                   const cVariablesDirector *pVariablesDirector)   {   ASSERT(pLcdDriver != NULL);   ASSERT(pVariablesDirector != NULL);     this-&gt;pLcdDriver =  pLcdDriver;      this-&gt;pVariablesDirector = pVariablesDirector; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">screentemperature.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;lcddriver.h&quot;        \/\/\u0434\u043b\u044f cLcdDriver #include &quot;variablesdirector.h&quot;      \/\/ \u0434\u043b\u044f cVariableDirector  #include &quot;iscreen.h&quot;          \/\/\u0434\u043b\u044f iScreen class cScreenTemperature : public iScreen {   public:     explicit cScreenTemperature(cLcdDriver *pLcdDriver, const cVariablesDirector *pVariablesDirector);     void show(void);     }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">screentemperature.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;screentemperature.h&quot;  \/\/ \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 #include &quot;types.h&quot;              \/\/ \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 #include &lt;stdio.h&gt;              \/\/ \u0434\u043b\u044f sprintf \/******************************************************************************* * Function:  constructor * Description:  ******************************************************************************\/ cScreenTemperature::cScreenTemperature(cLcdDriver *pLcdDriver,  const cVariablesDirector *pVariablesDirector) : iScreen(pLcdDriver, pVariablesDirector)   { } \/******************************************************************************* * Function:  show * Description: \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 ******************************************************************************\/ void cScreenTemperature::show(void)   {   char str[10];   tF32 value = this-&gt;pVariablesDirector-&gt;pTemperature-&gt;getValue();   sprintf(str, &quot;T %4.1f C&quot;, value);   this-&gt;pLcdDriver-&gt;showBigString(str);      } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">screentrimmer.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">include &quot;lcddriver.h&quot;          \/\/\u0434\u043b\u044f cLcdDriver #include &quot;variablesdirector.h&quot;  \/\/ \u0434\u043b\u044f cVariableDirector  #include &quot;iscreen.h&quot;            \/\/\u0434\u043b\u044f iScreen class cScreenTrimmer : public iScreen {   public:     explicit cScreenTrimmer(cLcdDriver *pLcdDriver, const cVariablesDirector *pVariablesDirector);     void show(void); }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">screentrimmer.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;screentrimmer.h&quot;      \/\/ \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 #include &quot;types.h&quot;              \/\/ \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 #include &lt;stdio.h&gt;              \/\/ \u0434\u043b\u044f sprintf \/******************************************************************************* * Function:  constructor * Description:  ******************************************************************************\/ cScreenTrimmer::cScreenTrimmer(cLcdDriver *pLcdDriver, const cVariablesDirector *pVariablesDirector) : iScreen(pLcdDriver, pVariablesDirector)   {  } \/******************************************************************************* * Function:  show * Description: \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0435 ******************************************************************************\/ void cScreenTrimmer::show(void)   {   char str[10];   tF32 value = this-&gt;pVariablesDirector-&gt;pTrimmer-&gt;getValue();   sprintf(str, &quot;P %3.2f V&quot;, value);   this-&gt;pLcdDriver-&gt;showBigString(str);      } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0443 \u0447\u0442\u043e \u0436\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u0435\u043d \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c <s>\u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e\u043c<\/s> \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e\u043c, \u0430 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e cScreenManager. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043f\u0440\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: SR3: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 1<\/b>, \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u043a\u0440\u0430\u043d \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0410\u0433\u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043c\u0435\u0442\u043e\u0434 NextScreen(). \u0410 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442: SR5: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 2<\/b>, \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 (\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u044b \u0440\u0430\u0437 \u0432 1.5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b) \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435. \u041d\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f NextMode() \ud83d\ude42 <br \/>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u044d\u0442\u043e\u0442 cScreenManager \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u044d\u043a\u0440\u0430\u043d\u043e\u0432 (\u0443 \u043d\u0430\u0441 \u0438\u0445 \u0442\u0440\u0438 cTemperatureScreen, cTrimmerScreen \u0438 \u0441VddaScreen), \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0447\u0435\u0440\u0435\u0437 \u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u043a\u0440\u0430\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 iScreen *pScreen[SCREEN_NUM];<br \/>  \u0418 \u0442\u0430\u043a \u0441\u043d\u043e\u0432\u0430 \u0440\u0438\u0441\u0443\u0435\u043c \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438: <br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/9d6\/fa9\/eac\/9d6fa9eac120435a9191826016aa3582.png\" alt=\"image\"\/><br \/>  \u0418 \u043d\u0435\u043e\u0442\u0445\u043e\u0434\u044f \u043e\u0442 \u043a\u0430\u0441\u0441\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">screenmanager.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;types.h&quot;            \/\/\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 #include &quot;iscreen.h&quot;          \/\/\u0434\u043b\u044f iScreen #define SCREEN_NUM              (tU32)3 #define TEMPERATURE_SCREEN_ID   (tU32)0 #define TRIMMER_SCREEN_ID       (tU32)1 #define VDDA_SCREEN_ID          (tU32)2 typedef enum {   SM_single = 0,   SM_sequence = 1   }tScreenMode; class cScreenManager {   public:     explicit cScreenManager(cLcdDriver *pLcdDriver,                              const cVariablesDirector *pVariablesDirector);     void nextScreen(void);     void nextMode(void);     void show(void);   private:      iScreen *pScreen[SCREEN_NUM];     iScreen *pCurrentScreen;     tU32 screenId;     tScreenMode eMode; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">screenmanager.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;screenmanager.h&quot;          \/\/ \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 #include &quot;screentemperature.h&quot;      \/\/\u0434\u043b\u044f ScreenTemperature #include &quot;screentrimmer.h&quot;          \/\/\u0434\u043b\u044f \u0441ScreenTrimmer #include &quot;screenvdda.h&quot;             \/\/\u0434\u043b\u044f \u0441ScreenVdda #include &quot;susuassert.h&quot;             \/\/ \u0434\u043b\u044f ASSERT \/******************************************************************************* * Function:  constructor * Description: \u0421\u043e\u0437\u0434\u0430\u0435\u0442 3 \u0441\u043a\u0440\u0438\u043d\u0430 \u0434\u043b\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u043e\u043c\u0435\u0442\u0440\u0430 \u0438 Vdda ******************************************************************************\/ cScreenManager::cScreenManager(cLcdDriver *pLcdDriver, const cVariablesDirector *pVariablesDirector) {   ASSERT(pLcdDriver != NULL);   ASSERT(pVariablesDirector != NULL);     this-&gt;pScreen[TEMPERATURE_SCREEN_ID] =              (iScreen*)(new cScreenTemperature(pLcdDriver, pVariablesDirector));   this-&gt;pScreen[TRIMMER_SCREEN_ID] =              (iScreen*)(new cScreenTrimmer(pLcdDriver, pVariablesDirector));   this-&gt;pScreen[VDDA_SCREEN_ID] =              (iScreen*)(new cScreenVdda(pLcdDriver, pVariablesDirector));   this-&gt;screenId = TEMPERATURE_SCREEN_ID;   this-&gt;pCurrentScreen = this-&gt;pScreen[this-&gt;screenId];   this-&gt;eMode = SM_single; } \/******************************************************************************* * Function:  show * Description: \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043d, \u0438  \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0441\u043a\u0440\u0438\u043d  ******************************************************************************\/ void cScreenManager::show(void)   {   switch (eMode)   {     case SM_single:       this-&gt;pCurrentScreen-&gt;show();     break;     case SM_sequence:       this-&gt;pCurrentScreen-&gt;show();       this-&gt;nextScreen();     break;     default:     break;   } }   \/******************************************************************************* * Function:  nextScreen * Description: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0440\u0438\u043d ******************************************************************************\/ void cScreenManager::nextScreen(void)   {   this-&gt;screenId ++;   if (this-&gt;screenId &gt;= SCREEN_NUM)   {     this-&gt;screenId = TEMPERATURE_SCREEN_ID;       }   this-&gt;pCurrentScreen = this-&gt;pScreen[this-&gt;screenId];   } \/******************************************************************************* * Function:  nextMode * Description: \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u043a\u0430\u0437\u0430 \u0441\u043a\u0440\u0438\u043d\u043e\u0432 ******************************************************************************\/ void cScreenManager::nextMode(void)   {   if (this-&gt;eMode  == SM_single)   {     this-&gt;eMode = SM_sequence;   }   else   {     this-&gt;eMode = SM_single;   }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0443 \u0447\u0442\u043e \u0436\u0435 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u044b \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/257\/679\/4b7\/2576794b72d44e99860a0500d3fdc893.png\" alt=\"image\"\/><\/p>\n<p>  \u0410 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">lcddirector.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;iactiveobject.h&quot;      \/\/lint !e537 \u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 iActiveObject   #include &quot;lcddriver.h&quot;          \/\/lint !e537 \u0414\u043b\u044f cLcdDriver #include &quot;screenmanager.h&quot;      \/\/lint !e537 \u0414\u043b\u044f cScreenManager  #include &quot;variablesdirector.h&quot;  \/\/lint !e537 \u0414\u043b\u044f pVariableDirector    class cLcdDirector : public iActiveObject {   public:     explicit cLcdDirector(const cVariablesDirector *pVariableDirector);     virtual void run(void);     private:     cLcdDriver* pLcdDriver;     cScreenManager *pScreenManager;     }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<pre><code class=\"cpp\">#include &quot;lcddirector.h&quot;      \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 #include &quot;susuassert.h&quot;       \/\/ \u0414\u043b\u044f ASSERT #include &quot;types.h&quot;            \/\/ \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 #include &quot;buttonscontroller.h&quot; \/\/ \u0414\u043b\u044f tButton #include &lt;limits.h&gt;           \/\/  \u0414\u043b\u044f ULONG_MAX #define LCD_DELAY (tU32) (1500\/portTICK_PERIOD_MS) \/******************************************************************************* * Function:  constructor * Description: \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 cLcdDriver \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 *              \u044d\u043a\u0437\u0435\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 cScreenManager, \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Lcd ******************************************************************************\/ cLcdDirector::cLcdDirector(const cVariablesDirector *pVariablesDirector)   {   ASSERT(pVariablesDirector != NULL);   this-&gt;pLcdDriver =  new cLcdDriver();    this-&gt;pScreenManager =  new cScreenManager(this-&gt;pLcdDriver,                                              pVariablesDirector); } \/******************************************************************************* * Function:  run * Description: \u0417\u0430\u0434\u0430\u0447\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0438\u0434\u0438\u043a\u0430\u0442\u043e\u0440. \u0416\u0434\u0435\u0442 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043e\u0442 \u043a\u043d\u043e\u043f\u043e\u043a *              \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0435 \u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u044b, \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0432\u044b\u0432\u043e\u0434\u0430. ******************************************************************************\/ void cLcdDirector::run(void) {   tU32 button = (tU32) 0;   tBoolean status = FALSE;   tButtons eButton = BT_none;       for(;;)   {     status = (tBoolean)oRTOS.taskNotifyWait((tU32)0, (tU32)ULONG_MAX, &button, LCD_DELAY);     if (status == TRUE)   \/\/lint !e731 \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435     {       eButton = (tButtons)button;       switch (eButton)       {         case BT_button1:         this-&gt;pScreenManager-&gt;nextScreen();          break;         case BT_button2:         this-&gt;pScreenManager-&gt;nextMode();          break;         case BT_none:         break;         default:         break;       }     }      this-&gt;pScreenManager-&gt;show();       }  } <\/code><\/pre>\n<p>  \u0418 \u0432\u043e\u0442 \u043e\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 4 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441 \u0410\u0420\u041c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c<br \/>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/HH6YhvC8sbg?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>  \u041f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u0438\u043d\u0442\u043e\u043c, \u043e\u043d \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0438 \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438:<br \/>  Info 750: local macro &#8216;Symbol_26&#8217; (line 65, file AHardware\\Lcd\\lcddriver.cpp) not referenced<br \/>  Info 750: local macro &#8216;Symbol_3E&#8217; (line 89, file AHardware\\Lcd\\lcddriver.cpp) not referenced<\/p>\n<p>  \u0410 \u0432\u0435\u0434\u044c \u0438 \u043f\u0440\u0430\u0432\u0434\u0430, \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0444\u0430\u0439\u043b\u0430 lcddriver.cpp, \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442 \u0438 \u0434\u0432\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0430\u043b\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435\u0442, \u043d\u043e \u043b\u0438\u043d\u0442 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0448\u0442\u0443\u043a\u0430. <br \/>  \/\/\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 (ASCI \u043a\u043e\u0434\u0430 \u0431\u0443\u043a\u0432\u044b \u2014 ASCI \u043a\u043e\u0434 &#8216; &#8216;(\u043f\u0440\u043e\u0431\u0435\u043b\u0430)) \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430<br \/>  const tU32 cLcdDriver::charToLcdSymbol[] = <br \/>  {<br \/>   Symbol_20,<br \/>   Symbol_21, Symbol_22, Symbol_23, Symbol_24, Symbol_25,<br \/>   <b>Symbol_27<\/b>, Symbol_27, Symbol_28, Symbol_29, Symbol_2A,<br \/>   Symbol_2B, Symbol_2C, Symbol_2D, Symbol_2E, Symbol_2F,<br \/>   Digit_0, Digit_1, Digit_2, Digit_3, Digit_4,<br \/>   Digit_5, Digit_6, Digit_7, Digit_8, Digit_9,<br \/>   Symbol_3A, Symbol_3B, Symbol_3C, Symbol_3D,<br \/>   <b>Symbol_3D<\/b>, Symbol_3F, Symbol_40, Symbol_A,<br \/>   Symbol_B, Symbol_C, Symbol_D, Symbol_E, Symbol_F,<br \/>   Symbol_G, Symbol_H, Symbol_I, Symbol_J, Symbol_K,<br \/>   Symbol_L, Symbol_M, Symbol_N, Symbol_O, Symbol_P,<br \/>   Symbol_Q, Symbol_R, Symbol_S, Symbol_T, Symbol_U,<br \/>   Symbol_V, Symbol_W, Symbol_X, Symbol_Y, Symbol_Z <br \/>  };<\/p>\n<p>  \u041d\u0443 \u0447\u0442\u043e \u0436\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0435. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 (\u043c\u043d\u043e\u044e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0436\u0435) \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u041e\u0421\u0420\u0412, \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u0430 \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u00ab\u0441\u043b\u043e\u0436\u043d\u044b \u0432\u0435\u0449\u0435\u0439\u00bb, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438). <br \/>  \u041c\u043e\u0435 \u043b\u0438\u0447\u043d\u043e\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0438 \u043c\u043d\u0435\u043d\u0438\u0435 \u2014 \u0437\u0430 8 \u043b\u0435\u0442 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0448\u0430\u0433\u043d\u0443\u043b\u0438 \u0432\u043f\u0435\u0440\u0435\u0434. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435, \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432, \u0438 \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \ud83d\ude42<\/p>\n<p>  P.S.<br \/>  \u041f\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c  <a href=\"http:\/\/habrahabr.ru\/users\/prostotyoma\/\" class=\"user_link\">prostoTyoma<\/a> \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u2014 \u0445\u0432\u0430\u0442\u0438\u0442 \ud83d\ude42 \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">filter.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;types.h&quot;            \/\/lint !e537 \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430  class cFilter {   public:     explicit cFilter(const tF32 filterConst);     tF32 getFilteredValue() const { return filteredValue; };     void  updateFilteredValue(const tF32 nonFileredValue);   private:     tF32 filteredValue;     tF32 previousFilteredValue;     tF32 filterConstant; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">filter.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;susuassert.h&quot;       \/\/lint !e537 \u0414\u043b\u044f ASSERT #include &quot;types.h&quot;            \/\/lint !e537 \u0414\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 #include &quot;filter.h&quot;          \/\/lint !e537 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \/******************************************************************************* * Function:  constructor * Description: \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043d\u0443\u043b\u0435\u043c ******************************************************************************\/ cFilter::cFilter(const tF32 filterConst)   {   ASSERT(filerConst != 0);   filteredValue = (tF32)0;   previousFilteredValue = (tF32)0;   this-&gt;filterConstant = filterConst; } \/******************************************************************************* * Function:  constructor * Description: \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c ******************************************************************************\/ void cFilter::updateFilteredValue(const tF32 nonFileredValue) {   this-&gt;filteredValue = this-&gt;filteredValue + (nonFileredValue -                          this-&gt;filteredValue) \/ this-&gt;filterConstant; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0410 \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 vdda, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u2014 \u0432\u043e\u0442 \u0442\u0430\u043a. \u041a\u0441\u0442\u0430\u0442\u0438 \u0442\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u043b \u0435\u0433\u043e \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0447\u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0438 \u043b\u0443\u0447\u0448\u0435, \u0434\u0430 \u0438 \u043a\u043e\u0434\u0430(\u0442\u0435\u043a\u0441\u0442\u0430) \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u043b\u0438\u043d\u0442 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \ud83d\ude42  <\/p>\n<pre><code class=\"cpp\">******************************************************************************* * Function:  constructor * Description:  ******************************************************************************\/ cVdda::cVdda(const cAdcDirector *pAdcDir) : iVariable(pAdcDir), oFilter(VDDA_FILTER_CONST)      { } \/******************************************************************************* * Function:  calculate * Description: \u0420\u0430\u0441\u0447\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f Vdda ******************************************************************************\/ tF32 cVdda::calculate(void) {   \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 vdda   tF32 vdda = (tF32)0.0;      \/\/\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430, \u0441\u043c \u0441\u0442\u0440 289 CD00240193.pdf \u0438   \/\/\u0441\u0442\u0440 102 CD00277537.pdf   tF32 vddaCal = (tF32)(*((tU32 *)(VDDA_CAL_ADDR)) &gt;&gt; 16);   vdda = (tF32)this-&gt;pAdcDirector-&gt;channelValue[VDDA_CHANNEL];   \/\/\u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0441\u043e \u0441\u043c \u0441\u0442\u0440 289 CD00240193.pdf    vdda = VOLTS_3_0 * vdda \/ vddaCal;    this-&gt;oFilter.updateFilteredValue(vdda);   this-&gt;value = this-&gt;oFilter.getFilteredValue();    return  this-&gt;value;     } <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u2014 \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043a\u0443\u0440\u0441\u0430, \u0445\u043e\u0442\u044f \u0443 \u043c\u0435\u043d\u044f \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, UART \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u044b\u043c (\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0442\u0438\u043f\u0430 <s>FieldBus<\/s> \u0445\u0430 \ud83d\ude42 Modbus, \u043d\u043e \u0432\u0441\u0435 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f. \u0415\u0441\u043b\u0438 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0443 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0431\u043b\u0438\u0436\u0435 \u043a \u043e\u0441\u0435\u043d\u0438.<br \/>  \u0414\u0430, \u043d\u0443 \u0441\u0430\u043c \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0442\u0443\u0442:<br \/>  <a href=\"https:\/\/yadi.sk\/d\/zgKwzZ20hjJnX\">\u0412\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 IAR 6.50<\/a>     \t<\/p>\n<div class=\"clear\"><\/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=\"http:\/\/habrahabr.ru\/post\/261837\/\"> http:\/\/habrahabr.ru\/post\/261837\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0412 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 <a href=\"http:\/\/habrahabr.ru\/post\/261823\/\"> STM32, C++ \u0438 FreeRTOS. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0427\u0430\u0441\u0442\u044c 1<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/post\/261823\/\">STM32, C++ \u0438 FreeRTOS. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0427\u0430\u0441\u0442\u044c 2<\/a> \u043c\u043d\u043e\u044e \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f SR0, SR7, SR4 \u0438 SR6. \u041e\u043f\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0441\u0442\u044c.<br \/>  SR0: \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 (\u0438\u043c\u0435\u0442\u044c \u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445): <u>\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/u>, <u>\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 VDDA<\/u>, <u>\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0430<\/u><br \/>  SR1: \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440<\/b>.<br \/>  SR2: \u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f <u>\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/u> \u2014 \u0433\u0440\u0430\u0434\u0443\u0441\u044b \u0426\u0435\u043b\u044c\u0441\u0438\u044f, \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u2014 \u0432\u043e\u043b\u044c\u0442\u044b.<br \/>  SR3: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 1<\/b>, \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u043a\u0440\u0430\u043d \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, <br \/>  SR4: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 1<\/b> <b> \u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 1<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<br \/>  SR5: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 2<\/b>, \u043d\u0430 <b>\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 (\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u044b \u0440\u0430\u0437 \u0432 1.5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b) \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435, <br \/>  SR6: \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 <b>\u043a\u043d\u043e\u043f\u043a\u0443 2<\/b> <b>\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 2 <\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<br \/>  SR7: <b>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 3<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u043e\u0440\u0433\u0430\u0442\u044c \u0440\u0430\u0437 \u0432 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>  \u0417\u043d\u0430\u0447\u0438\u0442 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0430\u043c\u044b\u0435 \u00ab\u0432\u043a\u0443\u0441\u043d\u044b\u0435\u00bb \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0439 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435: SR1, SR2, SR3, SR5. \u041d\u0443 \u0447\u0442\u043e \u0436\u0435 \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<h4>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430<\/h4>\n<p>  \u041d\u0430\u0447\u043d\u0443 \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430. \u041f\u043e\u043c\u043d\u0438\u0442\u0441\u044f (\u0432\u0441\u0435 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 8-\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438), \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u043e\u0441\u043e\u0431\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0437\u0432\u0430\u043b\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0442\u043e \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0430 \u0442\u0443\u0442 \u0446\u0435\u043b\u044b\u0439 \u00ab\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u00bb \u0441 \u043a\u0443\u0447\u0435\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u0438\u0436\u0435 \u0441 \u043d\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f  <a href=\"http:\/\/habrahabr.ru\/users\/halleffect\/\" class=\"user_link\">HallEffect<\/a> <a href=\"http:\/\/habrahabr.ru\/post\/173709\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0416\u041a \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 STM32L-Discovery<\/a>, \u043f\u043b\u044e\u0441 \u044f \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u0434\u0435\u043c\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Olimex, \u043d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0434\u0430\u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u00ab\u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438\u00bb \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u0418 \u044d\u0442\u043e \u0434\u0430\u043b\u043e \u0441\u0432\u043e\u0438 \u043f\u043b\u043e\u0434\u044b, \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0449\u044c\u044e \u043a\u0430\u043a Bit Banding, \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0442\u0441\u0443\u043f\u043d\u043e \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u0443\u0442: <a href=\"http:\/\/blablacode.ru\/%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D1%8B\/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-bit-banding-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5-stm32.html\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Bit Banding \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 stm32<\/a>. <br \/>  \u041f\u043e\u0434\u043d\u044f\u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043a\u0438\u043b\u0441, \u044f \u0441\u0435\u043b \u0437\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 cLcdDriver. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440:<br \/>   <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/edd\/53e\/3de\/edd53e3de21d47078a30fe059bd56cbf.png\" alt=\"image\"\/>.   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-260911","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/260911","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=260911"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/260911\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=260911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=260911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=260911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}