03嵌入式實時操作系統FreeRTOS裁剪和配置_第1頁
03嵌入式實時操作系統FreeRTOS裁剪和配置_第2頁
03嵌入式實時操作系統FreeRTOS裁剪和配置_第3頁
03嵌入式實時操作系統FreeRTOS裁剪和配置_第4頁
03嵌入式實時操作系統FreeRTOS裁剪和配置_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《嵌入式實時操作系統FreeRTOS原理及應用——基于STM32微控制器》嵌入式實時操作系統FreeRTOS原理及應用張超主編STM32Cortex-M4通用開發(fā)板嵌入式實時操作系統FreeRTOS原理及應用FreeRTOS基礎配置FreeRTOS與中斷相關配置FreeRTOS可選API函數配置FreeRTOS其它配置FreeRTOS參考配置示例FreeRTOS的裁剪和配置主要內容:一、FreeRTOS基礎配置FreeRTOS的裁剪和配置FreeRTOS基礎配置configUSE_PREEMPTIONconfigUSE_PORT_OPTIMISED_TASK_SELECTIONconfigCPU_CLOCK_HZconfigTICK_RATE_HZconfigMAX_PRIORITIESconfigMINIMAL_STACK_SIZE常用配置項是運行FreeRTOS比較常用的一些配置,涉及調度方式、時鐘節(jié)拍、堆內存大小、空閑任務堆棧等。FreeRTOS基礎配置configTOTAL_HEAP_SIZEconfigUSE_16_BIT_TICKSconfigIDLE_SHOULD_YIELDconfigMAX_TASK_NAME_LENconfigUSE_TICKLESS_IDLE常用配置項隊列信號量相關FreeRTOS基礎配置configUSE_QUEUE_SETS用于定義是否使用隊列集。configUSE_MUTEXES用于定義是否使用互斥信號量。configUSE_RECURSIVE_MUTEXES用于定義是否使用遞歸互斥信號量。configUSE_COUNTING_SEMAPHORES用于定義是否使用計數信號量。configUSE_TASK_NOTIFICATIONS用于定義是否使用任務通知。當宏設置為1時,相應功能的API函數就會被編譯。鉤子函數相關FreeRTOS基礎配置configUSE_IDLE_HOOK用于使能空閑任務鉤子函數。configUSE_TICK_HOOK用于使能時間片鉤子函數。configUSE_MALLOC_FAILED_HOOK用于使能動態(tài)內存分配失敗鉤子函數。configCHECK_FOR_STACK_OVERFLOW用于使能堆棧溢出檢測鉤子函數。鉤子函數需要用戶實現,當對應的宏不為0時,必須提供相應的鉤子函數。二、

