5 存储于EEPROM管理【荐】.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5 存储于EEPROM管理【荐】.doc

????????这里,我们对 APM EEPROM存储接口进行讲解。如有问题,可以交。新浪@WalkAnt,转载本博客文章,请注明出处,以便更大范围的交流,谢谢。 第六部分?存储与EEPROM管理 ????????详细参考:/wiki/learning-ardupilot-storage-and-eeprom-management/ ????????用户参数、航点、集结点、地图数据以及其他有用的信息需要存储。ArduPilot提供4个基本存储接口: ????????1、AP_HAL::Storage对象:hal.storage; ????????2、StorageManager库,是hal.storage更高级别的封装; ????????3、DataFlash用于日志存储; ????????4、Posix?IO函数,是传统文件系统读写函数。 ????????其他用于永久存储信息的函数库,都是基于以上4种实现。例如:AP_Param library(用于处理用户可配置参数)是建立在StorageManager库之上的,而StorageManager库则是基于AP_HAL::Storage之上。AP_Terrain library(用于处理地形数据)则是建立在Posix IO functions之上,用于操作地形数据库。 1、AP_HAL::Storage library ????????AP_HAL::Storage对象适用于所有ArduPilot硬件平台。最小支持4096字节空间的存储,一些类似PX4v1的板子有8K EEPROM,Pixhawk有16K FRAM。所有这些都封装在AP_HAL::Storage API中。 hal.storage API,非常简单,仅3个函数: ????????1、init(),初始化存储系统; ????????2、read_block(),读块数据; ????????3、write_block(),写块数据。 ????????之所以这么简单,是因为APM团队鼓励开发者使用StorageManager API,而不是hal.storage。只有在代码移植或调试时,使用hal.storage会比较方便(原文:You should only be delving into hal.storage when doing bringup of a new board, or when debugging.)。 ????????存储空间的大小,在AP_HAL/AP_HAL_Boards.h文件中的HAL_STORAGE_SIZE宏中定义,如下: ????????#define CONFIG_HAL_BOARD_SUBTYPE HAL_BOARD_SUBTYPE_PX4_V2 ????????#define?HAL_STORAGE_SIZE????????????16384????????????// 存储空间 16KB ????????#endif ????????也就是说,我们不支持动态存储空间的定义。如果希望使用动态存储空间,可以使用Posix IO。 2、StorageManager library ????????在将ArduPilot代码移植到一个新的硬件板上时,hal.storage API非常简单,但是在操作存储区时就不那么好使了。我们会采用StorageManager。StorageManager library提供对存储区域“伪连续块”(一般用作不同的功能和目的)的访问。正因此我们将存储区域分配了不同的功能: ????????1、参数区; ????????2、飞行区域限制点数据区; ????????3、航点数据区; ????????4、集结点数据区。 ????????参见:?libraries/StorageManager/StorageManager.cpp,我们可以看到存储区域的划分: const StorageManager::StorageArea StorageManager::layout_copter[STORAGE_NUM_AREAS] PROGMEM = { ?????????// ------------------------???0-4096??分配给了 AVR版本的 APM ????{ StorageParam,???0,?????1536}, // 0x600 param bytes? ????{ StorageMission, 1536,??2422}, ????{ StorageRally,???3958,????90}, // 6 rally points ????{ StorageFence,???4048,????48},

文档评论(0)

cnsg + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档