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

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

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

3天內不再提示

FreeRTOS的移植

汽車電子技術 ? 來源:物聯網IoT開發 ? 作者:杰杰 ? 2023-02-14 09:34 ? 次閱讀

前言

我為什么會寫移植呢,因為是公眾號有一個兄弟想要我寫一份移植的教程,所以應它要求我就寫了一篇。

準備

在移植之前,我們首先要獲取到FreeRTOS的官方的源碼包。這里我們提供兩個下載鏈接:

一個是官網:http://www.freertos.org/

另外一個是代碼托管網站:https://sourceforge.net/projects/freertos/files/FreeRTOS/

打開網站鏈接之后,我們選擇FreeRTOS的最新版本V9.0.0(2016年),盡管現在FreeRTOS的版本已經更新到V10.0.1了,但是我們還是選擇V9.0.0,因為內核很穩定,并且網上資料很多,因為V10.0.0版本之后是亞馬遜收購了FreeRTOS之后才出來的版本,主要添加了一些云端組件,我們本書所講的FreeRTOS是實時內核,采用V9.0.0版本足以。

簡單介紹FreeRTOS

FreeRTOS包含Demo例程和內核源碼(比較重要,我們就需要提取該目錄下的大部分文件)。

Source文件夾里面包含的是FreeRTOS內核的源代碼,我們移植FreeRTOS的時候就需要這部分源代碼;

Demo 文件夾里面包含了FreeRTOS官方為各個單片機移植好的工程代碼,FreeRTOS為了推廣自己,會給各種半導體廠商的評估板寫好完整的工程程序,這些程序就放在Demo這個目錄下,這部分Demo非常有參考價值。

圖片

在這里插入圖片描述

Source文件夾

這里我們再重點分析下FreeRTOS/ Source文件夾下的文件,①和③包含的是FreeRTOS的通用的頭文件和C文件,這兩部分的文件試用于各種編譯器和處理器,是通用的。需要移植的頭文件和C文件放在②portblle這個文件夾。

圖片

在這里插入圖片描述

portblle文件夾,是與編譯器相關的文件夾,在不同的編譯器中使用不同的支持文件。①中的KEIL就是我們就是我們使用的編譯器,其實KEIL里面的內容跟RVDS里面的內容一樣,所以我們只需要③RVDS文件夾里面的內容即可,里面包含了各種處理器相關的文件夾,從文件夾的名字我們就非常熟悉了,我們學習的STM32有M0、M3、M4等各種系列,FreeRTOS是一個軟件,單片機是一個硬件,FreeRTOS要想運行在一個單片機上面,它們就必須關聯在一起。MemMang文件夾下存放的是跟內存管理相關的源文件。

圖片

在這里插入圖片描述

移植過程

提取源碼

  1. 首先在我們的STM32裸機工程模板根目錄下新建一個文件夾,命名為“FreeRTOS”,并且在FreeRTOS文件夾下新建兩個空文件夾,分別命名為“src”與“port”,src文件夾用于保存FreeRTOS中的核心源文件,也就是我們常說的‘.c文件’,port文件夾用于保存內存管理以及處理器架構相關代碼,這些代碼FreeRTOS官方已經提供給我們的,直接使用即可,在前面已經說了,FreeRTOS是軟件,我們的開發版是硬件,軟硬件必須有橋梁來連接,這些與處理器架構相關的代碼,可以稱之為RTOS硬件接口層,它們位于FreeRTOS/Source/Portable文件夾下。

  2. 打開FreeRTOS V9.0.0源碼,在“FreeRTOSv9.0.0\\FreeRTOS\\Source”目錄下找到所有的‘.c文件’,將它們拷貝到我們新建的src文件夾中,

    圖片

    在這里插入圖片描述

  3. 打開FreeRTOS V9.0.0源碼,在“FreeRTOSv9.0.0\\FreeRTOS\\Source\\portable”目錄下找到“MemMang”文件夾與“RVDS”文件夾,將它們拷貝到我們新建的port文件夾中

    圖片

    在這里插入圖片描述

  4. 打開FreeRTOS V9.0.0源碼,在“FreeRTOSv9.0.0\\ FreeRTOS\\Source”目錄下找到“include”文件夾,它是我們需要用到FreeRTOS的一些頭文件,將它直接拷貝到我們新建的FreeRTOS文件夾中,完成這一步之后就可以看到我們新建的FreeRTOS文件夾已經有3個文件夾,這3個文件夾就包含FreeRTOS的核心文件,至此,FreeRTOS的源碼就提取完成。

    圖片

    在這里插入圖片描述

