• 正文
  • 相关内容
  • 电子产业图谱
申请入驻 产业图谱

开源项目: 造一系列常用的Linux应用API轮子

09/27 08:40 作者:杨源鑫
阅读需 3 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
来源 | 嵌入式应用研究院

整理&排版 | 嵌入式应用研究院

这个项目其实很早之前就开始了,最初的目的是为它(Future3D)而准备的,因此最近一段时间利用晚上下班的时间以及周末的时间在完成,故很少更文。

这套接口的实现愿景是为了能够更快的搭建一套基于Posix接口的通用物联网3D打印框架而服务的,而这套框架将无差别的兼容全平台,无论是Linux、Win32还是Mcu等等,它都能够顺利运行;因此,我们需要去实现一些通用的轮子,例如文件IO、线程、定时器、消息队列、互斥锁、网络操作等等接口。因此在最初的选择是先基于Linux应用开发,先将常用的、通用的接口进行封装和实现,然后再开始设计业务逻辑和时序,最后调试整个系统。而相对于其它的平台移植起来就容易多了,我们只需要替换掉封装接口以下的Posix API,便能够实现无差别兼容。前这套Linux应用API轮子分为21个大类,后续还会根据需求继续增加,开源项目地址:

https://github.com/Yangyuanxin/Linux_APUE
https://gitee.com/morixinguan/Linux_APUE

项目是基于CMake构建,整体的统一编码风格是基于大驼峰。另外,每个小类中的实现都会有一个Test函数,例如目录操作的test函数:

#ifdef TEST_OPEN
Void CallBack(S8 *Name)
{
    printf("Name: %s\n", Name);
}

S32 DirOperateTest(Void)
{
    S32 Counter = 0;
    //扫描当前目录下的所有文件并通过CallBack将目录下的所有文件
    //打印出来
    Counter = ScanListFiles(".", Null, CallBack);
    if(Counter < 0)
    {
        printf("ScanListFiles fail!\n");
        return -1;
    }
    printf("Have't Suffix Counter = %d\n", Counter);
    //扫描当前目录下所有的.txt文件并通过CallBack将目录下的所有.txt文件打印出来
    Counter = ScanListFiles("."".txt", CallBack);
    if(Counter < 0)
    {
        printf("ScanListFiles fail!\n");
        return -1;
    }
    printf("Have Suffix Counter = %d\n", Counter);
    printf("DirOperate Test Success!\n");
    return 0;
}
#endif

它是用于告诉用户这些接口应该如何去使用以及针对接口的简单测试用例项目的主入口是main.c,main.c会去调用各个子类下的Test接口函数。

项目构建方法

最终会在这个目录下生产a.out可执行程序:

如果需要将其移植到ARM Linux平台上运行,只需要修改CMakeList.txt文件即可,如下所示:

#配置交叉编译器,如果默认以GCC编译,则注释
SET(CMAKE_C_COMPILER   /home/book/workspace/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER /home/book/workspace/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

添加对应的交叉编译器即可。

参与贡献

Fork 本仓库

新建 Feat_xxx 分支

提交代码

新建 Pull Request

 

更多相关内容

电子产业图谱