2013-12-09 3 views
0

Я использую Redhawk 1.9. Я создал устройство Redhawk из среды 1.8.4 IDE.Ошибка преобразования при преобразовании устройства Redhawk от 1.8.4 до 1.9

  • 1.8.4 Redhawk Device (созданный со всеми настройками по умолчанию)
  • C++ реализация
  • Импорт существующего проекта в 1,9 IDE
  • Я прочитал заметки о выпуске Redhawk 1.9 о том, как конвертировать между 1.8.4 и 1,9 проекты * http://redhawksdr.github.io/Documentation/Release_Notes_1.9.0.pdf *

импортировать по умолчанию 1.8.4 устройство в 1.9 IDE с. Я могу запустить и построить устройство 1.8.4 в среде IDE 1.9. Когда я пытаюсь восстановить код для устройства 1.8.4, IDE спросит меня, хочу ли я обновить до 1.9. Popup говорит: «ConversionTestDevice использует устаревшие генераторы кода. Вы хотите обновить этот проект?». Я решил сделать обновление. Затем я получаю следующее сообщение об ошибке:

/USR/местные/Redhawk/ядро ​​/ бен/update_project вернулся с кодом ошибки 1

TraceBack (самый последний вызов последним): Файл «/ USR/местные/Redhawk/core/bin/update_project ", строка 222, в? если check_bulkio_input (compCpp): Файл "/ USR/местные/Redhawk/ядро ​​/ бен/update_project", строка 105, в check_bulkio_input для линии в strip_comments (открытое (имя файла, 'г')): Файл «/ USR/local/redhawk/core/bin/update_project ", строка 86, в strip_comments ch + = safe_next (chars) Файл«/usr/local/redhawk/core/bin/update_project », строка 56, в safe_next return next (item) NameError: глобальное имя 'next' не определено

Я хотел бы получить предложения по тому, как конвертировать 1.8.4 устройство в устройство 1.9.

+0

Я обнаружил, что скрипт python update_project несовместим с Python версии 2.4.3. Похоже, что эта версия python не распознает следующую команду на итераторе. При попытке более поздней версии python сценарий обновления работал, как ожидалось. –

+0

Я использовал CentOS 5.3, который поставляется с версией 2.4.3 Python. –

ответ

0

На основании вашего сообщения об ошибке «NameError: глобальное имя« next »не определено» и содержимое версии сценария python версии 1.9.0, я предполагаю, что вы используете версию python менее 2.6. Следующая функция - встроенный python, который был введен в Python 2.6 (http://docs.python.org/2/library/functions.html#next). Это известная ошибка в скрипте обновления, так как она должна быть совместима с Python 2.4, а также с Python 2.6 (по умолчанию установки python по умолчанию в CentOS 5 и 6 соответственно). Чтобы это исправить, вы можете изменить update_project скрипт, расположенный в $ OSSIEHOME/bin/update_project и определим следующую функцию:

if not hasattr(__builtins__, 'next'): 
    # Python 2.4 does not have a free-standing next() function 
    def next(iterator, default): 
     """ 
     Backwards compatibility next() equivalent for Python 2.4. 
     """ 
     try: 
      return iterator.next() 
     except StopIteration: 
      return default 

Затем вы должны удалить функцию ранее определенную «safe_next».

Наконец, вы должны заменить два вызова «safe_next» с призывом к вновь реализовать следующую функцию и добавить второй аргумент пустой строкой «»

Для ясности дифф из update_project с этими изменениями ниже:

@@ -46,16 +46,16 @@ Options: 

_bulkio_re = re.compile('BULKIO_data[A-Za-z]+_In_i') 

-def safe_next(item): 
- """ 
- Returns the next value of the iterator, or an empty string if the end of 
- iteration has been reached. Allows string processing to gracefully handle 
- the end of a line without explicit catch statements. 
- """ 
- try: 
-  return next(item) 
- except StopIteration: 
-  return '' 
+if not hasattr(__builtins__, 'next'): 
+ # Python 2.4 does not have a free-standing next() function 
+ def next(iterator, default): 
+  """ 
+  Backwards compatibility next() equivalent for Python 2.4. 
+  """ 
+  try: 
+   return iterator.next() 
+  except StopIteration: 
+   return default 

def strip_comments(source): 
    """ 
@@ -75,7 +75,7 @@ def strip_comments(source): 
       # Look for end comment token; if the end of the line is reached 
       # ch will be an empty string 
       while ch == '*': 
-     ch = safe_next(chars) 
+     ch = next(chars, '') 
        if ch == '/': 
         inComment = False 
         break 
@@ -83,7 +83,7 @@ def strip_comments(source): 
      if ch == '/': 
       # Read the next character to see if it matches a comment token 
       # (if it does not, both characters will be added to the output) 
-    ch += safe_next(chars) 
+    ch += next(chars, '') 
       if ch == '/*': 
        # Comment, start discarding 
        inComment = True 
Смежные вопросы