添加到工程

添加FreeRTOSConfig.h文件

FreeRTOSConfig.h文件是FreeRTOS的工程配置文件,因為FreeRTOS是可以裁剪的實時操作內核,應用于不同的處理器平臺,用戶可以通過修改這個FreeRTOS內核的配置頭文件來裁剪FreeRTOS的功能,所以我們把它拷貝一份放在user這個文件夾下面。

打開FreeRTOSv9.0.0源碼,在“FreeRTOSv9.0.0\\FreeRTOS\\Demo”文件夾下面找到“CORTEX_STM32F103_Keil”這個文件夾,雙擊打開,在其根目錄下找到這個“FreeRTOSConfig.h”文件,然后拷貝到我們工程的user文件夾下即可,等下我們需要對這個文件進行修改。

創建工程分組

接下來我們在mdk里面新建FreeRTOS/src和FreeRTOS/port兩個組文件夾,其中FreeRTOS/src用于存放src文件夾的內容,FreeRTOS/port用于存放port\\MemMang文件夾 與port\\RVDS\\ARM_CM3文件夾的內容。

然后我們將工程文件中FreeRTOS的內容添加到工程中去,按照已經新建的分組添加我們的FreeRTOS工程源碼。

在FreeRTOS/port分組中添加MemMang文件夾中的文件只需選擇其中一個即可,我們選擇“heap_4.c”,這是FreeRTOS的一個內存管理源碼文件。

添加完成后:

圖片

在這里插入圖片描述

** 添加頭文件路徑**

FreeRTOS的源碼已經添加到開發環境的組文件夾下面,編譯的時候需要為這些源文件指定頭文件的路徑,不然編譯會報錯。FreeRTOS的源碼里面只有FreeRTOS\\include和FreeRTOS\\port\\RVDS\\ARM_CM3這兩個文件夾下面有頭文件,只需要將這兩個頭文件的路徑在開發環境里面指定即可。同時我們還將FreeRTOSConfig.h這個頭文件拷貝到了工程根目錄下的user文件夾下,所以user的路徑也要加到開發環境里面。

圖片

在這里插入圖片描述

修改FreeRTOSConfig.h

FreeRTOSConfig.h是直接從demo文件夾下面拷貝過來的,該頭文件對裁剪整個FreeRTOS所需的功能的宏均做了定義,有些宏定義被使能,有些宏定義被失能,一開始我們只需要配置最簡單的功能即可。要想隨心所欲的配置FreeRTOS的功能,我們必須對這些宏定義的功能有所掌握,下面我們先簡單的介紹下這些宏定義的含義,然后再對這些宏定義進行修改。

