在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FreeRTOS任務應用函數介紹

安芯教育科技 ? 來源:極術社區 ? 作者:朱工 ? 2021-03-19 10:22 ? 次閱讀

任務應用函數是一組輔助類函數,一般用于調試信息輸出、獲取任務句柄、獲取任務狀態、操作任務標簽值等等。

1. 獲取任務系統狀態

1.1 函數描述

UBaseType_t uxTaskGetSystemState( TaskStatus_t * constpxTaskStatusArray, const UBaseType_tuxArraySize, unsigned long * constpulTotalRunTime );

該函數向TaskStatus_t結構體填充相關信息,系統中每一個任務的信息都可以填充到TaskStatus_t結構體數組中,數組大小由uxArraySize指定。結構體TaskStatus_t定義如下:

typedef struct xTASK_STATUS{ /* 任務句柄*/ TaskHandle_t xHandle; /* 指針,指向任務名*/ const signed char *pcTaskName; /*任務ID,是一個獨一無二的數字*/ UBaseType_t xTaskNumber; /*填充結構體時,任務當前的狀態(運行、就緒、掛起等等)*/ eTaskState eCurrentState;/*填充結構體時,任務運行(或繼承)的優先級。*/ UBaseType_t uxCurrentPriority; /* 當任務因繼承而改變優先級時,該變量保存任務最初的優先級。僅當configUSE_MUTEXES定義為1有效。*/ UBaseType_t uxBasePriority; /* 分配給任務的總運行時間。僅當宏configGENERATE_RUN_TIME_STATS為1時有效。*/ unsigned long ulRunTimeCounter; /* 從任務創建起,堆棧剩余的最小數量,這個值越接近0,堆棧溢出的可能越大。*/ unsigned short usStackHighWaterMark;}TaskStatus_t;

注意,這個函數僅用來調試用,調用此函數會掛起所有任務,直到函數最后才恢復掛起的任務,因此任務可能被掛起很長時間。在文件FreeRTOSConfig.h中,宏configUSE_TRACE_FACILITY必須設置為1,此函數才有效。

1.2 參數描述

pxTaskStatusArray:指向TaskStatus_t類型的結構體數組。這個數組至少要包含1個元素。RTOS控制的任務數量可以使用API函數uxTaskGetNumberOfTasks()獲取。

uxArraySize:參數pxTaskStatusArray指向的數組大小,也就是該數組的索引數目。

pulTotalRunTime:如果在文件FreeRTOSConfig.h中設置宏configGENERATE_RUN_TIME_STATS為1,則該函數將總運行時間寫入*pulTotalRunTime中。pulTotalRunTime可以設置為NULL,表示忽略總運行時間。

1.3 返回值

被填充的TaskStatus_t結構體數量。這個值應該等于通過調用API函數uxTaskGetNumberOfTasks()返回的值,但如果傳遞給uxArraySize參數的值太小,則返回0。

1.4 用法舉例

/*本例演示如是使用uxTaskGetSystemState()函數來獲取運行時間信息,并將其轉化為程序員更易識別的字符格式,這些轉化后的字符保存到pcWriteBuffer中。*/void vTaskGetRunTimeStats(signed char *pcWriteBuffer ){ TaskStatus_t*pxTaskStatusArray;

volatileUBaseType_t uxArraySize, x; unsignedlong ulTotalRunTime, ulStatsAsPercentage; /* 防御性代碼,確保字符串有合理的結束*/ *pcWriteBuffer = 0x00; /* 獲取任務總數目*/ uxArraySize = uxTaskGetNumberOfTasks (); /*為每個任務的TaskStatus_t結構體分配內存,也可以靜態的分配一個足夠大的數組 */ pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ));

if(pxTaskStatusArray != NULL ) { /*獲取每個任務的狀態信息 */ uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize,&ulTotalRunTime ); /* 百分比計算 */ ulTotalRunTime /= 100UL; /* 避免除零錯誤 */ if(ulTotalRunTime 》 0 ) { /* 將獲得的每一個任務狀態信息部分的轉化為程序員容易識別的字符串格式*/

for( x = 0; x 《 uxArraySize; x++ )

{ /* 計算任務運行時間與總運行時間的百分比。*/ ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter /ulTotalRunTime; if( ulStatsAsPercentage 》 0UL ) { sprintf( pcWriteBuffer, “%s %lu %lu%% ”, pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage ); }

else { /* 任務運行時間不足總運行時間的1%*/sprintf( pcWriteBuffer, “%s %lu 《1%% ”, pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[x ].ulRunTimeCounter ); } pcWriteBuffer += strlen( ( char * ) pcWriteBuffer ); } } /* 釋放之前申請的內存*/ vPortFree( pxTaskStatusArray ); }}

