添加本身的component

在以前講解esp-idf的文件結構時,曾經講過component是esp-idf集成的功能塊,這篇文章就來說解下,如何在esp-idf 中添加本身的component。php

STEP1;

建立component文件夾結構

  這裏以linux下開發爲例,這裏在本身的的工程中添加, 首先在本身的工程下建立components文件夾(這個名稱不能錯)(或者直接用esp-idf下的components文件夾),而後在components的文件夾中建立my_com(這個文件夾可根據需求填寫)文件夾linux

 

並在其下建立include的子目錄,include目錄下主要用來存放組件所需的頭文件。express

 

STEP2;

添加makefile文件和Kconfig文件

  若是你們對linux開發比較熟悉的話,那麼確定對內核編譯須要的.config文件不陌生,在.config文件中,咱們發現有的模塊被編譯進了內核,有的只是生成了一個module。這中間,咱們如何讓內核發現咱們編寫的模塊呢,這就須要在Kconfig中進行說明。至於如何生成模塊,那麼就須要利用Makefile告訴編譯器,怎麼編譯生成這個模塊。因此每一個component目錄下都須要有make文件。網絡

  在my_com目錄下建立一個名爲component.mk(名字不能更改)的make文件,並在文件中輸入COMPONENT_ADD_INCLUDEDIRS:=include,這表示逐漸源文件所需的文件都到component.mk所在的目錄的include文件夾下找,別的組件若是引用本組件所包含的頭文件,也會到這個include文件夾下找。(對於Makefile,這裏有篇基礎教程講解的不錯,能夠看看http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=16880app

在my_comp 目錄下建立Kconfig文件,複製以下內容到該文件less

menu "MY_COM"
config MY_COM_ENABLE
bool "Enable my_com"
default "y"
endmenu

其中第一行表示在menucom中添加MY_COM這一選項,這是向用戶展現的用戶名,能夠本身定義。eclipse

  第二行config命令表示該配置文件會在sdkconfig中生成CONFIG_MY_COM_ENABLE的宏定義。函數

  第三行表示在menuconfig中進入組件選項後會顯示一個bool類型的選項,即yes or no。測試

  第四行表示進入選項的默認狀態"y"表示默認宣紅,「n」表示非選中狀態。ui

  第五行表示menu命令結束,關於Kconfig的更多語法和功能,你們能夠去網絡上查詢,這裏再也不贅述。

 

 

STEP3;

建立組件源文件

在my_com目錄下建立my_com.c文件,複製如下代碼到該文件中

#include <stdio.h>
#include <my_com.h>

void my_com_test()
{
#if(CONFIG_MY_COM_ENABLE==y)
printf("my_com is configed\n");
#else
printf("not config\n");
#endif
}

這是一個測試程序,用來測試menuconfig中的my_com組件是否已經配置成功。

在include文件夾中添加my_com.h頭文件,頭文件中對my_com_test函數進行申明,代碼以下

#ifndef _MY_COM_H_
#define _MY_COM_H_
void my_com_test(void);
#endif

STEP4;

修改頂層文件對組件文件進行調用

打開hello_world.c文件,將文件修改成以下所示

/* Hello World Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "my_com.h"

void app_main()
{
    printf("Hello world!\n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    esp_chip_info(&chip_info);
    printf("This is ESP32 chip with %d CPU cores, WiFi%s%s, ",
            chip_info.cores,
            (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
            (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

    printf("silicon revision %d, ", chip_info.revision);

    printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
            (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
 printf("Restarting now.\n");
     my_com_test();
    fflush(stdout);
    esp_restart();
}

此時到hello_world 的工程目錄下,運行指令

cd ~/esp32/workspace/hello_world/hello_world
make
menuconfig

能夠打開以下配置窗口,選擇component config

 

選擇進入以後能夠看到一個MY_COM選項

選擇進入以後有一個[*]Enable my_com(進入默認狀態是勾選的,這和咱們編寫的Kconfig文件是同樣的),咱們能夠經過空格鍵選擇是否用*勾選,

 

 

STEP5;

程序燒寫驗證

 設定完成後,選擇save而後exit退出,經過make flash 指令將程序燒寫到esp32開發板中,經過minicom查看輸出。觀察到的輸出以下所示

 

這說明咱們本身建立的組件my_com 已經添加成功了。

STEP6;

在eclipse添加本身建立的component路徑

顯而意見,添加了component後,若是要用eclipse打開工程,還須要將添加的component的路徑添加到eclispe中,添加方法以下

 

 

 至此,一個本身建立的component就添加完成了

相關文章
相關標籤/搜索