• 欢迎大家分享资料!前往留言板评论即可!

13、RDA8910CSDK二次开发:将你的代码藏起来—-编译静态库

合宙 模组资料网 4年前 (2021-05-15) 434次浏览 0个评论 扫描二维码
文章目录[隐藏]

目录

点击这里查看所有博文

  本系列博客所述资料均来自合宙官方,并不是本人原创(只有博客是自己写的),csdk只是得到了口头的允许公开授权。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。

  本系列博客基于紫光展锐的RDA8910 LTE Cat 1 bis芯片平台开发。理论上适用于合宙的Air720U、Air724U、广和通L610以及安信可的cat-01模块。

  各个厂家的部分配置文件可能不一样,也许会导致设备出现奇怪的问题,其他的模块我也不确定能不能用,自行测试。但是有一点编译下载和监视流程基本一样,可供参考。

  先不管支不支持,如果你用的模块是是紫光展锐的RDA8910,那都不妨一试,也许会有意外收获(也有可能变砖,慎重!!!)。

  我使用的是Air724UG开发板,如果在其他模块上不能用,那也不要强怼,也许是开发包不兼容吧。这里的代码是没有问题的。例程仅供参考!

一、前言

  有的小伙伴也许遇到过下面这个问题。就是自己写了一套很好用的库文件,自己用着也很顺手。现在想把它分享出去也给别人用用。但是这个代码库有一部分是利用的别人不开源的代码(正当渠道获得,只是别人不开源),又或者有什么其他的原因,导致这个代码库不便直接公开。

  但是又由于自己的助人为乐之心瘙痒,以至于久久不能寐,连续失眠好几天,非常难受。

在这里插入图片描述

  如果你用的是CSDK开发,那么现在!这个问题将不复存在。

13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库

  你猜的没错,我又带着解决办法来了,让你可以有办法将自己的代码库编译成静态库文件,提供给其他人使用。而他又看不到代码,方便了他人也方便了自己。

13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库

  本篇教程和C语言关系不是很大,主要是CMAKE的相关应用,不会的话也没关系,下面提供代码,直接套工程模板即可。

二、编写各种代码

2.1、工程构建

  在demo文件夹中新建一个demo为StaticLibrary,在StaticLibrary文件夹内新建一个HelloWorld文件夹。
13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库

  在HelloWorld文件夹内新建一个inc存放头文件、一个src存放源文件、一个lib存放库文件。如果看不懂我讲什么,先去参考一下其他的demo工程。

在这里插入图片描述

2.2、编写cmake

  将StaticLibrary文件夹内的cmake文件改成如下内容。主要是根据条件判断是应该编译库文件还是编译工程文件。
在这里插入图片描述

if(CONFIG_APPIMG_LOAD_FLASH)
add_appimg({target}{flash_ldscript} demo_StaticLibrary.c)
elseif(CONFIG_APPIMG_LOAD_FILE)
add_appimg({target}{file_ldscript} demo_StaticLibrary.c)
endif()

set(HelloLibGen OFF)

if(HelloLibGen)
    add_subdirectory(HelloWorld)
else()
    add_definitions(-DHelloBuild)
    include_directories(./HelloWorld/inc)
    target_link_libraries({target} PRIVATE{PROJECT_SOURCE_DIR}/demo/${BUILD_TARGET}/HelloWorld/lib/libHelloWorld.a)
endif()

  将StaticLibrary\HelloWorld文件夹内的cmake文件改成如下内容。主要是添加源文件路径、添加头文件路径、添加外部头文件路径、生成静态库、指定静态库生成位置。
在这里插入图片描述

include_directories(../../../api/include)
include_directories(./inc)
aux_source_directory(./src DIR_SRCS)
add_library(HelloWorld STATIC {DIR_SRCS})
set(LIBRARY_OUTPUT_PATH{PROJECT_SOURCE_DIR}/demo/${BUILD_TARGET}/HelloWorld/lib)

2.3、编写库文件

  在inc目录下新增HelloWorld.h文件并添加如下代码,什么源文件内的函数。

#ifdef HELLO_WORLD_H
#define HELLO_WORLD_H
void HelloFunc();
#endif

  在src目录下新增HelloWorld.c文件并添加如下代码。就做了一件事不停的helloworld

#include <stdio.h>
#include "iot_debug.h"
#include "iot_os.h"
#include "HelloWorld.h"
void HelloFunc()
{
    for (int n = 0; n < 30; n++)
    {
        iot_debug_print("[LibHelloWorld]hello world %d", n);
        iot_os_sleep(1000);
    }
}

2.4、编写用户文件

  准备工作就绪后,就要开始编写调用文件了,由于是使用一个demo完成静态库编译和静态库引用两个动作。这两者是不能同时存在的,所以需要加上条件编译。通过HelloBuild宏定义确定当前编译器应该执行什么动作。

/***************
    demo_StaticLibrary
****************/


#include "iot_debug.h"
#include "iot_os.h"

#ifdef HelloBuild
#include "HelloWorld.h"
#endif
HANDLE demo_hello_task;

static void demo_hello(PVOID pParameter)
{
    #ifdef HelloBuild
        HelloFunc();
    #endif
    iot_os_delete_task(demo_hello_task);
}

int appimg_enter(void *param)
{
    iot_debug_print("[hello]appimg_enter");

    demo_hello_task = iot_os_create_task(demo_hello, NULL, 1024, 1, OPENAT_OS_CREATE_DEFAULT, "hello");
    return 0;
}

void appimg_exit(void)
{
    iot_debug_print("[hello]appimg_exit");
}

三、开始编译

  以上工作就绪后,就可以开始编译了,有的同学可能还没看完我下面要说的就跑去编译了。那么结果就是编译失败,在网上找半天都找不到解决方案。错误就是找不到库文件!!!

在这里插入图片描述

在这里插入图片描述

  那么这里我要提醒一下,如果是自己新建的工程,在HelloWorld/lib里面是没有库文件的,需要自己编译一下库文件才可以编译工程。如果是SDK提供的例程那里面就会有一个库文件可以直接用。

  那么问题来了怎么才能编译出来库文件呢。
13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库

  很简单只要把将StaticLibrary文件夹内的cmake文件中的set(HelloLibGen OFF)这一行改成set(HelloLibGen ON),然后再去运行编译那么就会在HelloWorld/lib目录下生成一个静态库libHelloWorld.a。静态库编译完成之后,就可以将C文件删除了,别人就可以直接用你生成的静态库了,头文件不能删除

在这里插入图片描述
13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库
  然后呢,再把set(HelloLibGen ON)改回set(HelloLibGen OFF),最后去编译试试。看看是不是编译成功了。至于那个警告无视它就可以了。

在这里插入图片描述

四、下载验证

  运行一切正常,没有问题。
在这里插入图片描述

不会下载的点击这里,进去查看我的RDA8910 CSDK二次开发入门教程专题第一篇博文1、RDA8910CSDK二次开发:环境搭建里面讲了怎么下载
这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址