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

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

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

3天內不再提示

如何利用官方移植例子,創建一個自己demo工程

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-05-17 10:02 ? 次閱讀

[導讀] 大家好,我是逸珺。

之前挖了圖解freeRTOS的坑,挖了坑就得填。今天就從使用開始,先把freeRTOS用起來。先聊一聊在STM32F407上的如何電燈,如果只用freeRTOS點燈,無疑有點殺雞用牛刀的感覺。但是想用freeRTOS做產品,先照類似步驟則可以驗證最小系統,驗證freeRTOS是否能正確跑起來,再在此基礎上開始做應用開發,就把任務分解了。本文主要梳理一下如何利用官方移植例子,創建一個自己demo工程,對于沒用過的有點參考價值。

注:本文基于IAR for ARM 8.22.1(個人喜歡IAR),硬件采用正點原子的STM32F407探索者開發板,STLink V2。

準備工作

去官網https://www.freertos.org/a00104.html下載

3f84380c-d57a-11ec-bce3-dac502259ad0.png

按圖中所示下載,目前最新為202104.00,這個帶多種移植好的例子。解壓出來,是這樣的:

3fc0ecc0-d57a-11ec-bce3-dac502259ad0.png

  • tools為AWS iot配置工具,quick start例子以及cmake
  • FreeRTOS-Plus包含了MQTT,TCP,FAT等很多例子,先不去管
  • FreeRTOS為真正的操作系統源碼以及多平臺移植例子,如下:

3fdfc8ca-d57a-11ec-bce3-dac502259ad0.png

使用開源軟件,記得看看README,一般會有些介紹信息分別介紹一下該文件夾下的大體內容:
  1. Demo:大部分硬件平臺的官方移植例子
  2. Source:內核代碼,包含硬件獨立文件與可移植文件
  3. Test:內核測試代碼
  4. license:MIT開源協議,可以直接商業應用。

建立工程

1.打開IAR,創建Workspace

4004a492-d57a-11ec-bce3-dac502259ad0.png

2.創建工程

4026655a-d57a-11ec-bce3-dac502259ad0.png

選擇空工程(Empty project),命名為demo保存。

403f24d2-d57a-11ec-bce3-dac502259ad0.png

  1. 設置工程

    右鍵選擇Options,進入設置界面

40971fe8-d57a-11ec-bce3-dac502259ad0.png

  1. 設置單片機為STM32F407VG

40b95f0e-d57a-11ec-bce3-dac502259ad0.png

  1. Library Configuration使能CMSIS

411f1344-d57a-11ec-bce3-dac502259ad0.png

  1. 添加源文件

    4.1 新建freeRTOS文件夾

413479e6-d57a-11ec-bce3-dac502259ad0.png

  1. 4.2 添加內核文件,在工程文件夾下新建freeRTOS文件夾,將下列文件拷貝過來

4150a13e-d57a-11ec-bce3-dac502259ad0.png

4.3 添加進IAR工程

417146f0-d57a-11ec-bce3-dac502259ad0.png

4.4 將freeRTOS下的include文件夾以及portable文件夾拷貝到當前工程下

418f0550-d57a-11ec-bce3-dac502259ad0.png

4.5 portable文件夾下保留下面這幾個文件夾

41a7a448-d57a-11ec-bce3-dac502259ad0.png

4.6 IAR文件夾下保留下面這兩個文件夾

41bc3ff2-d57a-11ec-bce3-dac502259ad0.png

注:全保留也可以,就是其他的用不到,會使工程文件夾變的很大,如果用版本控制軟件管理,會增加倉庫的大小。ARM_CM4F_MPU文件夾暫時沒用,這個留做備用。

4.7 在IAR工程中新建portable文件夾,并加入相應的文件

41eb619c-d57a-11ec-bce3-dac502259ad0.png

4.8 將下面幾個文件從官方例子中拷貝過來,并加入工程

4221da06-d57a-11ec-bce3-dac502259ad0.png

