日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FreeRTOS 之一 源码目录文件 及 移植详解

發布時間:2024/10/14 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeRTOS 之一 源码目录文件 及 移植详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

  • 2018/1/15更新了文章中的部分錯誤。
  • FreeRTOS源碼為最新版的10.0.1。FreeRTOS 10包含兩個重要的新功能:流緩沖區和消息緩沖區。
  • 從10.0.0開始,FreeRTOS的開源協議改為了MIT。

源碼目錄

??首先,從官網下載最新版的源碼,目前最新版為10.0.1。下載后,解壓得到源碼,FreeRTOS的源碼包中的內容還是相當豐富的。簡略目錄如下:

├─FreeRTOS │ ├─Demo // 各種開發工具的完整Demo,開發者可以方便的以此搭建出自己的項目,甚至直接使用 │ │ ├─Common // 所有例程都可以使用的演示例程文件 │ │ └─其他 // 對應平臺和開發工具的項目例程(命名:平臺_開發工具,例如:CORTEX_M4F_M0_LPC43xx_Keil) │ ├─License // 使用修改過的GPL │ └─Source // FreeRTOS的源碼 │ ├─include // 源碼對應的頭文件 │ └─portable // 每個支持的處理器架構需要一小段與處理器架構相關的RTOS代碼。該目錄下即為和開發平臺相關的代碼 │ ├─MemMang // FreeRTOS內存管理方案(一般要根據平臺來選擇以下5個之一) │ │ heap_1.c │ │ heap_2.c │ │ heap_3.c │ │ heap_4.c │ │ heap_5.c │ └─其他 // 其他開發工具相關的代碼,需要根據自己的開發工具進行選擇 │ croutine.c // 協線程(協程)文件,和任務類似,在系統資源比較缺乏下使用 │ event_groups.c // 事件標志組 │ list.c // 列表結構描述,在內核整體控制上都使用了列表格式數據處理,一切數據結構的基礎 │ queue.c // 隊列,任務和任務之間的通訊處理 │ tasks.c // 所有任務相關函數 │ timers.c // 軟件定時器,以任務形式存在 | stream_buffer.c // 10.0.0 新增 └─FreeRTOS-Plus // FreeRTOS+組件和演示例程

對于FreeRTOS的每個獨立部分,其官網均有詳細的說明。后續博文也會給出相應的介紹。