1#ifndef FREERTOS_CONFIG_H
  2#define FREERTOS_CONFIG_H
  3
  4#include "stm32f10x.h"
  5#include "bsp_usart.h"
  6
  7
  8//針對不同的編譯器調用不同的stdint.h文件
  9#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
 10    #include <stdint.h>
 11    extern uint32_t SystemCoreClock;
 12#endif
 13
 14//斷言
 15#define vAssertCalled(char,int) printf("Error:%s,%d\\r\\n",char,int)
 16#define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)
 17
 18/************************************************************************
 19 *               FreeRTOS基礎配置配置選項 
 20 *********************************************************************/
 21/* 置1:RTOS使用搶占式調度器;置0:RTOS使用協作式調度器(時間片)
 22 * 
 23 * 注:在多任務管理機制上,操作系統可以分為搶占式和協作式兩種。
 24 * 協作式操作系統是任務主動釋放CPU后,切換到下一個任務。
 25 * 任務切換的時機完全取決于正在運行的任務。
 26 */
 27#define configUSE_PREEMPTION                      1
 28
 29//1使能時間片調度(默認式使能的)
 30#define configUSE_TIME_SLICING                    1       
 31
 32/* 某些運行FreeRTOS的硬件有兩種方法選擇下一個要執行的任務:
 33 * 通用方法和特定于硬件的方法(以下簡稱“特殊方法”)。
 34 * 
 35 * 通用方法:
 36 *      1.configUSE_PORT_OPTIMISED_TASK_SELECTION 為 0 或者硬件不支持這種特殊方法。
 37 *      2.可以用于所有FreeRTOS支持的硬件
 38 *      3.完全用C實現,效率略低于特殊方法。
 39 *      4.不強制要求限制最大可用優先級數目
 40 * 特殊方法:
 41 *      1.必須將configUSE_PORT_OPTIMISED_TASK_SELECTION設置為1。
 42 *      2.依賴一個或多個特定架構的匯編指令(一般是類似計算前導零[CLZ]指令)。
 43 *      3.比通用方法更高效
 44 *      4.一般強制限定最大可用優先級數目為32
 45 * 一般是硬件計算前導零指令,如果所使用的,MCU沒有這些硬件指令的話此宏應該設置為0!
 46 */
 47#define configUSE_PORT_OPTIMISED_TASK_SELECTION            1                       
 48
 49/* 置1:使能低功耗tickless模式;置0:保持系統節拍(tick)中斷一直運行
 50 * 假設開啟低功耗的話可能會導致下載出現問題,因為程序在睡眠中,可用以下辦法解決
 51 * 
 52 * 下載方法:
 53 *      1.將開發版正常連接好
 54 *      2.按住復位按鍵,點擊下載瞬間松開復位按鍵
 55 *     
 56 *      1.通過跳線帽將 BOOT 0 接高電平(3.3V)
 57 *      2.重新上電,下載
 58 *    
 59 *             1.使用FlyMcu擦除一下芯片,然后進行下載
 60 *            STMISP -> 清除芯片(z)
 61 */
 62#define configUSE_TICKLESS_IDLE                                                    0   
 63
 64/*
 65 * 寫入實際的CPU內核時鐘頻率,也就是CPU指令執行頻率,通常稱為Fclk
 66 * Fclk為供給CPU內核的時鐘信號,我們所說的cpu主頻為 XX MHz,
 67 * 就是指的這個時鐘信號,相應的,1/Fclk即為cpu時鐘周期;
 68 */
 69#define configCPU_CLOCK_HZ                          (SystemCoreClock)
 70
 71//RTOS系統節拍中斷的頻率。即一秒中斷的次數,每次中斷RTOS都會進行任務調度
 72#define configTICK_RATE_HZ                          (( TickType_t )1000)
 73
 74//可使用的最大優先級
 75#define configMAX_PRIORITIES                      (32)
 76
 77//空閑任務使用的堆棧大小
 78#define configMINIMAL_STACK_SIZE                ((unsigned short)128)
 79
 80//任務名字字符串長度
 81#define configMAX_TASK_NAME_LEN                    (16)
 82
 83 //系統節拍計數器變量數據類型,1表示為16位無符號整形,0表示為32位無符號整形
 84#define configUSE_16_BIT_TICKS                    0                      
 85
 86//空閑任務放棄CPU使用權給其他同優先級的用戶任務
 87#define configIDLE_SHOULD_YIELD                    1           
 88
 89//啟用隊列
 90#define configUSE_QUEUE_SETS                      1    
 91
 92//開啟任務通知功能,默認開啟
 93#define configUSE_TASK_NOTIFICATIONS    1   
 94
 95//使用互斥信號量
 96#define configUSE_MUTEXES                            1    
 97
 98//使用遞歸互斥信號量                                            
 99#define configUSE_RECURSIVE_MUTEXES            1   
