前言
9 c" x1 X! J( d3 S- V+ e5 u# _openharmony移植示例 基于最新的master版本,目前支持的芯片有:& _: Z6 M* B6 `5 f4 s0 V, `# E
STM32F407
4 a9 h2 L6 A; M3 [! e$ Q
/ d& z) I- ]( U' ~6 t目标是移植更多的开发板更多的MCU支持OpenHarmony
! a' _8 _0 ?2 k) X: z
g: F; [) r% D) ?& Z4 H+ E经过几天的努力,终于成功把最新版本的OpenHarmony轻量系统内核移植到ARM单片机上,现在代码开源、移植文章也完成7篇,后续会考虑增加视频讲解,直播。以便大家也可以自己移植。
' p! f" O9 y. m* G+ ]! ~8 T- O9 D
效果
0 h* ?7 ~' i3 S- O2 n8 \; z开发板照片如下,自己在网上随便买的一块/ ]$ h2 F6 O2 _+ a! c* y- r
! _' d8 i0 X1 X7 |* |0 e
. ^' K8 _ ~7 t3 n目前OpenHarmony内核已经跑起来了,可以实现开发板上的LED灯闪烁。) O c* r3 Q7 X( }) j6 F. h
串口调试打印信息:1 c2 T( `5 A0 ~. G
# Y( T! L7 R, R% }2 v; B& [9 t; S, k
$ c" p5 f6 \' ^2 p% s" _6 h
+ s. g9 f5 P. x7 L' O系统创建了两个线程,如下:
' d+ w5 l, Q- f9 q: B& V5 _# n9 A* ]) B6 c$ b
- <font face="Arial" size="3">% d/ I1 e+ k/ e
- //线程2,用于点灯和打印
: f. S& n. H% |( q9 |; y - VOID TaskSampleEntry2(VOID)
- z8 K/ d6 q @2 x. G w - {
3 ?+ h, B; k# b$ ~ - printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);5 Z7 V3 O0 I4 N+ E- C
- led_init();' z6 @& C6 n7 \; r& \: G
- while (1) {
9 m) o: k+ k j7 ?4 A8 n - printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);
, J' k+ K3 p( H% N5 B i# W$ N - & C9 F1 {- u4 c, s" r& c
- led_on(0);
6 m6 U+ J* w+ ?! b7 F5 i - led_on(1);
5 ?( k4 A V% }" z8 d - led_on(2);9 ?. O7 ~! s+ I
- led_on(3);9 A; B8 M2 W$ ?5 P' J6 y( _
- LOS_TaskDelay(1000);4 y# [5 T) |, O9 L
-
3 F& h: h0 H) Z- w, \' h# S/ w7 P - led_off(0);" A- z( X* w8 p0 x8 |
- led_off(1);- x1 b" L8 p1 g+ [& d; T
- led_off(2);
. D- h8 A. M7 w, H4 ]) @- r - led_off(3);& D; \5 c9 c' D" Q! z& d
- LOS_TaskDelay(1000);) P% K$ q( T7 K6 b3 ^
- }
8 D$ g9 P; A2 ~# {. p- b - }" A, W/ P. Y. i& q* s
- 3 G9 N5 i5 b# H+ x2 Z
- //线程1,用于打印( A# G$ q6 V4 Y. j% I5 x# P1 v9 m
- VOID TaskSampleEntry1(VOID)$ w; d `9 x7 h5 z. [6 h1 |. y
- {
5 N/ x9 f& a" w/ F' W - printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);3 T) H* L, x3 T) v* T. C
- while (1) {
% m0 ?; g: |+ U' t' e1 y7 x - printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);3 I/ L* K) o5 W; J
- LOS_TaskDelay(1000);7 ~& |( n( U% U7 L8 r6 e( B
- }8 ?6 W# \1 S5 ~; s" C' l0 h+ a
- }
$ N% A2 e% r% Q, P. Y - , V4 E9 A+ k, i( {$ T6 L }+ }
- //创建线程; }# R$ K W! n
- VOID TaskSample(VOID)
! P. i% e: D- O) x. k1 p - {; _7 w' r! P) a, I( `, o8 z- t; h# o
- UINT32 uwRet;
! K" h. X% v$ H - UINT32 taskID1;7 L, f6 _+ \$ U- [
- UINT32 taskID2;
7 ?, r1 k' B# n, N - UINT32 taskID3;8 R. R W0 G i1 I# n
- TSK_INIT_PARAM_S stTask = {0};. z5 r! g4 k2 M7 R0 D( x% E
- ; z( v! `5 T% P
- stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry1;4 i5 g" E5 X. j; @9 v j, n8 @5 j
- stTask.uwStackSize = 0x1000;. x6 }# X Z1 t. i) X1 t
- stTask.pcName = "TaskSampleEntry1";3 {$ N/ z/ b" n% l$ V0 o+ ~5 a
- stTask.usTaskPrio = 6; /* Os task priority is 6 */9 M# c/ l. q3 P+ M9 M9 ~, b: k1 k
- uwRet = LOS_TaskCreate(&taskID1, &stTask);6 R8 A8 p9 M3 {: q- u3 P0 P/ Q
- if (uwRet != LOS_OK) {
3 J! i' c% Z- X- `' y# a4 T- v U - printf("Task1 create failed\r\n");& F6 o4 |; ` U# X' W { y4 M
- }
% f2 _5 y9 T( Q2 T- k2 X7 w
. Q4 X' m3 S k. [- stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry2;
# I/ A, W( V8 @, _! c - stTask.uwStackSize = 0x1000;; ]# ?. D' \6 h' m
- stTask.pcName = "TaskSampleEntry2";2 N! D& j9 i/ |: g9 r
- stTask.usTaskPrio = 7; /* Os task priority is 7 */( f9 Z& g) c. c: c' e0 o
- uwRet = LOS_TaskCreate(&taskID2, &stTask);
4 a( C" r$ E2 I( q: U, Z$ u! W - if (uwRet != LOS_OK) {
1 u7 D' V' p/ l - printf("Task2 create failed\r\n");
% V5 j0 s% n# D& M4 u$ F - }% ?8 |" O5 h) a9 d* p( w
-
- T% M# H8 p! u9 K7 [' u - }</font>
复制代码 ' D. u C% D7 I
代码开源
( r m8 l1 G& N4 b) w本次移植所有代码都将会开源给大家,同时也会持续做适配,后面会适配网卡、LCD、触摸屏等驱动。6 ]7 l( ~* p2 N& V# r
————————————————
1 @7 `8 I6 |1 E4 u/ g" |7 W版权声明:连志安的博客
% X, d5 r9 c( b$ n& l8 d/ d6 L* D6 z7 ^6 a/ t
3 t9 T; Y3 v/ b$ [
|