Доступ к массивам C-Int в Cython? - PullRequest
1 голос
/ 17 мая 2011

Я должен управлять некоторым оборудованием, которое управляется интерфейсом C. Интерфейс C - это заголовочный файл C ++, который содержит некоторые функции, называемые set_mirror (), - которые мне нужны. Этот C-файл также имеет массив int, называемый Voltage, который используется 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 Ответ

1 голос
/ 24 мая 2011

Неясно, какова последняя операция: вы хотите установить 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)
...