100
101//為1時使用計數信號量
102#define configUSE_COUNTING_SEMAPHORES        1
103
104/* 設置可以注冊的信號量和消息隊列個數 */
105#define configQUEUE_REGISTRY_SIZE                10                                 
106
107#define configUSE_APPLICATION_TASK_TAG          0                       
108
109
110/*****************************************************************
111              FreeRTOS與內存申請有關配置選項                                               
112*****************************************************************/
113//支持動態內存申請
114#define configSUPPORT_DYNAMIC_ALLOCATION        1    
115//支持靜態內存
116#define configSUPPORT_STATIC_ALLOCATION                    0                   
117//系統所有總的堆大小
118#define configTOTAL_HEAP_SIZE                    ((size_t)(36*1024))    
119
120
121/***************************************************************
122             FreeRTOS與鉤子函數有關的配置選項                                            
123**************************************************************/
124/* 置1:使用空閑鉤子(Idle Hook類似于回調函數);置0:忽略空閑鉤子
125 * 
126 * 空閑任務鉤子是一個函數,這個函數由用戶來實現,
127 * FreeRTOS規定了函數的名字和參數:void vApplicationIdleHook(void ),
128 * 這個函數在每個空閑任務周期都會被調用
129 * 對于已經刪除的RTOS任務,空閑任務可以釋放分配給它們的堆棧內存。
130 * 因此必須保證空閑任務可以被CPU執行
131 * 使用空閑鉤子函數設置CPU進入省電模式是很常見的
132 * 不可以調用會引起空閑任務阻塞的API函數
133 */
134#define configUSE_IDLE_HOOK                        0      
135
136/* 置1:使用時間片鉤子(Tick Hook);置0:忽略時間片鉤子
137 * 
138 * 
139 * 時間片鉤子是一個函數,這個函數由用戶來實現,
140 * FreeRTOS規定了函數的名字和參數:void vApplicationTickHook(void )
141 * 時間片中斷可以周期性的調用
142 * 函數必須非常短小,不能大量使用堆棧,
143 * 不能調用以”FromISR" 或 "FROM_ISR”結尾的API函數
144 */
145 /*xTaskIncrementTick函數是在xPortSysTickHandler中斷函數中被調用的。因此,vApplicationTickHook()函數執行的時間必須很短才行*/
146#define configUSE_TICK_HOOK                        0           
147
148//使用內存申請失敗鉤子函數
149#define configUSE_MALLOC_FAILED_HOOK            0 
150
151/*
152 * 大于0時啟用堆棧溢出檢測功能,如果使用此功能 
153 * 用戶必須提供一個棧溢出鉤子函數,如果使用的話
154 * 此值可以為1或者2,因為有兩種棧溢出檢測方法 */
155#define configCHECK_FOR_STACK_OVERFLOW            0   
156
157
158/********************************************************************
159          FreeRTOS與運行時間和任務狀態收集有關的配置選項   
160**********************************************************************/
161//啟用運行時間統計功能
162#define configGENERATE_RUN_TIME_STATS            0             
163 //啟用可視化跟蹤調試
164#define configUSE_TRACE_FACILITY                      0    
165/* 與宏configUSE_TRACE_FACILITY同時為1時會編譯下面3個函數
166 * prvWriteNameToBuffer()
167 * vTaskList(),
168 * vTaskGetRunTimeStats()
169*/
170#define configUSE_STATS_FORMATTING_FUNCTIONS    1                       
171
172
173/********************************************************************
174                FreeRTOS與協程有關的配置選項                                                
175*********************************************************************/
176//啟用協程,啟用協程以后必須添加文件croutine.c
177#define configUSE_CO_ROUTINES                       0                 
178//協程的有效優先級數目
179#define configMAX_CO_ROUTINE_PRIORITIES       ( 2 )                   
180
181
182/***********************************************************************
183                FreeRTOS與軟件定時器有關的配置選項      
184**********************************************************************/
185 //啟用軟件定時器
186#define configUSE_TIMERS                            1                              
187//軟件定時器優先級
188#define configTIMER_TASK_PRIORITY                (configMAX_PRIORITIES-1)        
189//軟件定時器隊列長度
190#define configTIMER_QUEUE_LENGTH                10                               
191//軟件定時器任務堆棧大小
192#define configTIMER_TASK_STACK_DEPTH          (configMINIMAL_STACK_SIZE*2)    
193
194/************************************************************
195            FreeRTOS可選函數配置選項                                                     
196************************************************************/
197#define INCLUDE_xTaskGetSchedulerState       1                       
198#define INCLUDE_vTaskPrioritySet                 1
199#define INCLUDE_uxTaskPriorityGet                 1
200#define INCLUDE_vTaskDelete                           1
201#define INCLUDE_vTaskCleanUpResources           1
202#define INCLUDE_vTaskSuspend                       1
203#define INCLUDE_vTaskDelayUntil                     1
204#define INCLUDE_vTaskDelay                           1
205#define INCLUDE_eTaskGetState                       1
206#define INCLUDE_xTimerPendFunctionCall         1
207//#define INCLUDE_xTaskGetCurrentTaskHandle       1
208//#define INCLUDE_uxTaskGetStackHighWaterMark     0
209//#define INCLUDE_xTaskGetIdleTaskHandle          0
210
211
212/******************************************************************
213            FreeRTOS與中斷有關的配置選項                                                 
214******************************************************************/
215#ifdef __NVIC_PRIO_BITS
216    #define configPRIO_BITS             __NVIC_PRIO_BITS
217#else
218    #define configPRIO_BITS             4                  
219#endif
220//中斷最低優先級
221#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY            15     
222
223//系統可管理的最高中斷優先級
224#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY    5 
225
226#define configKERNEL_INTERRUPT_PRIORITY         ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )    /* 240 */
227
228#define configMAX_SYSCALL_INTERRUPT_PRIORITY     ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
229
230
231/****************************************************************
232            FreeRTOS與中斷服務函數有關的配置選項                         
233****************************************************************/
234#define xPortPendSVHandler     PendSV_Handler
235#define vPortSVCHandler     SVC_Handler
236
237
238/* 以下為使用Percepio Tracealyzer需要的東西,不需要時將 configUSE_TRACE_FACILITY 定義為 0 */
239#if ( configUSE_TRACE_FACILITY == 1 )
240#include "trcRecorder.h"
241#define INCLUDE_xTaskGetCurrentTaskHandle               1   // 啟用一個可選函數(該函數被 Trace源碼使用,默認該值為0 表示不用)
242#endif
243
244
245#endif /* FREERTOS_CONFIG_H */

