嵌入式学习栈(嵌入式大杂烩周记)

大家好,我是ZhengN。

嵌入式大杂烩周记主要是一些实用项目学习分享,每周一篇,每篇一个主题。

内容主要来源于我们之前收集的资料:

https://Gitee.com/zhengnianli/EmbedSummary

本期主角:gear-lib

gear-lib是一组通用的C基础库。

  • 全部用POSIX C实现,目标是为了跨平台兼容linux, windows, android, ios。
  • 适用于物联网,嵌入式,以及网络服务开发等场景。

gear-lib地址:

https://github.com/gozfree/gear-lib或者

https://gitee.com/gozfreee/gear-lib

license:MIT。

关于开源软件协议相关文章:常用的开源协议有哪些?

gear-lib的使用

gear-lib整理涵盖如下内容:

嵌入式学习栈(嵌入式大杂烩周记)(1)

下载得到:

嵌入式学习栈(嵌入式大杂烩周记)(2)

下面基于Ubuntu环境,整体编译、安装:

./build.sh sudo ./build.sh install

嵌入式学习栈(嵌入式大杂烩周记)(3)

下面我们选取几个库实践感受一下(库的文件夹下面有对应的使用示例,可参考这些示例)。

1、libconfig

libconfig支持ini、json、lua三种格式配置文件的解析,并且统一操作接口,即可以调用同一套接口对ini、json、lua三种格式配置文件进行解析。libconfig会自动识别配置文件后缀调用对应格式文件的操作接口。

嵌入式学习栈(嵌入式大杂烩周记)(4)

(1)解析ini文件:

嵌入式学习栈(嵌入式大杂烩周记)(5)

static int ini_test(void) { struct config *conf = conf_load("ini/ini_test.ini"); printf("==============================ini_test==============================\n"); printf("修改之前ini_test.ini的内容: \n"); printf("name = %s\n", conf_get_string(conf, "test:name")); printf("num = %d\n", conf_get_int(conf, "test:num")); conf_set_string(conf, "test:name", "LinuxZn"); conf_set_string(conf, "test:num", "888"); conf_dump(conf); printf("修改之后ini_test.ini的内容: \n"); printf("name = %s\n", conf_get_string(conf, "test:name")); printf("num = %d\n", conf_get_int(conf, "test:num")); conf_save(conf); conf_unload(conf); return 0; }

编译、运行:

嵌入式学习栈(嵌入式大杂烩周记)(6)

ini文件解析的往期文章:嵌入式开发两则实用小知识分享

(2)解析json文件:

嵌入式学习栈(嵌入式大杂烩周记)(7)

static int json_test(void) { struct config *conf = conf_load("json/json_test.json"); printf("==============================json_test==============================\n"); printf("修改之前json_test.json的内容: \n"); printf("name = %s\n", conf_get_string(conf, "test", "abc", 1, "name")); printf("num= %s\n", conf_get_string(conf, "test", "abc", 1, "num")); conf_set_string(conf, "test", "abc", 1, "num", "888"); printf("修改之后json_test.json的内容: \n"); printf("name = %s\n", conf_get_string(conf, "test", "abc", 1, "name")); printf("num= %s\n", conf_get_string(conf, "test", "abc", 1, "num")); conf_save(conf); conf_unload(conf); return 0; }

编译、运行:

嵌入式学习栈(嵌入式大杂烩周记)(8)

json文件解析的往期文章:例说嵌入式实用知识之JSON数据

2、liblog

static void test_no_init(void) { int i; char tmp[32] = "abcd"; for (i = 0; i < 10; i ) { loge("test rsyslog\n"); logw("debug msg %d, %s\n", i, tmp); logd("debug msg %d, %s\n", i, tmp); logi("debug msg %d, %s\n", i, tmp); logv("debug msg %d, %s\n", i, tmp); } log_deinit(); }

编译、运行:

嵌入式学习栈(嵌入式大杂烩周记)(9)

log相关往期文章:bug解决不了?使用日志法

3、libdarray

static void darray_test(void) { DARRAY(int) darray; /* 初始化一个动态数组 */ da_init(darray); /* 给数组赋值 */ for (int i = 0; i < 10; i ) { da_push_back(darray, &i); } /* 遍历数组元素并打印 */ for (int i = 0; i < 10; i ) { printf("%d ", darray.array[i]); } printf("\n"); /* 数组清理 */ da_free(darray); }

编译、运行:

嵌入式学习栈(嵌入式大杂烩周记)(10)

动态数组相关往期文章:什么是不完全类型?

4、libtime

static void time_test(void) { printf("time_now_sec_str: %s", time_now_sec_str()); printf("time_now_sec: %" PRIu64 "\n", time_now_sec()); printf("time_now_msec: %" PRIu64 "\n", time_now_msec()); printf("time_now_usec: %" PRIu64 "\n", time_now_usec(NULL)); printf("time_now_nsec: %" PRIu64 "\n", time_now_nsec()); }

编译、运行:

嵌入式学习栈(嵌入式大杂烩周记)(11)

5、libhal

static void hal_test(void) { struct cpu_info cpu_info; cpu_get_info(&cpu_info); printf("cpu name : %s\n", cpu_info.name); printf("cpu cores : %d\n", cpu_info.cores); printf("cpu cores_available : %d\n", cpu_info.cores_available); }

编译、运行:

嵌入式学习栈(嵌入式大杂烩周记)(12)

6、libsort

void test_bubblesort() { int a[]={4,1,2,5,3}; print_array(int, "%d\t", a); bubble_sort(a, sizeof(a)/sizeof(a[0]), sizeof(int), 0); print_array(int, "%d\t", a); }

编译、运行:

嵌入式学习栈(嵌入式大杂烩周记)(13)

以上就是本期分享的内容。gear-lib包含的库很丰富,覆盖很多方面,大家可以去简单了解一下,看看是否有一些库是自己学习、工作中用得上的,避免重复造轮子。

另外,gear-lib是码云上GVP(最有价值开源项目),值得我们去学习。gear-lib虽然总的代码量也不少,但是各个库都相对独立(尽管有些库之间有依赖):

嵌入式学习栈(嵌入式大杂烩周记)(14)

这也很方便我们选取一些库来进行代码研读。一起读代码,一起进步~

这就是本期的内容,咱们下期见~

往期好文:

C语言、嵌入式中几个非常实用的宏技巧

分享一些可以快速入门的嵌入式教程

嵌入式必备之Git的使用

C 在嵌入式中表现如何?

分享一份不错的嵌入式资料汇总贴

C语言、嵌入式重点知识:回调函数

学习嵌入式软件开发,C语言要掌握到什么程度?

我整理了一个嵌入式资料库,大家有什么好资料分享?可以给我留言,我把它加进去,资源共享,一起来完善这个资料库!

(资料库链接:https://gitee.com/zhengnianli/EmbedSummary)

嵌入式学习栈(嵌入式大杂烩周记)(15)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页