logo资料库

FreeRTOS V9.0.0 API 中文手册.pdf

第1页 / 共88页
第2页 / 共88页
第3页 / 共88页
第4页 / 共88页
第5页 / 共88页
第6页 / 共88页
第7页 / 共88页
第8页 / 共88页
资料共88页,剩余部分请下载后查看
FreeRTOS V9.0.0 API 函数中文手册 参阅《FreeRTOS_Reference_Manual_V9.0.0》 Real Time Engineers ltd. 翻译:张振 2017 年 12 月
FreeRTOS V9.0.0 API 中文手册 张振译 2017 年12 月17 日 目录 第一章 初识 FreeRTOS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 第二章 任务和调度器 API 函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 2.1 portSWITCH_TO_USER_MODE() -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -6 2.2 vTaskAllocateMPURegions() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -6 2.3 xTaskAbortDelay() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -6 2.4 xTaskCallApplicationTaskHook() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -7 2.5 xTaskCheckForTimeOut() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -7 2.6 xTaskCreate() -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -7 2.7 xTaskCreateStatic() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - -8 2.8 xTaskCreateRestricted() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - -9 2.9 vTaskDelay() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - 10 2.10 vTaskDelayUntil() - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -10 2.11 vTaskDelete() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -11 2.12 taskDISABLE_INTERRUPTS() - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - - - -11 2.13 taskENABLE_INTERRUPTS() - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -11 2.14 taskENTER_CRITICAL() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 11 2.15 taskENTER_CRITICAL_FROM_ISR() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -12 2.16 taskEXIT_CRITICAL() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - 13 2.17 taskEXIT_CRITICAL_FROM_ISR() - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -13 2.18 xTaskGetApplicationTaskTag() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - - - -13 2.19 xTaskGetCurrentTaskHandle() - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - 14 2.20 xTaskGetIdleTaskHandle() - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - 14 2.21 xTaskGetHandle() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - -14 2.22 uxTaskGetNumberOfTasks() - - - - - - - - - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - 15 2.23 vTaskGetRunTimeStats() - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - 15 2.24 xTaskGetSchedulerState() - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - -- - - - - - - 17 2.25 uxTaskGetStackHighWaterMark() - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - 17 2.26 eTaskGetState() - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - -17 2.27 uxTaskGetSystemState() - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -18 2.28 vTaskGetTaskInfo() - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -18 2.29 pvTaskGetThreadLocalStoragePointer() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -19 2.30 pcTaskGetName() - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --19 2.31 xTaskGetTickCount() - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -19 2.32 xTaskGetTickCountFromISR() - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - 20 2.33 vTaskList() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 20 2.34 xTaskNotify() - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -21 2.35 xTaskNotifyAndQuery() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 22 2.36 xTaskNotifyAndQueryFromISR() - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - 22 2.37 xTaskNotifyFromISR() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 23 2.38 xTaskNotifyGive() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 23 2.39 vTaskNotifyGiveFromISR() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 24 2.40 xTaskNotifyStateClear() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 25 1
FreeRTOS V9.0.0 API 中文手册 张振译 2017 年12 月17 日 2.41 ulTaskNotifyTake() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 26 2.42 xTaskNotifyWait() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -27 2.43 uxTaskPriorityGet() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -28 2.44 vTaskPrioritySet() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -29 2.45 vTaskResume() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -30 2.46 xTaskResumeAll() -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -30 2.47 xTaskResumeFromISR() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 31 2.48 vTaskSetApplicationTaskTag() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 32 2.49 vTaskSetThreadLocalStoragePointer() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 33 2.50 vTaskSetTimeOutState() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -33 2.51 vTaskStartScheduler() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 34 2.52 vTaskStepTick() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 35 2.53 vTaskSuspend() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - -36 2.54 vTaskSuspendAll() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 36 2.55 taskYIELD() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 37 第三章 队列 API 函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - 39 3.1 vQueueAddToRegistry() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 39 3.2 xQueueAddToSet() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -39 3.3 xQueueCreate() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 40 3.4 xQueueCreateSet() - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 40 3.5 xQueueCreateStatic() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 42 3.6 vQueueDelete() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 43 3.7 pcQueueGetName() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 43 3.8 xQueueIsQueueEmptyFromISR() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -44 3.9 xQueueIsQueueFullFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - 44 3.10 uxQueueMessagesWaiting() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - 44 3.11 uxQueueMessagesWaitingFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -44 3.12 xQueueOverwrite() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - 45 3.13 xQueueOverwriteFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -46 3.14 xQueuePeek() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -47 3.15 xQueuePeekFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - 48 3.16 xQueueReceive() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - 48 3.17 xQueueReceiveFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -49 3.18 xQueueRemoveFromSet() -- - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -50 3.19 xQueueReset() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - 51 3.20 xQueueSelectFromSet() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - -51 3.21 xQueueSelectFromSetFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - 51 3.22 xQueueSend()/xQueueSendToFront()/xQueueSendToBack() - - - - -- - - - - - - - - - - -52 3.23 xQueueSendFromISR()/xQueueSendToBackFromISR()/xQueueSendToFrontFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 53 3.24 uxQueueSpacesAvailable() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -54 第四章 信号量 API 函数 - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - -55 4.1 vSemaphoreCreateBinary() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - 55 4.2 xSemaphoreCreateBinary() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - 55 2
FreeRTOS V9.0.0 API 中文手册 张振译 2017 年12 月17 日 4.3 xSemaphoreCreateBinaryStatic() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - -56 4.4 xSemaphoreCreateCounting() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -56 4.5 xSemaphoreCreateCountingStatic() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - -57 4.6 xSemaphoreCreateMutex() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -58 4.7 xSemaphoreCreateMutexStatic() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - -58 4.8 xSemaphoreCreateRecursiveMutex() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -59 4.9 xSemaphoreCreateRecursiveMutexStatic() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - -60 4.10 vSemaphoreDelete() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - 60 4.11 uxSemaphoreGetCount() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - 60 4.12 xSemaphoreGetMutexHolder() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - -60 4.13 xSemaphoreGive() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - 60 4.14 xSemaphoreGiveFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -61 4.15 xSemaphoreGiveRecursive() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - 62 4.16 xSemaphoreTake() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - 63 4.17 xSemaphoreTakeFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -64 4.18 xSemaphoreTakeRecursive() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -64 第五章 软件定时器 API 函数 - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - 66 5.1 xTimerChangePeriod() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - -66 5.2 xTimerChangePeriodFromISR() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - -67 5.3 xTimerCreate() - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - -67 5.4 xTimerCreateStatic() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - -69 5.5 xTimerDelete() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - - - - - -70 5.6 xTimerGetExpiryTime() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - -71 5.7 pcTimerGetName() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - - - 71 5.8 xTimerGetPeriod() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -71 5.9 xTimerGetTimerDaemonTaskHandle() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - --71 5.10 pvTimerGetTimerID() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - 72 5.11 xTimerIsTimerActive() - - - - - - - - - - - - - - - - - - - -- - - - -- - - - - - - -- - - - - - - - - -72 5.12 xTimerPendFunctionCall() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - -- - -72 5.13 xTimerPendFunctionCallFromISR() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - -73 5.14 xTimerReset() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - - - - - 74 5.15 xTimerResetFromISR() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - -75 5.16 vTimerSetTimerID() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - -76 5.17 xTimerStart() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - - - - - -76 5.18 xTimerStartFromISR() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - 76 5.19 xTimerStop() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - - - - - -77 5.20 xTimerStopFromISR() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - 77 第六章 事件组 API 函数 - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - -79 6.1 xEventGroupClearBits() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - 79 6.2 xEventGroupClearBitsFromISR() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - 79 6.3 xEventGroupCreate() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - 80 6.4 xEventGroupCreateStatic() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - 81 6.5 vEventGroupDelete() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - 81 6.6 xEventGroupGetBits() - - - - - - - - - - - - - - - - - - - -- - - - - -- - - - - - - - - - - -- - - - - -81 3
FreeRTOS V9.0.0 API 中文手册 张振译 2017 年12 月17 日 6.7 xEventGroupGetBitsFromISR() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -81 6.8 xEventGroupSetBits() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - -82 6.9 xEventGroupSetBitsFromISR() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -82 6.10 xEventGroupSync() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - 83 6.11 xEventGroupWaitBits() - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - -85 第七章 FreeRTOS 内核配置 - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - -87 7.1 FreeRTOSConfig.h 头文件 - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - -87 7.2 以“INCLUDE_”开头的常量 - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -87 7.3 以“config”开头的常量 - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - 87 4
FreeRTOS V9.0.0 API 中文手册 张振译 2017 年12 月17 日 第一章 初识 FreeRTOS 基本概念: User mode:用户模式(又叫非特权模式); Supervisor mode:管理模式(亦叫特权模式)。 FreeRTOS API 函数限制条件 1. 不是以“From ISR”结尾的 API 函数禁止在中断服务中调用;即使一些以“From ISR ” 结 尾 的 API 函 数 , 当 中 断 服 务 的 优 先 级 高 于 configMAX_SYSCALL_INTERRUPT_PRIORITY( 或 configMAX_API_CALL_INTERRUPT_PRIORITY)时,也不能在中断服务中调用。 2. 当调度器被挂起时,可能导致上下文切换的 API 函数禁止被调用。 3. 可能导致上下文切换的 API 函数禁止从临界区调用。 5
FreeRTOS V9.0.0 API 中文手册 张振译 2017 年12 月17 日 第二章 任务和调度器 API 函数 调用本章 API 函数需要添加头文件: #include “FreeRTOS.h” #include “task.h” 2.1 void portSWITCH_TO_USER_MODE( void ) 此函数仅针对高级用户,且仅与 FreeRTOS MPU 端口相关。MPU 限制任务 是由 xTaskCreateRestricted()创建的,xTaskCreateRestricted()的参数决定正在创建 的任务是否是一个用户(非特权)模式任务,或者是一个管理员(特权)模式任务。 一个管理模式任务调用 portSWITCH_TO_USER_MODE( )将其从一个管理模式 任务转换为一个用户模式的任务;却没有与此对等的函数(允许一个任务将自己 由用户模式转换为管理模式)。 2.2 Void vTaskAllocateMPURegions(TaskHandle_t xTaskToModify,const MemoryRegion_t * const xRegions ) 定义一组内存保护单元(MPU)区域,供 MPU 受限任务使用。此函数仅针对 高级用户,且仅与 FreeRTOS MPU 端口相关。当使用 xTaskCreateRestricted()创 建任务完成,MPU 控制的内存区域可以被分配到 MPU 受限的任务中。在使用 vTaskAllocateMPURegions()函数运行时,这些区域可以被重新定义(或分配)。 参数: xTaskToModify,将被更改的受限任务句柄。任务句柄是通过 xTaskCreateRestricted() 函数的 pxCreatedTask 参数获得的。任务可以使用 NULL(空)任务句柄替代原来有 效的任务句柄来更改自己内存区域访问的定义。 xRegions,MemoryRegion_t 结构体类型数组。数组中位置对应的数是通过常量 portNUM_CONFIGURABLE_REGIONS 定 义 的 。 Cortex-M3 内 核 的 portNUM_CONFIGURABLE_REGIONS 被 定 义 为 3. 数 组 中 的 每 个 MemoryRegion_t 结构都根据 xTaskToModify 参数定义了一个 MPU 内存供任务使 用。 MemoryRegion_t 结构体 ulParameters 定义了访问内存区域的方式,ulParameters 可以按位取或下列变量的 值:portMPU_REGION_READ_WRITE portMPU_REGION_PRIVILEGED_READ_ONLY portMPU_REGION_READ_ONLY portMPU_REGION_PRIVILEGED_READ_WRITE portMPU_REGION_CACHEABLE_BUFFERABLE portMPU_REGION_EXECUTE_NEVER 2.3 BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) 调用包含超时参数的 API 函数可以导致调用任务进入阻塞状态。在阻塞状 态下的任务要么是等待超时时间的结束,要么等待事件发生的超时,之后任务将 6
FreeRTOS V9.0.0 API 中文手册 张振译 2017 年12 月17 日 自动离开阻塞状态并进入就绪状态。有许多这种情况,如: 如果任务调用 vTaskDelay(),那么它将进入阻塞状态。直到指定的超时时间到, 任务将自动离开阻塞状态并进入就绪状态。 如果任务调用 ulTaskNotifyTake(),当它的通知值为 0,将进入阻塞状态,直到接收 到一个通知值或者是超时时间到,函数将自动离开阻塞状态进入就绪状态。 xTaskAbortDelay()将任务从阻塞状态转变到就绪状态。 调度器不能调用处于阻塞状态的任务,处于阻塞状态的任务也不会占用 CPU 的任何处理时间。 参数:xTask,需要中止延时的任务句柄。 返回值:如果 xTask 任务退出阻塞状态,返回 pdPASS;如果 xTask 任务没有退出 阻塞状态(因为它之前是非阻塞状态),返回 pdFAIL。 注 意 : 在 FreeRTOSConfig.h 中 将 INCLUDE_xTaskAbortDelay 设 为 1 时 , xTaskAbortDelay()函数才是可得的。 2.4 BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameters ) 此函数仅针对高级用户。vTaskSetApplicationTaskTag()函数用来给任务分配一个 ‘tag’值;‘tag’值的意义和使用由应用程序作者自己定义。FreeRTOS 内核正常情况 下不会访问这个‘tag’值。在特殊情况,使用‘tag’值将‘task hook’(或回调函数) 与 一 个 任 务 进 行 关 联 。 这 样 做 时 , 钩 子 函 数 被 调 用 通 过 使 用 xTaskCallApplicationTaskHook()函数。任务钩子函数可用于任何目的。 注意:在 FreeRTOSConfig.h 中将 configUSE_APPLICATION_TASK_TAG 设为 1 时, xTaskCallApplicationTaskHook()函数才是可得的。 参数: xTask,任务句柄。一个任务可以使用 NULL 句柄替换原来的有效句柄来调用该 任务自己的钩子函数。 pvParameters,它作为任务钩子函数自己的参数。 2.5 BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) 此函数仅针对高级用户。xTaskCheckForTimeOut()与 vTaskSetTimeOutState() 一 起 使 用 ; 使 用 vTaskSetTimeOutState() 函 数 设 置 初 始 条 件 , 之 后 在 调 用 xTaskCheckForTimeOut()函数判断超时条件,如果没有发生超时则调整剩余块时 间。 参数: pxTimeOut,该参数可以用 vTaskSetTimeOutState()初始化。 pxTicksToWait,用于传递经过调整后的块时间(已经扣除在阻塞状态中消耗的时 间后剩余的时间)。 返回值:如果返回 pdTRUE,说明没有块时间剩余,已经发生超时;如果返回 pdFALSE,说明有块时间剩余,还没有发生超时。 2.6 BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, const char * const pcName, unsigned short usStackDepth, void *pvParameters, UBaseType_t uxPriority, TaskHandle_t *pxCreatedTask ) 7
分享到:
收藏