FreeRTOSConfig.h是內核配置文件,本文配置如下:

  • #defineconfigUSE_PREEMPTION1
    #defineconfigUSE_IDLE_HOOK0
    #defineconfigUSE_TICK_HOOK0
    #defineconfigCPU_CLOCK_HZ(SystemCoreClock)
    #defineconfigTICK_RATE_HZ((TickType_t)1000)
    #defineconfigMAX_PRIORITIES(5)
    #defineconfigMINIMAL_STACK_SIZE((unsignedshort)130)
    #defineconfigTOTAL_HEAP_SIZE((size_t)(75*1024))
    #defineconfigMAX_TASK_NAME_LEN(10)
    #defineconfigUSE_TRACE_FACILITY1
    #defineconfigUSE_16_BIT_TICKS0
    #defineconfigIDLE_SHOULD_YIELD1
    #defineconfigUSE_MUTEXES1
    #defineconfigQUEUE_REGISTRY_SIZE8
    #defineconfigCHECK_FOR_STACK_OVERFLOW0
    #defineconfigUSE_RECURSIVE_MUTEXES1
    #defineconfigUSE_MALLOC_FAILED_HOOK0
    #defineconfigUSE_APPLICATION_TASK_TAG0
    #defineconfigUSE_COUNTING_SEMAPHORES1
    #defineconfigGENERATE_RUN_TIME_STATS0
    
    /*Co-routinedefinitions.*/
    #defineconfigUSE_CO_ROUTINES0
    #defineconfigMAX_CO_ROUTINE_PRIORITIES(2)
    
    /*Softwaretimerdefinitions.*/
    #defineconfigUSE_TIMERS1
    #defineconfigTIMER_TASK_PRIORITY(2)
    #defineconfigTIMER_QUEUE_LENGTH10
    #defineconfigTIMER_TASK_STACK_DEPTH(configMINIMAL_STACK_SIZE*2)
    
    /*Setthefollowingdefinitionsto1toincludetheAPIfunction,orzero
    toexcludetheAPIfunction.*/
    #defineINCLUDE_vTaskPrioritySet1
    #defineINCLUDE_uxTaskPriorityGet1
    #defineINCLUDE_vTaskDelete1
    #defineINCLUDE_vTaskCleanUpResources1
    #defineINCLUDE_vTaskSuspend1
    #defineINCLUDE_vTaskDelayUntil1
    #defineINCLUDE_vTaskDelay1
    

    將IDLE_HOOK/TICK_HOOK禁止了,先不去關注這兩個功能。

  • 將STM32相關文件搬過來,如下加入到工程

423ff356-d57a-11ec-bce3-dac502259ad0.png

  • 建立main.c

    正點原子的板子,有兩個LED,我們就建立兩個任務來閃燈吧,相當于hello world,容易理解。

4258cf98-d57a-11ec-bce3-dac502259ad0.png

  • /*操作系統頭文件.*/
    #include"FreeRTOS.h"
    #include"task.h"
    #include"timers.h"
    #include"semphr.h"
    
    #include"stm32f4xx.h"
    //LED管腳
    #defineLED1_PIN GPIO_Pin_9
    #defineLED1_GPIO_PORTGPIOF
    #defineLED1_GPIO_CLKRCC_AHB1Periph_GPIOF
    
    #defineLED2_PINGPIO_Pin_10
    #defineLED2_GPIO_PORTGPIOF
    #defineLED2_GPIO_CLKRCC_AHB1Periph_GPIOF
    
    staticvoidprvLedInitialise()
    {
    GPIO_InitTypeDefGPIO_InitStructure;
    
    /*LED1時能時鐘*/
    RCC_AHB1PeriphClockCmd(LED1_GPIO_CLK,ENABLE);
    /*LED1GPIO配置為輸出*/
    GPIO_InitStructure.GPIO_Pin=LED1_PIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(LED1_GPIO_PORT,&GPIO_InitStructure);
    
    /*LED2時能時鐘*/
    RCC_AHB1PeriphClockCmd(LED2_GPIO_CLK,ENABLE);
    /*LED2GPIO配置為輸出*/
    GPIO_InitStructure.GPIO_Pin=LED2_PIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(LED2_GPIO_PORT,&GPIO_InitStructure);
    }
    
    staticvoidprvSetupHardware(void)
    {
    /*配置時鐘,PLL,FLASH*/
    SystemInit();
    
    /*配置NVIC優先級.*/
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    /*LEDGPIO配置*/
    prvLedInitialise();
    }
    
    //500msLED1燈狀態翻轉一次
    staticvoidled1Task(void*pvParameters)
    {
    while(1)
    {
    LED1_GPIO_PORT->ODR^=LED1_PIN;
    vTaskDelay(500);
    }
    }
    //1000msLED2燈狀態翻轉一次
    staticvoidled2Task(void*pvParameters)
    {
    while(1)
    {
    LED2_GPIO_PORT->ODR^=LED2_PIN;
    vTaskDelay(1000);
    }
    }
    
    intmain(void)
    {
    prvSetupHardware();
    
    xTaskCreate(led1Task,"LED1",256,NULL,100,(TaskHandle_t *)NULL);
    xTaskCreate(led2Task,"LED2",256,NULL,101,(TaskHandle_t *)NULL);
    
    /*啟動任務調度器.*/
    vTaskStartScheduler();
    }
    