2. 獲取當前任務句柄

2.1 函數描述

TaskHandle_t xTaskGetCurrentTaskHandle(void );

在文件FreeRTOSConfig.h中,宏INCLUDE_xTaskGetCurrentTaskHandle必須設置為1,此函數才有效。

2.2 返回值

返回當前任務(調用該函數的任務)的句柄。

3. 獲取空閑任務句柄

3.1 函數描述

TaskHandle_t xTaskGetIdleTaskHandle(void );

在文件FreeRTOSConfig.h中,宏INCLUDE_xTaskGetIdleTaskHandle必須設置為1,此函數才有效。

3.2 返回值

返回空閑任務句柄。空閑任務在RTOS調度器啟動時自動創建。

4. 獲取任務堆棧最大使用深度

4.1 函數描述

UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );

任務的堆棧空間會隨著任務執行以及中斷處理而增長或縮小。該函數可以返回任務啟動后的最小剩余堆棧空間。換句話說,可以間接估算出一個任務最多需要多少堆棧空間。在文件FreeRTOSConfig.h中,宏INCLUDE_uxTaskGetStackHighWaterMark 必須設置成1,此函數才有效。

4.2 參數描述

xTask:任務句柄。NULL表示查看當前任務的堆棧使用情況。

4.3 返回值

返回最小剩余堆棧空間,以字為單位。比如一個32為架構處理器,返回值為1表示有4字節堆棧空間沒有使用過。如果返回值為0,則任務很可能已經發生了堆棧溢出。

4.4 用法舉例

void vTask1( void * pvParameters ){ UBaseType_tuxHighWaterMark; /* 入口處檢測一次 */ uxHighWaterMark =uxTaskGetStackHighWaterMark( NULL ); for( ;; ) { /* 正常調用函數 */ vTaskDelay( 1000 ); /* 測量堆棧使用情況 */ uxHighWaterMark =uxTaskGetStackHighWaterMark( NULL ); }}

5. 獲取任務狀態

5.1 函數描述

eTaskState eTaskGetState( TaskHandle_txTask );

返回一個枚舉類型的任務狀態值。在文件FreeRTOSConfig.h中,宏INCLUDE_eTaskGetState必須設置為1,此函數才有效。

5.2 參數描述

xTask:任務句柄

5.3 返回值

下表列出返回值和對應的任務狀態。

6. 獲取任務描述內容

6.1 函數描述

char * pcTaskGetTaskName( TaskHandle_txTaskToQuery );

獲取任務的描述內容,在文件FreeRTOSConfig.h中,宏INCLUDE_pcTaskGetTaskName必須設置成1,此函數才有效。

6.2 參數描述

xTaskToQuery:任務的句柄。NULL表示獲取當前任務的描述內容指針。

6.3 返回值

一個指針,指向任務描述字符串。

7. 獲取系統節拍次數

7.1 函數描述

volatile TickType_t xTaskGetTickCount(void );

這個函數不能在ISR中調用。在ISR中用xTaskGetTickCountFromISR(),原型為volatileTickType_t xTaskGetTickCountFromISR( void )。

7.2 返回值

返回從vTaskStartScheduler函數調用后的系統時鐘節拍次數。

8. 獲取調度器狀態

8.1 函數描述

BaseType_t xTaskGetSchedulerState( void);

獲取調度器當前狀態。在文件FreeRTOSConfig.h中,宏INCLUDE_xTaskGetSchedulerState或configUSE_TIMERS必須定義為1,此函數才有效。

8.2 返回值

返回值是以下常量之一(定義在task.h):taskSCHEDULER_NOT_STARTED(未啟動)、taskSCHEDULER_RUNNING(正常運行)、taskSCHEDULER_SUSPENDED(掛起)。

9. 獲取任務總數

9.1 函數描述

UBaseType_t uxTaskGetNumberOfTasks(void );

獲取RTOS內核當前管理的任務總數。包含所有就緒、阻塞和掛起狀態的任務。對于一個刪除的任務,如果它的堆棧空間還沒有被空閑任務釋放掉,則這個被刪除的任務也含在計數值中。

