为嵌入式系统寻找一个线性代数库(没有malloc和free)

时间:2012-06-10 10:03:50

标签: c++ c embedded linear-algebra

我习惯使用微控制器。我在我的应用程序中使用的RTOS没有free和malloc(以及其他类似assert的调用),有时候它们可用,但我更喜欢在我的系统中使用Static。

我已经开始使用线性代数,但大多数都需要动态内存。我的矩阵很密集,很小(不超过10x10)。

我真的很喜欢Eigen(一切都可以在编译时决定静态),但显然有一个错误要求断言,我的RTOS不提供(即使使用-DNDEBUG)。图书馆 应提供矩阵分解程序(如QR,Cholesky,LU ...)

我更喜欢C而不是C ++。有什么建议? 非常感谢提前!

3 个答案:

答案 0 :(得分:4)

CLAPACK有什么问题吗?甚至直接使用Fortran LAPACK(您可以使用gfortran编译它,这是gcc的一部分)。

[C] LAPACK的例程将已经分配的参数中的所有内存缓冲区都占用,并且不进行任何堆分配。对于除了其他参数之外还带有“工作”缓冲区的例程(例如,用于计算SVD的dgesdd),通常可以使用特殊的“仅限大小”参数调用它们,并返回以响应所需的工作大小缓冲区,然后您可以根据需要分配缓冲区。

答案 1 :(得分:1)

重新定义断言宏似乎是一个很好的解决方案。

但您甚至可以提供自己的malloc和免费实现或静态链接相应的内存管理库: http://blog.reverberate.org/2009/02/one-malloc-to-rule-them-all.html

答案 2 :(得分:0)

如果您的应用程序可以使用Q16.16定点数学,则libfixmatrix可以是一个选项:

https://github.com/PetteriAimonen/libfixmatrix