本文深入剖析了新版PX4飞行控制器的姿态控制流程中的核心代码,旨在帮助开发者和爱好者更好地理解和优化自主飞行器的姿态控制系统。
在不同的机器结构上读取非格式化数据可能存在困难。(ByteOrder命令能够解决许多此类问题。IDL5.1版本引入了新的Swap_If_Big_Endian 和 Swap_If_Little_Endian关键字到Open命令中,使得编写跨平台代码以读取二进制文件成为可能。)
为了在不同架构的计算机之间传递非格式化数据,IDL支持XDR(eXternal Data Representation, 外部数据表示)文件格式。这种由Sun Microsystems创建的数据格式几乎可以在所有现代计算机上使用。它虽然存储了少量元信息,但仍然保持简洁。
如果以XDR形式写入文件,则该数据在不同机器之间传输时将非常方便。换句话说,非格式化的 XDR 文件成为跨平台的通用文件格式。
要读取或写入 XDR 格式的文件,请使用带有XDR关键字打开:
```idl
IDL> OpenW, lun, process.dat, Get_Lun, XDR
```
常规WriteU命令用于将数据写入文件:
```idl
IDL> WriteU, lun, header, edge
IDL> Free_Lun, lun
```
在读取XDR格式的字符串时,会自动存储其长度并恢复。这意味着不需要像处理普通非格式化文件那样每次都初始化一个正确大小的字符串变量。
例如,打开并从 XDR 文件中读取信息可以这样操作:
```idl
IDL> OpenR, lun, process.dat, XDR
IDL> thisHeader =
IDL> thisData = IntArr(256, 256)
IDL> ReadU, lun, thisHeader, thisData
IDL> Free_Lun, lun
```
使用关联变量处理非格式化数据文件
大型的非格式化数据通常由一系列重复单元组成。例如,卫星每半小时拍摄一幅512*600像素的浮点图像,并将这些图像连续存储在一个大文件中供定期下载。
一个IDL关联变量通常是处理这种类型的数据结构的最佳方式(有时是唯一的方式)。它通过映射数组或结构到数据文件的内容来实现。每个重复单元被视为数组的一个元素,第一个单元索引为0等。
与常规变量不同的是,关联变量不会将所有数据都加载至内存中;而是当访问特定部分时才进行相应的读写操作以获取所需的数据。