很荣幸获得极术设区提供的这次试用机会,可以接触鸿蒙操作系统。我工作接触最多的是linux 平台的嵌入式ARM平台较多,这次跑了下鸿蒙,也非常有趣。
不过接进年底了,日常大小琐碎事情突然多了起来,测评的比较匆忙,目前只把代码拉了下来,跑了几个Demo,遂写点简单的吧,顺带记录下从中遇到的问题,一并贴出来,给后面玩XR806小伙伴一个参考
- 拉取代码与烧录
平时开发环境是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