[文章]基于Openharmony轻量级操作系统的分布式数据管理开发案例

阅读量0
0
0

实验内容

本例程演示如何在小凌派-RK2206开发板上使用OpenHarmony轻量级操作系统进行KvStore(即分布式数据管理)数据读写。

例程:
(1)创建两个线程,一个负责写入KvStore存储,一个负责读取KvStore存储;
(2)每1秒进行1次读写操作;

程序设计

在本章节中,我们将了解OpenHarmony KvStore存储接口,如文件如何获取数据、设置数据、删除数据和清除缓存。

API分析

头文件

//utils/native/lite/include/kv_store.h

UtilsGetValue()

int UtilsGetValue(const char* key, char* value, unsigned int len);

描述:
从文件系统或缓存中获取与指定键匹配的值。

参数:

名字 描述
key 键值
value 获取数据
len 数据长度

返回值:

返回值 描述
0 成功
其它 见utils/native/lite/include/ohos_errno.h

UtilsSetValue()

int UtilsSetValue(const char* key, const char* value);

描述:

添加或更新与文件系统或缓存中的指定键匹配的值。

参数:

名字 描述
key 键值
value 写入数据

返回值:

返回值 描述
0 成功
其它 见utils/native/lite/include/ohos_errno.h

UtilsDeleteValue()

int UtilsDeleteValue(const char* key);

描述:

从文件系统或缓存中删除与指定键匹配的值。

参数:

名字 描述
key 键值

返回值:

返回值 描述
0 成功
其它 见utils/native/lite/include/ohos_errno.h

ClearKVCache()

int ClearKVCache(void);

描述:

从缓存中清除所有键值对。

返回值:

返回值 描述
0* 成功
其它 见utils/native/lite/include/ohos_errno.h

软件设计

主要代码分析

在kv_store_example函数中通过LOS_TaskCreate函数创建两个线程:kv_store_write_thread、kv_store_read_thread。

void kv_store_example()
{
       unsigned int thread_id1;
       unsigned int thread_id2;
       TSK_INIT_PARAM_S task1 = {0};
       TSK_INIT_PARAM_S task2 = {0};
       unsigned int ret = LOS_OK;

       task1.pfnTaskEntry= (TSK_ENTRY_FUNC)kv_store_write_thread;
       task1.uwStackSize = 1024 * 10;
       task1.pcName = "kv_store_write_thread";
       task1.usTaskPrio = 25;
       ret = LOS_TaskCreate(&thread_id1, &task1);
       if (ret != LOS_OK)
       {

           printf("Falied to create kv_store_write_thread   ret:0x%x\\n", ret);
           return;
       }

       task2.pfnTaskEntry = (TSK_ENTRY_FUNC)kv_store_read_thread;
       task2.uwStackSize = 1024 * 10;
       task2.pcName = "kv_store_read_thread";
       task2.usTaskPrio = 25;
       ret = LOS_TaskCreate(&thread_id2, &task2);
       if (ret != LOS_OK)
       {
           printf("Falied to create kv_store_read_thread   ret:0x%x\\n", ret);
           return;
       }
 }

APP_FEATURE_INIT(kv_store_example);

kv_store_write_thread线程负责创建/更新KV存储,每1秒写入一段内容,重复以上流程。

void kv_store_write_thread()
{
       int ret = 0;
       char defValue[50] = {0};
       int current = 0;

       while (1)
       {
              snprintf(defValue, sizeof(defValue), "test value %d.", current);
              int ret = UtilsSetValue(key, defValue);
              if (ret < 0)
              {
                  printf("[error] %d\\r\\n", ret);
              }
              else
              {
                  printf("[write] write success\\r\\n");
               }

               current++;
               LOS_Msleep(1000);
       }
}

kv_store_read_thread线程负责读取KV存储,每1秒读取一段内容,重复以上流程。

void kv_store_read_thread()
{
       int ret = 0;
       char value1[50] = {0};

       while (1)
       {
              ret = UtilsGetValue(key, value1, sizeof(value1));
              if (ret < 0)
              {
                  printf("[error] %d\\r\\n", ret);
              }
              else
              {
                  printf("[read] key: %s value:%s\\r\\n", key, value1);
              }

              LOS_Msleep(1000);
         }
}

编译调试

修改 BUILD.gn 文件

修改 vendor/lockzhiner/rk2206/sample 路径下 BUILD.gn 文件,指定 a10_kv_store 参与编译。

"./a10_kv_store:kv_store_example",

修改 device/rockchip/rk2206/sdk_liteos 路径下 Makefile 文件,添加 -lkv_store_example 参与编译。

app_LIBS = -lkv_store_example

运行结果

示例代码编译烧录代码后,按下开发板的RESET按键,通过串口助手查看日志。

HalFileInit: Flash Init Successful!
[write] write success
[read] key: key_sample value:test value 0.
[write] write success
[read] key: key_sample value:test value 1.
[write] write success
[read] key: key_sample value:test value 2.
[write] write success
[read] key: key_sample value:test value 3.

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友