试图将特征矩阵强制为硬编码地址

问题描述

我有一个基于 Eigen 的大型库,可以在 Linux 上运行良好,但现在需要移植到没有堆的嵌入式环境中。

理论上,使用 Map 这似乎是可行的,但如果有人能证实我对具体细节的理解,我将不胜感激。

所有特征矩阵当前都存储在一个结构体中,例如,

struct {
    Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> array1;
    Eigen::Matrix<double,Eigen::Dynamic> array2;
} my_struct;

my_struct.array1 = Eigen::Matrix<double,Eigen::Dynamic>::Zero(rows,cols);
my_struct.array2 = Eigen::Matrix<double,cols);

我尝试在结构中使用 Map 但这给了我各种各样的编译错误,我想我可能以错误的方式看待问题。

所以现在我想我应该做类似的事情

struct {
    double *array1_addr;
    double *array2_addr;
} my_struct;

my_struct.array1_addr = (double *)0x100000; // address of first array
my_struct.array2_addr = (double *)0x200000; // address of second array

Eigen::Map< Eigen::Matrix<double,Eigen::Dynamic> > map1(my_struct.array1_addr,rows,cols);
map1.setZero();
Eigen::Map< Eigen::Matrix<double,Eigen::Dynamic> > map2(my_struct.array2_addr,cols);
map2.setZero();

也就是说,我从结构体中取出所有数组,并在我使用它的任何地方使用 Map 重新指定数组的地址。

有更好的方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)