ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

记录下阅读Apollo3 wsf源码过程中的问题1

2022-06-25 23:03:36  阅读:146  来源: 互联网

标签:Apollo3 wsf 队列 适配 链表 互斥 源码 内存


  Apollo SDK中提供的BLE stack 是exactle,后面被arm收购了,改名为cordio ble集成在mbed os里。

  exactle stack里提供了一套os层来适配不同的RTOS的wsf层,apollo sdk中已经适配freertos的了,所以先理解一下wsf层的功能。

  wsf层主要有动态内存管理(内存池),队列操作,定时器,进出临界区等,今天先主要看下内存池和队列的实现。

  内存池

  在内存池头部存放管理不同大小的内存区的数据结构,被管理的每个内存区由固定大小的内存块组成,并且这些固定大小的内存块使用单向链表连在一起。

  需要注意的是,wsf的内存池实现里使用了全局变量,导致整个系统只能初始化一个内存池,如果想做到每个模块单独一个内存池,需要修改代码,

  另外使用开关中断的方式进出临界区,而不是使用互斥锁,猜测应该是协议栈中有部分逻辑有实时性要求,而互斥锁会加剧分配内存的时间不确定性。

  队列

  在实现上使用的是有头有尾的单向链表,对比和freertos中队列,主要的不同是,wsf中入队的数据结构,本身必须能形成单线链表,即第一个数据成员必须是pNext指针。

 

  

标签:Apollo3,wsf,队列,适配,链表,互斥,源码,内存
来源: https://www.cnblogs.com/chen0207/p/16412650.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有