2011-05-17 37 views
1

我必須控制一些由C接口控制的硬件。 C接口是C++頭文件,它包含一些函數,一個叫做set_mirror() - 我需要它。這個C文件還有一個int數組,名爲voltage,由set_mirror使用。 我想用cython來構建一個python函數,它實現了一個set_mir(伏特)函數。要做到這一點,我必須設置電壓陣列,但我不知道如何訪問:在Cython中訪問C-Int數組?

我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

不清楚最後的操作是什麼:你想將伏特python列表 中的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) 
+0

這是最有效的方法嗎?可以避免顯式轉換? – Acorbe 2013-09-27 14:14:01