修改stm32f10x_it.c

SysTick中斷服務函數是一個非常重要的函數,FreeRTOS所有跟時間相關的事情都在里面處理,SysTick就是FreeRTOS的一個心跳時鐘,驅動著FreeRTOS的運行,就像人的心跳一樣,假如沒有心跳,我們就相當于“死了”,同樣的,FreeRTOS沒有了心跳,那么它就會卡死在某個地方,不能進行任務調度,不能運行任何的東西,因此我們需要實現一個FreeRTOS的心跳時鐘,FreeRTOS幫我們實現了SysTick的啟動的配置:在port.c文件中已經實現vPortSetupTimerInterrupt()函數,并且FreeRTOS通用的SysTick中斷服務函數也實現了:在port.c文件中已經實現xPortSysTickHandler()函數,所以移植的時候只需要我們在stm32f10x_it.c文件中實現我們對應(STM32)平臺上的SysTick_Handler()函數即可。FreeRTOS為開發者考慮得特別多,PendSV_Handler()與SVC_Handler()這兩個很重要的函數都幫我們實現了,在在port.c文件中已經實現xPortPendSVHandler()與vPortSVCHandler()函數,防止我們自己實現不了,那么在stm32f10x_it.c中就需要我們注釋掉PendSV_Handler()與SVC_Handler()這兩個函數了。

1//void SVC_Handler(void)
 2//{
 3//}
 4
 5//void PendSV_Handler(void)
 6//{
 7//}
 8
 9extern void xPortSysTickHandler(void);
10
11//systick中斷服務函數
12void SysTick_Handler(void)
13{    
14    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
15      if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
16      {
17    #endif  /* INCLUDE_xTaskGetSchedulerState */  
18        xPortSysTickHandler();
19    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
20      }
21    #endif  /* INCLUDE_xTaskGetSchedulerState */
22}

