在Cython中访问C-Int数组?

时间:2011-05-17 14:51:07

标签: cython

我必须控制一些由C接口控制的硬件。 C接口是C ++头文件,它包含一些函数,一个叫做set_mirror() - 我需要它。此C文件还有一个名为voltage的int数组,由set_mirror使用。 我正在尝试使用cython来构建一个python函数,它实现了一个set_mir(伏特)函数。要做到这一点,我必须设置电压阵列,但我不知道如何访问它:

我的pxy文件:

cdef extern from 'mmdm_lin38usb.h':
    int voltage[40]
    int init_dac()
    void close_dac()
    void set_mirror()


init_dac()

def set_mir(volt):
    for i in range(40):
# Only for testing, how to access to int array.
        print voltage[i]

    if len(volt)!=40:
        raise "Need 40 values"
    else:
        volt=map(round,volt)
        volt=map(int,volt)
        voltage=volt
        set_mirror()

1 个答案:

答案 0 :(得分:1)

不清楚最终操作是什么:你想从伏特蟒蛇列表中设置40个值吗? 成40个整数的数组?我建议如下。如果可能的话 不要修改全局int数组。注意电压阵列是本地的。

import clib

cdef extern from 'mmdm_lin38usb.h':
    int init_dac()
    void close_dac()
    void set_mirror(int *voltage)

init_dac()

cpdef set_mir(volt):
    cdef int voltage[40]

    if len(volt) != 40:
        raise ValueError("Need 40 values")

    for i from 0 <=  i < 40:
        print voltage[i]
        voltage[i] = int(clib.round(volt[i]))

    set_mirror(voltage)