前言
4 \2 N3 C$ y1 Y( z2 s. l3 \. ?$ }openharmony移植示例 基于最新的master版本,目前支持的芯片有:7 \! _- m |2 S+ Q
STM32F407
! `0 A& \ ]5 U3 X u6 B3 X+ {
0 b. j |( I% @1 I( Z2 ?1 {7 {+ L: U目标是移植更多的开发板更多的MCU支持OpenHarmony
" ]8 h- c- C$ b: ]
% A7 K2 n/ ^, K5 w( K- E经过几天的努力,终于成功把最新版本的OpenHarmony轻量系统内核移植到ARM单片机上,现在代码开源、移植文章也完成7篇,后续会考虑增加视频讲解,直播。以便大家也可以自己移植。$ c) l" l0 v2 h t( Q% F
4 t+ p& T8 Q, C3 H, }
效果7 [3 [- X! q0 r2 `0 Z" @
开发板照片如下,自己在网上随便买的一块( j( r. o: Z# X8 z; p2 e
0 q- ~% |1 D1 f8 @* _' z0 g0 r* d# [/ s5 e7 ] [* ^
目前OpenHarmony内核已经跑起来了,可以实现开发板上的LED灯闪烁。
/ F6 [: L8 m8 |串口调试打印信息:
1 j# P5 q7 P- P z: h1 d
" ]- s# B/ f. S& o* |
) ?; Q! F: K6 a
z; S$ U4 D9 Y/ d6 Z6 M# H
系统创建了两个线程,如下:
1 v( h+ w8 a* {2 {4 V! W
' w, ?% V, [7 x- <font face="Arial" size="3">
; a* g) d9 f7 N3 v - //线程2,用于点灯和打印
8 r; d. D# O! i! Y. ^ - VOID TaskSampleEntry2(VOID) X) A$ C: e7 l' B. }# L1 u `/ h3 q
- {
& b! B6 S& \# w! ? - printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);
9 v5 \) n8 w: V7 ~5 C! k# f( l( U - led_init();
" F3 @2 \: R! I0 \0 e) S - while (1) {
# `% N+ I6 J+ _( \( y1 L$ Q; | - printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);. P; N8 `- n% ~. O; v
-
; x7 P; N0 f+ ?2 O) v) J - led_on(0);2 P, e, w& f/ H& U% D5 V
- led_on(1);
+ F" S* b' ?5 M( F1 o2 }: S | - led_on(2);5 b5 V, w3 P- p; F
- led_on(3);
* F2 F# G9 S' ]5 p9 I - LOS_TaskDelay(1000);
l% B# C) w, R2 r' G' T/ u - + @0 J# z/ S3 Z8 H$ D. [
- led_off(0);" P( F2 B1 V, M- `1 m y
- led_off(1);5 d/ `$ O' L; {( d$ e* d: ^" |2 \2 \
- led_off(2);9 @6 j8 N+ a- t( \1 M
- led_off(3);' p: }1 H- h/ f4 y. H1 ?! S
- LOS_TaskDelay(1000);1 g' Y* {' v* h0 s$ C# g" _# h/ j G
- }# @; V1 f9 y. w/ H2 T7 `
- }/ t7 G: O8 G6 V
- S: I- m9 K5 H% C* y4 d/ O- //线程1,用于打印" m* `' Y4 O5 [ {4 V
- VOID TaskSampleEntry1(VOID)
9 S* y% j7 E- p+ q. b- ]# J - {+ i5 F1 f; Y6 a! i @ u
- printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);
( ?6 U7 D! l& k7 J6 P/ F$ V - while (1) {
* \, w7 V! n0 }1 J# Z2 `/ g - printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);
& w: \* A1 J7 h - LOS_TaskDelay(1000);" f5 W8 n/ k5 f, b6 n# p
- }
2 e, { C% a! m5 q - }
2 X0 p! ^- A8 S4 w ~ - & [1 D- @% G9 ^; l
- //创建线程
8 S; t) }- A U) i O1 F# ] - VOID TaskSample(VOID)6 m+ X8 C* I6 L# N& X
- {
7 c% c0 U" a* z7 l - UINT32 uwRet;+ I/ ^- k* k5 l$ a4 W
- UINT32 taskID1;
' o6 ?, ?8 ~' I - UINT32 taskID2;
8 b# ?2 Y- `( z$ _4 J& W" o# U - UINT32 taskID3;5 o% a* u' R) b6 d
- TSK_INIT_PARAM_S stTask = {0};7 F$ s# @' m# ?5 y! I
3 h* m' o+ M. H' l0 u% d4 V# j- stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry1;
7 n8 F; S0 ]+ T& \ - stTask.uwStackSize = 0x1000;' [" s/ W: D0 _& }+ [) d
- stTask.pcName = "TaskSampleEntry1";( W5 f. O; X* P3 n% ]- z" P
- stTask.usTaskPrio = 6; /* Os task priority is 6 */: r! \/ {+ X$ ~" m( p) Z
- uwRet = LOS_TaskCreate(&taskID1, &stTask);
& W7 W/ [7 r8 @9 F! ] - if (uwRet != LOS_OK) {
5 `/ W, l/ d3 L/ Y - printf("Task1 create failed\r\n");4 R" `0 v& M3 K5 {1 r
- }
7 I+ X& U$ q5 I( F+ _1 U" y5 T! T
?0 A" W2 w9 _# P* \5 z/ g$ j- stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry2;
7 ?$ r' Q L' R5 M5 g0 J' x - stTask.uwStackSize = 0x1000;9 U* K8 g) Q7 h8 d: }+ K& x
- stTask.pcName = "TaskSampleEntry2";8 B# I Q/ }0 Q* @ U8 f
- stTask.usTaskPrio = 7; /* Os task priority is 7 */
" [1 Q$ T, f& H; Q! h" [- _) ~ - uwRet = LOS_TaskCreate(&taskID2, &stTask);- q/ a, W) U, b" S9 i/ h; U4 ] E
- if (uwRet != LOS_OK) {
! K; x$ c* ^- S; Z( N - printf("Task2 create failed\r\n");4 L# F( T) y) N, d; D# E$ ~5 E
- }; b! ]& b# O. k: N) A4 I8 P# G* C
-
1 ~1 f6 k* F% z% ]& { - }</font>
复制代码
/ D( Q7 P7 O/ b' K3 Z代码开源- A* }2 A: R% [- Q
本次移植所有代码都将会开源给大家,同时也会持续做适配,后面会适配网卡、LCD、触摸屏等驱动。& \- G$ E7 }5 B3 T
————————————————
% b8 X, t8 t$ I5 j' M版权声明:连志安的博客
+ L* P z( h* x7 i- s9 I6 j' ]; Z8 |- ]
- w7 t! e9 O S y2 q# Y; X |