本帖最后由 阿松松 于 2015-1-8 11:44 编辑 ; P* C+ A) `& r5 h* W
9 M5 g' }$ H! T5 w7 _ W' j" E2 |最近在学习FreeRTOS,因为对系统的架构不懂,学习的时候总是似懂非懂,不知道如何运用这几天看了FreeRTOS的源码,每次认真分析总能有不同的收获,不管是对是错,与大家分析,也请指正。
( j3 I/ B( l+ m8 u3 m
! w( S" `/ n& r( T7 K- i在list.c中,
, ?+ H+ b) h: W8 i3 O初始化链表:& ^3 ^7 q: J" O, }1 D; L
void vListInitialise( xList *pxList ): K/ ]+ J1 x. h2 g: ]# ]
4 O1 \9 \; w$ H/ e5 W- void vListInitialise( xList *pxList )2 W% U0 |2 Y y: n
- {
, @, u, F T7 W0 a' s; E - /* 链表结构包含一个用来标志链表结束的链表元素,初始化链
' k0 R& m9 M$ [8 u: J) R - 表的时候,链表结束元素被当作链表的唯一入口。 */
) I! ?/ B7 s5 d - pxList->pxIndex = ( xListItem * ) &( pxList->xListEnd );, B( O2 Z7 v8 x# ?, B$ c. x
# V& r$ Y& \$ O Y; ]- /* 为了确保链表元素是链表的结束,链表结束元素值必须是链表中最大的值。*/; d6 f* Z! C4 M7 C1 o: [" M' T2 ^
- pxList->xListEnd.xItemValue = portMAX_DELAY;
9 f. L& T$ [8 u$ }7 x+ m
- B6 E- t* K9 m: X- /*链表结束元素的Next和Previous指针都指向它自己,这样的话就能知道什么时候链表为空。 */
5 l# W( s4 n. |, V4 X8 u+ K8 y - /*链表结束元素的Next指针指向自己,之所以用&是因为XListEnd本身只是结构体变量,而不是指针变量。*/
" Y. f2 f7 L" `2 { - pxList->xListEnd.pxNext = ( xListItem * ) &( pxList->xListEnd );& M# @ N9 z; ^' W$ \3 j# K
- /*链表结束元素的Previous指针指向自己,之所以用&是因为XListEnd本身只是结构体变量,而不是指针变量。*/
4 n4 h( s \0 l4 V: }2 N - pxList->xListEnd.pxPrevious = ( xListItem * ) &( pxList->xListEnd );. v O6 w+ n- k1 z- p
- % Q2 n6 p& G6 E1 _7 A! Z
- /*此时链表中的元素个数还是0*/
" A8 c% ]0 p! T3 ]& L0 E - pxList->uxNumberOfItems = 0;/ a3 ^& ]; U& |& Z* @ L3 _7 l# n
- }
复制代码
, a* W: _ o, o0 h v4 X3 }+ w以上分析完毕,菜鸟初学,请大神拍砖。 J" _8 d, k; E3 D$ z
希望和大家多多讨论, N* G7 h) b+ P, A/ X
& H6 K* Z( q* z- g0 A
|