創建任務

這里,我們創建一個單任務,任務使用的棧和任務控制塊是在創建任務的時候FreeRTOS動態分配的。

任務必須是一個死循環,否則任務將通過LR返回,如果LR指向了非法的內存就會產生HardFault_Handler,而FreeRTOS指向一個死循環,那么任務返回之后就在死循環中執行,這樣子的任務是不安全的,所以避免這種情況,任務一般都是死循環并且無返回值的。

并且每個任務循環主體中應該有阻塞任務的函數,否則就會餓死比它優先級更低的任務!!!

1/* FreeRTOS頭文件 */
 2#include "FreeRTOS.h"
 3#include "task.h"
 4/* 開發板硬件bsp頭文件 */
 5#include "bsp_led.h"
 6
 7static void AppTaskCreate(void);/* AppTask任務 */
 8
 9 /* 創建任務句柄 */
10static TaskHandle_t AppTask_Handle = NULL;
11
12int main(void)
13{    
14  BaseType_t xReturn = pdPASS;/* 定義一個創建信息返回值,默認為pdPASS */
15
16  /* 開發板硬件初始化 */
17  BSP_Init();
18
19   /* 創建AppTaskCreate任務 */
20  xReturn = xTaskCreate((TaskFunction_t )AppTask,  /* 任務入口函數 */
21                        (const char*    )"AppTask",/* 任務名字 */
22                        (uint16_t       )512,  /* 任務棧大小 */
23                        (void*          )NULL,/* 任務入口函數參數 */
24                        (UBaseType_t    )1, /* 任務的優先級 */
25                        (TaskHandle_t*  )&AppTask_Handle);/* 任務控制塊指針 */ 
26  /* 啟動任務調度 */           
27  if(pdPASS == xReturn)
28    vTaskStartScheduler();   /* 啟動任務,開啟調度 */
29  else
30    return -1;  
31
32  while(1);   /* 正常不會執行到這里 */    
33}
34
35static void AppTask(void* parameter)
36{    
37    while (1)
38    {
39        LED1_ON;
40        vTaskDelay(500);   /* 延時500個tick */
41        LED1_OFF;     
42        vTaskDelay(500);   /* 延時500個tick */                
43    }
44}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源代碼
    +關注

    關注

    96

    文章

    2945

    瀏覽量

    66745
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62166
  • Source
    +關注

    關注

    0

    文章

    17

    瀏覽量

    9820
