Перейти к содержанию
    

Коллеги,

никто не порекомендует какой-нибудь редактор tcl-кода с возможностью объединения файлов в проект?

Я поясню. Есть большой tcl-скрипт, в к-ром надо разобраться, он разбит на кучу подскриптов, функций и постоянных. Вот хотелось бы не просто видеть текст в текущем файле а и при нажатии или наведении на, скажем, функцию или постоянную, видеть в выпадающем окне её значение, или, хотя бы, отсыл в файл где она определена. Ну, в общем, как в большинстве типовых сред программирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Sublime text editor позволяет видеть структуру папок и значения переменных, добавленных в проект. Конкретно с TCL я много дела не имел, но вполне устраивает. Единственная проблема самого языка - запуск скриптов может осуществлятся с папки проекта, в то время, когда сами скрипты находятся в других папках: отсюда сложность задания путей, они будут ревалентны к проекту, а не к файлу скрапта. В любом случае попробуйте с обязательным добавлением HDLproject пакета. Возможно и подойдёт. Хотя мне интересно может ли тот же Visual Studio делать такие же фокусы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Nick_K сказал:

Единственная проблема самого языка - запуск скриптов может осуществлятся с папки проекта, в то время, когда сами скрипты находятся в других папках: отсюда сложность задания путей, они будут ревалентны к проекту, а не к файлу скрапта.

Путь можно определять в самом скрипте, запуская поиск и запоминая путь в переменной.

Либо определять папку в которой находится главный скрипт и лазить по соседним, если другие скрипты лежат в соседних папках.

Или я чего-то недопонял?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, wolfman said:

Путь можно определять в самом скрипте, запуская поиск и запоминая путь в переменной.

Либо определять папку в которой находится главный скрипт и лазить по соседним, если другие скрипты лежат в соседних папках.

Или я чего-то недопонял?

 

Всё верно. Но тут то и подвох - почти все известные мне редакторы при работе со ссылками на другие файлы (ссылки имеются ввиду относительные, а не абсолютные пути) отталкиваются от текущего файла. Но при этом процесс, который запускает данный скрипт находится в другой папке и соответственно все относительные ссылки для него будут недействительными.

Простой пример:

Древо файлов выглядит так:

my_project
	\-> project
		\-> work_files
			\-> device.xpr
	\-> tcl
		\-> main.tcl
		\-> package.tcl

Основной скрипт main.tcl для работы использует некоторые переменные в файле package.tcl. Но так как запускается основной проект device.xpr и можно получить доступ именно к папке проекта, все относительные пути в файле main.tcl будут иметь следующий синтаксис:

../../tcl/package.tcl

Но если начать редактировать в привычном редакторе файл main.tcl скрипты будут опускаться не в папку my_project, а ниже и пытаться там найти папку tcl которой там нет. Соответственно относительные пути будут вести вникуда и не будет возможности работать со ссылками, именами переменных (точнее определять где они инициализированы) и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

9 minutes ago, Nick_K said:

все относительные пути в файле main.tcl будут иметь следующий синтаксис:

../../tcl/package.tcl

Ну так сделайте в начале main.tcl   

set DSN_ROOT [file normalize [file join [file dirname [info script]] ".."]]
...

И пляшите в путях от печки $::DSN_ROOT  -  $::DSN_ROOT/tcl/package.tcl

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, RobFPGA said:

Ну так сделайте в начале main.tcl 

Так а мне то что? Я свои скрипты могу и с закрытыми глазами пропихнуть куда нужно :wink:

А вот редактор, который обращается по ссылкам может так и не сделать) Опять же мне не нужно ещё такого)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/22/2019 at 4:37 PM, RobFPGA said:

И пляшите в путях от печки $::DSN_ROOT  -  $::DSN_ROOT/tcl/package.tcl

Встаю на тропу познания себя волшебства скриптования. Хотел спросить, а что означает два двоеточия перед DSN_ROOT? Не встречал такой синтаксис. Остальное пытаюсь найти в help Vivado

UPD Ещё покопавшись нашёл, что это просто обозначение "здесь и сейчас". Но с какой целью оно применяется в скрипте непонятно. И кто такой инфо скрипт тоже

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

Это namespace  - $:: ... говорить что эта переменная определена в топе скрипта (global namespace). Удобно  когда  надо из внутри proc дергать глобальные переменные. 

info script возвращает  путь и имя выполняемого в данный момент скрипта

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 minutes ago, RobFPGA said:

Приветствую!

Это namespace  - $:: ... говорить что эта переменная определена в топе скрипта (global namespace). Удобно  когда  надо из внутри proc дергать глобальные переменные. 

info script возвращает  путь и имя выполняемого в данный момент скрипта

Удачи! Rob.

То есть вначале выполнить некий main.tcl, а далее барахтаться в проекте?

Такой нюанс, если работать из-под IDE, как быть тогда? Придётся иметь некий namespaces_declaration.tcl, добавленный в сорсы и постоянно исполняемый с данными переменными

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую

49 minutes ago, Nick_K said:

То есть вначале выполнить некий main.tcl, а далее барахтаться в проекте?

Не понял что вы имели ввиду.   

50 minutes ago, Nick_K said:

Такой нюанс, если работать из-под IDE, как быть тогда? Придётся иметь некий namespaces_declaration.tcl, добавленный в сорсы и постоянно исполняемый с данными переменными

Вообще для TCL есть стандартная технология  package  которая позволяет управлять иерархией  проекта на tcl.  

Удачи! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

55 minutes ago, RobFPGA said:

Не понял что вы имели ввиду. 

К примеру я хочу задать в запускаемом скрипте (из-под IDE) переменную, которая содержит абсолютный путь к данному скрипту.

При выполнении Вашего присвоения, Vivado ругается на normilize в любых вариантах расположения и конфигурации.

Раньше я пользовался конструкцией get_property DIRECTORY [current_project] - оно спасало когда работать с одним проектом. Но когда начинаешь править IP коры или вызывать какие-то скрипты из другого проекта, то начинается белиберда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

48 minutes ago, Nick_K said:

При выполнении Вашего присвоения, Vivado ругается на normilize в любых вариантах расположения и конфигурации.

Правильно ругается  -  normilize   это что ? :unknw:

set DSN_ROOT [file normalize [file join [file dirname [info script]] ".."]]

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, RobFPGA said:

Правильно ругается  -  normilize   это что ? 

Опечатался. У меня в коде всё правильно. Ругается вот так:

Quote

source dump.tcl
bad option "normalize ": must be atime, attributes, channels, copy, delete, dirname, executable, exists, extension, isdirectory, isfile, join, link, lstat, mtime, mkdir, nativename, normalize, owned, pathtype, readable, readlink, rename, rootname, separator, size, split, stat, system, tail, type, volumes, or writable
    while executing
"file normalize [file join [file dirname [info script]] ".."]"
    invoked from within
"set tcl_loc [file normalize [file join [file dirname [info script]] ".."]]"
    (file "dump.tcl" line 1)

Команда pwd указывает на локацию файла dump.tcl. И запускаю из консоли в Vivado IDE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

Чудеса -   "... bad option "normalize ": must be atime, attributes, channels, copy, delete, dirname, executable, exists, extension, isdirectory, isfile, join, link, lstat, mtime, mkdir, nativename, normalize, owned, ..."

У вас там какой то матерный непечатный  символ затесался возле normalize :this:

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да обычный копипаст с браузера) Хотя не исключено)

UPD да, с браузера влез какой-то символ. Чудеса :wink3:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...