5.設置包含路徑

5.1 右鍵打開options,設置C/C++編譯器包含路徑

42beec60-d57a-11ec-bce3-dac502259ad0.png

5.2 設置包含路徑為:

$PROJECT_DIR$是一個變量,表示當前路徑,不要設成絕對路徑,否則拷貝到不同路徑就無法編譯了。

  • $PROJ_DIR$
    $PROJ_DIR$halCMSISDeviceSTSTM32F4xxInclude
    $PROJ_DIR$halSTM32F4xx_StdPeriph_Driverinc
    $PROJ_DIR$freeRTOSinclude
    $PROJ_DIR$freeRTOSportableIARARM_CM4F
    $PROJ_DIR$Commoninclude示當前工程目錄,利用這個變量就可以設置和工程相關的路徑了,不要設置為絕對路徑,否則如果工程拷貝到其他路徑,就無法正確編譯了。

    并設置兩個宏:

    USE_STDPERIPH_DRIVER
    STM32F4XX
    

5.3 設置匯編器包含路徑

42f4ff62-d57a-11ec-bce3-dac502259ad0.png

6. 設置鏈接配置文件

43207d7c-d57a-11ec-bce3-dac502259ad0.png

注:如果遇到下面的錯誤,應該是你使用了老版本的startup_stm32f4xx.s

Warning[25]:Label'CAN2_SCE_IRQHandler'isdefinedpubweakinasectionimplicitlydeclaredroot

官方例子中下面路徑的startup_stm32f4xx.s為老版本

CMSISDeviceSTSTM32F4xxSourceTemplatesiar

該警告詳細信息可參考:

https://www.iar.com/knowledge/support/technical-notes/assembler/warning25-label-xxxxx-is-defined-pubweak-in-a-section-implicitly-declared-root/

編譯運行

43389c04-d57a-11ec-bce3-dac502259ad0.png

設置ST-Link

43833a84-d57a-11ec-bce3-dac502259ad0.png

下載運行

43c49592-d57a-11ec-bce3-dac502259ad0.png

43e2e470-d57a-11ec-bce3-dac502259ad0.gif

閃燈效果

總結一下

官方的例子,要直接拿來開發產品有很多不需要的文件,可以按照本文的步驟做些刪減,先建立這樣一個基本工程,然后就可以結合自己的實際硬件以及需求,開始做應用開發了。

審核編輯 :李倩


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

    關注

    2270

    文章

    10918

    瀏覽量

    356821
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62282