注意:

  • FreeRTOS-Plus下有個常用的Trace源碼,但是該源碼比較舊,和官網對應不上。如果要使用FreeRTOS+Trace,可以參考 此文
  • 移植說明

    FreeRTOS源碼整理

    FreeRTOS源碼目錄中文件還是挺多的,但是真正需要使用的其實沒幾個(個人不喜歡在項目中放一堆實際不用的文件)!

    • list.c、tasks.c、queue.c必不可少,這三個文件是FreeRTOS最基本的源文件。至于同目錄下的timer.c、event_groups.c等文件,根據需要添加即可。

    • /FreeRTOS/Source/portable/MemMang下的heap_x.c也是必不可少的,根據需要選擇其中一個,STM32系列一般用heap_4.c。

    • /FreeRTOS/Source/portable/下根據開發工具選擇對應目錄下的文件。例如:若使用Keil,對應目錄下只有一個文件,讓直接用RVDS目錄下對應的文件。根據芯片選擇對應目錄下文件port.c、portmacro.h即可。

    • 對應的頭文件當然也是必不可少。/FreeRTOS/Source/include下的文件可根據需要刪除不需要的文件!

    • 還有一個文件FreeRTOSConfig.h,位于/FreeRTOS/Demo/對應的平臺下,這個文件其實就相當于STM32標準庫中的stm32fxx_conf.h(使用標準外設庫時,通過該文件進行配置)。對于該文件,下一節有詳細說明。

    最后,去除部分不使用的文件,整理完成后的源代碼大致如下所示:

    ├─inc // 源碼頭文件,根據需要刪除不必要的就可以!例如,不使用事件標志組,則可刪除event_groups.h。(注意:有些頭文件為FreeRTOS內容使用) │ croutine.h │ deprecated_definitions.h │ event_groups.h │ FreeRTOS.h │ list.h │ mpu_prototypes.h │ mpu_wrappers.h │ portable.h │ portmacro.h │ projdefs.h │ queue.h │ semphr.h | stack_macros.h // V10.0.0開始為了一致性,已經重命名了StackMacros.h頭文件stack_macros.h。為了兼容這兩文件目前都在源碼中。使用時直接刪除StackMacros.h,選擇stack_macros.h即可(新的源碼不再使用StackMacros.h)。 │ StackMacros.h │ stdint.readme // 為支持C99添加,使用C99時將其改為stdint.h │ task.h │ timers.h └─src // 省略部分不使用文件heap_4.clist.cport.cqueue.ctasks.c

    FreeRTOS配置

    ??這里特別說明一下FreeRTOSConfig.h這個文件。FreeRTOS作為一個可高度配置的實時內核,其絕大多數配置都體現在在FreeRTOS.h。但是FreeRTOS.h是內核文件,難道需要直接改內核文件?當然不是,FreeRTOS.h通過檢查FreeRTOSConfig.h中對各宏值的定義來選擇功能。
    ??如果要了解FreeRTOS的全部配置項,可以參考** FreeRTOS之全配置項詳解、裁剪(FreeRTOSConfig.h)**。本部分主要說明在實際移植時需要特別注意的部分。
    ??FreeRTOS指定了用戶使用一個名為FreeRTOSConfig.h的配置文件來對FreeRTOS進行配置。這個文件是一個用戶配置文件,不是內核源碼的一部分,這個文件不再源碼目錄,而是在對應的Demo目錄下。因為,這是具體的用戶的實現。通過這個文件,用戶可以裁剪FreeRTOS,以下是一個針對STM32F4芯片的FreeRTOS的配置文件:

    /*FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.All rights reservedVISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.This file is part of the FreeRTOS distribution.FreeRTOS is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License (version 2) as published by theFree Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.***************************************************************************>>! NOTE: The modification to the GPL is included to allow you to !<<>>! distribute a combined work that includes FreeRTOS without being !<<>>! obliged to provide the source code for proprietary components !<<>>! outside of the FreeRTOS kernel. !<<***************************************************************************FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE. Full license text is available on the followinglink: http://www.freertos.org/a00114.html**************************************************************************** ** FreeRTOS provides completely free yet professionally developed, ** robust, strictly quality controlled, supported, and cross ** platform software that is more than just the market leader, it ** is the industry's de facto standard. ** ** Help yourself get started quickly while simultaneously helping ** to support the FreeRTOS project by purchasing a FreeRTOS ** tutorial book, reference manual, or both: ** http://www.FreeRTOS.org/Documentation ** ****************************************************************************http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by readingthe FAQ page "My application does not run, what could be wrong?". Have youdefined configASSERT()?http://www.FreeRTOS.org/support - In return for receiving this top qualityembedded software for free we request you assist our global community byparticipating in the support forum.http://www.FreeRTOS.org/training - Investing in training allows your team tobe as productive as possible as early as possible. Now you can receiveFreeRTOS training directly from Richard Barry, CEO of Real Time EngineersLtd, and the world's leading authority on the world's leading RTOS.http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,including FreeRTOS+Trace - an indispensable productivity tool, a DOScompatible FAT file system, and our tiny thread aware UDP/IP stack.http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to HighIntegrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOSlicenses offer ticketed support, indemnification and commercial middleware.http://www.SafeRTOS.com - High Integrity Systems also provide a safetyengineered and independently SIL3 certified version for use in safety andmission critical applications that require provable dependability.1 tab == 4 spaces! */#ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H/*-----------------------------------------------------------* Application specific definitions.** These definitions should be adjusted for your particular hardware and* application requirements.** THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. ** See http://www.freertos.org/a00110.html.*----------------------------------------------------------*//* Ensure stdint is only used by the compiler, and not the assembler. */ #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)#include <stdint.h>#include "main.h" extern uint32_t SystemCoreClock; #endif/** @addtogroup base definitions 基本參數配置* @{*//* 置1:RTOS使用搶占式調度器;置0:RTOS使用協作式調度器(時間片)* * 注:在多任務管理機制上,操作系統可以分為搶占式和協作式兩種。協作式操作系統是任務主動釋放CPU后,切換到下一個任務。任務切換的時機完全取決于正在運行的任務。*/ #define configUSE_PREEMPTION 1/* 某些運行FreeRTOS的硬件有兩種方法選擇下一個要執行的任務:通用方法和特定于硬件的方法(以下簡稱“特殊方法”)。* * 通用方法:* 1.configUSE_PORT_OPTIMISED_TASK_SELECTION 為 0 或者 硬件不支持這種特殊方法。* 2.可以用于所有FreeRTOS支持的硬件* 3.完全用C實現,效率略低于特殊方法。* 4.不強制要求限制最大可用優先級數目* 特殊方法:* 1.必須將configUSE_PORT_OPTIMISED_TASK_SELECTION設置為1。* 2.依賴一個或多個特定架構的匯編指令(一般是類似計算前導零[CLZ]指令)。* 3.比通用方法更高效* 4.一般強制限定最大可用優先級數目為32*/ #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1/* 置1:使能低功耗tickless模式;置0:保持系統節拍(tick)中斷一直運行* * 注:tickless模式,比普通低功耗模式要好一些*/ #define configUSE_TICKLESS_IDLE 0 /** 寫入實際的CPU內核時鐘頻率,也就是CPU指令執行頻率,通常稱為Fcclk*/ #define configCPU_CLOCK_HZ ( SystemCoreClock ) /** RTOS 系統節拍中斷的頻率。即一秒中斷的次數,每次中斷RTOS都會進行任務調度。*/ #define configTICK_RATE_HZ ( ( TickType_t ) 1000 )#define configMAX_PRIORITIES ( 8 ) /* 最大優先級 */ #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 64 * 1024 ) ) #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_16_BIT_TICKS 0 #define configIDLE_SHOULD_YIELD 1 #define configUSE_TASK_NOTIFICATIONS 1 #define configUSE_MUTEXES 1 /* 使用互斥信號量 */ #define configUSE_RECURSIVE_MUTEXES 0 /* 使用遞歸互斥信號 */ #define configUSE_COUNTING_SEMAPHORES 0 /* 使用計數信號量 */ #define configUSE_ALTERNATIVE_API 0 /* 9.0.0 已經移除 */ #define configQUEUE_REGISTRY_SIZE 10 /* 設置可以注冊的信號量和消息隊列個數 */ #define configUSE_QUEUE_SETS 0 #define configUSE_TIME_SLICING 0 #define configUSE_NEWLIB_REENTRANT 0 //#define configENABLE_BACKWARD_COMPATIBILITY 0 #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 5 /*** @}*//** @addtogroup Hook function related definitions 相關的鉤子函數* @{*/ /* 置1:使用空閑鉤子(Idle Hook類似于回調函數);置0:忽略空閑鉤子* * 注:* 1.空閑任務鉤子是一個函數,這個函數由用戶來實現,FreeRTOS規定了函數的名字和參數:void vApplicationIdleHook(void ),這個函數在每個空閑任務周期都會被調用* 2.對于已經刪除的RTOS任務,空閑任務可以釋放分配給它們的堆棧內存。因此必須保證空閑任務可以被CPU執行* 3.使用空閑鉤子函數設置CPU進入省電模式是很常見的* 4.不可以調用會引起空閑任務阻塞的API函數*/ #define configUSE_IDLE_HOOK 0/* 置1:使用時間片鉤子(Tick Hook);置0:忽略時間片鉤子* * 注:* 1.時間片鉤子是一個函數,這個函數由用戶來實現,FreeRTOS規定了函數的名字和參數:void vApplicationTickHook(void )* 2.時間片中斷可以周期性的調用* 3.函數必須非常短小,不能大量使用堆棧,不能調用以”FromISR" 或 "FROM_ISR”結尾的API函數*/ #define configUSE_TICK_HOOK 0/* 置1:使用棧溢出鉤子(Tick Hook);置0:忽略棧溢出鉤子* * 注:* 1.棧溢出鉤子是一個函數,這個函數由用戶來實現,FreeRTOS規定了函數的名字和參數:void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName )* 2.這個選項僅適用于內存映射未分段的微處理器架構* 3.FreeeRTOS提供了兩個可選機制用來輔助檢測和改正堆棧溢出。配置宏configCHECK_FOR_STACK_OVERFLOW為不同的常量來使用不同堆棧溢出檢測機制*/ #define configCHECK_FOR_STACK_OVERFLOW 0 #define configUSE_MALLOC_FAILED_HOOK 0/*** @}*//** @addtogroup Run time and task stats gathering related definitions.* @{*/ #define configGENERATE_RUN_TIME_STATS 0 #define configUSE_TRACE_FACILITY 0 #define configUSE_STATS_FORMATTING_FUNCTIONS 0 /*** @}*//** @addtogroup Co-routine definitions 協程相關配置* @{*/ #define configUSE_CO_ROUTINES 0 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) /*** @}*//** @addtogroup Software timer related definitions 軟件定時器的相關配置* @{*/ #define configUSE_TIMERS 0 #define configTIMER_TASK_PRIORITY 3 #define configTIMER_QUEUE_LENGTH 10 #define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /*** @}*//** @addtogroup Interrupt nesting behaviour configuration.* @{*/ /** Cortex-M內核使用8bit來配置優先級,但是STM32只使用了高4bit,數值越小,優先級越高。* 在往寄存器里面寫數值配置的時候,是按照8bit來寫的,所以真正寫的時候需要經過轉換,公式為:* ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff),其中的priority就是我們配置的真正的優先級*/ /* Cortex-M specific definitions. */ #ifdef __NVIC_PRIO_BITS/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */#define configPRIO_BITS __NVIC_PRIO_BITS #else#define configPRIO_BITS 4 #endif/*============================================== SysTick中斷優先級配置 ============================================*/ /** 1. configLIBRARY_LOWEST_INTERRUPT_PRIORITY宏定義是用來配置FreeRTOS用到的SysTick中斷和PendSV中斷的優先級。* 在NVIC分組設置為4的情況下,此宏定義的范圍就是0-15。這里配置為了0x0f,即SysTick和PendSV都是配置為了最低優先級。* 這樣可以提高系統的實時響應能力,即其他的外部中斷可以及時的得到響應。* * 2. 在往寄存器里面寫數值配置的時候,是按照8bit來寫的,所以真正寫的時候需要經過轉換,公式為:* ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff),其中的priority就是我們配置的真正的優先級。經過這個公式之后得到的是* 下面的這個宏:configKERNEL_INTERRUPT_PRIORITY*/ /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 /* Interrupt priorities used by the kernel port layer itself. These are generic to all Cortex-M ports, and do not rely on any particular library functions. */ #define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )/*===========================================可屏蔽的中斷優先級配置====================================================*/ /** * 1.用于配置STM32的特殊寄存器basepri寄存器的值,用于屏蔽中斷,當大于basepri值的優先級的中斷將被全部屏蔽。basepri只有4bit有效,* 默認只為0,即全部中斷都沒有被屏蔽。* configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY定義了受FreeRTOS管理的最高優先級中斷。設置NVIC的優先級分組為4的情況下。配置為5,意思就是中斷優先級大于5的中斷都被屏蔽。* 簡單的說就是用戶可以在搶占式優先級為5到15的中斷里面調用FreeRTOS的API函數,搶占式優先級為0~4的中斷里面是不允許調用的(即便API以FromISR結尾)。* * 2. 當把配置好的優先級寫到寄存器的時候,是按照8bit來寫的,所以真正寫的時候需要經過轉換,公式為:* ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff),其中的priority就是我們配置的真正的優先級。經過這個公式之后得到的是下面的這個宏:* configMAX_SYSCALL_INTERRUPT_PRIORITY** 3. 在FreeRTOS中,關中斷是通過配置basepri寄存器來實現的,關掉的中斷由配置的basepri的值決定,小于basepri值的* 中斷FreeRTOS是關不掉的,這樣做的好處是可以系統設計者可以人為的控制那些非常重要的中斷不能被關閉,在緊要的關頭必須被響應。* 而在UCOS中,關中斷是通過控制PRIMASK來實現的,PRIMASK是一個單1的二進制位,寫1則除能除了NMI和硬 fault的所有中斷。當UCOS關閉* 中斷之后,即使是你在系統中設計的非常緊急的中斷來了都不能馬上響應,這加大了中斷延遲的時間,如果是性命攸關的場合,那后果估計挺嚴重。* 相比UCOS的關中斷的設計,FreeRTOS的設計則顯得人性化很多。**/ /* The highest interrupt priority that can be used by any interrupt service routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER PRIORITY THAN THIS! (higher priorities are lower numeric values. */ #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) /*** @}*//** @addtogroup Define to trap errors during development.* @{*/ #define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );} /*** @}*//** @addtogroup FreeRTOS MPU specific definitions.* @{*/ #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0 /*** @}*//** @addtogroup Set the following definitions to 1 to include the API function, or 0 to exclude the API function.* @{*/ #define INCLUDE_vTaskPrioritySet 1 #define INCLUDE_uxTaskPriorityGet 1 #define INCLUDE_vTaskDelete 1 #define INCLUDE_vTaskSuspend 1 #define INCLUDE_vTaskCleanUpResources 0 #define INCLUDE_xResumeFromISR 1 #define INCLUDE_vTaskDelayUntil 1 #define INCLUDE_vTaskDelay 1 #define INCLUDE_xTaskGetSchedulerState 1 #define INCLUDE_uxTaskGetStackHighWaterMark 0 #define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 #define INCLUDE_pcTaskGetTaskName 0 #define INCLUDE_eTaskGetState 0 #define INCLUDE_xEventGroupSetBitFromISR 0 #define INCLUDE_xTimerPendFunctionCall 0/*** @}*//** @addtogroup Definitions that map the FreeRTOS port interrupt handlers to their CMSIS standard names.* @{*/ #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler //#define xPortSysTickHandler SysTick_Handler /* 該中斷需要特殊處理,否則在啟動過程中會有問題 */ /*** @}*//** @addtogroup Integrates the Tracealyzer recorder with FreeRTOS.* @{*/ /* 以下為使用Percepio Tracealyzer需要的東西,不需要時將 configUSE_TRACE_FACILITY 定義為 0 */ #if ( configUSE_TRACE_FACILITY == 1 ) #include "trcRecorder.h" #define INCLUDE_xTaskGetCurrentTaskHandle 1 // 啟用一個可選函數(該函數被 Trace源碼使用,默認該值為0 表示不用) #endif/*** @}*/#endif /* FREERTOS_CONFIG_H */

    ??無論使用什么開發環境,對于FreeRTOS的配置均在此文件中進行。例如,在使用FreeRTOS+Trace時,需要啟用一些輔助函數!當然,為了FreeRTOS能正常運行,也需要在該文件中進行配置。這里只針對FreeRTOS運行進行說明。

    處理系統中斷

    ??在Cortex-M3硬件下,FreeRTOS使用SysTick作為系統節拍時鐘,使用SVC和PendSVC進行上下文切換。異常中斷服務代碼位于port.c文件中,FreeRTOS的作者已經為各種架構的CPU寫好了這些代碼。

    /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS standard names. */ #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler

    需要特殊注意的是SysTick中斷,該終端需要進行特殊處理,否則在啟動過程中將出現錯誤。:

    void SysTick_Handler(void) {#if (INCLUDE_xTaskGetSchedulerState == 1 )if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED){#endif /* INCLUDE_xTaskGetSchedulerState */ xPortSysTickHandler();#if (INCLUDE_xTaskGetSchedulerState == 1 )}#endif /* INCLUDE_xTaskGetSchedulerState */ }

    需要注意的是需要合理安排FreeRTOS使用的系統中斷。例如在STM32中,有以下處理

    /* FreeRTOS使用的優先級配置 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); SysTick_Config(SystemCoreClock / 1000); NVIC_SetPriority(SVCall_IRQn, 0x0); NVIC_SetPriority(PendSV_IRQn, 15);

    最后,建立任務,啟動調度器,FreeRTOS就可以運行了!

    void Main_task(void * pvParameters) {unsigned char buf[4] = {0};unsigned int i = 0;for( ;; ){vTaskDelay(1000);}vTaskDelete(NULL); }int main(void) { /* 省略*//* Init task */xTaskCreate(Main_task, "Main", configMINIMAL_STACK_SIZE * 2, NULL,MAIN_TASK_PRIO, NULL);/* Start scheduler */vTaskStartScheduler();/* We should never get here as control is now taken by the scheduler */for( ;; );}

    至于文件中的其他值,后面再詳細說明!

    附件

    STM32_FreeRTOS

    總結

    以上是生活随笔為你收集整理的FreeRTOS 之一 源码目录文件 及 移植详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。