void rt_components_board_init(void)组件初始化函数的理解

发表在 内核学习营2019-5-25 10:29 [复制链接] 5 309

  1. void rt_components_board_init(void)
    ) A3 ?! R2 w" t

  2. 2 a9 E/ A" ^8 k" V$ g0 s8 N
  3. {6 t+ R3 q" f5 m9 R8 }6 `

  4. 3 _5 p, B- h/ K, k  j9 C. \; ]
  5. #if RT_DEBUG_INIT
    % v: q# C$ ?. [- X0 c+ h

  6. % w8 s/ t. n: M/ M. M9 _
  7.     int result;
    * C9 i8 |9 E$ R4 {+ [* P
  8. $ I/ n) [8 R! C2 k% a! A
  9.     const struct rt_init_desc *desc;  r  ^8 k+ B. f  n$ G' b

  10. - B: c" ~: T' k" I, ~. V
  11.     for (desc = &__rt_init_desc_rti_board_start; desc < &__rt_init_desc_rti_board_end; desc ++)" Y1 _* z+ f. t2 o  P2 s/ R% f. h+ i
  12. . C* a& R. u" Y" N4 S
  13.     {$ f  D- J0 C' |. l, f' }6 `

  14. / p, f" ~# P# C& ?! \
  15.         rt_kprintf("initialize %s", desc->fn_name);/ C) U' R- R: j7 G8 [5 J8 u7 Y7 {8 O
  16. + e" G1 w" O! B" |! E1 g
  17.         result = desc->fn();
    , s1 F0 T4 o3 ?) U2 y8 Y
  18. * u7 V0 J, @+ x5 T# N& _
  19.         rt_kprintf(":%d done\n", result);
    % Y  ]( O8 C2 Q7 N

  20. ' F9 B6 I' D% u3 i3 L. t, R
  21.     }$ q4 b1 u! b. |, p# H
  22. % v) M5 I: l3 T1 K* y7 Y2 s
  23. #else
    : D4 E5 B8 X5 Q' P% o3 M9 R+ }

  24. % |# N# |5 x9 l$ O1 u2 S* N" q# q
  25.     const init_fn_t *fn_ptr;
    % \( G; P0 ^' }# G3 S/ j

  26. * J3 ~% [6 M+ M- W$ }: ?0 n
  27. # ~! R1 q1 |* o4 s0 R/ P3 t0 A8 e; [
  28. & h5 Y& D: `9 p/ N
  29.     for (fn_ptr = &__rt_init_rti_board_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++)
    6 r" u1 B8 ?' |' }0 _8 U
  30. 0 j9 c  U. s3 a% h' @0 e3 E. R
  31.     {+ r0 I' q3 s- A; m: I
  32. , `# L. [9 S6 {8 Z1 R2 l
  33.         (*fn_ptr)();
    : X% N4 L: B) i( F  S3 U
  34. ) S  ^  E0 W9 V, B/ g
  35.     }
      a5 f# ?0 a' ^
  36. 0 ]( F: X3 ^6 p5 ^: W3 ?' R: C' `
  37. #endif( d. L3 M) c' g& J) B
  38. * M2 ~* r8 e: e
  39. }
复制代码
. f& V6 R% a' S/ F
__rt_init_rti_board_start和__rt_init_rti_board_end这两个我理解的是应该为函数指针,指向的是需要进行初始化的组件的初始化函数。  O7 n5 B  S9 `; g$ r; [+ b; ]
这两个指针的定义,我跳转了以下,跳转指向的地方如下:3 D, Y! h7 L2 f' o( J$ H
  1. static int rti_board_start(void)/ M1 q: v" B  w
  2. {' i9 \, t" f; N* i. S3 D
  3.     return 0;! I  R" J+ \3 Y& U
  4. }
    * c1 [- b% F# L# w
  5. INIT_EXPORT(rti_board_start, "0.end");
    ( A% G$ R5 ]* G( r! I

  6. . J" `$ m3 [7 Y
  7. static int rti_board_end(void)
    0 _! a' B4 N* [  [  O" d3 g
  8. {% b8 }# L" Z) f2 X& P6 |
  9.     return 0;
    : O+ z& t6 e# V' g9 X+ U$ a2 y
  10. }
    2 P9 [5 ?( `, Y8 D4 n/ Z
  11. INIT_EXPORT(rti_board_end, "1.end");
复制代码

3 _2 h. Y2 I, R- e( x5 U, X' |6 l# N' r% Y) k2 n6 G  x7 ~6 k

( c1 g4 H9 V6 Y( x6 y/ c+ M4 Y$ K8 @8 U( ~  v0 |' E
这样就看不明白了,有没有清楚的老师,能帮我解答一下?谢谢了!!
  D( j) s7 F# i" C
5 {0 }- `8 ^& [5 R8 x8 M  b
7 ~3 E' b7 |4 j" ?8 \' d  U4 E
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-5-25 10:54:42 | 显示全部楼层
文档中心的编程指南介绍的挺详细的,建议先仔细学习下。
使用道具 举报 回复
发表于 2019-5-25 14:47:08 | 显示全部楼层
看这个简易图( q7 }/ j2 X) D9 k! z" S% M
5fe10872084086e9952e4afb9aef2d7.png
使用道具 举报 回复
发表于 2019-5-25 15:29:17 | 显示全部楼层
yqiu 发表于 2019-5-25 10:54
5 o: h5 m% y$ c. l# {1 Q+ H. ]文档中心的编程指南介绍的挺详细的,建议先仔细学习下。

3 x6 `3 i5 [, Y& d8 ?谢谢您的回复,编程指南相关部分我是看过了的
使用道具 举报 回复
发表于 2019-5-25 15:30:38 | 显示全部楼层
yangjie 发表于 2019-5-25 14:47$ [% W0 s3 ?0 ]1 E  E3 l
看这个简易图

1 Y5 B% ?# G) l: i嗯,您的这张图,就是文档中,所说的那个初始化列表吧,看到这张表,倒是理解了不少,谢谢您的解答!!!
使用道具 举报 回复
发表于 2019-5-25 15:30:39 | 显示全部楼层
yangjie 发表于 2019-5-25 14:478 ~: ^1 S$ Y/ m* W0 r3 [4 Y, b' q
看这个简易图

6 U- }# i  l. H嗯,您的这张图,就是文档中,所说的那个初始化列表吧,看到这张表,倒是理解了不少,谢谢您的解答!!!
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表