你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FreeRTOS源代码分析vListInitialise( xList *pxList )

[复制链接]
阿松松 发布时间:2015-1-8 11:36
本帖最后由 阿松松 于 2015-1-8 11:44 编辑

最近在学习FreeRTOS,因为对系统的架构不懂,学习的时候总是似懂非懂,不知道如何运用这几天看了FreeRTOS的源码,每次认真分析总能有不同的收获,不管是对是错,与大家分析,也请指正。

在list.c中,
初始化链表:
void vListInitialise( xList *pxList )

  1. void vListInitialise( xList *pxList )
  2. {
  3. /* 链表结构包含一个用来标志链表结束的链表元素,初始化链
  4. 表的时候,链表结束元素被当作链表的唯一入口。 */
  5. pxList->pxIndex = ( xListItem * ) &( pxList->xListEnd );

  6. /* 为了确保链表元素是链表的结束,链表结束元素值必须是链表中最大的值。*/
  7. pxList->xListEnd.xItemValue = portMAX_DELAY;

  8. /*链表结束元素的Next和Previous指针都指向它自己,这样的话就能知道什么时候链表为空。 */
  9. /*链表结束元素的Next指针指向自己,之所以用&是因为XListEnd本身只是结构体变量,而不是指针变量。*/
  10. pxList->xListEnd.pxNext = ( xListItem * ) &( pxList->xListEnd );
  11. /*链表结束元素的Previous指针指向自己,之所以用&是因为XListEnd本身只是结构体变量,而不是指针变量。*/
  12. pxList->xListEnd.pxPrevious = ( xListItem * ) &( pxList->xListEnd );

  13. /*此时链表中的元素个数还是0*/
  14. pxList->uxNumberOfItems = 0;
  15. }
复制代码

以上分析完毕,菜鸟初学,请大神拍砖。
希望和大家多多讨论

收藏 1 评论3 发布时间:2015-1-8 11:36

举报

3个回答
阿松松 回答时间:2015-1-8 14:29:51
参考官方List.h里面的一段话
  1. * Lists are created already containing one list item.  The value of this
  2. * item is the maximum possible that can be stored, it is therefore always at
  3. * the end of the list and acts as a marker.  
复制代码
这段话一部分意思就是说:链表在被创建的时候就包含了一个链表元素,这个元素的值是可能被存储的最大值,因此,它必须一致在链表的末尾作为一个标志。
阿松松 回答时间:2015-1-12 18:26:22
顺便附上初始化结点的代码,其实很简单的了,就是确保这个结点不属于任何一个链表,难道新建结点的时候,结点就已经心有所属了不成?哈哈。。。

  1. void vListInitialiseItem( xListItem * const pxItem )
  2. {
  3.         /* Make sure the list item is not recorded as being on a list. */
  4.         pxItem->pvContainer = NULL;
  5. }
复制代码
我是酱油哥 回答时间:2015-1-12 19:45:54
不错 不错

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版