女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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
    +關注

    關注

    2290

    文章

    11017

    瀏覽量

    362478
  • FreeRTOS
    +關注

    關注

    12

    文章

    490

    瀏覽量

    63785

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何創建ESP32P4自定義工程移植示例和注意事項

    現的結果中,查看相關的組件,其中有ESP32_P4_Function_EV_Board的BSP支持包,查看組件的頁面。 點擊右上角的“Install”即可添加組件到工程中。在工程中就添加
    發表于 05-03 16:16

    STM32如何移植Audio框架?

    最近在學習音頻解碼,想用下Audio框架。 1、這個該如何移植自己創建的BSP并對接到device框架中?看了官方
    發表于 04-01 08:08

    FreeRTOS(V9.0)中創建信號量的函數都沒有被定義,因此用不了,怎么解決

    問題背景:我想要使用信號量,結果查找了整個工程都沒有創建信號量的函數。我還以為是我自己移植有問題,因此還特地下載了其他人移植好的
    發表于 03-13 09:30

    移植LWIP+FREERTOS時遇到的問題怎么解決?

    :將ST官網的LWIP1.4.1 的例子(關于LWIP的部分)移植到步驟1 的FreeRTOS 系統的工程里面,只是添加LWIP初始化的任務,并沒有調用任何接口的情況下可以Ping 通 而且長時間
    發表于 03-11 06:48

    詳解Object Detection Demo移植

    繼上移植了 Mediapipe 的 LLM Inference 后,這篇文章我們將繼續探索 Object Detection Demo移植
    的頭像 發表于 02-05 13:42 ?389次閱讀
    詳解Object Detection <b class='flag-5'>Demo</b>的<b class='flag-5'>移植</b>

    MIPI2.5G DPHY CSI2DSI demo移植 -v1

    最近陸續有客戶在評估易靈思的Ti180。Ti180的MIPI 2.5G是硬核。今天做一個簡單的移植來試驗下MIPI DSI 驅屏。 因為有客戶需要,所以也把程序移植到了公司的demo
    的頭像 發表于 01-21 16:56 ?1067次閱讀
    MIPI2.5G DPHY CSI2DSI <b class='flag-5'>demo</b><b class='flag-5'>移植</b> -v1

    移植Mediapipe LLM Demo到Kotlin Multiplatform

    在今年的廈門和廣州 Google I/O Extended 上,我分享了《On-Device Model 集成 (KMP) 與用例》。本文是當時 Demo 的深入細節分析,同時也是后面幾篇同類型文章的開頭。
    的頭像 發表于 12-05 16:29 ?1027次閱讀
    <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 ?1762次閱讀
    多平臺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

    基于stm32f103ze創建工程,編譯后有許多報警,是什么原因?

    基于stm32f103ze,系統版本rt_thread 5.1.0,創建工程,編譯后有許多報警,多數是缺少函數申明,消除后,最后出現“warning: cannot find e
    發表于 07-15 06:26

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

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

    可以修改MESH-DEMO以在RTOS-SDK上運行嗎?

    我的產品已經在 RTOS-SDK 上運行了,現在我們想添加對 mesh 函數的支持。 但這就像只有用于非操作系統 SDK 的 MESH-DEMO。 我的問題是: 您是否計劃在不久的將來為
    發表于 07-12 07:53

    使用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