9.2 返回值

返回RTOS內核當前管理的任務總數。

10. 獲取所有任務詳情

10.1 函數描述

void vTaskList( char *pcWriteBuffer );

將每個任務的狀態、堆棧使用情況等以字符的形式保存到參數pcWriteBuffer指向的區域。vTaskList()函數調用usTaskGetSystemState()函數,然后將得到的信息格式化為程序員易讀的字符形式。輸出的內容例子如下圖所示,圖中State一欄中,B表示阻塞、R表示就緒、D表示刪除(等待清除內存)、S表示掛起或阻塞。

注意,調用這個函數會掛起所有任務,這一過程可能持續較長時間,因此本函數僅在調試時使用。在文件FreeRTOSConfig.h中,宏configUSE_TRACE_FACILITY和configUSE_STATS_FORMATTING_FUNCTIONS必須定義為1,此函數才有效。

10.2 參數描述

pcWriteBuffer:任務的信息會寫入這個緩沖區,為ASCII表單形式。這個緩沖區要足夠大,以容納生成的報告,每個任務大約需要40個字節。

11. 獲取任務運行時間

11.1 函數描述

void vTaskGetRunTimeStats( char*pcWriteBuffer );

這個函數用于統計每個任務的運行時間。要使用這個函數必須滿足一些條件,那就是必須有一個用于時間統計的定時器或計數器,這個定時器或計數器的精度要至少大于10倍的系統節拍周期。這個定時器或計數器的配置以及獲取定時時間是由兩個宏定義實現的,這兩個宏一般在文件FreeRTOSConfig.h中定義。配置定時器或計數器的宏為portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(),獲取定時時間的宏為portGET_RUN_TIME_COUNTER_VALUE。實現了這兩個宏定義后,還必須在文件FreeRTOSConfig.h中將宏configGENERATE_RUN_TIME_STATS和configUSE_STATS_FORMATTING_FUNCTIONS設置為1,此API函數才有效。

這個API函數調用usTaskGetSystemState()函數獲取每個任務的狀態信息,并把其中的運行時間格式化為程序員易讀的字符形式,并將這些信息保存到參數pcWriteBuffer指向的區域。

注意,調用這個函數會掛起所有任務,這一過程可能持續較長時間,因此本函數僅在調試時使用。

11.2 參數描述

pcWriteBuffer:任務的運行時間信息會寫入這個緩沖區,為ASCII表單形式。這個緩沖區要足夠大,以容納生成的報告,每個任務大約需要40個字節。

11.3 用法舉例

lpc17xx系列為控制為例,我們使用定時器0來作為統計基準時鐘。

11.3.1 使能函數宏

在文件FreeRTOSConfig.h中,設置宏configGENERATE_RUN_TIME_STATS和configUSE_STATS_FORMATTING_FUNCTIONS為1,

11.3.2 定時初始化定時器代碼

void vConfigureTimerForRunTimeStats( void ){ /* 使能定時器0的外設電源,配置外設時鐘 */ PCONP |= 0x02UL; PCLKSEL0 = (PCLKSEL0& (~(0x3《《2))) | (0x01 《《 2); /* 復位定時器 0 */ T0TCR = 0x02; /* 作為計數器 */ T0CTCR = 0x00; /* 預分頻,設置合適的分辨率即可 */ T0PR = ( configCPU_CLOCK_HZ / 10000UL ) - 1UL; /* 啟動計數器 */ T0TCR = 0x01;}

11.3.3 定義配置定時器和獲取定時時間宏

在文件FreeRTOSConfig.h中,定義下列代碼:

extern void vConfigureTimerForRunTimeStats( void );#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vConfigureTimerForRunTimeStats()#defineportGET_RUN_TIME_COUNTER_VALUE() T0TC

12. 設置任務標簽值

12.1 函數描述

voidvTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_tpxTagValue );

可以給每個任務分配一個標簽值。這個值一般用于應用程序,RTOS內核不會使用。在文件FreeRTOSConfig.h中,宏configUSE_APPLICATION_TASK_TAG必須設置為1,此函數才有效。

12.2 參數描述

xTask:任務句柄。NULL表示當前任務。

pxTagValue:要分配給任務的標簽值。這是一個TaskHookFunction_t類型的函數指針,但也可以給任務標簽分配任意的值。