FreeRTOS與中斷相關配置FreeRTOS的裁剪和配置FreeRTOS與中斷相關配置Cortex-M優(yōu)先級STM32微控制器使用ARMCortex-M內核,Cortex-M內核采用8個二進制位來表示可編程的優(yōu)先級,共有256級。實際的優(yōu)先級數由芯片生產廠家決定,像STM32微控制器,就沒有使用全部的8個二進制位,而只是使用了4位,共16個優(yōu)先級。不管采用多少位表達優(yōu)先級,均采用MSB對齊方式,使用4位來表達優(yōu)先級時MSB對齊的情形如下:FreeRTOS與中斷相關配置configPRIO_BITS設置硬件用于表達優(yōu)先級的二進制位數。STM32微控制器使用的是4位,此宏應該設定為4。因在core_cm4.h頭文件中定義了表達優(yōu)先級位數據的宏__NVIC_PRIO_BITS,且該宏已設為4,可通過這個宏來設定configPRIO_BITS,或者直接將configPRIO_BITS設定為4。#ifdef__NVIC_PRIO_BITS#defineconfigPRIO_BITS__NVIC_PRIO_BITS/*core_cm4.h中定義的宏*/#else#defineconfigPRIO_BITS4/*對STM32微控制器應設為4*/#endifFreeRTOS與中斷相關配置configLIBRARY_LOWEST_INTERRUPT_PRIORITY用于設置中斷最低優(yōu)先級。STM32微控制器使用4位二進制位表達優(yōu)先級,優(yōu)先級數最多就是16個。但STM32微控制器表達優(yōu)先級高低與優(yōu)先級數的關系比較特殊,數值越大,優(yōu)先級反而越低,數值為0時表示最高優(yōu)先級。所以,此宏的值應設為15。FreeRTOS與中斷相關配置configKERNEL_INTERRUPT_PRIORITY用于設置內核的中斷優(yōu)先級,即嘀嗒定時器和PendSV的中斷優(yōu)先級。此宏定義通過configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8-configPRIO_BITS)替換得到,替換結果應該是中斷系統中的最低優(yōu)先級。用前面定義好的宏,替換為0x0F<<(8-4),結果為0xF0,高4位正好就是15,也就是STM32微控制器的最低中斷優(yōu)先級。FreeRTOS與中斷相關配置configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY用于設置FreeRTOS可管理的最大優(yōu)先級??梢栽谟布袛鄡?yōu)先級數量之內任意設置,比如設置為5,表示高于優(yōu)先級5的中斷(對于STM32微控制器,為優(yōu)先級0至4)不歸FreeRTOS管理。FreeRTOS與中斷相關配置configMAX_SYSCALL_INTERRUPT_PRIORITY由宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8-configPRIO_BITS)得到。例如,宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY設為5,表示優(yōu)先級高于5的中斷不歸FreeRTOS管理,在這些中斷服務函數中不能調用FreeRTOS相關API函數。三、FreeRTOS可選API函數配置FreeRTOS的裁剪和配置FreeRTOS可選API函數配置可選API通過配置INCLUDE_開始的宏,可對FreeRTOS一些可選API函數進行配置,當對應的宏為1時,表示使能相應功能的API函數,這些API函數就會參與編譯,從而可供應用程序調用。例如,當INCLUDE_vTaskDelay宏定義為1時,函數vTaskDelay()將會被編譯,從而在應用程序中可用vTaskDelay()實現阻塞式延時。FreeRTOS可選API函數配置#defineINCLUDE_vTaskPrioritySet#defineINCLUDE_uxTaskPriorityGet#defineINCLUDE_vTaskDelete#defineINCLUDE_vTaskSuspend#defineINCLUDE_vTaskDelayUntil#defineINCLUDE_vTaskDelay可選API常用的使能API函數對應的宏。FreeRTOS可選API函數配置#defineINCLUDE_xTaskGetSchedulerState#defineINCLUDE_xTaskGetCurrentTaskHandle#defineINCLUDE_uxTaskGetStackHighWaterMark#defineINCLUDE_xTaskGetIdleTaskHandle#defineINCLUDE_xTimerGetTimerDaemonTaskHandle#defineINCLUDE_pcTaskGetTaskName可選API常用的使能API函數對應的宏。四、FreeRTOS其它配置FreeRTOS的裁剪和配置FreeRTOS其它配置協程相關1、configUSE_CO_ROUTINES。定義是否使用協程,0為不使用,1為使用。在搶占式調度中也可使用協程,協程可以節(jié)約開銷,但功能將受到限制,現在的微處理器功能都已經很強大,協程已經很少采用,此宏應該設為0。2、configMAX_CO_ROUTINE_PRIORITIES。定義協程的有效優(yōu)先級數目,優(yōu)先級從0到configMAX_CO_ROUTINE_PRIORITIES-1,0為最低優(yōu)先級。FreeRTOS其它配置任務運行信息相關1、configUSE_TRACE_FACILITY,用于使能可視化跟蹤和調試,為1時使能。2、configUSE_STATS_FORMATTING_FUNCTIONS,當此宏與configUSE_TRACE_FACILITY宏同時為1時,vTaskList()和vTaskGetRunTimeStats()函數會參與編譯,從而可以通過這二個函數獲取任務運行信息。FreeRTOS其它配置任務運行信息相關3、configGENERATE_RUN_TIME_STATS,用于定義是否開啟時間統計功能,為1時表示開啟。當此宏為1時,還需要用戶實現這二個宏:portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()和portGET_RUN_TIME_COUNTER_VALUE()。前者對應一個精度高于嘀嗒定時器時間精度10倍以上的定時器初始化函數,后者對應一個獲取統計時間值的函數,這二個函數均需由用戶實現。FreeRTOS其它配置軟件定時器相關1、configUSE_TIMERS,定義是否使用軟件定時器功能,為1時使用。當此宏為1時,會在調度器開啟功能函數中自動創(chuàng)建定時器服務任務,同時需要正確配置后面幾個宏。2、configTIMER_TASK_PRIORITY,用于定義軟件定時器任務的默認優(yōu)先級。3、configTIMER_QUEUE_LENGTH,用于定義軟件定時器命令隊列長度。4、configTIMER_TASK_STACK_DEPTH,用于定義軟件定時器任務堆棧大小。FreeRTOS其它配置是否使用斷言用于代碼調試階段檢查傳入的參數是否合理。FreeRTOS內核在關鍵點均會調用configASSERT(x),如果x結果為0,說明有錯誤發(fā)生。錯誤發(fā)生時有多種處理方法,可通過串口輸出信息,可直接停機,下面是一種停機處理方法示例,發(fā)生錯誤時直接停機。#defineconfigASSERT(x)if((x)==0) {taskDISABLE_INTERRUPTS();for(;;);}使用斷言會增加系統開銷,一般是在調試階段使用,要關閉這個功能,注釋掉configASSERT(x)就可以。FreeRTOS其它配置中斷服務函數在FreeRTOS移植層port.c文件里,分別定義了vPortSVCHandler、xPortPendSVHandler和xPortSysTickHandler三個中斷服務處理函數,需要與STM32的SVC_Handler、PendSV_Handler和SysTick_Handler進行一一對應。#definevPortSV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論