{"id":44,"date":"2022-04-30T09:22:20","date_gmt":"2022-04-30T01:22:20","guid":{"rendered":"https:\/\/www.weiqs.cn\/blog\/?p=44"},"modified":"2022-04-30T09:46:50","modified_gmt":"2022-04-30T01:46:50","slug":"freertos","status":"publish","type":"post","link":"https:\/\/www.weiqs.cn\/blog\/index.php\/2022\/04\/30\/freertos\/","title":{"rendered":"FreeRTOS\u4f7f\u7528\u5fc3\u5f97"},"content":{"rendered":"\n<p><strong>FreeRTOS\u7f16\u7801\u6807\u51c6\u53ca\u98ce\u683c<\/strong><\/p>\n\n\n\n<p>\u4e00\u4e2a\u4f8b\u5916\u60c5\u51b5\u662f\u5934\u6587\u4ef6stdint.h\u3002\u5728\u6587\u4ef6\u5939FreeRTOS\/Source\/includest\u4e0b\u5305\u542b\u4e00\u4e2adint.readme\u7684\u6587\u4ef6\uff0c\u5982\u679c\u4f60\u7684\u7f16\u8bd1\u5668<br>\u4e0d\u63d0\u4f9bstdint\u7c7b\u578b\u5b9a\u4e49\uff0c\u53ef\u4ee5\u5c06stdint.readme\u6587\u4ef6\u91cd\u547d\u540d\u4e3astdint.h\u3002<\/p>\n\n\n\n<p>1&gt; \u53d8\u91cf\u547d\u540d\u89c4\u5219<br>uint32_t \u4f7f\u7528\u524d\u7f00ul\uff0c u\u8868\u793aunsigned\uff0cl\u8868\u793along ul==uint32_t<br>uint16_t \u4f7f\u7528\u524d\u7f00us\uff0c u\u8868\u793aunsigned\uff0cs\u8868\u793ashort us==uint16_t<br>uint8_t \u4f7f\u7528\u524d\u7f00uc\uff0c u\u8868\u793aunsigned\uff0cc\u8868\u793achar uc==uint8_t<br>\u975estdint \u53d8\u91cf\u4f7f\u7528\u524d\u7f00x, \u5982Type_t\u548cTickType_t\u7c7b\u578b<br>\u975estdint \u65e0\u7b26\u53f7\u53d8\u91cf\u4f7f\u7528\u524d\u7f00ux\uff0c\u5982UbaseType_t\uff08unsigned BaseType_t\uff09<br>size_t \u7c7b\u578b\u7684\u53d8\u91cf\u4f7f\u7528\u524d\u7f00x\uff1b<br>\u679a\u4e3e\u7c7b\u578b\u53d8\u91cf\u4f7f\u7528\u524d\u7f00e<br>\u6307\u9488\u7c7b\u578b\u53d8\u91cf\u5728\u7c7b\u578b\u57fa\u7840\u4e0a\u9644\u52a0\u524d\u7f00p\uff0c\u5982\u6307\u5411uint16_t\u7684\u6307\u9488\u53d8\u91cf\u524d\u7f00\u4e3apus (p_uint16_t)<br>char \u7c7b\u578b\u53d8\u91cf\u4ec5\u88ab\u5141\u8bb8\u4fdd\u5b58ASCII\u5b57\u7b26\uff0c\u524d\u7f00\u4e3ac<br>char* \u7c7b\u578b\u53d8\u91cf\u4ec5\u5141\u8bb8\u6307\u5411ASCII\u5b57\u7b26\u4e32\uff0c\u524d\u7f00\u4e3apc<\/p>\n\n\n\n<p>2&gt; \u51fd\u6570\u547d\u540d\u89c4\u5219<br>\u5728\u6587\u4ef6\u4f5c\u7528\u57df\u8303\u56f4\u7684\u51fd\u6570\u524d\u7f00\u4e3aprv<br>API\u51fd\u6570\u7684\u524d\u7f00\u4e3a\u5b83\u4eec\u7684\u8fd4\u56de\u7c7b\u578b\uff0c\u5f53\u8fd4\u56de\u4e3a\u7a7a\u65f6\uff0c\u524d\u7f00\u4e3av<\/p>\n\n\n\n<p>3&gt; \u5b8f\u547d\u540d\u89c4\u5219<br>\u5b8f\u7684\u540d\u5b57\u8d77\u59cb\u90e8\u5206\u4e3a\u8be5\u5b8f\u5b9a\u4e49\u6240\u5728\u7684\u6587\u4ef6\u540d\u7684\u4e00\u90e8\u5206\u3002\u6bd4\u5982configUSE_PREEMPTION\u5b9a\u4e49\u5728FreeRTOSConfig.h\u6587\u4ef6\u4e2d\u3002<br>\u9664\u4e86\u524d\u7f00\uff0c\u5b8f\u5269\u4e0b\u7684\u5b57\u6bcd\u5168\u90e8\u4e3a\u5927\u5199\uff0c\u4e24\u4e2a\u5355\u8bcd\u95f4\u7528\u4e0b\u5212\u7ebf\uff08\u2019_\u2019\uff09\u9694\u5f00\u3002<\/p>\n\n\n\n<p>\u6570\u636e\u7c7b\u578b<br>\u53ea\u6709stdint.h\u548cRTOS\u81ea\u5df1\u5b9a\u4e49\u7684\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4f7f\u7528\uff0c\u4f46\u4e5f\u6709\u4f8b\u5916\u60c5\u51b5\uff0c\u5982\u4e0b\u6240\u793a\uff1a<br>\u6709\u4e09\u79cd\u7c7b\u578b\u4f1a\u5728\u79fb\u690d\u5c42\u5b9a\u4e49\uff0c\u5b83\u4eec\u662f\uff1a<\/p>\n\n\n\n<p>TickType_t\uff1aconfigUSE_16_BIT_TICKS=1\uff0cTickType_t\u5b9a\u4e49\u4e3a\u65e0\u7b26\u53f716\u4f4d\u7c7b\u578b<br>configUSE_16_BIT_TICKS=0\uff0cTickType_t\u5b9a\u4e49\u4e3a\u65e0\u7b26\u53f732\u4f4d\u7c7b\u578b<\/p>\n\n\n\n<p>BaseType_t\uff1a\u5b9a\u4e49\u4e3a\u5fae\u5904\u7406\u5668\u67b6\u6784\u6548\u7387\u6700\u9ad8\u7684\u6570\u636e\u7c7b\u578b\u3002\u572832\u4f4d\u67b6\u6784\u5904\u7406\u5668\u4e0aBaseType_t\u5e94\u8be5\u5b9a\u4e49\u4e3a32\u4f4d\u7c7b\u578b\u3002<br>\u572816\u4f4d\u67b6\u6784\u5904\u7406\u5668\u4e0a\uff0cBaseType_t\u5e94\u8be5\u5b9a\u4e49\u4e3a16\u4f4d\u7c7b\u578b\u3002<br>BaseType_t\u5b9a\u4e49\u4e3achar\uff0c\u5bf9\u4e8e\u51fd\u6570\u8fd4\u56de\u503c\u4e00\u5b9a\u8981\u786e\u4fdd\u4f7f\u7528\u7684\u662fsigned char\uff0c\u5426\u5219\u53ef\u80fd\u9020\u6210\u8d1f\u6570\u9519\u8bef\u3002<\/p>\n\n\n\n<p>UbaseType_t\uff1a\u4e00\u4e2a\u65e0\u7b26\u53f7BaseType_t\u7c7b\u578b<\/p>\n\n\n\n<p>\u603b\u7ed3\uff1a ul==uint32_t\uff0c us==uint16_t\uff0c uc==uint8_t<br>UbaseType_t==uint32_t\uff0832\u4f4d\u67b6\u6784\u5904\u7406\u5668\uff09, UbseType_t==uint16_t\uff0816\u67b6\u6784\u5904\u7406\u5668\uff09\uff0c\u8ddf\u5904\u7406\u5668\u67b6\u6784\u6709\u5173\uff01<\/p>\n\n\n\n<p>typedef portSTACK_TYPE StackType_t;<br>#define portSTACK_TYPE uint32_t<\/p>\n\n\n\n<p>TaskFunction_t == typedef void (*TaskFunction_t)(void *);<\/p>\n\n\n\n<p>StackType_t *pxStack; \/\/\u6307\u5806\u6808\u6df1\u5ea6<br>pxStack = (StackType_t *) pvPortMalloc( ( ( (size_t) usStackDepth) * sizeof(StackType_t) ) );<\/p>\n\n\n\n<p><strong>\/\/ \u600e\u4e48\u67e5\u770b\u4efb\u52a1\u7684\u5f53\u524d\u8fd0\u884c\u72b6\u6001<\/strong><br>uxTaskPriorityGet()\uff1a\u67e5\u8be2\u67d0\u4e2a\u4efb\u52a1\u7684\u4f18\u5148\u7ea7<br>vTaskPrioritySet()\uff1a\u6539\u53d8\u67d0\u4e2a\u4efb\u52a1\u7684\u4efb\u52a1\u4f18\u5148\u7ea7<br>uxTaskGetSystemState()\uff1a\u83b7\u53d6\u7cfb\u7edf\u4e2d\u4efb\u52a1\u72b6\u6001<br>vTaskGetInfo()\uff1a\u83b7\u53d6\u67d0\u4e2a\u4efb\u52a1\u4fe1\u606f<br>xTaskGetApplicationTaskTag()\uff1a\u83b7\u53d6\u67d0\u4e2a\u4efb\u52a1\u7684\u6807\u7b7e(Tag)\u503c<br>xTaskGetCurrentTaskHandle()\uff1a\u83b7\u53d6\u5f53\u524d\u6b63\u5728\u8fd0\u884c\u7684\u4efb\u52a1\u7684\u4efb\u52a1\u53e5\u67c4<br>xTaskGetHandle()\uff1a\u6839\u636e\u4efb\u52a1\u540d\u5b57\u67e5\u627e\u67d0\u4e2a\u4efb\u52a1\u7684\u53e5\u67c4<br>xTaskGetIdleTaskHandle()\uff1a\u83b7\u53d6\u7a7a\u95f2\u4efb\u52a1\u7684\u4efb\u52a1\u53e5\u67c4<br>uxTaskGetStackHighWaterMark()\uff1a\u83b7\u53d6\u4efb\u52a1\u7684\u5806\u6808\u7684\u5386\u53f2\u5269\u4f59\u6700\u5c0f\u503c\uff0cFreeRTOS \u4e2d\u53eb\u505a\u201c\u9ad8\u6c34\u4f4d\u7ebf\u201d<br>eTaskGetState()\uff1a\u83b7\u53d6\u67d0\u4e2a\u4efb\u52a1\u7684\u58ee\u6001\uff0c\u8fd9\u4e2a\u58ee\u6001\u662f eTaskState \u7c7b\u578b *<br>pcTaskGetName()\uff1a\u83b7\u53d6\u67d0\u4e2a\u4efb\u52a1\u7684\u4efb\u52a1\u540d\u5b57<br>xTaskGetTickCount()\uff1a\u83b7\u53d6\u7cfb\u7edf\u65f6\u95f4\u8ba1\u6570\u5668\u503c<br>xTaskGetTickCountFromISR()\uff1a\u5728\u4e2d\u65ad\u670d\u52a1\u51fd\u6570\u4e2d\u83b7\u53d6\u65f6\u95f4\u8ba1\u6570\u5668\u503c<br>xTaskGetSchedulerState()\uff1a\u83b7\u53d6\u4efb\u52a1\u8c03\u5ea6\u5668\u7684\u58ee\u6001\uff0c\u5f00\u542f\u6216\u672a\u5f00\u542f<br>uxTaskGetNumberOfTasks()\uff1a\u83b7\u53d6\u5f53\u524d\u7cfb\u7edf\u4e2d\u5b58\u5728\u7684\u4efb\u52a1\u6570\u91cf<br>vTaskList()\uff1a\u4ee5\u4e00\u79cd\u8868\u683c\u7684\u5f62\u5f0f\u8f93\u51fa\u5f53\u524d\u7cfb\u7edf\u4e2d\u6240\u6709\u4efb\u52a1\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u6bcf\u4e2a\u4efb\u52a1\u5927\u7ea6\u9700\u898140\u4e2a\u5b57\u8282\u3002<br>vTaskGetRunTimeStats()\uff1a\u83b7\u53d6\u6bcf\u4e2a\u4efb\u52a1\u7684\u8fd0\u884c\u65f6\u95f4<br>vTaskSetApplicationTaskTag()\uff1a\u8bbe\u7f6e\u4efb\u52a1\u6807\u7b7e(Tag)\u503c<br>SetThreadLocalStoragePointer()\uff1a\u8bbe\u7f6e\u7ebf\u7a0b\u672c\u5730\u5b58\u50a8\u6307\u9488<br>GetThreadLocalStoragePointer()\uff1a\u83b7\u53d6\u7ebf\u7a0b\u672c\u5730\u5b58\u50a8\u6307\u9488<\/p>\n\n\n\n<p><strong>\/\/ \u98ce\u683c\u6307\u5357<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u968f\u540e\u662fStatic (\u6587\u4ef6\u5185\u90e8\u7684)\u51fd\u6570\u539f\u578b,<\/li><li>\u5982\u679c\u6ce8\u91ca\u6709\u591a\u884c\uff0c\u53c2\u7167\u672c\u6761\u6ce8\u91ca\u98ce\u683c&#8212;\u6bcf\u4e00\u884c\u90fd\u4ee5\u2019*\u2019\u8d77\u59cb.<br>*\/<br>static void prvAFunction( uint32_t ulParameter );<\/li><\/ul>\n\n\n\n<p>include \/* \u9996\u5148\u5728\u8fd9\u91cc\u5305\u542b\u5e93\u6587\u4ef6 *\/<\/p>\n\n\n\n<p>\/*<\/p>\n\n\n\n<p>\/* \u6587\u4ef6\u4f5c\u7528\u57df\u53d8\u91cf\uff08\u672c\u6587\u4ef6\u5185\u90e8\u4f7f\u7528\uff09\u7d27\u968f\u5176\u540e\uff0c\u8981\u5728\u51fd\u6570\u4f53\u5b9a\u4e49\u4e4b\u524d. *\/<br>static BaseType_t xMyVariable.<\/p>\n\n\n\n<p>\/* \u6bcf\u4e00\u4e2a\u51fd\u6570\u7684\u7ed3\u675f\u90fd\u6709\u4e00\u884c\u7834\u6298\u53f7\uff0c\u7834\u6298\u53f7\u4e0e\u4e0b\u9762\u7684\u7b2c\u4e00\u4e2a\u51fd\u6570\u4e4b\u95f4\u7559\u4e00\u884c\u7a7a\u767d\u3002*\/<\/p>\n\n\n\n<p>include &#8220;FreeRTOS.h&#8221; \/* \u7136\u540e\u662fFreeRTOS\u7684\u5934\u6587\u4ef6 *\/<\/p>\n\n\n\n<p>include &#8220;HardwareSpecifics.h&#8221; \/* \u7d27\u63a5\u7740\u5305\u542b\u5176\u5b83\u5934\u6587\u4ef6 *\/<\/p>\n\n\n\n<p>void vAFunction( void )<br>{<br>\/* \u51fd\u6570\u4f53\u5728\u6b64\u5b9a\u4e49\uff0c\u6ce8\u610f\u8981\u7528\u5927\u62ec\u53f7\u62ec\u4f4f <em>\/ } \/<\/em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*\/<\/p>\n\n\n\n<p>static UBaseType_t prvNextFunction( void )<br>{<br>\/* \u51fd\u6570\u4f53\u5728\u6b64\u5b9a\u4e49. <em>\/ } \/<\/em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*\/<\/p>\n\n\n\n<p>\/*<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u51fd\u6570\u540d\u5b57\u603b\u662f\u5360\u4e00\u884c\uff0c\u5305\u62ec\u8fd4\u56de\u7c7b\u578b\u3002 \u5de6\u62ec\u53f7\u4e4b\u524d\u6ca1\u6709\u7a7a\u683c\u5de6\u62ec\u53f7\u4e4b\u540e\u6709\u4e00\u4e2a\u7a7a\u683c\uff0c<\/li><li>\u6bcf\u4e2a\u53c2\u6570\u540e\u9762\u6709\u4e00\u4e2a\u7a7a\u683c\u53c2\u6570\u7684\u547d\u540d\u5e94\u8be5\u5177\u6709\u4e00\u5b9a\u7684\u63cf\u8ff0\u6027.<br><em>\/ void vAnExampleFunction( long lParameter1, unsigned short usParameter2 ) { \/<\/em> \u53d8\u91cf\u58f0\u660e\u6ca1\u6709\u7f29\u8fdb. *\/<br>uint8_t ucByte; \/* \u4ee3\u7801\u8981\u5bf9\u9f50. \u5927\u62ec\u53f7\u5360\u72ec\u81ea\u4e00\u884c. <em>\/ for( ucByte = 0U; ucByte &lt; fileBUFFER_LENGTH; ucByte++ ) { \/<\/em> \u8fd9\u91cc\u518d\u6b21\u7f29\u8fdb. *\/<br>}<br>}<\/li><\/ul>\n\n\n\n<p>\/*<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u7531\u4e8e\u8fd0\u7b97\u7b26\u4f18\u5148\u7ea7\u7684\u590d\u6742\u6027\uff0c\u6211\u4eec\u4e0d\u80fd\u76f8\u4fe1\u81ea\u5df1\u5bf9\u8fd0\u7b97\u7b26\u4f18\u5148\u7ea7\u65f6\u523b\u4fdd\u6301\u8b66\u60d5<\/li><li>\u5e76\u80fd\u6b63\u786e\u7684\u4f7f\u7528\uff0c\u56e0\u6b64\u5bf9\u4e8e\u591a\u4e2a\u8868\u8fbe\u5f0f\u8fd0\u7b97\u65f6\uff0c\u4f7f\u7528\u62ec\u53f7\u660e\u786e\u4f18\u5148\u7ea7\u987a\u5e8f<br>*\/<br>if( ( ucByte &lt; fileBUFFER_LENGTH ) &amp;&amp; ( ucByte != 0U ) )<br>{<br>ulResult = ( ( ulValue1 + ulValue2 ) &#8211; ulValue3 ) * ulValue4;<br>}<\/li><\/ul>\n\n\n\n<p>\/* \u6761\u4ef6\u8868\u8fbe\u5f0f\u4e5f\u8981\u50cf\u5176\u5b83\u4ee3\u7801\u90a3\u6837\u5bf9\u9f50\u3002 *\/<\/p>\n\n\n\n<p>if( configUSE_TRACE_FACILITY == 1 )<\/p>\n\n\n\n<p>{<br>\/* \u5411TCB\u589e\u52a0\u4e00\u4e2a\u7528\u4e8e\u8ddf\u8e2a\u7684\u8ba1\u6570\u5668. *\/<br>pxNewTCB-&gt;uxTCBNumber = uxTaskNumber;<br>}<\/p>\n\n\n\n<p>endif<\/p>\n\n\n\n<p>\/<em>\u65b9\u62ec\u53f7\u524d\u540e\u5404\u7559\u4e00\u4e2a\u7a7a\u683c<\/em>\/<br>ucBuffer[ 0 ] = 0U;<br>ucBuffer[ fileBUFFER_LENGTH &#8211; 1U ] = 0U;<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>FreeRTOS\u7f16\u7801\u6807\u51c6\u53ca\u98ce\u683c \u4e00\u4e2a\u4f8b\u5916\u60c5\u51b5\u662f\u5934\u6587\u4ef6stdint.h\u3002\u5728\u6587\u4ef6\u5939FreeRTOS\/Source\/ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[6],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-technology-share","tag-freertos"],"_links":{"self":[{"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":2,"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"predecessor-version":[{"id":48,"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/posts\/44\/revisions\/48"}],"wp:attachment":[{"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.weiqs.cn\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}