簡體   English   中英

錯誤返回,beaglebone上未設置任何異常

[英]error return without exception set on beaglebone

我正在嘗試使用Beaglebone Black rev 3構建相量測量單元。以下是代碼。 運行時會顯示錯誤消息:

prussdrv_open open failed
Traceback (most recent call last):
  File "/var/lib/cloud9/pmu.py", line 36, in <module>
    pru.open(0) # open connection to PRU 0
SystemError: error return without exception set

代碼在這里:

import pypruss as pru
import mmap
import numpy as np
import struct
import time

 ## MEMORY LOCATIONS ##

 PRU_ICSS=0x4A300000
 PRU_ICSS_LEN=512*1024

 RAM_START=0x00000000
 RAM1_START=0x00002000
 RAM2_START=0x00012000

 TOTAL_BUFFER_LEN=0x00000FA0
 BUFFER_LEN=TOTAL_BUFFER_LEN/2
 BUFFER1_START=RAM2_START+4
 BUFFER2_START=BUFFER1_START+BUFFER_LEN

 ## FUNCTION DEFINITIONS ##
def processRawADC(value):
   value=0x00000FFF&value
   value=int(value)
   value=(value*1.8)/(2^12)
   return value

 def channelID(value):
   value=0x000F0000&value
   value=value>>16
  return value

 ## PRU SETUP ##
pru.modprobe( ) # enable uio_pruss module
pru.init( ) #initialize PRU
pru.open(0) # open connection to PRU 0
pru.pruintc_init( ) # configure interrupt handlers
pru.exec_program(0,"./oneshot.bin") # load assembly file

counter = 0

f=open("/dev/mem","r+b")
output=open("./results.txt","w")

while counter<10 :
 start=time.time()
 pru.wait_for_event(0)

 ddr_mem=mmap.mmap(f.fileno( ),PRU_ICSS_LEN,offset=PRU_ICSS)
 shared=struct.unpack('L ',ddr_mem[RAM2_START:RAM2_START+4])
print(shared[0])
if shared[0]==1 :
    print  ("buffer 1")
    for i in range(0,500) :
        fifo = struct.unpack ( 'L ' ,ddr_mem[BUFFER2_START+( i*4) 
:BUFFER2_START+4+(i*4)])[0]
    value=processRawADC(fifo)
    channelNum=channelID(fifo)
    output.write(str(channelNum)+","+str(value)+"nn")
    counter += 1
    pru.clear_event(0)

elif shared[0] == 2:
       shared=struct.unpack('L ',ddr_mem[RAM2_START:RAM2_START+4])
print("buffer 2")
for i in range(0,500):
    fifo=struct.unpack('L',ddr_mem[BUFFER2_START+(i*4) :BUFFER2_START+4+
(i*4)])[0]
    value = processRawADC(fifo)
    channelNum = channelID(fifo)
    output.write(str(channelNum)+","+str(value)+"nn")
    counter +=1
    pru.clear_event(0)
    end=time.time( )
 #print end-start

f.close( )
output.close( )

pru.clear_event(0)
pru.pru_disable(0)
pru.exit ( )

我找不到錯誤在哪里。 請幫忙。

看起來PyPRUSS代碼中有錯誤。 pypruss_open函數未正確設置異常信息,但返回錯誤指示( NULL )。 當函數這樣做時,Python不喜歡它。

查看pypruss_open ,如果prussdrv_open失敗並返回-1作為錯誤指示,它將以這種方式失敗。 反過來,它本身也可能會失敗(如果該設備已經打開),或者__prussdrv_memmap_init失敗。 不幸的是,似乎無法獲取有關錯誤確切原因的信息。

您可以做什么來調試此問題? 如果您找不到任何明顯的東西(如在調用pru.modprobe()之后丟失/dev/uid0 ),則可以使用strace運行腳本,以查看錯誤之前發生了哪些系統調用。 然后,您查看我在上面提供的鏈接下的源代碼,並查看何時確切發生故障。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM