freertos stm32f407開發(fā)板配套例子和教程_第1頁
freertos stm32f407開發(fā)板配套例子和教程_第2頁
freertos stm32f407開發(fā)板配套例子和教程_第3頁
freertos stm32f407開發(fā)板配套例子和教程_第4頁
freertos stm32f407開發(fā)板配套例子和教程_第5頁
已閱讀5頁,還剩1319頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

54321

::銷 :第1章選用FreeRTOS由于大家都比較關心這個問題,所以把這個問題放在第一章簡單的說說。RTOS最大的優(yōu)勢就是開源免費,商業(yè)使用的話不需要用戶公開源代碼,也不存在任何問題,是當前小型嵌入式操作系統(tǒng)市場使用率最高的。去年的全球嵌入式市場分析報告中,RTOS占據(jù)了20%。RTOS個宏定義即可,詳情可以看第5章RTOS操作系統(tǒng)移植。作為開源免費的RTOS,配套的手冊在RTOS的基礎知識說明、API函數(shù)說明及其舉例方面做的2013,2014和2015年度全球嵌入式市場分析報告中的占有率,占有率低的未上榜。 1.12013,20142015RTOS的優(yōu)勢,當前就為大家介紹這三條吧。另外,關于 在今年年初(2016年)的時候發(fā)布了文件系統(tǒng) RTOS-FAT和網絡協(xié)議棧注:在工業(yè)控制、軍事設備、航空航天等領域對系統(tǒng)的響應時間有苛刻的要求,這就需要使用實時IEEE嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機器和設備的裝置”(Devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryornts)。(說明:2013,20142015 2013UBMTechElectronics2013式實時操作系統(tǒng)。為了說明的性,下圖2.1是主辦方的信息:2.1EmbeddedMarket 2.22.312RTX(KEILKEILARM)也是榜上有名,RTX強勁,將基于Cortex-M3/M4架構的ARM性能發(fā)揮到極致,比如中斷零延遲特性。embOSRTOSemWin該比較熟悉了,它們一樣都是出自Segger公司。會在這個評估板的基礎上做一些相關的DEMO,比如Micrium公司為ST出的評估板配套的例子。下圖1.5是 RTOS為ST評估板配套的例子(部分截圖:圖 有一本時間觸發(fā)嵌入式系統(tǒng)設計模式(patternsfortime-triggeredembeddedsystems)的書,作者是MichaelJ.Pont,他在這個領域深有研究,而且有很多相關的,有的可以搜索一些他的文章進行深入的了解。作為,大家可以看一下時間觸發(fā)嵌入式系統(tǒng)這本書的第11頁,1.7Time-triggeredsystems(建議必讀)對時間觸發(fā)做了性的介紹,講的非常好。如果讀英文有點吃本章節(jié)是一些性質的介紹,從下一章節(jié)開始講解RTOS操作系統(tǒng)。此外,在2.1小節(jié)中推第3章初學FreeRTOS3.1開發(fā)環(huán)境且不支持C中嵌套匯編。STM32-V6MCUSTM32F429BIT63.2.1RTOS書籍及RTOS的手冊和API參考手冊的PDF版本是需要花錢的,手冊地址圖 API參考手冊的PDF版本地址

圖 我們 萊電子上面 ,手 API參考手冊(RTOSV8.1.2) 需要開銷的,以表示對RTOS的支持。3.2.2RTOS手冊RTOS的版手冊跟上面3.2.1小節(jié)所說的手冊和API參考手冊差不多的,不過PDF版的手冊要比版的詳細,畢竟手冊也是一本專門的書籍。其實不光RTOS操作系統(tǒng)是這樣,像RTX和uCOS現(xiàn)在也是這種形式,一個離線方式的電子手冊和一個的手冊。圖 3.2.3RTOS軟件RTOS的軟件包里面不僅有源碼,而且有針對各家IC廠商評估板的Demo。 圖3.4 下圖3.5是 RTOS為ST的評估板配套的例子(部分截圖:圖 另外 圖3.6 RTOS后可以學習下。 RTOS操作系統(tǒng),讓大家對RTOS有一個整體的了解。 OpenRTOS和SafeRTOS之間的區(qū)別和聯(lián)系也進行了簡單的介紹。RTOS是由RealTimeEngineers,是一款市場領先的RTOS?,F(xiàn)在已經支持35種處理器架構。2015年,RTOS的量超過12萬次,平均每4.2分鐘就有一次。專業(yè)的發(fā)展,嚴格高質量的控制,而且商業(yè)使用的話不需要用戶公開源代碼,也不存在任何問題,開源免費。圖 RTOSRTOS是從2003年才開始正式發(fā)布的,在過去的13,與全球眾多領先的IC廠商合作。第一時間推出各個IC廠商發(fā)布的的Demo。下圖4.2是其中一部廠商:RealTime

4.2合作的ICEnginerrs的董事以及RTOS項目的擁有者和者。 RTOS-MPUM3/M4/M7MPU(內存保護單元) 4.2.1RTOS的編碼標引入的)。如果用戶使用的編譯器沒有這個頭文件的話,可以將RTOS源碼文件中,此路徑下RTOS/Source/include的一個stdint.readme文件修改為stdint.h文件后用于這個編譯器。MISRA(TheMotorIndustrySoftwareReliabilityAssociationCodingStandard127C己的編碼風格,比如uC/OS-II99%遵守MISRA標準。4.2.2RTOS名規(guī) 無符號TickType_t的變量要加上前綴ux。vTaskDeletetasktaskconfigUSE_PREEMPTION是定義在文件 件名中的config。另外注意,前綴要小寫。char884.2.3RTOS中數(shù)據(jù)類 configUSE_16_BIT_TICKSTickType_t16果沒有使能,那么TickType_t定義的就是32位無符號數(shù)。對于32位架構的處理器,一定要此宏定義,即設置此宏定義數(shù)值為0即可。32BaseType_t32 1632StackType_t324.2.4RTOS的排版和注 RTOS80/* /*Libraryincludescome/*Libraryincludescomefirst...#include/*...followedRTOSincludes...#include"/*...followedbyotherincludes.*/#include"HardwareSpecifics.h"/*#definescomesnext,bracketedwherepossible.*/#defineA_DEFINITION (1)Static(fileprivate)functionprototypesappearnext,withinthisstyle-witheachlinestartingwithastaticvoidprvAFunction(uint32_tulParameter/*Filescopevariablesarethelastthingbeforethefunctiondefinitions.Commentsforvariablesareinthisstyle(withouteachlinestartingwitha'*').*/staticBaseType_t/*Thefollowingseparateisusedaftertheclosingbracketofeachfunction,withablanklinefollowingbeforethestartofthenextfunctiondefinition.*/voidvAFunction(void{/*Functiondefinitiongoeshere-notetheseparatoraftertheclosingcurlybracket.*/} staticUBaseType_tprvNextFunction(void{{/*Functiondefinitiongoeshere.} RTOS和OpenRTOS有相同的源碼,只是OpenRTOS為 RTOS升級到OpenRTOS主要考慮到以下問題: RTOS修的GPL證限制 RTOS開源OpenRTOS商是否是是 是是否是是否是 否否是否否 否設計,下面是SafeRTOS獲得的安全認證(這些安全認證都非常重要)。IEC61508ENIEC62304/FDAIEC61513,IEC62138,ASMENQA-1IECISO/OpenRTOS和SafeRTOS感,也可以上其官網進行了解本章含Cortex-M3內核的STM32F103的移植和Cortex-M4內核的STM32F407以及F429的和F429即可(不可以使用MDK4.7X以下版本,一方面是不支持F429,另外就是RTOSV8.2.3要用到C代碼中嵌套匯編代碼,MDK4.7X以下版本是不支持的)。大家使用的簡單工程里面不能有SysTick,PendSV和SVC三個系統(tǒng)中斷的使用,因為RTOS系5.2.1RTOS操作系統(tǒng)移所示5.1工程模板第1步:從8.X9.0文 RTOSConfig.h文件在RTOSV8.2.3軟件包中的中的路徑其中heap_4.c文件路徑 STM32F103是M3內核的,所以移植文件也要添加M3內核的。**************版說本: 日2015-08-02Copyright(C),2015- INCLUDES_H#defineINCLUDES_H #include<stdarg.h>#include<stdio.h>#include#include #include" #include"task.h"#include"queue.h"#include APP/#include(ENDOFFILE)第6步:最后一步,同時也是最重要的一步,修改 添加宏定義NVIC_PRIO_BITS,STM324修改后在這個文件的末尾加上Systick,PendSVSVCRTOSport.cCMSIS程啟動代碼中這幾個中斷的名字了,很方便就實現(xiàn)了兩個函數(shù)的統(tǒng)一。(移植過uCOS-II或者III的用戶,對于這個問題估計深有體會,因為uCOS要修改啟動文件,其實采用這里的方式更方便)/*Definitionsthatmapthe RTOSportinterrupthandlerstotheirCMSISstandardnames.*/#define #definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler其中和是在Applicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularApplicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularhardwareapplicationTHESEPARAMETERSAREDESCRIBEDWITHINTHE'CONFIGURATION'SECTIONOF****RTOSATIONAVAILABLEONRTOS.orgWEB.#defineconfigMAX_CO_ROUTINE_PRIORITIES(2/*Setthefollowingdefinitionsto1toincludetheAPIfunction,orzerotoexcludetheAPIfunction.*/#define1#define1#define0#define0#define((unsigned #define((TickType_t)1000#define(5#define((unsignedshort)128#define((size_t)(17*1024)#define(16#define0#define0#define1/*Co-routinedefinitions.*/#define0#define1#define1#define0#define1#define1#define1/*Cortex-Mspecificdefinitions.#ifdef BVIC_PRIO_BITSwillbespecifiedwhenCMSISisbeingused.

#defineconfigPRIO_BITS /*15prioritylevels*//*Thelowestinterruptprioritythatcanbeusedinacalltoa"setpriority"function.*/#define /*ThehighestinterruptprioritythatcanbeusedbyanyinterruptserviceroutinethatmakescallstointerruptsafeRTOSAPIfunctions.DONOTCALLINTERRUPTSAFERTOSAPIFUNCTIONSFROMANYINTERRUPTTHATHASAHIGHERPRIORITYTHANTHIS!(higherprioritiesarelowernumericvalues.*/#defineconfigLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY /*Interruptprioritiesusedbythekernelportlayeritself.ThesearegenerictoallCortex-Mports,anddonotrelyonanyparticularlibraryfunctions.*/#define (configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*!!!!configMAX_SYSCALL_INTERRUPT_PRIORITYmustnotbesettozeroSee.#define (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*Normalassert()semanticswithoutrelyingontheprovisionofanassert.hheaderfile.*/#defineconfigASSERT(x)if((x)==0){taskDISABLE_INTERRUPTS();for(;;);/*DefinitionsthatmaptheRTOSportinterrupthandlerstotheirCMSISstandardnames.*/#definevPortSVCHandlerSVC_Handler#definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler#endif/*RTOS_CONFIG_H5.2.2RTOS操作系統(tǒng)應用實#define #define ((unsignedlong 72MHz#define ((TickType_t)10001KHz1ms#define (5包含5,對于這一點,初學者要特別的注意。#define ((size_t)(17*1024) vTaskTaskUserIFLED vTaskMsgPro任 :消息處理,這里用作LED閃爍#includestaticvoid#includestaticvoidvTaskTaskUserIF(void*pvParameters);staticvoidvTaskLED(void*pvParameters);staticvoidvTaskMsgPro(void*pvParameters);staticvoidvTaskStart(void*pvParameters);staticvoidAppTaskCreate(void);staticTaskHandle_txHandleTaskUserIF=NULL;staticTaskHandle_txHandleTaskLED=NULL;staticTaskHandle_txHandleTaskMsgPro=NULL;staticTaskHandle_txHandleTaskStart=****功能說明:標準c。形int{cpsiei/*創(chuàng)建任務*/heap空間不足造成創(chuàng)建失敗,此要加大RTOSConfig.h文件中定義的heap大?。?defineconfigTOTAL_HEAP_SIZE ((size_t)(17*1024))} 參:pvParameters是在創(chuàng)建該任務時傳遞的形1uCOSstaticvoidvTaskTaskUserIF(void{{}}LED 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskLED(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskMsgPro(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskStart(void{{/*LED閃爍*/}} 參:staticvoidAppTaskCreate{xTaskCreate( /*任務函數(shù)/*任務 /*任務參數(shù)/*&xHandleTaskUserIF/*xTaskCreate(/*任務函數(shù)/*任務參數(shù)/*&xHandleTaskLED/*xTaskCreate(&xHandleTaskMsgPro/*任務函數(shù)/*任務參數(shù)/*/*任務句柄xTaskCreate(&xHandleTaskStart/*任務函數(shù)/*任務參數(shù)/*/*任務句柄} (ENDOFFILE) 4LED5.3.1RTOS操作系統(tǒng)移所示5.2第1步:從8.X9.0文 RTOSConfig.h文件在RTOSV8.2.3軟件包中的中的路徑 RTOS\STM32F407是M4內核的,所以移植文件也要添加M4內核的。**************版說本: 日2015-08-02Copyright(C),2015- INCLUDES_H#defineINCLUDES_H #include<stdarg.h>#include<stdio.h>#include#include #include" #include"task.h"#include"queue.h"#include APP/#include(ENDOFFILE)第6步:最后一步,同時也是最重要的一步,修改 添加宏定義NVIC_PRIO_BITS,STM324修改后在這個文件的末尾加上Systick,PendSVSVCRTOSport.cCMSIS程啟動代碼中這幾個中斷的名字了,很方便就實現(xiàn)了兩個函數(shù)的統(tǒng)一。(移植過uCOS-II或者III的用戶,對于這個問題估計深有體會,因為uCOS要修改啟動文件,其實采用這里的方式更方便)/*Definitionsthatmapthe RTOSportinterrupthandlerstotheirCMSISstandardnames.*/#define #definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler其中和是在Applicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularApplicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularhardwareapplicationTHESEPARAMETERSAREDESCRIBEDWITHINTHE'CONFIGURATION'SECTIONOF****RTOSATIONAVAILABLEONRTOS.orgWEB.#defineconfigMAX_CO_ROUTINE_PRIORITIES(2/*Setthefollowingdefinitionsto1toincludetheAPIfunction,orzerotoexcludetheAPIfunction.*/#define1#define1#define0#define0#define((unsigned #define((TickType_t)1000#define(5#define((unsignedshort)128#define((size_t)(30*1024)#define(16#define0#define0#define1/*Co-routinedefinitions.*/#define0#define1#define1#define0#define1#define1#define1/*Cortex-Mspecificdefinitions.#ifdef BVIC_PRIO_BITSwillbespecifiedwhenCMSISisbeingused.

#defineconfigPRIO_BITS /*15prioritylevels*//*Thelowestinterruptprioritythatcanbeusedinacalltoa"setpriority"function.*/#define /*ThehighestinterruptprioritythatcanbeusedbyanyinterruptserviceroutinethatmakescallstointerruptsafeRTOSAPIfunctions.DONOTCALLINTERRUPTSAFERTOSAPIFUNCTIONSFROMANYINTERRUPTTHATHASAHIGHERPRIORITYTHANTHIS!(higherprioritiesarelowernumericvalues.*/#defineconfigLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY /*Interruptprioritiesusedbythekernelportlayeritself.ThesearegenerictoallCortex-Mports,anddonotrelyonanyparticularlibraryfunctions.*/#define (configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*!!!!configMAX_SYSCALL_INTERRUPT_PRIORITYmustnotbesettozeroSee.#define (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*Normalassert()semanticswithoutrelyingontheprovisionofanassert.hheaderfile.*/#defineconfigASSERT(x)if((x)==0){taskDISABLE_INTERRUPTS();for(;;);/*DefinitionsthatmaptheRTOSportinterrupthandlerstotheirCMSISstandardnames.*/#definevPortSVCHandlerSVC_Handler#definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler#endif/*RTOS_CONFIG_H5.3.2RTOS操作系統(tǒng)應用實#define #define ((unsignedlong 168MHz#define ((TickType_t)10001KHz1ms#define (5包含5,對于這一點,初學者要特別的注意。#define ((size_t)(30*1024) vTaskTaskUserIFLED vTaskMsgPro任 :消息處理,這里用作LED閃爍#includestaticvoid#includestaticvoidvTaskTaskUserIF(void*pvParameters);staticvoidvTaskLED(void*pvParameters);staticvoidvTaskMsgPro(void*pvParameters);staticvoidvTaskStart(void*pvParameters);staticvoidAppTaskCreate(void);staticTaskHandle_txHandleTaskUserIF=NULL;staticTaskHandle_txHandleTaskLED=NULL;staticTaskHandle_txHandleTaskMsgPro=NULL;staticTaskHandle_txHandleTaskStart=****功能說明:標準c。形int{cpsiei/*創(chuàng)建任務*/heap空間不足造成創(chuàng)建失敗,此要加大RTOSConfig.h文件中定義的heap大小:#defineconfigTOTAL_HEAP_SIZE ((size_t)(17*1024))} 參:pvParameters是在創(chuàng)建該任務時傳遞的形1uCOSstaticvoidvTaskTaskUserIF(void{{}}LED 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskLED(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskMsgPro(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskStart(void{{/*LED閃爍*/}} 參:staticvoidAppTaskCreate{xTaskCreate(xTaskCreate(/*任務函數(shù)/*任務參數(shù)/*&xHandleTaskUserIF/*xTaskCreate(/*任務函數(shù)/*任務參數(shù)/*&xHandleTaskLED/*xTaskCreate(&xHandleTaskMsgPro/*任務函數(shù)/*任務參數(shù)/*/*任務句柄xTaskCreate(&xHandleTaskStart/*任務函數(shù)/*任務參數(shù)/*/*任務句柄} (ENDOFFILE) 4LED5.4.1RTOS操作系統(tǒng)移所示5.3工程模板第1步:從8.X9.0 置文件(沒有F429的例子,使用F407的即可,配置是相同的)。 RTOS\STM32F429是M4內核的,所以移植文件也要添加M4內核的。**************版說本: 日2015-08-02Copyright(C),2015- INCLUDES_H#defineINCLUDES_H #include<stdarg.h>#include<stdio.h>#include#include #include" #include"task.h"#include"queue.h"#include APP/#include(ENDOFFILE)第6步:最后一步,同時也是最重要的一步,修改 添加宏定義NVIC_PRIO_BITS,STM324修改后在這個文件的末尾加上Systick,PendSVSVCRTOSport.cCMSIS程啟動代碼中這幾個中斷的名字了,很方便就實現(xiàn)了兩個函數(shù)的統(tǒng)一。(移植過uCOS-II或者III的用戶,對于這個問題估計深有體會,因為uCOS要修改啟動文件,其實采用這里的方式更方便)/*Definitionsthatmapthe RTOSportinterrupthandlerstotheirCMSISstandardnames.*/#define #definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler其中和是在Applicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularApplicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularhardwareapplicationTHESEPARAMETERSAREDESCRIBEDWITHINTHE'CONFIGURATION'SECTIONOF****RTOSATIONAVAILABLEONRTOS.orgWEB.#defineconfigMAX_CO_ROUTINE_PRIORITIES(2/*Setthefollowingdefinitionsto1toincludetheAPIfunction,orzerotoexcludetheAPIfunction.*/#define1#define1#define0#define0#define((unsigned #define((TickType_t)1000#define(5#define((unsignedshort)128#define((size_t)(30*1024)#define(16#define0#define0#define1/*Co-routinedefinitions.*/#define0#define1#define1#define0#define1#define1#define1/*Cortex-Mspecificdefinitions.#ifdef BVIC_PRIO_BITSwillbespecifiedwhenCMSISisbeingused.

#defineconfigPRIO_BITS /*15prioritylevels*//*Thelowestinterruptprioritythatcanbeusedinacalltoa"setpriority"function.*/#define /*ThehighestinterruptprioritythatcanbeusedbyanyinterruptserviceroutinethatmakescallstointerruptsafeRTOSAPIfunctions.DONOTCALLINTERRUPTSAFERTOSAPIFUNCTIONSFROMANYINTERRUPTTHATHASAHIGHERPRIORITYTHANTHIS!(higherprioritiesarelowernumericvalues.*/#defineconfigLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY /*Interruptprioritiesusedbythekernelportlayeritself.ThesearegenerictoallCortex-Mports,anddonotrelyonanyparticularlibraryfunctions.*/#define (configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*!!!!configMAX_SYSCALL_INTERRUPT_PRIORITYmustnotbesettozeroSee.#define (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*Normalassert()semanticswithoutrelyingontheprovisionofanassert.hheaderfile.*/#defineconfigASSERT(x)if((x)==0){taskDISABLE_INTERRUPTS();for(;;);/*DefinitionsthatmaptheRTOSportinterrupthandlerstotheirCMSISstandardnames.*/#definevPortSVCHandlerSVC_Handler#definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler#endif/*RTOS_CONFIG_H5.4.2RTOS操作系統(tǒng)應用實#define #define ((unsignedlong 168MHz#define ((TickType_t)10001KHz1ms#define (5包含5,對于這一點,初學者要特別的注意。#define ((size_t)(30*1024) vTaskTaskUserIFLEDAppTaskLEDLED#include#includestaticvoidvTaskTaskUserIF(void*pvParameters);staticvoidvTaskLED(void*pvParameters);staticvoidvTaskMsgPro(void*pvParameters);staticvoidvTaskStart(void*pvParameters);staticvoidAppTaskCreate(void);staticTaskHandle_txHandleTaskUserIF=NULL;staticTaskHandle_txHandleTaskLED=NULL;staticTaskHandle_txHandleTaskMsgPro=NULL;staticTaskHandle_txHandleTaskStart=****功能說明:標準c。形int{cpsiei/*創(chuàng)建任務*/heap空間不足造成創(chuàng)建失敗,此要加大RTOSConfig.h文件中定義的heap大?。?defineconfigTOTAL_HEAP_SIZE ((size_t)(17*1024))} 參:pvParameters是在創(chuàng)建該任務時傳遞的形1uCOSstaticvoidvTaskTaskUserIF(void{{}}LED 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskLED(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskMsgPro(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskStart(void{{/*LED閃爍*/}} 參:staticvoidAppTaskCreate{xTaskCreate(xTaskCreate(/*任務函數(shù)/*任務參數(shù)/*&xHandleTaskUserIF/*xTaskCreate(/*任務函數(shù)/*任務參數(shù)/*&xHandleTaskLED/*xTaskCreate(&xHandleTaskMsgPro/*任務函數(shù)/*任務參數(shù)/*/*任務句柄xTaskCreate(&xHandleTaskStart/*任務函數(shù)/*任務參數(shù)/*/*任務句柄} (ENDOFFILE) 4LED程的第7章會為大家詳細講解這一部分。本章包含Cortex-M3內核的STM32F103的移植和Cortex-M4內核的STM32F407以及F429問題,建議初學者也使用IAR7.5版本,因為本配套的例子全部使用IAR7.5版本完成的。所示6.1工程模板第1步:從8.X9.0文 RTOSConfig.h文件在RTOSV8.2.3軟件包中的中的路徑 RTOS\由于STM32F103是M3內核的,所以移植文件也要添加M3內核的。夾中。然后再將這個文件也添加到IAR工程項目中(將.h文件添加到工程的好處是方便查看和修改)************版說本: 日2015-08-02Copyright(C),2015- INCLUDES_H#defineINCLUDES_H#include<stdarg.h>#include<stdio.h>#include<stdlib.h>#include<math.h>#include" #include"task.h"#include"queue.h"APP/#include<bsp.h> (ENDOFFILE)6步:最后一步,同時也是最重要的一步,修改RTOSConfig.h(用戶根據(jù)自己的配添加宏定義NVIC_PRIO_BITS,STM324修改后在這個文件的末尾加上Systick,PendSVSVCRTOSport.cCMSIS程啟動代碼中這幾個中斷的名字了,很方便就實現(xiàn)了兩個函數(shù)的統(tǒng)一。(移植過uCOS-II或者III的用戶,對于這個問題估計深有體會,因為uCOS要修改啟動文件,其實采用這里的方式更方便)/*Definitionsthatmapthe RTOSportinterrupthandlerstotheirCMSISstandardnames.*/#definevPortSVCHandler #definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandler其中和是在V_lrV_Hl和在 #ifndef#defineApplicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularhardwareapplicationTHESEPARAMETERSAREDESCRIBEDWITHINTHE'CONFIGURATION'SECTIONOFRTOSAPIATIONAVAILABLEONTHERTOS.orgWEBSee #define #define #define #defineconfigCPU_CLOCK_HZ ((unsignedlong) #defineconfigTICK_RATE_HZ ((TickType_t)1000)#defineconfigMAX_PRIORITIES (5)#defineconfigMINIMAL_STACK_SIZE ((unsignedshort)128)#defineconfigTOTAL_HEAP_SIZE ((size_t)(17*1024))#defineconfigMAX_TASK_NAME_LEN (16)#define #define #define /*Co-routinedefinitions.#define #defineconfigMAX_CO_ROUTINE_PRIORITIES(2/*Setthefollowingdefinitionsto1toincludetheAPIfunction,orzerotoexcludetheAPIfunction.*/#define1#define1#define1#define0#define1#define1#define1/*Cortex-Mspecificdefinitions.#ifdef BVIC_PRIO_BITSwillbespecifiedwhenCMSISisbeingused.

#defineconfigPRIO_BITS /*15prioritylevels*//*Thelowestinterruptprioritythatcanbeusedinacalltoa"setpriority"function.*/#define /*ThehighestinterruptprioritythatcanbeusedbyanyinterruptroutineroutinethatmakescallstointerruptRTOSAPIfunctions.DONOTINTERRUPT RTOSAPIFUNCTIONSFROMANYINTERRUPTTHATHASAPRIORITYTHANTHIS!(higherprioritiesarelowernumericvalues.*/#defineconfigLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY /*Interruptprioritiesusedbythekernelportlayeritself.ThesearegenerictoallCortex-Mports,anddonotrelyonanyparticularlibraryfunctions.*/#define (configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*!!!!configMAX_SYSCALL_INTERRUPT_PRIORITYmustnotbesettozero .#define (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*Normalassert()semanticswithoutrelyingontheprovisionofanassert.hheaderfile.*/#defineconfigASSERT(x)if((x)==0){taskDISABLE_INTERRUPTS();for(;;);/*Definitionsthatmapstandardnames.RTOSportinterrupthandlerstotheir#definevPortSVCHandler#definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler#endifRTOS_CONFIG_H #define #define ((unsignedlong 72MHz#define ((TickType_t)10001KHz1ms#define (5包含5,對于這一點,初學者要特別的注意。#define ((size_t)(17*1024) vTaskTaskUserIFLEDAppTaskLED任 :LED閃爍vTaskMsgPro任 :消息處理,這里用作LED閃爍 :啟動任務,也是最高優(yōu)先級任務,這里實現(xiàn)LED閃爍#includestaticvoidvTaskTaskUserIF(void*pvParameters);staticvoidvTaskLED(void*pvParameters);staticvoidvTaskMsgPro(void*pvParameters);staticvoidvTaskStart(void*pvParameters);staticvoidAppTaskCreate(void);staticTaskHandle_txHandleTaskUserIF=NULL;staticTaskHandle_txHandleTaskLED=NULL;staticTaskHandle_txHandleTaskMsgPro=NULL;staticTaskHandle_txHandleTaskStart=功能說明:標準c程 參:int{在啟動調度前,為了防止初始化STM32外設時有中斷服務程序執(zhí)行,這里 cpsiei/*創(chuàng)建任務*/heap空間不足造成創(chuàng)建失敗,此要加大RTOSConfig.h文件中定義的heap大?。?defineconfigTOTAL_HEAP_SIZE ((size_t)(17*1024))} 參:pvParameters是在創(chuàng)建該任務時傳遞的形1uCOSstaticvoidvTaskTaskUserIF(void{{}}LED 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskLED(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskMsgPro(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskStart(void{{/*LED閃爍*/}} 參:staticvoidAppTaskCreate{xTaskCreate(vTaskTaskUserIF, /*任務函數(shù)*/ /*任務 /*任務參數(shù) /*&xHandleTaskUserIF);/*xTaskCreate( /*任務函數(shù) /*任務 /*任務參數(shù) /*&xHandleTaskLED/*xTaskCreate( /*任務函數(shù) /*任務 /*任務參數(shù) /*&xHandleTaskMsgPro);/*xTaskCreate(xTaskCreate(&xHandleTaskStart/*任務函數(shù)/*任務參數(shù)/*/*任務句柄} (ENDOFFILE) 4LED所示6.2第1步:從8.X9.0文 RTOSConfig.h文件在RTOSV8.2.3軟件包中的中的路徑 RTOS\.a.由于STM32F407是M4內核的,所以移植文件也要添加M4內核的。************版說本: 日2015-08-02Copyright(C),2015- INCLUDES_H#defineINCLUDES_H #include<stdarg.h>#include<stdio.h>#include<stdlib.h>#include<math.h> #include"RTOS.h"#include"task.h"#include"queue.h"#include"croutine.h" APP/#include6步:最后一步,同時也是最重要的一步,修改RTOSConfig.h(用戶根據(jù)自己的配添加宏定義NVIC_PRIO_BITS,STM324修改后在這個文件的末尾加上Systick,PendSVSVCRTOSport.cCMSIS程啟動代碼中這幾個中斷的名字了,很方便就實現(xiàn)了兩個函數(shù)的統(tǒng)一。(移植過uCOS-II或者III的用戶,對于這個問題估計深有體會,因為uCOS要修改啟動文件,其實采用這里的方式更方便)/*Definitionsthatmapthe RTOSportinterrupthandlerstotheirCMSISstandardnames.*/#definevPortSVCHandler #definexPortPendSVHandlerPendSV_Handler#defPSkerrandlerxPortSysTickHandlerport.c下面 #ifndef V_HndlerPendV_H下面 #ifndef #defineApplicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularhardwareapplicationTHESEPARAMETERSAREDESCRIBEDWITHINTHE'CONFIGURATION'SECTIONOFRTOSAPIATIONAVAILABLEONTHERTOS.orgWEBSee #define #define #define #defineconfigCPU_CLOCK_HZ ((unsignedlong) #defineconfigTICK_RATE_HZ ((TickType_t)1000)#defineconfigMAX_PRIORITIES (5)#defineconfigMINIMAL_STACK_SIZE ((unsignedshort)128)#defineconfigTOTAL_HEAP_SIZE ((size_t)(30*1024))#defineconfigMAX_TASK_NAME_LEN (16)#define #define #define /*Co-routinedefinitions.#define #defineconfigMAX_CO_ROUTINE_PRIORITIES(2/*Setthefollowingdefinitionsto1toincludetheAPIfunction,orzerotoexcludetheAPIfunction.*/#define1#define1#define1#define0#define1#define1#define1/*Cortex-Mspecificdefinitions.#ifdef BVIC_PRIO_BITSwillbespecifiedwhenCMSISisbeingused.

#defineconfigPRIO_BITS /*15prioritylevels*//*Thelowestinterruptprioritythatcanbeusedinacalltoa"setpriority"function.*/#define /*ThehighestinterruptprioritythatcanbeusedbyanyinterruptserviceroutinethatmakescallstointerruptsafeRTOSAPIfunctions.DONOTCALLINTERRUPTSAFERTOSAPIFUNCTIONSFROMANYINTERRUPTTHATHASAHIGHERPRIORITYTHANTHIS!(higherprioritiesarelowernumericvalues.#define#define/*Interruptprioritiesusedbythekernelportlayeritself.ThesearetoallCortex-Mports,anddonotrelyonanyparticularlibraryfunctions.#define (configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*!!!!configMAX_SYSCALL_INTERRUPT_PRIORITYmustnotbesettozero .#define (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*Normalassert()semanticswithoutrelyingontheprovisionofanassert.hheaderfile.*/#defineconfigASSERT(x)if((x)==0){taskDISABLE_INTERRUPTS();for(;;);/*Definitionsthatmapstandardnames.RTOSportinterrupthandlerstotheir#definevPortSVCHandler#definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler#endifRTOS_CONFIG_H #define #define ((unsignedlong 168MHz#define ((TickType_t)10001KHz1ms#define (5包含5,對于這一點,初學者要特別的注意。#define ((size_t)(30*1024) vTaskTaskUserIFLED vTaskMsgPro任 :消息處理,這里用作LED閃爍 :啟動任務,也是最高優(yōu)先級任務,這里實現(xiàn)LED閃爍#includestaticvoidvTaskTaskUserIF(void*pvParameters);staticvoidvTaskLED(void*pvParameters);staticvoidvTaskMsgPro(void*pvParameters);staticvoidvTaskStart(void*pvParameters);staticvoidAppTaskCreate(void);staticTaskHandle_txHandleTaskUserIF=NULL;staticTaskHandle_txHandleTaskLED=NULL;staticTaskHandle_txHandleTaskMsgPro=NULL;staticTaskHandle_txHandleTaskStart=功能說明:標準c程 參:int{在啟動調度前,為了防止初始化STM32外設時有中斷服務程序執(zhí)行,這里 cpsiei/*創(chuàng)建任務*/heap空間不足造成創(chuàng)建失敗,此要加大RTOSConfig.h文件中定義的heap大小:#defineconfigTOTAL_HEAP_SIZE ((size_t)(17*1024))} 參:pvParameters是在創(chuàng)建該任務時傳遞的形1uCOSstaticvoidvTaskTaskUserIF(void{{}}LED 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskLED(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskMsgPro(void{{}} 參:pvParameters是在創(chuàng)建該任務時傳遞的形staticvoidvTaskStart(void{{/*LED閃爍*/}} 參:staticvoidAppTaskCreate{xTaskCreate(vTaskTaskUserIF, /*任務函數(shù)*/ /*任務 /*任務參數(shù) /*&xHandleTaskUserIF);/*xTaskCreate( /*任務函數(shù) /*任務 /*任務參數(shù) /*&xHandleTaskLED/*xTaskCreate( /*任務函數(shù) /*任務 /*任務參數(shù) /*&xHandleTaskMsgPro);/*xTaskCreate(xTaskCreate(&xHandleTaskStart/*任務函數(shù)/*任務參數(shù)/*/*任務句柄} (ENDOFFILE)除了創(chuàng)建的4個用戶任務以外,還有空閑任務,這個任務是系統(tǒng)創(chuàng)建的。至此, 運行了??梢钥吹?個LED在閃爍。所示6.3工程模板第1步:從8.X9.0 置文件(沒有F429的例子,使用F407的即可,配置是相同的)。 RTOS\port.cportasm.h和portmacro.h文件的路徑: 由于STM32F429是M4內核的,所以移植文件也要添加M4內核的。************版說本: 日2015-08-02Copyright(C),2015- INCLUDES_H#defineINCLUDES_H #include<stdarg.h>#include<stdio.h>#include<stdlib.h>#include<math.h> #include"RTOS.h"#include"task.h"#include"queue.h"#include"croutine.h" APP/#include6步:最后一步,同時也是最重要的一步,修改RTOSConfig.h(用戶根據(jù)自己的配添加宏定義NVIC_PRIO_BITS,STM324修改后在這個文件的末尾加上Systick,PendSVSVCRTOSport.cCMSIS程啟動代碼中這幾個中斷的名字了,很方便就實現(xiàn)了兩個函數(shù)的統(tǒng)一。(移植過uCOS-II或者III的用戶,對于這個問題估計深有體會,因為uCOS要修改啟動文件,其實采用這里的方式更方便)/*Definitionsthatmapthe RTOSportinterrupthandlerstotheirCMSISstandardnames.*/#definevPortSVCHandler #definexPortPendSVHandlerPendSV_Handler#defPSkerrandlerxPortSysTickHandlerport.c下面 #ifndef V_HndlerPendV_H下面 #ifndef #defineApplicationspecific*ThesedefinitionsshouldbeadjustedforyourparticularhardwareapplicationTHESEPARAMETERSAREDESCRIBEDWITHINTHE'CONFIGURATION'SECTIONOFRTOSAPIATIONAVAILABLEONTHERTOS.orgWEBSee #define #define #define #defineconfigCPU_CLOCK_HZ ((unsignedlong) #defineconfigTICK_RATE_HZ ((TickType_t)1000)#defineconfigMAX_PRIORITIES (5)#defineconfigMINIMAL_STACK_SIZE ((unsignedshort)128)#defineconfigTOTAL_HEAP_SIZE ((size_t)(30*1024))#defineconfigMAX_TASK_NAME_LEN (16)#define #define #define /*Co-routinedefinitions.#define #defineconfigMAX_CO_ROUTINE_PRIORITIES(2/*Setthefollowingdefinitionsto1toincludetheAPIfunction,orzerotoexcludetheAPIfunction.*/#define1#define1#define1#define0#define1#define1#define1/*Cortex-Mspecificdefinitions.#ifdef BVIC_PRIO_BITSwillbespecifiedwhenCMSISisbeingused.

#defineconfigPRIO_BITS /*15prioritylevels*//*Thelowestinterruptprioritythatcanbeusedinacalltoa"setpriority"function.*/#define /*ThehighestinterruptprioritythatcanbeusedbyanyinterruptserviceroutinethatmakescallstointerruptsafeRTOSAPIfunctions.DONOTCALLINTERRUPTSAFERTOSAPIFUNCTIONSFROMANYINTERRUPTTHATHASAHIGHERPRIORITYTHANTHIS!(higherprioritiesarelowernumericvalues.#define#define/*Interruptprioritiesusedbythekernelportlayeritself.ThesearetoallCortex-Mports,anddonotrelyonanyparticularlibraryfunctions.#define (configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*!!!!configMAX_SYSCALL_INTERRUPT_PRIORITYmustnotbesettozero .#define (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8configPRIO_BITS)/*Normalassert()semanticswithoutrelyingontheprovisionofanassert.hheaderfile.*/#defineconfigASSERT(x)if((x)==0){taskDISABLE_INTERRUPTS();for(;;);/*Definitionsthatmapstandardnames.RTOSportinterrupthandlerstotheir#definevPortSVCHandler#definexPortPendSVHandlerPendSV_Handler#definexPortSysTickHandlerSysTick_Handler#endifRTOS_CONFIG_H #define #define ((unsignedlong 168MHz#define ((TickType_t)10001KHz1ms#define (5包含5,對于這一點,初學者要特別的注意。#define ((size_t)(30*1024) vTaskTaskUserIFLEDAppTaskLEDLED#includestaticvoidvTaskTaskUserIF(void*pvParameter

溫馨提示

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

評論

0/150

提交評論