直接从 RAM 发送原始数据
sending raw data directly from RAM
在 SoC 解决方案中,fpga 直接在 RAM 中保存大量整数值。
另一端的处理器可以看到此数据(整数),处理器应通过网络发送此数据,而无需使用 asio 库对其进行修改。
到目前为止,这个数据还不是太大,我将它复制到一个向量中,然后毫无问题地通过以太网发送它(请参阅代码)。
在当前的项目中,数据量已经增加(大约 200MB),我想直接从 ram 发送它,而不用之前将其复制为矢量。当然我会把它分成几部分。
有没有办法直接从 void (void *ptr) 类型的 RAM 指针发送原始数据,或者有更好的方法来做到这一点?
提前致谢
std::vector<int> int_vect;
for( uint32_t i=from_index ; i<=to_index ; i++ )
{
int_vect.push_back(my_memory_ptr->get_value_axis(....));
}
asio::write(z_sock_ptr->socket_, asio::buffer(int_vect));
可以从原始数据创建 asio 缓冲区,它本质上只是一个非拥有数组视图:
asio::write(z_sock_ptr->socket_, asio::buffer{p_data, bytes_count});
是。 asio::buffer
的重载之一提供 exactly this functionality:
mutable_buffer buffer(
void * data,
std::size_t size_in_bytes);
» more...
如果数据是连续的,我们可以这样使用:
void* data = /* get data */;
size_t size = /* get size */;
asio::write(z_sock_ptr->socket_, asio::buffer(data, size));
在 SoC 解决方案中,fpga 直接在 RAM 中保存大量整数值。 另一端的处理器可以看到此数据(整数),处理器应通过网络发送此数据,而无需使用 asio 库对其进行修改。 到目前为止,这个数据还不是太大,我将它复制到一个向量中,然后毫无问题地通过以太网发送它(请参阅代码)。 在当前的项目中,数据量已经增加(大约 200MB),我想直接从 ram 发送它,而不用之前将其复制为矢量。当然我会把它分成几部分。 有没有办法直接从 void (void *ptr) 类型的 RAM 指针发送原始数据,或者有更好的方法来做到这一点?
提前致谢
std::vector<int> int_vect;
for( uint32_t i=from_index ; i<=to_index ; i++ )
{
int_vect.push_back(my_memory_ptr->get_value_axis(....));
}
asio::write(z_sock_ptr->socket_, asio::buffer(int_vect));
可以从原始数据创建 asio 缓冲区,它本质上只是一个非拥有数组视图:
asio::write(z_sock_ptr->socket_, asio::buffer{p_data, bytes_count});
是。 asio::buffer
的重载之一提供 exactly this functionality:
mutable_buffer buffer(
void * data,
std::size_t size_in_bytes);
» more...
如果数据是连续的,我们可以这样使用:
void* data = /* get data */;
size_t size = /* get size */;
asio::write(z_sock_ptr->socket_, asio::buffer(data, size));