添加自己的component

在之前讲解esp-idf的文件结构时,曾经讲过component是esp-idf集成的功能块,这篇文章就来讲解下,如何在esp-idf 中添加自己的component。

STEP1;

创建component文件夹结构

  这里以linux下开发为例,这里在esp-idf的工程中添加, 首先在component的文件夹中创建my_com目录

 

并在其下创建include的子目录,include目录下主要用来存放组件所需的头文件。

 

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=16880

在my_com 目录下创建Kconfig文件,复制如下内容到该文件

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

其中第一行表示在menucom中添加MY_COM这一选项,这是向用户展示的用户名,可以自己定义。

  第二行config命令表示该配置文件会在sdkconfig中生成CONFIG_MY_COM_ENABLE的宏定义。

  第三行表示在menuconfig中进入组件选项后会显示一个bool类型的选项,即yes or no。

  第四行表示进入选项的默认状态"y"表示默认宣红,“n”表示非选中状态。

  第五行表示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就添加完成了


Tags:

文章來源:http://www.cnblogs.com/noticeable/p/7447564.html


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值