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

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

  1. void rt_components_board_init(void)
    / J9 R  w8 e! [  |& Z4 l  \, n0 o) O

  2. ( j3 ^- p5 p9 N# Q! n0 F
  3. {
    3 |5 ], f/ H: d6 |

  4. - ^6 _$ q4 x$ U& |
  5. #if RT_DEBUG_INIT
    4 a4 @9 e$ Q& f" y, d$ d

  6. ' M: K( ^4 I9 l' Y" [
  7.     int result;
    $ Q7 a0 F& E1 a: R- B
  8. + I. z+ _% e" @' B& Z" g& v# O4 I1 F
  9.     const struct rt_init_desc *desc;" N& c9 g! [4 Y6 p& J' _( y
  10. ! b+ \7 s, S4 \+ i; [5 P5 e
  11.     for (desc = &__rt_init_desc_rti_board_start; desc < &__rt_init_desc_rti_board_end; desc ++)% s3 @" _$ ]; ]0 I/ J
  12. ; @8 Z/ p2 G+ ~* t6 L
  13.     {8 D  |: R, x: b' e: N+ S3 W
  14. . V5 A$ I6 d( |  P( y
  15.         rt_kprintf("initialize %s", desc->fn_name);, G2 d5 R8 c8 B" x  g9 c$ f
  16. 7 G' a3 G& G/ f
  17.         result = desc->fn();
    7 p) j9 p+ w% t' s8 i/ K& U1 P  `

  18. " A2 c. j: }$ e/ h: |$ p
  19.         rt_kprintf(":%d done\n", result);5 [# O- J+ }" N5 d

  20. % V, Z& F4 I) v+ w* V3 s" t
  21.     }
    3 Z7 H0 b2 }+ W* Y* t- L
  22. 1 f! M4 ~8 F8 K" @* b% }
  23. #else
    ( B4 x( {* k9 X- E; E# X
  24. 3 Z% x4 `+ S6 n* L# a
  25.     const init_fn_t *fn_ptr;
    7 m8 o$ b' I7 N% j: m

  26. 1 d' k* x1 _* }* X

  27. , c! S# l! k9 |  ~$ V
  28. / Q6 q. S% Q6 G1 [7 c) r9 A+ E" I
  29.     for (fn_ptr = &__rt_init_rti_board_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++)% S9 n2 [% p4 Z0 T& |  Q. n
  30. ( t6 C5 z" o% A
  31.     {8 D) K9 W* N! W+ \

  32. ( h$ F5 g  C+ U' [8 a# T
  33.         (*fn_ptr)();
    ! D6 r0 R9 F1 g: `

  34. / Z7 H$ x) o/ h- A0 O* i$ J
  35.     }- v7 s5 _/ W7 ]5 D! Y' y

  36.   Y9 G& E# F& E6 i/ z* C
  37. #endif
    ) x3 g$ L6 z) O# X6 G" i6 h" s

  38. 0 U9 D; k, X) I. h  r
  39. }
复制代码

) ~) m! A* ^# h5 R__rt_init_rti_board_start和__rt_init_rti_board_end这两个我理解的是应该为函数指针,指向的是需要进行初始化的组件的初始化函数。
/ n3 d+ D# ~) r. b# T, [+ R这两个指针的定义,我跳转了以下,跳转指向的地方如下:
  q6 v- t& k4 ]) Q8 @* O
  1. static int rti_board_start(void)
    # [( |) N! a4 v7 ~
  2. {' v( h/ i$ \7 e% |
  3.     return 0;; z9 D2 N; S+ k
  4. }7 k' I8 g, ^( P6 D4 @4 I1 k
  5. INIT_EXPORT(rti_board_start, "0.end");
    . q& f+ j" e" R7 ~# I7 U3 `8 M

  6. ; i0 G+ o* m* M, H- _
  7. static int rti_board_end(void)
    - n  D# Z4 ~3 k! Q9 C$ g* v
  8. {$ n3 F  S+ T4 K% E* a& K
  9.     return 0;
    % b( q% H+ k9 j! F9 y
  10. }5 ~9 ^6 x* Q0 W1 l5 |( b' t# s% }
  11. INIT_EXPORT(rti_board_end, "1.end");
复制代码
; J  W& z% t6 c1 ]5 e. ?
4 z$ [$ V1 D: a

; z8 l' B1 P' [' k, n( h
) X4 \: G: r" ^这样就看不明白了,有没有清楚的老师,能帮我解答一下?谢谢了!!* `6 {+ h' e* m

4 c* e5 K+ S% Z! \3 @2 `# `+ f9 m0 L8 [
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-5-25 10:54:42 | 显示全部楼层
文档中心的编程指南介绍的挺详细的,建议先仔细学习下。
使用道具 举报 回复
发表于 2019-5-25 14:47:08 | 显示全部楼层
看这个简易图
2 ~$ t% C, d6 H. z1 S- W
5fe10872084086e9952e4afb9aef2d7.png
使用道具 举报 回复
发表于 2019-5-25 15:29:17 | 显示全部楼层
yqiu 发表于 2019-5-25 10:54; H* A2 {" {5 G0 b) m( N7 \
文档中心的编程指南介绍的挺详细的,建议先仔细学习下。

# X! X* w9 t! ^6 U5 |0 o谢谢您的回复,编程指南相关部分我是看过了的
使用道具 举报 回复
发表于 2019-5-25 15:30:38 | 显示全部楼层
yangjie 发表于 2019-5-25 14:47
- `6 H8 |. S! q( X2 o/ m% \9 n/ `& t看这个简易图
- z# E# w4 ^+ ^/ F  H
嗯,您的这张图,就是文档中,所说的那个初始化列表吧,看到这张表,倒是理解了不少,谢谢您的解答!!!
使用道具 举报 回复
发表于 2019-5-25 15:30:39 | 显示全部楼层
yangjie 发表于 2019-5-25 14:47: ]. H0 c# p1 P6 b, s2 {# \3 a
看这个简易图
$ @8 _% V" }) K, n7 d3 B- {
嗯,您的这张图,就是文档中,所说的那个初始化列表吧,看到这张表,倒是理解了不少,谢谢您的解答!!!
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区  

© 2013-2017 上海睿赛德电子科技有限公司 沪ICP备13014002号-1

Powered by RT-Thread

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