总结环境配置遇到的坑
首先是代码下载
官方教程是这样的:mkdir xr806_openharmony cd xr806_openharmony repo init -u ssh://git@gitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify -m devboard_xr806.xml repo sync -c repo forall -c 'git lfs pull' #下载部分大容量二进制文件
但是由于鸿蒙仓库里面没有了,xr8o6 部分需要后面在临时仓库里面下载,所以代码下载部分的流程是:
首先执行下面的命令:mkdir xr806_openharmony #文件夹名称可以直接随便取 cd xr806_openharmony repo init -u ssh://git@gitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify #就是去掉了 devboard_xr806.xml repo sync -c repo forall -c 'git lfs pull' #下载部分大容量二进制文件
再在从链接: https://gitee.com/moldy-potato-chips/devboard\\\\\_device\\\\\_allwinner\\\\\_xr806 上下载的内容更改文件名为xradio ,然后拷贝到 device 目录下,xradio 目录的结构如下图所示:
将链接: https://gitee.com/moldy-potato-chips/devboard\\\\\_vendor\\\\\_allwinner\\\\\_xr806 上下载的内容也更名为xradio,然后拷贝到 vendor 目录下
第二个是固件编译
官方教程是这样的:cd device/xradio/xr806/xr\\_skylark #(1)进入原生SDK目录
cp project/demo/audio\\_demo/gcc/deconfig .config #(2)复制配置文件
make menuconfig #(3)图形化界面配置
make build\\_clean #(4)清除旧配置
make lib -j #(5)根据配置生成静态库和全局头文件
cd - #(6)返回Harmony根目录
hb set #(7)选择wifi\\_skylark
hb build -f #(8)编译,后续不需要重新配置
Harmony根目录就是我们创建的,保存鸿蒙源码,以及后面我们建立工程的目录,我这里就是按照官方的教程,建立的目录: xr806\\\\\_openharmony。
所以Harmony根目录在linux 终端里的显示是:~/your\\\\\_name/xr806\\\\\_openharmony。
在根目录里执行hb set 后 如果没有看到这个选项:
说明hb 的有些路径配置有问题,可以执行 hb env 看看 下面两个路径是不是 vendor/xradio/xr806 和 device/xradio/xr806/liteos\\\\\_m
一般这种情况下肯定不是,这种情况是 hb root path 设错了,使用 hb set -root /home/xxx/xr806,没有权限可以加个sudo 试试,我这里是:hb set -root /home/shan/xr806\\\\\_openharmony/vendor/xradio/xr806, 然后在执行hb set , 会出现下面类似的界面,通过方向键选择 wifi\\\\\_skylark 就好了。
工程建立和编译
- 进入目录 ohosdemo
cd device/xradio/xr806/ohosdemo - 新建工程文件夹
mkdir -p oled
然后将 hello\\\\\_demo 里面的BUILD.gn 拷贝到 oled 目录下:
cp ../hello\\\\\_demo/BUILD.gn ./
再新建 inc 和 src 文件夹:
mkdir-p inc src - 编写代码
我这里有是个文件:mian.c、 oled.c、oled.h,、types.h,将mian.c, oled.c 文件都添加到了 src 里,oled.h, types.h 放在了inc 目录下。
main.c文件里的内容如下:
#include <stdio.h>
#include "ohos_init.h"
#include "kernel/os/os.h"
#include "iot_gpio.h"
#include "oled.h"
#define GPIO_PA13 13 /*SPI CS*/
#define GPIO_PA21 21 /* 运行指示灯 */
static OS_Thread_t g_main_thread;
extern u8 nonside[];
static void MainThread(void *arg)
{
IoTGpioInit(GPIO_PA21);
IoTGpioSetDir(GPIO_PA21, IOT_GPIO_DIR_OUT);
IoTGpioInit(GPIO_PA19);
IoTGpioInit(GPIO_PA20);
IoTGpioInit(GPIO_PA22);
IoTGpioInit(GPIO_PA23);
IoTGpioSetDir(GPIO_PA19, IOT_GPIO_DIR_OUT);
IoTGpioSetDir(GPIO_PA20, IOT_GPIO_DIR_OUT);
IoTGpioSetDir(GPIO_PA22, IOT_GPIO_DIR_OUT);
IoTGpioSetDir(GPIO_PA23, IOT_GPIO_DIR_OUT);
IoTGpioInit(GPIO_PA13);
IoTGpioSetDir(GPIO_PA13, IOT_GPIO_DIR_OUT);
IoTGpioSetOutputVal(GPIO_PA13, 0);
LCD_Init();
while (1)
{
IoTGpioSetOutputVal(GPIO_PA21, 1);
OS_MSleep(500);
IoTGpioSetOutputVal(GPIO_PA21, 0);
OS_MSleep(500);
LCD_Print(0, 0, "返回退出",TYPE16X16,TYPE8X16);
LCD_Print(0, 16, "abcd09876",TYPE16X16,TYPE8X16);
LCD_Print(16, 32, "efg12345",TYPE16X16,TYPE6X8);
Draw_BMP(32,48,nonside);
Draw_BMP(48,48,nonside);
Draw_BMP(64,48,nonside);
}
}
void LEDMain(void)
{
printf("OLED Test Start \r\n");
if (OS_OK != OS_ThreadCreate(&g_main_thread,
"MianThread",
MainThread,
NULL,
OS_THREAD_PRIO_APP,
1*1024)
)
{
printf("[ERR] Create MianThread Failed\r\n");
}
}
SYS_RUN(LEDMain);
其他文件都放进来太长了,这里就不放了,需要工程的,附上百度云链接:
链接:https://pan.baidu.com/s/1VW5AaxpsfHVh3VOoT1uxVA
提取码:pdy3
编译
首先修改 oled/BUILD.gn 文件,添加源文件和头文件路径:import("//device/xradio/xr806/liteos\\_m/config.gni") #必须, config 文件中定义了头文件路径和宏
static\\_library("app\\_oled") { #必须,所有应用工程必须是app\\_ 打头
configs = [] sources = [ "src/oled.c", #源文件路径 "src/main.c", ] cflags = board_cflags #必须,board_cflags 是在 config.gni 中定义的关键宏定义 include_dirs = board_include_dirs #必须, board_include_dirs 是在 config.gni 中定义的头文件路径 include_dirs += [ "//base/iot_hardware/peripheral/interfaces/kits", "inc/" #头文件路径 ]
}
再修改 ohosdemo/BUILD.gn 文件里面的内容,是工程能够被编译
group("ohosdemo") {
deps = [
#"hello_demo:app_hello",
#"iot_peripheral:app_peripheral",
#"wlan_demo:app_WlanTest",
#"led:app_led",
"oled:app_oled" #注释掉其他的,添加自己编写
]
}
最后返回到 Harmony根目录,执行 hb build -f, 等待编译完成
- 固件烧写
将目录 device/xradio/xr806/xr\\\\\_skylark/out 下的文件:xr\\\\\_system.img,拷贝到windows 系统的某个目录下,打开phoenixMC\\\\\_v3.1.21014b.exe,连接上开发板后,点击升级固件就可以了: - 查看结果
运行结果如图:
我这里本来是有中文的,但是因为编码的原因,没有显示后面再来解决吧。
遇到的问题
编译的时候遇到了flash 空间不够的问题,问题通常如下:
这里官方教程也提到过,官方的解释以及解决方法如下:
这是因为旧的flash分配方案不再使用,这种情况会在device/xradio/xr806/xr\\_skylark/project/demo/wlan\\_ble\\_demo/image/xr806(或者device/xradio/xr806/xr\\_skylark/project/demo/audio\\_demo/image/xr806)自动生成文件image\\_auto\\_cal.cfg,把image\\_auto\\_cal.cfg里面的内容覆盖image\\_wlan\\_ble.cfg或者image.cfg即可。