注:TaskHookFunction_t原型定義:typedef BaseType_t (*TaskHookFunctio

12.3 用法舉例

/* 在這個例子中,給任務設置一個整形標簽值。例子中使用了RTOS跟蹤鉤子宏。*/void vATask( void *pvParameters ){ /* 為自己的標簽分配一個整形值 */ vTaskSetApplicationTaskTag( NULL, ( void * ) 1 ); for( ;; ) { /* 任務主體代碼

*/}}/*****************************************************************************/ /*在這個任務中,給任務設置一個函數標簽值。首先定義一個回調函數,這個函數必須聲明為TaskHookFunction_t類型。*/static BaseType_t prvExampleTaskHook( void * pvParameter ){ /* 這里為用戶定義代碼 –可能是記錄數據、更新任務狀態值等。*/ return 0;} /* 將回調函數設置為任務的標簽值。*/void vAnotherTask( void *pvParameters ){ /* 注冊回調函數*/ vTaskSetApplicationTaskTag( NULL, prvExampleTaskHook ); for( ;; ) { /* 任務主體代碼 */ }} /* 每當任務切換時,會調用xTaskCallApplicationTaskHook 函數(見14.)。*/#define traceTASK_SWITCHED_OUT() xTaskCallApplicationTaskHook(pxCurrentTCB,0 )

13. 獲取任務標簽值

13.1 函數描述

TaskHookFunction_txTaskGetApplicationTaskTag( TaskHandle_t xTask );

返回分配給任務的標簽值。程序員定義標簽值,RTOS內核通常不會訪問標簽值。

函數僅對高級用戶使用。在文件FreeRTOSConfig.h中,宏configUSE_APPLICATION_TASK_TAG必須設置為1,此函數才有效。

13.2 參數描述

xTask:任務句柄。NULL表示當前任務。

13.3 返回值

返回指定任務的標簽值。

14. 執行任務的應用鉤子函數

14.1 函數描述

BaseType_txTaskCallApplicationTaskHook( TaskHandle_txTask, void*pvParameter );

可以為每個任務分配一個標簽值,當這個值是一個TaskHookFunction_t類型函數指針時,相當于應用程序向任務注冊了一個回調函數,而API函數xTaskCallApplicationTaskHook用來調用這個回調函數。

一般這個函數配合RTOS跟蹤鉤子宏使用,見12.設置任務標簽值一節的用法舉例。

14.2 參數描述

xTask:任務句柄。NULL表示當前任務。 pvParameter:作為參數傳遞給應用鉤子函數

15. 設置線程本地存儲指針

15.1 函數描述

void vTaskSetThreadLocalStoragePointer(TaskHandle_t xTaskToSet, BaseType_t xIndex, void*pvValue )

此函數僅用于高級用戶。

線程本地存儲允許應用程序在任務的控制塊中存儲一些值,每個任務都有自己獨立的儲存空間。

比如,許多庫函數都包含一個叫做errno的全局變量。某些庫函數使用errno返回庫函數錯誤信息,應用程序檢查這個全局變量來確定發生了那些錯誤。在單線程程序中,將errno定義成全局變量是可以的,但是在多線程應用中,每個線程(任務)必須具有自己獨有的errno值,否則,一個任務可能會讀取到另一個任務的errno值。

FreeRTOS提供了一個靈活的機制,使得應用程序可以使用線程本地存儲指針來讀寫線程本地存儲。在文件FreeRTOSConfig.h中,宏configNUM_THREAD_LOCAL_STORAGE_POINTERS指定每個任務線程本地存儲指針數組的大小。API函數vTaskSetThreadLocalStoragePointer()用于向指針數組中寫入值,API函數pvTaskGetThreadLocalStoragePointer()用于從指針數組中讀取值。

15.2 參數描述

xTaskToSet:任務句柄。NULL表示當前任務。

xIndex:寫入到線程本地存儲數組的索引號,線程本篤存儲數組的大小由宏configNUM_THREAD_LOCAL_STORAGE_POINTERS設定,該宏在文件FreeRTOSConfig.h中。

pvValue:寫入到指定索引地址的數據值

15.3 用法舉例

參見16.獲取線程本地存儲指針一節。

16. 讀取線程本地存儲指針

16.1 函數描述

void*pvTaskGetThreadLocalStoragePointer( TaskHandle_txTaskToQuery, BaseType_txIndex );

此函數僅用于高級用戶。從線程本地存儲指針數組中讀取值。更詳細描述見15.設置線程本地存儲指針一節。

16.2 參數描寫

xTaskToQuery:任務句柄。NULL表示當前任務。

xIndex:寫入到線程本地存儲數組的索引號,線程本篤存儲數組的大小由宏configNUM_THREAD_LOCAL_STORAGE_POINTERS設定,該宏在文件FreeRTOSConfig.h中。

16.3 返回值

返回一個指針,這個指針存儲在線程本地存儲指針數組中,數組索引由參數xIndex指定。

16.4 用法舉例

16.4.1 存儲一個整形數

uint32_tulVariable;

/* 向當前任務的線程本地存儲數組下標為1的位置寫入一個指向32位常量值的指針。*/vTaskSetThreadLocalStoragePointer(NULL, 1, ( void * ) 0x12345678 ); /*向當前任務的線程本地存儲數組下標為0的位置寫入一個指向32整形值的指針*/

ulVariable= ERROR_CODE;vTaskSetThreadLocalStoragePointer(NULL, 0, ( void * ) ulVariable ); /*從當前任務的線程本地存儲數組下標為5的位置讀取出一個指針并賦值給32位整形變量。*/ulVariable= ( uint32_t ) pvTaskGetThreadLocalStoragePointer( NULL, 5 );16.4.2存儲結構提typedefstruct{ uint32_t ulValue1; uint32_t ulValue2;}xExampleStruct; xExampleStruct*pxStruct; /*為結構體分配內存*/pxStruct= pvPortMalloc( sizeof( xExampleStruct ) );

/*為結構體成員賦值*/pxStruct-》ulValue1= 0;pxStruct-》ulValue2= 1; /*向當前任務的線程本地存儲數組下標為0的位置寫入一個指向結構體變量的指針*/vTaskSetThreadLocalStoragePointer(NULL, 0, ( void * ) pxStruct ); /*從當前任務的線程本地存儲數組下標為0的位置讀取出一個結構體指針*/pxStruct= ( xExampleStruct * ) pvTaskGetThreadLocalStoragePointer( NULL, 0 );

17. 設置超時狀態

17.1 函數描述

void vTaskSetTimeOutState( TimeOut_t *const pxTimeOut );

此函數僅用于高級用戶,通常與API函數xTaskCheckForTimeOut()共同使用。任務因為等待某事件而進入阻塞狀態,通常情況下任務會設置一個等待超時周期。如果在等待事件超時,任務會退出阻塞狀態。想象一個這樣的應用,某任務等待一個事件而進入阻塞狀態,但是事件遲遲不發生,超時后任務退出阻塞狀態繼續執行任務。假如任務等待的事件仍然沒有發生,則任務又會阻塞在該事件下。只要任務等待的事件一直不發生,這個任務進入阻塞然后超時退出阻塞,再進入阻塞的循環就會一直存在。是不是可以設定一個總超時時間,只要總阻塞時間大于這個總超時時間,則可以結束這個任務或進行相應記錄?freeRTOS提供了兩個API函數來完成這個功能,這就是vTaskSetTimeOutState()和xTaskCheckForTimeOut()。

vTaskSetTimeOutState()函數用于設置初始條件,之后調用xTaskCheckForTimeOut()函數檢查任務總阻塞時間是否超過總超時時間,如果沒有超過,則調整剩余的超時時間計數器。

17.2 參數描述

pxTimeOut:指向一個結構體的指針,該結構體用來保存確定超時是否發生的必要信息。vTaskSetTimeOutState()函數會設置結構體的成員。

17.3 用法舉例

參見18.超時檢測。

18. 超時檢測

18.1 函數描述

BaseType_t xTaskCheckForTimeOut(TimeOut_t * const pxTimeOut, TickType_t* const pxTicksToWait );

此函數僅用于高級用戶,通常與API函數vTaskSetTimeOutState共同使用。詳細描述見17.設置超時狀態。

18.2 參數描述

pxTimeOut:指向一個結構體的指針。該結構體保存確定超時是否發生的必要信息。使用API函數vTaskSetTimeOutState初始化該結構體。

pxTicksToWait:TickType_t指針,指向的變量保存總超時時間。

18.3 返回值

pdTRUE:總超時發生

pdFALSE:總超時未發生

18.4 用法舉例

函數用于從RX緩沖區中接收uxWantedBytes字節數據,RX緩沖區由UART中斷填充。如果RX緩沖區沒有足夠的數據,則任務進入阻塞狀態,直到RX緩沖區有足夠數據或者發生超時。如果超時后仍然沒有足夠的數據,則任務會再次進入阻塞狀態,xTaskCheckForTimeOut()函數用于重新計算總超時時間以確保總阻塞狀態時間不超過MAX_TIME_TO_WAIT。如果總阻塞狀態時間大于了總超時時間,則不管RX緩沖區是否有充足數據,都將這些數據讀出來。

size_txUART_Receive( uint8_t *pucBuffer, size_t uxWantedBytes ){ size_t uxReceived = 0; TickType_t xTicksToWait = MAX_TIME_TO_WAIT; TimeOut_t xTimeOut; /* 初始化結構體變量xTimeOut。*/ vTaskSetTimeOutState( &xTimeOut ); /* 無限循環,直到緩沖區包含足夠的數據或者阻塞超時發生。*/ while( UART_bytes_in_rx_buffer(pxUARTInstance ) 《 uxWantedBytes ) { /* RX緩沖區沒有足夠多的數據,表示任務已經進入過一次阻塞狀態。調用API函數xTaskCheckForTimeOut檢查總阻塞時間是否超過總超時時間,如果沒有,則調整剩余的總超時時間。

*/ if( xTaskCheckForTimeOut( &xTimeOut,&xTicksToWait ) != pdFALSE ) { /* 如果總阻塞時間大于總超時時間,則退出這個循環 */ break; } /* 在等待了xTicksToWait個系統節拍周期后,向接收中斷發出通知,需要更多數據。*/ ulTaskNotifyTake( pdTRUE, xTicksToWait ); } /*從RX緩沖區讀取uxWantedBytes個字節并放到pucBuffer緩沖區。*/ uxReceived = UART_read_from_receive_buffer(pxUARTInstance, pucBuffer, uxWantedBytes ); return uxReceived;}

原文標題:FreeRTOS系列第12篇---FreeRTOS任務應用函數

文章出處:【微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RTOS
    +關注

    關注

    24

    文章

    844

    瀏覽量

    120826
  • FreeRTOS
    +關注

    關注

    12

    文章

    492

    瀏覽量

    63839

原文標題:FreeRTOS系列第12篇---FreeRTOS任務應用函數

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    FreeRTOS任務中發送事件隊列是有什么限制嗎?

    到了TMC的芯片,但是在到位上報的信息中少了卡死電機的上報。所以有的電機的到位中斷并沒有成功寫入任務。 一開始是每個電機都開啟了一個定時器查詢,后續改成一個定時器查六個電機并將定時器的周期加到50ms,就很少會卡死。 所以向FreeRTOS
    發表于 06-11 07:57

    詳解FreeRTOS與SAFERTOS的區別

    開源免費的FreeRTOS由Richard Barry在WHIS工作時創建,WHIS基于FreeRTOS的功能模型,通過完整的HAZOP分析,確定了功能模型和API中的所有的弱點,減輕所有薄弱環節,并采用IEC 61508 SIL 3的開發生命周期,重新設計實現了SAFE
    的頭像 發表于 06-04 16:58 ?248次閱讀
    詳解<b class='flag-5'>FreeRTOS</b>與SAFERTOS的區別

    FreeRTOS讀取ADS1299數據有誤

    vTaskDelay(1) 在發送任務中:讀取隊列中的數據——發送到上位機 但是數據會出錯,正常數據的范圍是-1到1,用freertos就會出現超出正常范圍的數據, 而在main函數的主循環中采集數據、濾波、發送到上位機就
    發表于 05-05 22:48

    stm32f103用freertos對一個采樣率為1kHz的傳感器,進行采樣,數據出差

    任務中:讀取隊列中的數據——發送到上位機 但是數據會出錯,正常數據的范圍是-1到1,用freertos就會出現超出正常范圍的數據, 而在main函數的主循環中采集數據、濾波、發送到上位機就不會出現這種情況,這是為什么呢?
    發表于 05-05 22:44

    詳解RTOS中的Hook函數

    Hook函數是RTOS中的一個關鍵特性,通過該函數,用戶可以增強對任務管理的控制,定義系統行為。
    的頭像 發表于 03-24 16:14 ?303次閱讀

    移植LWIP+FREERTOS時遇到的問題怎么解決?

    :將ST官網的LWIP1.4.1 的例子(關于LWIP的部分)移植到步驟1 的FreeRTOS 系統的工程里面,只是添加LWIP初始化的任務,并沒有調用任何接口的情況下可以Ping 通 而且長時間
    發表于 03-11 06:48

    關于freertos任務中usb文件系統寫入數據的問題

    請問一下,我用freertos系統的定時器,sendtime++滿500的時候執行usb文件系統寫入數據的函數Flash_Write();這個函數需要300多ms跑完,按理來說他就算300多ms
    發表于 02-20 20:55

    使用任務通知提高RTOS應用的效率

    在實時嵌入式系統中,性能和資源效率是決定設計成敗的關鍵因素。傳統的實時操作系統(RTOS)提供了如隊列、信號量和事件組機制,實現任務之間的同步和通信。FreeRTOS/SAFERTOS還提供一種方法可以使這些過程更快、更輕量化,即任務
    的頭像 發表于 12-27 14:54 ?639次閱讀

    freertos最多支持多少個任務

    FreeRTOS是一個輕量級的實時操作系統(RTOS),其設計初衷就是為了提供簡單、可靠且高效的實時任務管理。關于FreeRTOS最多支持多少個任務的問題,實際上并沒有一個固定的上限,
    的頭像 發表于 09-02 14:21 ?2046次閱讀

    freertos和rtos區別是什么

    。RTOS 的主要特點是實時性、多任務處理、資源管理、中斷處理等。 FreeRTOS 是一個開源的實時操作系統,由英
    的頭像 發表于 09-02 14:18 ?2729次閱讀

    freertos和裸機有什么區別

    FreeRTOS 和裸機編程是兩種不同的嵌入式系統開發方法,它們在設計理念、資源使用、功能實現等方面有著顯著的差異。 1. 基本概念 1.1 FreeRTOS FreeRTOS 是一個小型的、可裁剪
    的頭像 發表于 09-02 14:13 ?2831次閱讀

    GD32L233移植FreeRTOS,用定時器2做延時函數在線調試時無法進入TIMER2的中斷服務函數,怎么解決?

    GD32L233移植FreeRTOS,用定時器2做延時函數在線調試發現無法進入TIMER2的中斷服務函數
    發表于 07-26 06:39

    esp8266的freertos+lwip不支持在多個任務中創建多個不同的socket嗎?

    的socket fd。也就是說每個socket都是在各自的任務中創建、讀寫和close的,按照道理應該是互相獨立的,但是為啥會互相影響? 難道樂鑫的esp8266的freertos+lwip不支持在多個任務中創建多個不同的s
    發表于 07-11 07:29

    esp8266 FREERTOS 3.3中沒有提供CHIP_ID函數,怎么實現獲取CHIP_ID的功能?

    esp8266 FREERTOS 3.3中沒有提供CHIP_ID函數,怎么實現獲取CHIP_ID的功能
    發表于 07-09 07:19

    如何使用freeRTOS在兩個任務之間傳輸任務數據?

    大家好, 我是 PSoC6 的新手,并嘗試以運行第二個任務的方式調整“ PSoC? 6 MCU:emFile 文件系統”,該任務作為 I2C 主控運行。 i2C Master 正在讀取傳感器的溫度
    發表于 07-03 07:55
    主站蜘蛛池模板: 奇米影视第四色7777 | 久久精品国产免费 | 宅宅午夜亚洲精品 | 2016天天干 | 欧美在线视频免费 | 日本免费大黄 | 久久久久久国产精品免费免 | 看亚洲a级一级毛片 | 日韩午夜精品 | 欧美大色网 | 成人看片在线观看 | 女人张开腿让男人桶免费最新 | 天天黄色| 在线小视频你懂的 | 成人免费久久精品国产片久久影院 | 永久在线免费观看 | 在线天堂中文在线网 | 手机在线看 | 黄色毛片免费 | 老逼影院 | 国产成人教育视频在线观看 | 久久综合九色综合欧美播 | 免费一级网站 | 中日韩黄色大片 | 日韩亚洲人成在线综合 | 国产精品午夜剧场 | 日本xxxx色视频在线观看免费 | 色拍拍拍 | 亚洲激情五月 | 欧美三级午夜伦理片 | 国产成人啪午夜精品网站 | 国产综合在线观看视频 | 激情四月婷婷 | 欧美网站黄 | 欧美性黑人极品hd网站 | 欧美一级片观看 | 色国产在线视频一区 | 777奇米影视一区二区三区 | 欧美午夜剧场 | 婷婷在线综合 | 天天艹天天射 |