收藏 人收藏

    評論

    相關推薦

    ministm32板子如何用freertos移植

    從發燒友購買的ministm32板子,贈送的有跑馬燈程序和內部溫度傳感器程序,需要用freertos移植一下,有償求助!!謝謝好心人!!!
    發表于 06-15 01:28

    FreeRTOS移植到STM32F407上

    00. 目錄文章目錄00. 目錄01. 簡介02. 預備工作03. FreeRTOS移植04. SYSTEM文件修改05. 測試程序設計06. 附錄07. 參考01. 簡介我們已經了解
    發表于 08-24 06:07

    FreeRTOS移植的過程是如何完成的

    FreeRTOS/ Source文件夾下的文件有哪些呢?FreeRTOS移植的過程是如何完成的?
    發表于 11-29 07:05

    怎樣將FreeRTOS移植到STM32上去呢

    怎樣將FreeRTOS移植到STM32上去呢?有哪些移植步驟?
    發表于 11-29 07:57

    為什么學FreeRTOSFreeRTOS移植步驟是怎樣的?

    為什么學FreeRTOSFreeRTOS移植步驟是怎樣的?
    發表于 11-30 07:52

    FreeRTOS移植加測試的相關資料推薦

    FreeRTOS移植加測試準備工作開始移植開始創建任務并開啟調度總結準備工作1、下載FreeRTOS源碼(官網:www.freertos.o
    發表于 01-11 07:46

    如何將FreeRTOS移植到stm32上呢

    目錄一、FreeRTOS介紹1、初識FreeRTOS,什么是 FreeRTOS2、FreeRTOS的特點二、FreeRTOS
    發表于 02-10 06:01

    FreeRTOS移植MAPS-K22開發板

    FreeRTOS移植MAPS-K22開發板,本文以MAPS-K22開發板為例,介紹了將FreeRTOS移植于NXP Kientis 系列MCU中的步驟,希望能對想學習RTOS和Kine
    發表于 12-24 16:39 ?4次下載

    FreeRTOS移植MAPS-K22開發板-工程源碼

    FreeRTOS移植MAPS-K22開發板,本文以MAPS-K22開發板為例,介紹了將FreeRTOS移植于NXP Kientis 系列MCU中的步驟,希望能對想學習RTOS和Kine
    發表于 12-24 18:36 ?16次下載

    FreeRTOS移植到MAPS-資料匯總

    FreeRTOS已成功移植于超過35種架構的MCU中運行,本文以MAPS-K22開發板為例,介紹了將FreeRTOS移植于NXP Kientis 系列MCU中的步驟,希望能對想學習RT
    發表于 12-24 18:36 ?6次下載

    FreeRTOS移植教程說明

    嵌入式系統應用的開源多任務小型 嵌入式實時操作系統FreeRTOS,以Freescale公司新推出的32位含有以太網接口的MCF52233為藍本,闡述了FreeRTOS移植方 法、及在校園一卡通項目中的應用.
    發表于 03-29 15:08 ?15次下載
    <b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>移植</b>教程說明

    嵌入式操作系統FREERTOS移植.

    嵌入式操作系統FREERTOS移植.(濟南嵌入式開發招聘)-嵌入式操作系統FREERTOS移植? ? ? ? ? ? ? ? ?
    發表于 07-30 12:01 ?15次下載
    嵌入式操作系統<b class='flag-5'>FREERTOS</b>的<b class='flag-5'>移植</b>.

    FreeRTOS移植—基于STM32

    FreeRTOS移植—基于STM32
    發表于 12-04 12:51 ?18次下載
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>移植</b>—基于STM32

    【STM32】FreeRTOS移植

    00. 目錄文章目錄00. 目錄01. 簡介02. 預備工作03. FreeRTOS移植04. SYSTEM文件修改05. 測試程序設計06. 附錄07. 參考01. 簡介我們已經了解
    發表于 12-04 14:06 ?14次下載
    【STM32】<b class='flag-5'>FreeRTOS</b><b class='flag-5'>移植</b>

    Freertos移植中 “FreeRTOSConfig.h“ 的配置

    Freertos移植中 “FreeRTOSConfig.h“ 的配置
    發表于 12-04 14:06 ?10次下載
    <b class='flag-5'>Freertos</b> 的<b class='flag-5'>移植</b>中 “FreeRTOSConfig.h“ 的配置
    主站蜘蛛池模板: 特级毛片免费视频| 欧美大片一区二区三区| 精品视频网站| 手机看片福利1024| 日本不卡视频在线播放| 欧美一区二区三区黄色| 我爱操| 亚洲国产人久久久成人精品网站| 色爱区综合激情五月综合色| 97午夜理伦片在线影院| 欧美一级淫片免费播放口| 桃花岛亚洲精品tv自拍网站| 成人伊人| 中文字幕在线观看一区二区三区| 色老头性xxxx老头视频| 夜夜爽天天狠狠九月婷婷| 69日本人xxxx16-18| 日韩高清性爽一级毛片免费| 天天躁夜夜躁狠狠躁躁| 美女张开腿露尿口给男人亲| 久久综合性| 国内精品久久影视免费| 性生活毛片| 亚洲综合色网站| 免费大片黄在线观看| 久久久久琪琪免费影院| 高清视频黄色录像免费| 四虎官网| 上色天天综合网| 亚洲无色| 五月天婷五月天综合网在线| 鲁丝一区二区三区| 丁香婷婷久久大综合| 一区二区三区四区在线| 久久国产精品免费网站| 97se亚洲综合| 人碰人操| 成 人网站免费| 欧美在线色视频| 国产理论精品| 日本大片黄色|