linux component文件,添加自己的component - Go语言中文社区

linux component文件,添加自己的component


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

STEP1;

创建component文件夹结构

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

44a16f81d12e8a66663d2a592b50a3ee.png

并在其下创建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文件夹下找。

72c206328e8df22c187f7cec595c35c0.png

在my_comp 目录下创建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

#include

void my_com_test()

{

#if(CONFIG_MY_COM_ENABLE==y)

printf("my_com is configedn");

#else

printf("not confign");

#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#include"freertos/FreeRTOS.h"#include"freertos/task.h"#include"esp_system.h"#include"esp_spi_flash.h"#include"my_com.h"

voidapp_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 flashn", 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

bfdd60b55c4f3b4b776f0f410ac1651d.png

选择进入之后可以看到一个MY_COM选项

b20032f37fcbc3a6931b0ed1f9f0e56d.png

选择进入之后有一个[*]Enable my_com(进入默认状态是勾选的,这和我们编写的Kconfig文件是一样的),我们可以通过空格键选择是否用*勾选,

17945d1ce111598bde5e13f8ab0fd824.png

STEP5;

程序烧写验证

设定完成后,选择save然后exit退出,通过make flash 指令将程序烧写到esp32开发板中,通过minicom查看输出。观察到的输出如下所示

906521887a3f6bd393910833941fbde7.png

这说明我们自己创建的组件my_com 已经添加成功了。

STEP7;

在eclipse添加自己创建的component路径

显而意见,添加了component后,如果要用eclipse打开工程,还需要将添加的component的路径添加到eclispe中,添加方法如下

e631949a5acdec6b2dd380b5809115ae.png

至此,一个自己创建的component就添加完成了

原文:http://www.cnblogs.com/noticeable/p/7447564.html

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39640203/article/details/116649563
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-13 22:30:33
  • 阅读 ( 994 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