原文標題:手把手教你在STM32F4上跑freeRTOS

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    移植Mediapipe LLM Demo到Kotlin Multiplatform

    在今年的廈門和廣州 Google I/O Extended 上,我分享了《On-Device Model 集成 (KMP) 與用例》。本文是當時 Demo 的深入細節分析,同時也是后面幾篇同類型文章的開頭。
    的頭像 發表于 12-05 16:29 ?328次閱讀
    <b class='flag-5'>移植</b>Mediapipe LLM <b class='flag-5'>Demo</b>到Kotlin Multiplatform

    如何用VSCODE創建LE5010的工程模板

    我想問下,就是怎么用vscode來創建LE5010的工程模板,我看網上的資料很少很少,官方給的SDK有,但是只能SDK里面來寫代碼,所以就想問問! (有償)
    發表于 12-04 10:01

    多平臺FPGA工程快速移植與構建

    作為名FPGA工程師,經常需要在多個FPGA設備之間移植項目,核心的問題是IP的管理和移植,今天通過安裝和使用 FuseSoC 在多個 AMD FPGA 之間
    的頭像 發表于 11-20 16:12 ?1019次閱讀
    多平臺FPGA<b class='flag-5'>工程</b>快速<b class='flag-5'>移植</b>與構建

    是否能將libwebsokets移植到ESP8266上利用libwebsokets進行網絡應用開發?

    1. 如題目,請問是否能將 libwebsokets 移植到 ESP8266上 利用 libwebsokets進行網絡應用開發? 2. libwebsokets 是純C實現,如何設置ESP8266
    發表于 07-22 06:22

    【xG24 Matter開發套件試用體驗】初上手開發板和官方IDE

    ”。 完成SDK安裝后,就可以開始使用開發套件了。 點燈作為名資深的“點燈工程師”,拿到塊開發板的第件事自然是用它來點燈啦。在官方ID
    發表于 07-13 22:20

    使用LSM6DSO16IS的ISPU的9軸數據的幾個疑問求解

    hub模塊里面的描述只有加速度和角速度,地磁的模塊如何在這個里面如何體現? 3.有沒有關于9軸ISPU設置輸出的簡單可移植的功能,感覺你們的例子雖然可以快速原型驗證,但是程序真是
    發表于 07-02 07:06

    請問light demo下如何添加esp_http_client例程?

    );*/ //app_wifi_initialise(); xTaskCreate(&http_test_task, \"http_test_task\", 8192, NULL, 5, NULL); } 2.官方現在是有有無將
    發表于 06-28 15:46

    更適合工程師和研究僧的FPGA提升課程

    各位編程精英er~ F學社打造的FPGA工程師培訓班上線后,有不少同學后臺私信詢問:“能不能出個那種專門針對某個知識點的課程呢?我想針對自己的薄弱點深入學習。” 貼心如我,當然會滿足大家的學習
    發表于 06-05 10:09

    使用STM32CUBEMX創建基于RTOS的工程,互斥量創建不成功的原因?

    使用STM32CUBEMX創建基于RTOS的工程,使用了互斥量,但互斥量創建不成功
    發表于 05-15 07:22

    freertos移植到M0內核的mcu直不成功的原因?

    都有官方demo,所以很簡單,我進行移植的時候(使用工具為mdk),先是有已經成功的裸機程序,然后將內核相關的list.c,task.c
    發表于 04-28 06:30

    移植STEMWIN,用GUI Builder創建窗口和按鍵,按鍵里為啥只顯示第1字母呢?

    用SPI接口的240*240屏幕,移植了STEMWIN后出現了問題。 用GUI Builder創建窗口和按鍵,按鍵里為啥只顯示第1字母
    發表于 04-18 08:17

    STM32F769I-DISCO開發板跑TouchGFX里的demo卡死黑屏的原因?

    買的官方的STM32F769-DISCO開發板,下載SDK里的官方例程跑的很流暢。自己在TouchGFX上找到STM32F769-DISCO的demo后,生成的代碼、cubeMX配置、
    發表于 04-12 07:46

    【從0開始創建AWTK應用程序】編譯應用到RTOS平臺

    AWTK是基于C語言開發的跨平臺GUI框架。本系列文章介紹如何從0開始創建AWTK應用程序,包括搭建開發調試環境、使用AWTK創建Hello工程并在模擬器上運行、將AWTK應用程序移植
    的頭像 發表于 03-21 08:23 ?648次閱讀
    【從0開始<b class='flag-5'>創建</b>AWTK應用程序】編譯應用到RTOS平臺

    Infineon官網下載的Demo工程,Tasking編譯通過,移植Hightec報故障怎么解決?

    Demo工程在Tasking工程中,編譯成功。 按照論壇大神之前分享的資料移植至Hightec編譯器(lsl鏈接文件路徑已修改,頭文件已添加,),編譯報錯,如何解決?該在哪個文件夾下設
    發表于 02-20 08:11

    【基于Lattice MXO2的小腳丫FPGA核心板】工程創建和固件燒錄

    ; 8路用戶LED; 4路撥碼開關; 4路按鍵; 36用戶可擴展I/O(其中包括路SPI硬核接口和路I2C硬核接口) 支持的開發工具思德普開發的Web IDE以及Lattice官方
    發表于 01-31 21:01
    主站蜘蛛池模板: 国内精品99| 老色网站| 26uuu欧美性色| 伊人yinren6综合网色狠狠| 国产四虎精品| 欧日韩美香蕉在线观看| 欧美一级片免费在线观看| 女人张开腿让男人做爽爽| 免费观看色| 日本亚洲欧美美色| 亚洲最大的黄色网址| 女的扒开尿口让男人桶| 22eee在线播放成人免费视频| 国产全部理论片线观看| 天天草综合网| 美女网战色| 欧美另类高清xxxxx| 亚洲酒色1314狠狠做| 国产在线观看黄色| 美女扒开尿口给男人看大全| 123456成年免费视频| 男男h啪肉np文总受| 日本级毛片免费观看| 成人免费国产gav视频在线| 性夜影院爽黄a爽免费视| 一区二区三区四区在线视频| 四虎8848精品永久在线观看| 亚洲成在人线中文字幕| 色天使色护士| 国产日韩一区二区三区| 夜夜夜夜曰天天天天拍国产| 国产精品特黄毛片| 国产美女一区二区三区| 在线免费观看视频| 久久精品国产免费| 中文字幕一区二区三区5566| 一级特黄aaa大片在线观看| 日本网站黄色| 岛国午夜| 天天综合天天综合| 777午夜精品免费播放|