<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>API on Zesean 的博客</title><link>https://zeseanblog.top/tags/api/</link><description>Recent content in API on Zesean 的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Tue, 01 Sep 2026 22:58:08 +0800</lastBuildDate><atom:link href="https://zeseanblog.top/tags/api/index.xml" rel="self" type="application/rss+xml"/><item><title>FreeRTOS 常用 API 手册</title><link>https://zeseanblog.top/p/freertos-api/</link><pubDate>Sat, 26 Jul 2025 10:30:00 +0800</pubDate><guid>https://zeseanblog.top/p/freertos-api/</guid><description>&lt;h1 id="任务内核"&gt;&lt;a href="#%e4%bb%bb%e5%8a%a1%e5%86%85%e6%a0%b8" class="header-anchor"&gt;&lt;/a&gt;任务内核&#13;&#10;&lt;/h1&gt;&lt;h2 id="portdisable_interrupts-portenable_interrupts"&gt;&lt;a href="#portdisable_interrupts-portenable_interrupts" class="header-anchor"&gt;&lt;/a&gt;portDISABLE_INTERRUPTS() portENABLE_INTERRUPTS()&#13;&#10;&lt;/h2&gt;&lt;p&gt;关闭FreeRTOS可管理的5-15优先级的中断&lt;/p&gt;&#10;&lt;p&gt;开启FreeRTOS可管理的5-15优先级的中断&lt;/p&gt;&#10;&lt;h2 id="taskenter_critical-taskexit_critical"&gt;&lt;a href="#taskenter_critical-taskexit_critical" class="header-anchor"&gt;&lt;/a&gt;taskENTER_CRITICAL() taskEXIT_CRITICAL()&#13;&#10;&lt;/h2&gt;&lt;p&gt;任务中进入临界段&lt;/p&gt;&#10;&lt;p&gt;任务中退出临界段&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;taskENTER_CRITICAL() ;&#10;{&#10;… … /* 临界区 */&#10;}&#10;taskEXIT_CRITICAL() ;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="taskenter_critical_from_isr-taskexit_critical_from_isr"&gt;&lt;a href="#taskenter_critical_from_isr-taskexit_critical_from_isr" class="header-anchor"&gt;&lt;/a&gt;taskENTER_CRITICAL_FROM_ISR() taskEXIT_CRITICAL_FROM_ISR()&#13;&#10;&lt;/h2&gt;&lt;p&gt;中断中进入临界段&lt;/p&gt;&#10;&lt;p&gt;中断中退出临界段&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;uint32_t save_status;&#10;save_status = taskENTER_CRITICAL_FROM_ISR() ；&#10;{&#10;… … /* 临界区 */&#10;}&#10;taskEXIT_CRITICAL_FROM_ISR(save_status );&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="vtasksuspendall-xtaskresumeall"&gt;&lt;a href="#vtasksuspendall-xtaskresumeall" class="header-anchor"&gt;&lt;/a&gt;vTaskSuspendAll() xTaskResumeAll()&#13;&#10;&lt;/h2&gt;&lt;p&gt;实现任务调度器挂起与恢复&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;vTaskSuspendAll() ;&#10;{&#10;… … /* 内容 */&#10;}&#10;xTaskResumeAll();&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="void-vtaskstartscheduler"&gt;&lt;a href="#void-vtaskstartscheduler" class="header-anchor"&gt;&lt;/a&gt;void vTaskStartScheduler()&#13;&#10;&lt;/h2&gt;&lt;p&gt;vTaskStartScheduler();&lt;/p&gt;&#10;&lt;h1 id="任务创建与删除"&gt;&lt;a href="#%e4%bb%bb%e5%8a%a1%e5%88%9b%e5%bb%ba%e4%b8%8e%e5%88%a0%e9%99%a4" class="header-anchor"&gt;&lt;/a&gt;任务创建与删除&#13;&#10;&lt;/h1&gt;&lt;h2 id="1xtaskcreate"&gt;&lt;a href="#1xtaskcreate" class="header-anchor"&gt;&lt;/a&gt;1.xTaskCreate&#13;&#10;&lt;/h2&gt;&lt;h3 id="参数和返回值"&gt;&lt;a href="#%e5%8f%82%e6%95%b0%e5%92%8c%e8%bf%94%e5%9b%9e%e5%80%bc" class="header-anchor"&gt;&lt;/a&gt;参数和返回值&#13;&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;BaseType_t xTaskCreate&#10;(&#10;&#9;TaskFunction_t pxTaskCode, &#9;&#9;&#9;&#9;&#9;/* 指向任务函数的指针 */&#10;&#9;const char * const pcName, &#9;&#9;&#9;&#9;&#9;/* 任务名字，最大长度 configMAX_TASK_NAME_LEN */&#10;&#9;const configSTACK_DEPTH_TYPE usStackDepth, &#9;/* 任务堆栈大小，注意字为单位 */&#10;&#9;void * const pvParameters, &#9;&#9;&#9;&#9;&#9;/* 传递给任务函数的参数 */&#10;&#9;UBaseType_t uxPriority, &#9;&#9;&#9;&#9;&#9;/* 任务优先级，范围： 0 ~ configMAX_PRIORITIES - 1 */&#10;&#9;TaskHandle_t * const pxCreatedTask &#9;&#9;&#9;/* 任务句柄，就是任务的任务控制块 */&#10;)&#10;&#10;返回:&#10;pdPASS 任务创建成功&#10;errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 任务创建失败&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="实现例程"&gt;&lt;a href="#%e5%ae%9e%e7%8e%b0%e4%be%8b%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;实现例程&#13;&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;#define START_TASK_STACK_SIZE &#9;128&#9;&#9;&#9;&#9;&#9;//栈大小&#10;#define START_TASK_PRIO &#9; &#9;1&#9;&#9;&#9;&#9;&#9;//优先级&#10;TaskHandle_t &#9;&#9;&#9;&#9;&#9;start_task_handle;&#9;//句柄&#10;void startTask(void* pvParamenters);&#10;&#10;#define TASK1_STACK_SIZE &#9;&#9;128&#10;#define TASK1_PRIO &#9; &#9;&#9;&#9;2&#10;TaskHandle_t &#9;&#9;&#9;&#9;&#9;task1_handle;&#10;void task1(void* pvParamenters);&#10;&#10;void freertos_demo(void)&#10;{&#10;&#9;xTaskCreate( (TaskFunction_t&#9; ) startTask,&#10;&#9; &#9;&#9;&#9; (char *&#9;&#9; ) &amp;#34;startTask&amp;#34;, &#10;&#9;&#9;&#9;&#9; (configSTACK_DEPTH_TYPE) START_TASK_STACK_SIZE,&#10;&#9;&#9;&#9;&#9; (void * &#9;&#9;&#9; ) NULL,&#10;&#9;&#9;&#9;&#9; (UBaseType_t ) START_TASK_PRIO,&#10;&#9;&#9;&#9;&#9; (TaskHandle_t * &#9; ) &amp;amp;start_task_handle );&#10;&#10;&#9;vTaskStartScheduler();&#10;}&#10;&#10;void startTask(void* pvParamenters)&#10;{&#10;&#9;taskENTER_CRITICAL();&#10;&#9;xTaskCreate( (TaskFunction_t &#9; ) task1,&#9;&#9;&#9;//任务函数&#10;&#9;&#9;&#9;&#9; (char *&#9;&#9; &#9; ) &amp;#34;task1&amp;#34;, &#9;&#9;&#9;//任务名&#10;&#9;&#9;&#9; &#9; (configSTACK_DEPTH_TYPE) TASK1_STACK_SIZE,&#9;//任务堆栈&#10;&#9;&#9;&#9;&#9; (void * &#9;&#9; &#9; ) NULL,&#9;&#9;&#9;&#9;//任务函数参数&#10;&#9;&#9;&#9;&#9; (UBaseType_t ) TASK1_PRIO,&#9;&#9;//优先级&#10;&#9;&#9;&#9;&#9; (TaskHandle_t * &#9; ) &amp;amp;task1_handle );&#9;//任务句柄（就是指向任务控制块头的指针）&#10;&#10;&#9;vTaskDelete(start_task_handle);&#10;&#9;taskEXIT_CRITICAL();&#10;}&#10;&#10;void task1(void* pvParamenters){&#10;&#9;while(1){&#10;&#9;}&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2xtaskcreatestatic"&gt;&lt;a href="#2xtaskcreatestatic" class="header-anchor"&gt;&lt;/a&gt;2.xTaskCreateStatic&#13;&#10;&lt;/h2&gt;&lt;h3 id="参数和返回值-1"&gt;&lt;a href="#%e5%8f%82%e6%95%b0%e5%92%8c%e8%bf%94%e5%9b%9e%e5%80%bc-1" class="header-anchor"&gt;&lt;/a&gt;参数和返回值&#13;&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;TaskHandle_t xTaskCreateStatic&#10;(&#10;&#9;TaskFunction_t pxTaskCode, &#9;&#9;&#9;/* 指向任务函数的指针 */&#10;&#9;const char * const pcName, &#9;&#9;&#9;/* 任务函数名 */&#10;&#9;const uint32_t ulStackDepth, &#9;&#9;/* 任务堆栈大小注意字为单位 */&#10;&#9;void * const pvParameters, &#9;&#9;&#9;/* 传递的任务函数参数 */&#10;&#9;UBaseType_t uxPriority, &#9;&#9;&#9;/* 任务优先级 */&#10;&#9;StackType_t * const puxStackBuffer, /* 任务堆栈，一般为数组，由用户分配 */&#10;&#9;StaticTask_t * const pxTaskBuffer &#9;/* 任务控制块指针，由用户分配 */&#10;);&#10;&#10;返回:&#10;NULL 用户没有提供相应的内存，任务创建失败&#10;其他值 任务句柄，任务创建成功&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="实现例程-1"&gt;&lt;a href="#%e5%ae%9e%e7%8e%b0%e4%be%8b%e7%a8%8b-1" class="header-anchor"&gt;&lt;/a&gt;实现例程&#13;&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;#define START_TASK_STACK_SIZE &#9;128&#10;#define START_TASK_PRIO &#9; &#9;1&#10;TaskHandle_t &#9;&#9;&#9;&#9;&#9;start_task_handle;&#10;StackType_t&#9;&#9;&#9;&#9;&#9;&#9;start_task_stack[START_TASK_STACK_SIZE];&#10;StaticTask_t&#9;&#9;&#9;&#9;&#9;start_task_buffer;&#10;void startTask(void* pvParamenters);&#10;&#10;#define TASK1_STACK_SIZE &#9;&#9;128&#10;#define TASK1_PRIO &#9; &#9;&#9;&#9;2&#10;TaskHandle_t &#9;&#9;&#9;&#9;&#9;task1_handle;&#10;StackType_t&#9;&#9;&#9;&#9;&#9;&#9;task1_stack[TASK1_STACK_SIZE];&#10;StaticTask_t&#9;&#9;&#9;&#9;&#9;task1_buffer;&#10;void task1(void* pvParamenters);&#10;&#10;/*空闲任务配置*/&#10;StaticTask_t idle_task_tcb;&#10;StackType_t idle_task_stack[configMINIMAL_STACK_SIZE];&#10;&#10;/*软件定时器任务配置*/&#10;StaticTask_t timer_task_tcb;&#10;StackType_t timer_task_stack[configTIMER_TASK_STACK_DEPTH];&#10;&#10;/*空闲任务内存分配*/&#10;void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,&#10; StackType_t ** ppxIdleTaskStackBuffer,&#10; uint32_t * pulIdleTaskStackSize )&#10;{&#10;&#9;*ppxIdleTaskTCBBuffer = &amp;amp;idle_task_tcb;&#10;&#9;*ppxIdleTaskStackBuffer = idle_task_stack;&#10;&#9;*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;&#10;}&#10;&#10;/*软件定时器内存分配*/&#10;void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,&#10; StackType_t ** ppxTimerTaskStackBuffer,&#10; uint32_t * pulTimerTaskStackSize )&#10;{&#10;&#9;*ppxTimerTaskTCBBuffer = &amp;amp;timer_task_tcb;&#10;&#9;*ppxTimerTaskStackBuffer = timer_task_stack;&#10;&#9;*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;&#10;}&#10;&#10;void freertos_demo(void)&#10;{&#10;&#9;&#10;&#9;start_task_handle = xTaskCreateStatic( (TaskFunction_t) startTask,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (char* &#9;&#9; ) &amp;#34;startTask&amp;#34;, &#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (uint32_t&#9; ) START_TASK_STACK_SIZE,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (void*&#9;&#9; ) NULL,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (UBaseType_t&#9; ) START_TASK_PRIO,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (StackType_t* ) start_task_stack,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (StaticTask_t* ) &amp;amp;start_task_buffer );&#10;&#9;vTaskStartScheduler();&#10;}&#10;&#10;void startTask(void* pvParamenters)&#10;{&#10;&#9;taskENTER_CRITICAL();&#10;&#9;task1_handle = xTaskCreateStatic( (TaskFunction_t) task1,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (char* &#9;&#9; ) &amp;#34;task1&amp;#34;, &#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (uint32_t&#9; ) TASK1_STACK_SIZE,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (void*&#9;&#9; ) NULL,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (UBaseType_t&#9; ) TASK1_PRIO,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (StackType_t* ) task1_stack,&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; (StaticTask_t* ) &amp;amp;task1_buffer );&#10;&#9;vTaskDelete(start_task_handle);&#10;&#9;taskEXIT_CRITICAL();&#10;}&#10;&#10;void task1(void* pvParamenters)&#10;{&#10;&#9;while(1)&#10;&#9;{&#10;&#9;}&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="3vtaskdelete"&gt;&lt;a href="#3vtaskdelete" class="header-anchor"&gt;&lt;/a&gt;3.vTaskDelete&#13;&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;void vTaskDelete(TaskHandle_t xTaskToDelete);//xTaskToDelete 待删除任务的任务句柄&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="任务挂起与恢复"&gt;&lt;a href="#%e4%bb%bb%e5%8a%a1%e6%8c%82%e8%b5%b7%e4%b8%8e%e6%81%a2%e5%a4%8d" class="header-anchor"&gt;&lt;/a&gt;任务挂起与恢复&#13;&#10;&lt;/h1&gt;&lt;h2 id="1vtasksuspend"&gt;&lt;a href="#1vtasksuspend" class="header-anchor"&gt;&lt;/a&gt;1.vTaskSuspend&#13;&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;void vTaskSuspend( TaskHandle_t xTaskToSuspend );&#10;vTaskSuspend(任务句柄);&#10;vTaskSuspend(NULL);//挂起本任务&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2vtaskresume"&gt;&lt;a href="#2vtaskresume" class="header-anchor"&gt;&lt;/a&gt;2.vTaskResume&#13;&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;void vTaskResume( TaskHandle_t xTaskToResume );&#10;vTaskResume(任务句柄);&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="3xtaskresumefromisr"&gt;&lt;a href="#3xtaskresumefromisr" class="header-anchor"&gt;&lt;/a&gt;3.xTaskResumeFromISR&#13;&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume );&#10;&#10;void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)&#10;{&#10;&#9;BaseType_t xYieldRequired;&#10;&#9;switch(GPIO_Pin)&#10;&#9;{&#10;&#9;case GPIO_PIN_0:&#10;&#9;&#9;delay_ms(20); /* 消抖 */&#10;&#9;&#9;flag2_suspend++;&#10;&#9;&#9;if(flag2_suspend%2==1) vTaskSuspend(task2_handle);&#10;&#9;&#9;else xYieldRequired = xTaskResumeFromISR(task2_handle);&#10;&#9;&#9;portYIELD_FROM_ISR( xYieldRequired );&#9;&#9;//任务恢复后需要进行任务切换&#10;&#9;&#9;&#10;&#9;&#9;break;&#10;&#9;}&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="列表与列表项"&gt;&lt;a href="#%e5%88%97%e8%a1%a8%e4%b8%8e%e5%88%97%e8%a1%a8%e9%a1%b9" class="header-anchor"&gt;&lt;/a&gt;列表与列表项&#13;&#10;&lt;/h1&gt;&lt;h2 id="1vlistinitialise"&gt;&lt;a href="#1vlistinitialise" class="header-anchor"&gt;&lt;/a&gt;1.vListInitialise&#13;&#10;&lt;/h2&gt;&lt;p&gt;初始化列表&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*pxList 是待初始化列表*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vListInitialise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;List_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//初始化时，列表只有xListEnd，pxIndex指向xListEnd&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pxIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;xListEnd&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="c1"&gt;//末尾列表项默认最大值，升序排序在最后&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;xListEnd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xItemValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;portMAX_DELAY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="c1"&gt;//初始化时，列表中只有xListEnd，因此上下都是本身&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;xListEnd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pxNext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;xListEnd&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;xListEnd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pxPrevious&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;xListEnd&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="c1"&gt;//初始化时列表项数量为0（不包含xListEnd）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;uxNumberOfItems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;UBaseType_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;0U&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="c1"&gt;//初始化校验&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nf"&gt;listSET_LIST_INTEGRITY_CHECK_1_VALUE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nf"&gt;listSET_LIST_INTEGRITY_CHECK_2_VALUE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="2vlistinitialiseitem"&gt;&lt;a href="#2vlistinitialiseitem" class="header-anchor"&gt;&lt;/a&gt;2.vListInitialiseItem&#13;&#10;&lt;/h2&gt;&lt;p&gt;初始化列表项&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;span class="lnt"&gt;9&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*pxItem是待初始化列表项*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vListInitialiseItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pxItem&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="c1"&gt;//初始化时，列表项所在列表为空&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pxItem&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pxContainer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pxItem&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pxItem&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="3vlistinsertend"&gt;&lt;a href="#3vlistinsertend" class="header-anchor"&gt;&lt;/a&gt;3.vListInsertEnd&#13;&#10;&lt;/h2&gt;&lt;p&gt;列表末尾插入列表项&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//目标列表，目标列表项&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vListInsertEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;List_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pxNewListItem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="4vlistinsert"&gt;&lt;a href="#4vlistinsert" class="header-anchor"&gt;&lt;/a&gt;4.vListInsert&#13;&#10;&lt;/h2&gt;&lt;p&gt;列表插入列表项&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//目标列表，目标列表项&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vListInsert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;List_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pxList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pxNewListItem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="5uxlistremove"&gt;&lt;a href="#5uxlistremove" class="header-anchor"&gt;&lt;/a&gt;5.uxListRemove&#13;&#10;&lt;/h2&gt;&lt;p&gt;列表移除列表项&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//pxItemToRemove 待移除的列表项&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UBaseType_t&lt;/span&gt; &lt;span class="nf"&gt;uxListRemove&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pxItemToRemove&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//返回值，移除后所剩列表项&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="插入删除实验"&gt;&lt;a href="#%e6%8f%92%e5%85%a5%e5%88%a0%e9%99%a4%e5%ae%9e%e9%aa%8c" class="header-anchor"&gt;&lt;/a&gt;插入删除实验&#13;&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*创建列表*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;List_t&lt;/span&gt; &#9; &lt;span class="n"&gt;TestList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ListItem_t&lt;/span&gt; &lt;span class="n"&gt;ListItem1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*初始化列表，列表项*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vListInitialise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;TestList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vListInitialiseItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ListItem1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ListItem1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xItemValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*插入列表项*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vListInsert&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;List_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;TestList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="cm"&gt;/* 列表 */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ListItem_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ListItem1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="cm"&gt;/* 列表项 */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h1 id="任务相关api"&gt;&lt;a href="#%e4%bb%bb%e5%8a%a1%e7%9b%b8%e5%85%b3api" class="header-anchor"&gt;&lt;/a&gt;任务相关API&#13;&#10;&lt;/h1&gt;&lt;p&gt;&lt;img alt="image-20250805151211347" class="gallery-image" data-flex-basis="376px" data-flex-grow="156" height="693" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/p/freertos-api/images/image-20250805151211347.png" srcset="https://zeseanblog.top/p/freertos-api/images/image-20250805151211347_hu_e2de76a4f0a3fb67.png 800w, https://zeseanblog.top/p/freertos-api/images/image-20250805151211347.png 1086w" width="1086"&gt;&lt;/p&gt;&#10;&lt;h2 id="1uxtaskpriorityget"&gt;&lt;a href="#1uxtaskpriorityget" class="header-anchor"&gt;&lt;/a&gt;1.uxTaskPriorityGet&#13;&#10;&lt;/h2&gt;&lt;p&gt;获取任务优先级&lt;/p&gt;&#10;&lt;p&gt;打开宏INCLUDE_uxTaskPriorityGet&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;//xTask要查找的任务句柄， NULL 代表任务自身&#10;UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask )&#10;//返回无符号整数，为任务优先级&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2vtaskpriorityset"&gt;&lt;a href="#2vtaskpriorityset" class="header-anchor"&gt;&lt;/a&gt;2.vTaskPrioritySet&#13;&#10;&lt;/h2&gt;&lt;p&gt;改变任务优先级&lt;/p&gt;&#10;&lt;p&gt;宏 INCLUDE_vTaskPrioritySet 为 1&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;//xTask任务句柄 uxNewPriority优先级&#10;void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="3uxtaskgetnumberoftasks"&gt;&lt;a href="#3uxtaskgetnumberoftasks" class="header-anchor"&gt;&lt;/a&gt;3.uxTaskGetNumberOfTasks&#13;&#10;&lt;/h2&gt;&lt;p&gt;此函数用于获取系统中任务的任务数量&lt;/p&gt;&#10;&lt;p&gt;UBaseType_t uxTaskGetNumberOfTasks( void )&lt;/p&gt;&#10;&lt;h2 id="4uxtaskgetsystemstate"&gt;&lt;a href="#4uxtaskgetsystemstate" class="header-anchor"&gt;&lt;/a&gt;4.uxTaskGetSystemState&#13;&#10;&lt;/h2&gt;&lt;p&gt;获取系统中所有任务的任务状态信息&lt;/p&gt;&#10;&lt;h1 id="消息队列api"&gt;&lt;a href="#%e6%b6%88%e6%81%af%e9%98%9f%e5%88%97api" class="header-anchor"&gt;&lt;/a&gt;消息队列API&#13;&#10;&lt;/h1&gt;&lt;p&gt;例子&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;span class="lnt"&gt;21&#10;&lt;/span&gt;&lt;span class="lnt"&gt;22&#10;&lt;/span&gt;&lt;span class="lnt"&gt;23&#10;&lt;/span&gt;&lt;span class="lnt"&gt;24&#10;&lt;/span&gt;&lt;span class="lnt"&gt;25&#10;&lt;/span&gt;&lt;span class="lnt"&gt;26&#10;&lt;/span&gt;&lt;span class="lnt"&gt;27&#10;&lt;/span&gt;&lt;span class="lnt"&gt;28&#10;&lt;/span&gt;&lt;span class="lnt"&gt;29&#10;&lt;/span&gt;&lt;span class="lnt"&gt;30&#10;&lt;/span&gt;&lt;span class="lnt"&gt;31&#10;&lt;/span&gt;&lt;span class="lnt"&gt;32&#10;&lt;/span&gt;&lt;span class="lnt"&gt;33&#10;&lt;/span&gt;&lt;span class="lnt"&gt;34&#10;&lt;/span&gt;&lt;span class="lnt"&gt;35&#10;&lt;/span&gt;&lt;span class="lnt"&gt;36&#10;&lt;/span&gt;&lt;span class="lnt"&gt;37&#10;&lt;/span&gt;&lt;span class="lnt"&gt;38&#10;&lt;/span&gt;&lt;span class="lnt"&gt;39&#10;&lt;/span&gt;&lt;span class="lnt"&gt;40&#10;&lt;/span&gt;&lt;span class="lnt"&gt;41&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;QueueHandle_t&lt;/span&gt; &lt;span class="n"&gt;key_quque&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*小数据句柄*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;QueueHandle_t&lt;/span&gt; &lt;span class="n"&gt;big_date_queue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="cm"&gt;/*大数据句柄*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buff&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;This is a big data queue&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;key_quque&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;xQueueCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key_quque&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key_queue队列创建成功&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key_queue队列创建失败&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;big_date_queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;xQueueCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key_quque&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;big_date_queue队列创建成功&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;big_date_queue队列创建失败&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*入队，发送*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;task1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;key_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;key_scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key_val&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;KEY0_PRES&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;key_val&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;KEY1_PRES&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;xQueueSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key_quque&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;key_val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;portMAX_DELAY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="n"&gt;pdTRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key_queue队列发送失败&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*出队，读取*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;task2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;xQueueReceive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;big_date_queue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;portMAX_DELAY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="n"&gt;pdTRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;big_date_queue队列接收失败&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;big_date_queue读取队列成功,数据%s&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item></channel></rss>