具有mex函数的Octave中的内存映射

时间:2017-11-10 10:24:45

标签: octave mmap

我有一个简单的C代码(在Linux上运行),我想在Octave中实现它,所以我想我可以使用mex文件来处理内存映射并发送我收到(或发送)的信息在Octave和我的传感器中使用我的脚本。 C代码如下所示:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <poll.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mman.h>


#define CUSTOM_IP_MAP_SIZE                  0x10000
#define CUSTOM_IP_BASEADDR                  0x43C00000
#define CUSTOM_IP_S00_AXI_SLV_REG0_OFFSET   0
#define CUSTOM_IP_S00_AXI_SLV_REG1_OFFSET   4

int main(void)
{
    uint32_t leds=0x0;
    int fd = open("/dev/uio0", O_RDWR);
    void *ptr;

    if (fd < 0) {
        perror("open");
        exit(EXIT_FAILURE);
    }
    ptr = mmap(NULL, CUSTOM_IP_MAP_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

    while (1) {
        leds = *((unsigned *)(ptr + CUSTOM_IP_S00_AXI_SLV_REG1_OFFSET));    //Read from the IP (slv_reg1).
        *((unsigned *)(ptr + CUSTOM_IP_S00_AXI_SLV_REG0_OFFSET)) = leds;    //Write to the IP (slv_reg0).
    }

    close(fd);
    exit(EXIT_SUCCESS);
}

我编译了没有错误的代码和以下命令:

  

mkoctfile --mex mmap.c

我在Octave中运行时出现以下错误:

  

错误:无法安装.mex文件函数'mmap'

我是否应该继续尝试使用mex-function进行此操作,还是有更好的选择吗?

感谢您的帮助。

0 个答案:

没有答案