寻找适用于嵌入式系统的线性代数库(不需要使用malloc和free函数)

5

我曾经使用微控制器工作。我在我的应用程序中使用的RTOS不具有free和malloc(以及其他类似assert的调用),有时它们可能可用,但我更喜欢在我的系统中拥有所有静态内容。

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

我真的很喜欢Eigen(可以在编译时决定所有内容是否为静态),但显然存在一个调用断言的错误,而我的RTOS没有提供这些(即使使用-DNDEBUG)。该库应该提供矩阵分解例程(如QR,Cholesky,LU ...)

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


你使用哪种微控制器架构/系列,使用什么编译器?GCC? - Bojangles
为什么不添加自己的assert宏/头文件呢?assert只是一个宏,您可以将其定义为空以使其编译。但是,要实际使用断言,您需要将其定义为类似于if(!(expr)){stop_program_however_that_is();}的内容,除非定义了NDEBUG。 - Ambroz Bizjak
感谢您的快速回复。架构是CortexM3/4/4F(甚至ARM7TDMI)。我正在使用GCC。我还将测试重新定义宏断言。 - user1145038
3个回答

4
有关CLAPACK有什么问题吗?或者直接使用Fortran LAPACK(可以使用gcc中的gfortran编译)。[C]LAPACK的例程在其参数中使用已分配好的所有内存缓冲区,并且不进行任何堆分配。对于除其他参数外还需要“工作”缓冲区(例如,用于计算SVD的dgesdd)的例程,通常可以使用特殊的“仅大小”参数调用它们,并获得所需的工作缓冲区的响应大小,然后可以自行分配。

这就是FORTRAN规则的美妙之处:为了避免库中的RAM分配错误,用户必须自己allocate()所有RAM并传递进去。啊,那些“work”数组的日子…… - tehwalrus

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接