{"id":327816,"date":"2022-01-10T21:00:27","date_gmt":"2022-01-10T21:00:27","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=327816"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=327816","title":{"rendered":"<span>ARM Cortex M* \u2014 \u00ab\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0448\u0430\u0442\u044c \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0445\u00bb<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>\u041a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u0434 \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 ]L1, L7[ \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 \u0432\u0440\u0435\u043c\u044f T1.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/df8\/6ec\/158\/df86ec158d50de845a3d0c6251aa3684.jpg\" width=\"1026\" height=\"346\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df8\/6ec\/158\/df86ec158d50de845a3d0c6251aa3684.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f T2, T3 \u0438 \u04224 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 T1 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0422\u043e\u0447\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043c\u0435\u0442\u043a\u0430\u043c\u0438 L1 .. L6.<\/p>\n<p>\u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 \u0432\u0440\u0435\u043c\u044f T = T1, \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0438 \u0437\u0430 \u0432\u0440\u0435\u043c\u044f T = T1 + T2 +T3 + T4, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0432\u0441\u0435\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 ]L1, L7[. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 {T2, T3, T4}.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<ol>\n<li>\n<p>\u041f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u0435\u043d\u0435\u0435 10\u00a0us (\u00a00,00001\u00a0s\u00a0), \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 STM32*_HAL_Driver.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0438\u0441\u043b\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043b\u044e\u0431\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 ( <strong>-O*<\/strong> ) \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043f\u043e \u0441\u0434\u0432\u0438\u0433\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u043a \u043d\u0430 \u043e\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ARM Cortex M* \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<ul>\n<li>\n<p><strong>uwTick<\/strong> \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 (ms);<\/p>\n<\/li>\n<li>\n<p><strong>(*SysTick).VAL<\/strong> \u2014 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c <strong>(*SysTick).VAL<\/strong> \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 <strong>uwTick<\/strong>;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0434\u043e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b <strong>( (*SysTick).LOAD &#8212; 1 )<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u043e\u043c\u0435\u043d\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cpp\">typedef __IO struct { __IOM int32_t cc; __IOM uint32_t ms; } STimeStamp;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u00ab<strong>this_moment_calibrate()<\/strong>\u00bb \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>\u00ab<strong>this_moment_sync( uint32_t stc )<\/strong>\u00bb \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>(*SysTick).VAL<\/strong> \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 <strong>uint32_t stc<\/strong>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044f, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u00ab<strong>HAL_IncTick(void)<\/strong>\u00bb \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u043e\u0441\u043b\u0435 \u00ab\u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e\u00bb \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>uint32_t stc<\/strong> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435<br \/> ]\u00a0<strong>0 .. (*SysTick).LOAD<\/strong>\u00a0[.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<pre><code class=\"cpp\">int32_tL1 = RAND_NUMBER_32; int32_t L2 = RAND_NUMBER_32; int32_t L3 = 0;  STimeStamp stm, tm;  this_moment_sync( (*SysTick).LOAD &amp; SysTick_LOAD_RELOAD_Msk ) \/ 3 * 2 );  this_moment( &amp;stm ); L3 = L1 + L2; this_moment( &amp;tm );  int32_t gap = this_moment_gap( &amp;stm, &amp;tm ); <\/code><\/pre>\n<p>\u00ab<strong>this_moment( STimeStamp *tm )<\/strong>\u00bb \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <strong>tm<\/strong>.<\/p>\n<p>\u00ab<strong>this_moment_cmp( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:<br \/> ( <strong>1<\/strong> ) \u0435\u0441\u043b\u0438 <strong>stm > tm<\/strong>, \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong>stm<\/strong> \u0431\u044b\u043b \u0440\u0430\u043d\u044c\u0448\u0435 <strong>tm<\/strong>;<br \/> ( <strong>0<\/strong> ) \u0435\u0441\u043b\u0438 <strong>stm == tm<\/strong>, \u043e\u0431\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442;<br \/> (<strong>-1<\/strong> ) \u0435\u0441\u043b\u0438 <strong>stm &lt; tm<\/strong>, \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong>stm<\/strong> \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u043e\u0437\u0436\u0435 <strong>tm<\/strong>.<\/p>\n<p>\u00ab<strong>this_moment_dif( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/p>\n<p>\u00ab<strong>this_moment_gap( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u00ab<strong>this_moment( STimeStamp *tm )<\/strong>\u00bb.<\/p>\n<p>\u00ab<strong>this_moment_shft( STimeStamp *tm, int32_t dtm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong>tm<\/strong> \u043d\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 <strong>dtm<\/strong>, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/p>\n<p>\u0413\u0440\u0443\u043f\u043f\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0442\u0435 \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043d\u043e \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 1 us (\u00a00,000001\u00a0s\u00a0):<\/p>\n<ul>\n<li>\n<p>\u00ab<strong>this_moment_dif_us( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u00ab<strong>this_moment_gap_us( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u00ab<strong>this_moment_shft_us( STimeStamp *tm, int32_t dtm )<\/strong>\u00bb.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b<\/h2>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/52d\/656\/2eb\/52d6562eb11012816ad2ddf406d96063.jpg\" alt=\"\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445 - int32_t\" title=\"\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445 - int32_t\" width=\"622\" height=\"282\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/52d\/656\/2eb\/52d6562eb11012816ad2ddf406d96063.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; int32_t<\/figcaption><\/figure>\n<h2>\u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0441\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>\u0418\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0438\u0436\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b (\u0441\u0441) \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 (us).<\/p>\n<p>\u042d\u043a\u0441\u043f\u0440\u0435\u0441\u0441-\u043e\u0446\u0435\u043d\u043a\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043c \u0436\u0435 \u2014 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b (\u0441\u0441) \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 (us).<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/059\/8da\/9df\/0598da9df7954aee78ee1f72ae9f2b06.jpg\" alt=\"zero - \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 &quot;C&quot;.\" title=\"zero - \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 &quot;C&quot;.\" width=\"770\" height=\"796\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/059\/8da\/9df\/0598da9df7954aee78ee1f72ae9f2b06.jpg\" data-blurred=\"true\"\/><figcaption>zero &#8212; \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 &#171;C&#187;.<\/figcaption><\/figure>\n<p>\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 32MHz \u2014 1 us (\u00a00,000001\u00a0s\u00a0).<\/p>\n<p>\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u2014 10 us (\u00a00,00001\u00a0s\u00a0).<\/p>\n<p>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<br \/>\u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430, \u0442\u0435\u043c \u0445\u0443\u0436\u0435 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/738\/ecc\/007\/738ecc007b65eb60f258d0f7d361ed4a.jpg\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b - \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\" title=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b - \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\" width=\"583\" height=\"154\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/738\/ecc\/007\/738ecc007b65eb60f258d0f7d361ed4a.jpg\" data-blurred=\"true\"\/><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b &#8212; \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/figcaption><\/figure>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/8cb\/8e4\/5a2\/8cb8e45a2a68e6f735efcf0537cd3085.jpg\" alt=\"\u0422\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os\" title=\"\u0422\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os\" width=\"941\" height=\"372\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8cb\/8e4\/5a2\/8cb8e45a2a68e6f735efcf0537cd3085.jpg\" data-blurred=\"true\"\/><figcaption>\u0422\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os<\/figcaption><\/figure>\n<p>\u0423\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f: +\/-1 us.<\/p>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0430\u0431\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438,  \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0430\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c +\/-1 us.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/78d\/f2a\/6d0\/78df2a6d09ed7f471a1ef9fb53dada50.jpg\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b - \u0444\u043b\u0430\u0433 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\" title=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b - \u0444\u043b\u0430\u0433 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\" width=\"606\" height=\"435\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78d\/f2a\/6d0\/78df2a6d09ed7f471a1ef9fb53dada50.jpg\" data-blurred=\"true\"\/><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b &#8212; \u0444\u043b\u0430\u0433 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/figcaption><\/figure>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/4b7\/d84\/07f\/4b7d8407f955b896840dac1ffbd02470.jpg\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 - \u043b\u0443\u0447\u0448\u0435\" title=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 - \u043b\u0443\u0447\u0448\u0435\" width=\"907\" height=\"510\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4b7\/d84\/07f\/4b7d8407f955b896840dac1ffbd02470.jpg\" data-blurred=\"true\"\/><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 &#8212; \u043b\u0443\u0447\u0448\u0435<\/figcaption><\/figure>\n<p>\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432 \u0441\u0440\u0435\u0434\u0435 CubeIDE 1.4 (gcc version 5.4.0), \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ARM Cortex M4 \u2014 STM32F303VCT6, 48MHz.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ARM Cortex M0 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/df0\/aac\/e1f\/df0aace1fe11440e9d8e78e9e002d029.jpg\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b - \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\" title=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b - \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\" width=\"544\" height=\"154\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df0\/aac\/e1f\/df0aace1fe11440e9d8e78e9e002d029.jpg\" data-blurred=\"true\"\/><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b &#8212; \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/figcaption><\/figure>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/7ce\/a73\/bf7\/7cea73bf7e84ebd24673af8f03092710.jpg\" alt=\"\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os\" title=\"\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os\" width=\"946\" height=\"458\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7ce\/a73\/bf7\/7cea73bf7e84ebd24673af8f03092710.jpg\" data-blurred=\"true\"\/><figcaption>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os<\/figcaption><\/figure>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0430\u0431\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0430\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c +\/-1 us.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/388\/08e\/308\/38808e308ad9a4c7314eb578e4c3d7b5.jpg\" width=\"591\" height=\"435\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/388\/08e\/308\/38808e308ad9a4c7314eb578e4c3d7b5.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ba3\/e82\/dda\/ba3e82ddab3f2372b9acc3aae3cfbecb.jpg\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 - \u043b\u0443\u0447\u0448\u0435\" title=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 - \u043b\u0443\u0447\u0448\u0435\" width=\"908\" height=\"529\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba3\/e82\/dda\/ba3e82ddab3f2372b9acc3aae3cfbecb.jpg\" data-blurred=\"true\"\/><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 &#8212; \u043b\u0443\u0447\u0448\u0435<\/figcaption><\/figure>\n<p>\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432 \u0441\u0440\u0435\u0434\u0435 CubeIDE 1.4 (gcc version 5.4.0), \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ARM Cortex M0 \u2014 STM32F030R8T6, 48MHz.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f \u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f.<br \/>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438. \u0414\u043b\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430\u043c\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 10\u00a0us, \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 +\/- 1 us.<\/p>\n<p>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c +\/-1 us, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 3-\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441 0,01 s (10\u00a0000 us) \u0434\u043e 0,00001 s (10 us). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u043a \u0440\u043e\u0441\u0442\u0443 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>\u0421\u043b\u0430\u0431\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c: uwTick, SysTick;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c(**) \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c(**) \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f +\/- 1\u00a0us.<\/em><\/p>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 3-\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445: STM32F401RET6, STM32F303VCT6 \u0438 STM32F030R8T6.<\/p>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h2>\u041f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/h2>\n<h4>\u0424\u0430\u0439\u043b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430<\/h4>\n<pre><code class=\"cpp\">\/******************************************************************************  * File: this_moment.h Created on Jan 6, 2022  *  * Copyright (c) 2022, \"Nikolay E. Garbuz\" &lt;nik_garbuz@list.ru>  *  * This program is free software: you can redistribute it and\/or modify  * it under the terms of the GNU Lesser General Public License version 3 as  * published by the Free Software Foundation.  *  * This program is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU General Public License for more details.  *   * You should have received a copy of the GNU Lesser General Public License  * along with this program.  If not, see &lt;http:\/\/www.gnu.org\/licenses\/>.  *  * Authored by \"Nikolay E. Garbuz\" &lt;nik_garbuz@list.ru>  * Modified by  *  * TAB Size .EQ 4  ********************************************************************************\/  #ifndef TM_THIS_MOMENT_H_ #define TM_THIS_MOMENT_H_  #include \"main.h\"  \/\/********************************************* \/\/ platform defines \/\/*********************************************  #if !( defined( STM32F4 ) || defined( STM32F3 ) || defined( STM32F0 ) ) #pragma GCC error \"Untested ARM Cortex M planform\" #endif  #ifdef __cplusplus extern \"C\" { #endif  \/\/********************************************* \/\/ global defines \/\/*********************************************  #define TM_MS_TICKuwTick\/\/ sys ms counter  #define TM_MS_RANGE1000ul\/\/ ms per sec #define TM_US_RANGE( TM_MS_RANGE * TM_MS_RANGE )\/\/ us per sec #define TM_CPU_CLK_MHz( SystemCoreClock \/ TM_US_RANGE )\/\/ CPU CLK in MHz  #define TM_SHIFT_MAXINT32_MAX #define TM_SHIFT_MAX_US( TM_SHIFT_MAX \/ TM_CPU_CLK_MHz )  #define Hz_to_ms(Hz) (TM_MS_RANGE \/ Hz) #define Hz_to_us(Hz) (TM_US_RANGE \/ Hz)  #define ms_to_Hz(ms) (TM_MS_RANGE * ms) #define us_to_Hz(us) (TM_US_RANGE * us)  \/\/********************************************* \/\/ STimeStamp struct \/\/*********************************************  typedef __IO struct { __IOM int32_t cc; __IOM uint32_t ms;  } STimeStamp;  \/*********************************************  * helper functions  *********************************************\/ void this_moment_sync( uint32_t stc );  \/*********************************************  * service functions  * do it first before any others  *********************************************\/ void this_moment_calibrate();  \/*********************************************  * remember the current moment   * tm - this moment  *********************************************\/ void this_moment( STimeStamp *tm );  \/*********************************************  * compare two moments by timeline  * stm - start moment  * tm - this moment  *  * ret: ( 1 ) if stm > tm\/\/ stm earlier tm  * ret: ( 0 ) if stm == tm\/\/ stm equal tm  * ret: (-1 ) if stm &lt; tm\/\/ stm later tm  *  *********************************************\/ int32_t this_moment_cmp( STimeStamp *stm, STimeStamp *tm );  \/*********************************************  * measuring delay between two moments in cpu clocks  * stm - start moment  * tm - this moment  *********************************************\/ int32_t this_moment_dif( STimeStamp *stm, STimeStamp *tm ); int32_t this_moment_gap( STimeStamp *stm, STimeStamp *tm );  \/*********************************************  * shifting the moment at timeline by cpu clocks  * tm - this moment  * dtm - shift of this moment by cpu clocks  *********************************************\/ void this_moment_shft( STimeStamp *tm, int32_t dtm );  \/*********************************************  * measuring delay between two moments in us  * stm - start moment  * tm - this moment  *********************************************\/ int32_t this_moment_dif_us( STimeStamp *stm, STimeStamp *tm ); int32_t this_moment_gap_us( STimeStamp *stm, STimeStamp *tm );  \/*********************************************  * shift the moment at timeline by us  * 1 us = 1\/1000 ms  *  * tm - this moment  * dtm - shift of this moment by us  *********************************************\/ void this_moment_shft_us( __IO STimeStamp *tm, int32_t tdm );  #ifdef __cplusplus } #endif  #endif \/* TM_THIS_MOMENT_H_ *\/ <\/code><\/pre>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/h4>\n<pre><code class=\"cpp\">\/******************************************************************************  * File: this_moment.c Created on Jan 6, 2022  *  * Copyright (c) 2022, \"Nikolay E. Garbuz\" &lt;nik_garbuz@list.ru>  *  * This program is free software: you can redistribute it and\/or modify  * it under the terms of the GNU Lesser General Public License version 3 as  * published by the Free Software Foundation.  *  * This program is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU General Public License for more details.  *  * You should have received a copy of the GNU Lesser General Public License  * along with this program.  If not, see &lt;http:\/\/www.gnu.org\/licenses\/>.  *  * Authored by \"Nikolay E. Garbuz\" &lt;nik_garbuz@list.ru>  * Modified by  *  * TAB Size .EQ 4  ********************************************************************************\/  #include &lt;this_moment.h>  #pragma GCC push_options #pragma GCC optimize (\"Os\")  \/*********************************************  * constants witch will calculated by runtime  *********************************************\/  __IO int32_t tm_corrector = 0;  __IO int32_t tm_lad_cc = 1; __IO int32_t tm_lad_us = 1;  \/*********************************************  * helper macros  *********************************************\/ \/\/-------------------------------------------- #define SYSTICK_SYNC( t )\\ while( ( (*SysTick).VAL &amp; SysTick_VAL_CURRENT_Msk ) &lt; t )  \/\/-------------------------------------------- #define M_DIF(  dff_cc, stm, tm  )\\ \\ dff_cc = tm->ms;\\ dff_cc -= stm->ms;\\ dff_cc *= tm_lad_cc;\\ dff_cc += stm->cc;\\ dff_cc -= tm->cc  \/\/-------------------------------------------- #define M_GAP( dff_cc )\\ \\ if ( dff_cc > 0 )\\ dff_cc -= tm_corrector;\\ else\\ dff_cc += tm_corrector  \/\/-------------------------------------------- #define M_SHFT( dms, dcc, tm, dtm )\\ \\ dms = dtm \/ tm_lad_cc;\\ dcc = dtm - ( dms * tm_lad_cc );\\ dcc = tm->cc - dcc;\\ \\ if ( dcc &lt; 0 )\\ dcc += tm_lad_cc, dms++;\\ \\ if ( dcc >= tm_lad_cc )\\ dcc -= tm_lad_cc, dms--;\\ \\ tm->ms += dms;\\ tm->cc = dcc  \/\/-------------------------------------------- #define M_TO_US( sgn, dff_cc, dff_us )\\ \\ sgn = ( tm_lad_us >> 1 );\\ if ( dff_cc &lt; 0 )\\ sgn *= -1;\\ \\ dff_us = ( dff_cc + sgn ) \/ tm_lad_us\\  \/*********************************************  * helper functions  *********************************************\/ void this_moment_sync( uint32_t stc ) { SYSTICK_SYNC( stc ); }  \/*********************************************  * service functions  * do it first and one time before any others  *********************************************\/ void __attribute__((optimize(\"Og\"))) this_moment_calibrate() { __IO STimeStamp stm; __IO STimeStamp tm;  \/\/ Initialize the global variables  tm_lad_cc = ( ( *SysTick ).LOAD &amp; SysTick_LOAD_RELOAD_Msk ) + 1; tm_lad_us = (int32_t) ( SystemCoreClock \/ TM_US_RANGE );  tm_corrector = 0;  this_moment_sync( tm_lad_cc >> 1 );  this_moment( &amp;stm ); this_moment( &amp;tm );  tm_corrector = this_moment_gap( &amp;stm, &amp;tm );  }  \/*********************************************  * remember the current moment  *  * ret: tm - this moment  *  *********************************************\/ void __attribute__((optimize(\"Os\"))) this_moment( STimeStamp *tm ) { register int32_t rc; register uint32_t rm;  while ( ( rc = ( *SysTick ).VAL ) &lt; 7 ) ;  rm = TM_MS_TICK;  tm->cc = rc; tm->ms = rm; }  \/*********************************************  * compare two moments by timeline  *  * stm - start moment  * tm - this moment  *  * ret: ( 1 ) if stm > tm\/\/ stm earlier tm  * ret: ( 0 ) if stm == tm\/\/ stm equal tm  * ret: (-1 ) if stm &lt; tm\/\/ stm later tm  *  *********************************************\/ int32_t this_moment_cmp( STimeStamp *stm, STimeStamp *tm ) { register int32_t result = 0;  if ( stm->ms == tm->ms ) { if ( stm->cc != tm->cc ) { if ( stm->cc > tm->cc ) result = 1; else result = -1; } } else { if ( stm->ms &lt; tm->ms ) result = 1; else result = -1; }  return result; }  \/*********************************************  * measuring diff between two moments in cpu clocks  *  * stm - start moment  * tm - this moment  *  * ret: (int32_t) diff between stm and tm in cpu clocks  *  *********************************************\/ int32_t this_moment_dif( STimeStamp *stm, STimeStamp *tm ) { register int32_t dff_cc;  M_DIF( dff_cc, stm, tm );  return dff_cc; }  \/*********************************************  * measuring gap between two moments in cpu clocks  *  * stm - start moment  * tm - this moment  *  * ret: (int32_t) gap between stm and tm in cpu clocks  *  *********************************************\/ int32_t this_moment_gap( STimeStamp *stm, STimeStamp *tm ) { register int32_t dff_cc;  M_DIF( dff_cc, stm, tm );  M_GAP( dff_cc );  return dff_cc; }  \/*********************************************  * shift the moment at timeline by cpu clocks  *  * tm - this moment  * dtm - shift of this moment by cpu clocks  *  * ret: tm shifted by cpu clocks  *  *********************************************\/ void this_moment_shft( STimeStamp *tm, int32_t dtm ) { int32_t dms, dcc;  M_SHFT( dms, dcc, tm, dtm );  }  \/*********************************************  * measuring diff between two moments in us  * 1 us = 1\/1000 ms  *  * stm - start moment  * tm - this moment  *  * ret: (int32_t) diff between stm and tm in us  *  *********************************************\/ int32_t this_moment_dif_us( STimeStamp *stm, STimeStamp *tm ) { int32_t sng, dff_cc, dff_us;  M_DIF( dff_cc, stm, tm );  M_TO_US( sng, dff_cc, dff_us );  return dff_us; }  \/*********************************************  * measuring gap between two moments in us  * 1 us = 1\/1000 ms  *  * stm - start moment  * tm - this moment  *  * ret: (int32_t) gap between stm and tm in us  *  *********************************************\/ int32_t this_moment_gap_us( STimeStamp *stm, STimeStamp *tm ) { int32_t sgn, dff_cc, dff_us;  M_DIF( dff_cc, stm, tm );  M_GAP( dff_cc );  M_TO_US( sgn, dff_cc, dff_us );  return dff_us; }  \/*********************************************  * shift the moment at timeline by us  * 1 us = 1\/1000 ms  *  * tm - this moment  * dus - shift of this moment by us  *  * ret: tm shifted by us  *  *********************************************\/ void this_moment_shft_us( STimeStamp *tm, int32_t dtm ) {  int32_t dms, dcc;  dtm *= tm_lad_us;  M_SHFT( dms, dcc, tm, dtm );  }  #pragma GCC pop_options <\/code><\/pre>\n<\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/599727\/\"> https:\/\/habr.com\/ru\/post\/599727\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>\u041a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u0434 \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 ]L1, L7[ \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 \u0432\u0440\u0435\u043c\u044f T1.<\/p>\n<figure class=\"bordered full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f T2, T3 \u0438 \u04224 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 T1 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0422\u043e\u0447\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043c\u0435\u0442\u043a\u0430\u043c\u0438 L1 .. L6.<\/p>\n<p>\u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 \u0432\u0440\u0435\u043c\u044f T = T1, \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0438 \u0437\u0430 \u0432\u0440\u0435\u043c\u044f T = T1 + T2 +T3 + T4, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0432\u0441\u0435\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 ]L1, L7[. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 {T2, T3, T4}.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<ol>\n<li>\n<p>\u041f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u0435\u043d\u0435\u0435 10\u00a0us (\u00a00,00001\u00a0s\u00a0), \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 STM32*_HAL_Driver.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0438\u0441\u043b\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043b\u044e\u0431\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 ( <strong>-O*<\/strong> ) \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043f\u043e \u0441\u0434\u0432\u0438\u0433\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u043a \u043d\u0430 \u043e\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ARM Cortex M* \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<ul>\n<li>\n<p><strong>uwTick<\/strong> \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 (ms);<\/p>\n<\/li>\n<li>\n<p><strong>(*SysTick).VAL<\/strong> \u2014 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c <strong>(*SysTick).VAL<\/strong> \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 <strong>uwTick<\/strong>;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0434\u043e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b <strong>( (*SysTick).LOAD &#8212; 1 )<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u043e\u043c\u0435\u043d\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cpp\">typedef __IO struct { __IOM int32_t cc; __IOM uint32_t ms; } STimeStamp;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u00ab<strong>this_moment_calibrate()<\/strong>\u00bb \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>\u00ab<strong>this_moment_sync( uint32_t stc )<\/strong>\u00bb \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>(*SysTick).VAL<\/strong> \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 <strong>uint32_t stc<\/strong>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044f, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u00ab<strong>HAL_IncTick(void)<\/strong>\u00bb \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u043e\u0441\u043b\u0435 \u00ab\u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e\u00bb \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>uint32_t stc<\/strong> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435<br \/> ]\u00a0<strong>0 .. (*SysTick).LOAD<\/strong>\u00a0[.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<pre><code class=\"cpp\">int32_tL1 = RAND_NUMBER_32; int32_t L2 = RAND_NUMBER_32; int32_t L3 = 0;  STimeStamp stm, tm;  this_moment_sync( (*SysTick).LOAD &amp; SysTick_LOAD_RELOAD_Msk ) \/ 3 * 2 );  this_moment( &amp;stm ); L3 = L1 + L2; this_moment( &amp;tm );  int32_t gap = this_moment_gap( &amp;stm, &amp;tm ); <\/code><\/pre>\n<p>\u00ab<strong>this_moment( STimeStamp *tm )<\/strong>\u00bb \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <strong>tm<\/strong>.<\/p>\n<p>\u00ab<strong>this_moment_cmp( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:<br \/> ( <strong>1<\/strong> ) \u0435\u0441\u043b\u0438 <strong>stm > tm<\/strong>, \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong>stm<\/strong> \u0431\u044b\u043b \u0440\u0430\u043d\u044c\u0448\u0435 <strong>tm<\/strong>;<br \/> ( <strong>0<\/strong> ) \u0435\u0441\u043b\u0438 <strong>stm == tm<\/strong>, \u043e\u0431\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442;<br \/> (<strong>-1<\/strong> ) \u0435\u0441\u043b\u0438 <strong>stm &lt; tm<\/strong>, \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong>stm<\/strong> \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u043e\u0437\u0436\u0435 <strong>tm<\/strong>.<\/p>\n<p>\u00ab<strong>this_moment_dif( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/p>\n<p>\u00ab<strong>this_moment_gap( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u00ab<strong>this_moment( STimeStamp *tm )<\/strong>\u00bb.<\/p>\n<p>\u00ab<strong>this_moment_shft( STimeStamp *tm, int32_t dtm )<\/strong>\u00bb &#8212; \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong>tm<\/strong> \u043d\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 <strong>dtm<\/strong>, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/p>\n<p>\u0413\u0440\u0443\u043f\u043f\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0442\u0435 \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043d\u043e \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 1 us (\u00a00,000001\u00a0s\u00a0):<\/p>\n<ul>\n<li>\n<p>\u00ab<strong>this_moment_dif_us( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u00ab<strong>this_moment_gap_us( STimeStamp *stm, STimeStamp *tm )<\/strong>\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u00ab<strong>this_moment_shft_us( STimeStamp *tm, int32_t dtm )<\/strong>\u00bb.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b<\/h2>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<figure class=\"bordered full-width\"><figcaption>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; int32_t<\/figcaption><\/figure>\n<h2>\u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0441\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>\u0418\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0438\u0436\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b (\u0441\u0441) \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 (us).<\/p>\n<p>\u042d\u043a\u0441\u043f\u0440\u0435\u0441\u0441-\u043e\u0446\u0435\u043d\u043a\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043c \u0436\u0435 \u2014 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b (\u0441\u0441) \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 (us).<\/p>\n<figure class=\"bordered full-width\"><figcaption>zero &#8212; \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 &#171;C&#187;.<\/figcaption><\/figure>\n<p>\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 32MHz \u2014 1 us (\u00a00,000001\u00a0s\u00a0).<\/p>\n<p>\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u2014 10 us (\u00a00,00001\u00a0s\u00a0).<\/p>\n<p>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<br \/>\u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430, \u0442\u0435\u043c \u0445\u0443\u0436\u0435 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a.<\/p>\n<figure class=\"bordered full-width\"><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b &#8212; \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/figcaption><\/figure>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os.<\/p>\n<figure class=\"bordered full-width\"><figcaption>\u0422\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os<\/figcaption><\/figure>\n<p>\u0423\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f: +\/-1 us.<\/p>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0430\u0431\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438,  \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0430\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c +\/-1 us.<\/p>\n<figure class=\"bordered full-width\"><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b &#8212; \u0444\u043b\u0430\u0433 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/figcaption><\/figure>\n<figure class=\"bordered full-width\"><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 &#8212; \u043b\u0443\u0447\u0448\u0435<\/figcaption><\/figure>\n<p>\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432 \u0441\u0440\u0435\u0434\u0435 CubeIDE 1.4 (gcc version 5.4.0), \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ARM Cortex M4 \u2014 STM32F303VCT6, 48MHz.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ARM Cortex M0 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/p>\n<figure class=\"full-width\"><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b &#8212; \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/figcaption><\/figure>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os.<\/p>\n<figure class=\"bordered full-width\"><figcaption>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e \u043e\u0441\u0438 X (MHz), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -Os<\/figcaption><\/figure>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0430\u0431\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0430\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c +\/-1 us.<\/p>\n<figure class=\"bordered full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"bordered full-width\"><figcaption>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0442\u043e\u0442\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 &#8212; \u043b\u0443\u0447\u0448\u0435<\/figcaption><\/figure>\n<p>\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432 \u0441\u0440\u0435\u0434\u0435 CubeIDE 1.4 (gcc version 5.4.0), \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ARM Cortex M0 \u2014 STM32F030R8T6, 48MHz.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f \u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f.<br \/>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438. \u0414\u043b\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430\u043c\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 10\u00a0us, \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 +\/- 1 us.<\/p>\n<p>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c +\/-1 us, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 3-\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441 0,01 s (10\u00a0000 us) \u0434\u043e 0,00001 s (10 us). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u043a \u0440\u043e\u0441\u0442\u0443 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>\u0421\u043b\u0430\u0431\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c: uwTick, SysTick;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c(**) \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c(**) \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f +\/- 1\u00a0us.<\/em><\/p>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 3-\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445: STM32F401RET6, STM32F303VCT6 \u0438 STM32F030R8T6.<\/p>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h2>\u041f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/h2>\n<h4>\u0424\u0430\u0439\u043b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430<\/h4>\n<pre><code class=\"cpp\">\/******************************************************************************  * File: this_moment.h Created on Jan 6, 2022  *  * Copyright (c) 2022, \"Nikolay E. Garbuz\" &lt;nik_garbuz@list.ru>  *  * This program is free software: you can redistribute it and\/or modify  * it under the terms of the GNU Lesser General Public License version 3 as  * published by the Free Software Foundation.  *  * This program is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU General Public License for more details.  *   * You should have received a copy of the GNU Lesser General Public License  * along with this program.  If not, see &lt;http:\/\/www.gnu.org\/licenses\/>.  *  * Authored by \"Nikolay E. Garbuz\" &lt;nik_garbuz@list.ru>  * Modified by  *  * TAB Size .EQ 4  ********************************************************************************\/  #ifndef TM_THIS_MOMENT_H_ #define TM_THIS_MOMENT_H_  #include \"main.h\"  \/\/********************************************* \/\/ platform defines \/\/*********************************************  #if !( defined( STM32F4 ) || defined( STM32F3 ) || defined( STM32F0 ) ) #pragma GCC error \"Untested ARM Cortex M planform\" #endif  #ifdef __cplusplus extern \"C\" { #endif  \/\/********************************************* \/\/ global defines \/\/*********************************************  #define TM_MS_TICKuwTick\/\/ sys ms counter  #define TM_MS_RANGE1000ul\/\/ ms per sec #define TM_US_RANGE( TM_MS_RANGE * TM_MS_RANGE )\/\/ us per sec #define TM_CPU_CLK_MHz( SystemCoreClock \/ TM_US_RANGE )\/\/ CPU CLK in MHz  #define TM_SHIFT_MAXINT32_MAX #define TM_SHIFT_MAX_US( TM_SHIFT_MAX \/ TM_CPU_CLK_MHz )  #define Hz_to_ms(Hz) (TM_MS_RANGE \/ Hz) #define Hz_to_us(Hz) (TM_US_RANGE \/ Hz)  #define ms_to_Hz(ms) (TM_MS_RANGE * ms) #define us_to_Hz(us) (TM_US_RANGE * us)  \/\/********************************************* \/\/ STimeStamp struct \/\/*********************************************  typedef __IO struct { __IOM int32_t cc; __IOM uint32_t ms;  } STimeStamp;  \/*********************************************  * helper functions  *********************************************\/ void this_moment_sync( uint32_t stc );  \/*********************************************  * service functions  * do it first before any others  *********************************************\/ void this_moment_calibrate();  \/*********************************************  * remember the current moment   * tm - this moment  *********************************************\/ void this_moment( STimeStamp *tm );  \/*********************************************  * compare two moments by timeline  * stm - start moment  * tm - this moment  *  * ret: ( 1 ) if stm > tm\/\/ stm earlier tm  * ret: ( 0 ) if stm == tm\/\/ stm equal tm  * ret: (-1 ) if stm &lt; tm\/\/ stm later tm  *  *********************************************\/ int32_t this_moment_cmp( STimeStamp *stm, STimeStamp *tm );  \/*********************************************  * measuring delay between two moments in cpu clocks  * stm - start moment  * tm - this moment  *********************************************\/ int32_t this_moment_dif( STimeStamp *stm, STimeStamp *tm ); int32_t<\/code><\/pre>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-327816","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327816","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=327816"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327816\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=327816"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=327816"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=327816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}