X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
国产芯片交流
[MCU] 全志XR806 OpenHarmony系统入门之Hello World演示
aleksib
2024-3-1 10:26
楼主
# Hello Word ## 编译顺序 在正式开始程序编写之前,有必要先整体上了解程序的编译顺序。 Harmony的编译路径主要由vendor/xradio/xr806/config.json决定 ```json "product_name": "wifi_skylark", "ohos_version": "OpenHarmony 1.0.1", "device_company": "xradio", "board": "xr806", "kernel_type": "liteos_m", ``` 其中"product_name"决定了执行hb set出现的选项,"device_company","board","kernel_type"共同决定了编译路径。 hb set选定wifi_skylark后,会在根目录中生成文件ohos_config.json,里面的内容大致如下: ```json { "root_path": "/home/workspace/Harmony_XR806", "board": "xr806", "kernel": "liteos_m", "product": "wifi_skylark", "product_path": "/home/workspace/Harmony_XR806/vendor/xradio/xr806", "device_path": "/home/workspace/Harmony_XR806/device/xradio/xr806/liteos_m" } ``` 在执行hb build -f后,HarmonyOS的编译脚本会从device_path中获取编译工具和编译选项,从product_path下寻找BUILD.gn文件。BUILD.gn文件内容如下: ```gn build_ext_component("libSDK") { exec_path = rebase_path(".", root_build_dir) outdir = rebase_path("$root_out_dir") command = "./build.sh ${outdir}" deps = [ "//kernel/liteos_m:kernel", #(3) "os:liteos_glue", "adapter/hals:adapter", "adapter/console:app_console", "ohosdemo:ohosdemo", #(2) ] } group("xr806") { deps = [ ":libSDK" #(1) ] } ``` (1)deps关键字代表执行group("xr806")前需要先执行libSDK,也就是build_ext_component("libSDK")。 (2)执行build_ext_component("libSDK")前要求先寻找ohosdemo文件夹下的BUILD.gn,并且BUILD.gn里面会有ohosdemo的定义。 (3)“//”代表绝对路径,可以理解为根目录。//kernel/liteos_m代表根目录下的kernel/liteos_m文件夹。 打开ohosdemo/BUILD.gn ```gn group("ohosdemo") { deps = [ "hello_demo:app_hello", #(1) #"iot_peripheral:app_peripheral", #"wlan_demo:app_WlanTest", ] } ``` (1)“#”是gn文件的注释符号。 打开hello_demo/BUILD.gn ``` import("//device/xradio/xr806/liteos_m/config.gni") #(1) static_library("app_hello") { #(2) configs = [] sources = [ "src/main.c", #(3) ] cflags = board_cflags #(4) include_dirs = board_include_dirs #(5) include_dirs += [ "//kernel/liteos_m/kernel/arch/include", #(6) ] } ``` (1).gni文件类似C语言的.h文件,用于定义一些模板 (2)static_library代表生成静态库(.a)文件,其中包含main.c的静态库必须是app_打头,如app_hello,否则虽然可以编译成功,但无法生效。 (3)需要编译的C文件,代表src文件夹下的main.c文件。 (4)gcc编译选项,其中board_cflags在//device/xradio/xr806/liteos_m/config.gni中定义。 (5)全局头文件,其中board_include_dirs在//device/xradio/xr806/liteos_m/config.gni中定义。 (6)除了board_include_dirs,额外需要添加的头文件。 ## 代码 ```C #include
#include "ohos_init.h" //(2) #include "kernel/os/os.h" static OS_Thread_t g_main_thread; static void MainThread(void *arg) { while (1) { printf("hello world!\n"); 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); //(1) ``` (1)Harmony启动时会调用所有SYS_RUN,上文中提到的应用库必须用“app_ ”打头就是因为SYS_RUN不会加入ld链接,所以使用"app_"标识,强制链接。 (2)必须添加ohos_init.h头文件,否则SYS_RUN失效。 ## 演示 XR806_OpenHarmony串口默认配置为:波特率115200,无校验,8位数据位,1位停止位。 开发板成功连接PC上对串口调试助手后,按下开发板的复位按键,串口输出如下。 ![在这里插入图片描述](https://xr806.docs.aw-ol.com/assets/img/image-hello-show.png)
点赞
回复评论 (1)
沙发
极限零
openHarmony和华为的HarmonyOS开发是一样的吗
点赞
2024-3-1 13:38
最新活动
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
Follow me第二季第3期来啦!与得捷一起解锁高性能开发板【EK-RA6M5】超能力!
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
随便看看
MEMS技术在非制冷红外探测器中的应用
怎么判断一个键被长按?
内置FM 好还是拉缸天线好
MeeGo移植到SEED-DIM3517
28335的I2C通信问题
TI C2000大奖赛“随叫随到”垃圾桶
几十个全新带包装的智能宠物防丢扣 可做DA14580 蓝牙4.0开发板
ADI连续第三年入选全球最具创新力企业
关于ixp425问题
电脑摄像头是怎么提取图像的?
请问什么样的芯片做跟随器能达到此效果?
物理内存
关于控制类的另一个赛题(非飞机类的)
使用MSP430™MCU轻松解决设计难题
TI 物流机器人 CPU 板
LM4F能用JINK仿真调试吗?
想请问下哪个性能比较好,谢谢各位给个推荐
主流PMP解决方案优缺点及成本比较[转帖]
WTP、WSP和MMS数据包长度如何取得
一种启动电路的分析
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复