Kluwer 0 22 ноября, 2019 Опубликовано 22 ноября, 2019 · Жалоба Коллеги, никто не порекомендует какой-нибудь редактор tcl-кода с возможностью объединения файлов в проект? Я поясню. Есть большой tcl-скрипт, в к-ром надо разобраться, он разбит на кучу подскриптов, функций и постоянных. Вот хотелось бы не просто видеть текст в текущем файле а и при нажатии или наведении на, скажем, функцию или постоянную, видеть в выпадающем окне её значение, или, хотя бы, отсыл в файл где она определена. Ну, в общем, как в большинстве типовых сред программирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 22 ноября, 2019 Опубликовано 22 ноября, 2019 · Жалоба Sublime text editor позволяет видеть структуру папок и значения переменных, добавленных в проект. Конкретно с TCL я много дела не имел, но вполне устраивает. Единственная проблема самого языка - запуск скриптов может осуществлятся с папки проекта, в то время, когда сами скрипты находятся в других папках: отсюда сложность задания путей, они будут ревалентны к проекту, а не к файлу скрапта. В любом случае попробуйте с обязательным добавлением HDLproject пакета. Возможно и подойдёт. Хотя мне интересно может ли тот же Visual Studio делать такие же фокусы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wolfman 0 22 ноября, 2019 Опубликовано 22 ноября, 2019 · Жалоба 3 часа назад, Nick_K сказал: Единственная проблема самого языка - запуск скриптов может осуществлятся с папки проекта, в то время, когда сами скрипты находятся в других папках: отсюда сложность задания путей, они будут ревалентны к проекту, а не к файлу скрапта. Путь можно определять в самом скрипте, запуская поиск и запоминая путь в переменной. Либо определять папку в которой находится главный скрипт и лазить по соседним, если другие скрипты лежат в соседних папках. Или я чего-то недопонял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 22 ноября, 2019 Опубликовано 22 ноября, 2019 · Жалоба 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 которой там нет. Соответственно относительные пути будут вести вникуда и не будет возможности работать со ссылками, именами переменных (точнее определять где они инициализированы) и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 22 ноября, 2019 Опубликовано 22 ноября, 2019 · Жалоба Приветствую! 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 22 ноября, 2019 Опубликовано 22 ноября, 2019 · Жалоба 4 minutes ago, RobFPGA said: Ну так сделайте в начале main.tcl Так а мне то что? Я свои скрипты могу и с закрытыми глазами пропихнуть куда нужно А вот редактор, который обращается по ссылкам может так и не сделать) Опять же мне не нужно ещё такого) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба On 11/22/2019 at 4:37 PM, RobFPGA said: И пляшите в путях от печки $::DSN_ROOT - $::DSN_ROOT/tcl/package.tcl Встаю на тропу познания себя волшебства скриптования. Хотел спросить, а что означает два двоеточия перед DSN_ROOT? Не встречал такой синтаксис. Остальное пытаюсь найти в help Vivado UPD Ещё покопавшись нашёл, что это просто обозначение "здесь и сейчас". Но с какой целью оно применяется в скрипте непонятно. И кто такой инфо скрипт тоже Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба Приветствую! Это namespace - $:: ... говорить что эта переменная определена в топе скрипта (global namespace). Удобно когда надо из внутри proc дергать глобальные переменные. info script возвращает путь и имя выполняемого в данный момент скрипта Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 53 minutes ago, RobFPGA said: Приветствую! Это namespace - $:: ... говорить что эта переменная определена в топе скрипта (global namespace). Удобно когда надо из внутри proc дергать глобальные переменные. info script возвращает путь и имя выполняемого в данный момент скрипта Удачи! Rob. То есть вначале выполнить некий main.tcl, а далее барахтаться в проекте? Такой нюанс, если работать из-под IDE, как быть тогда? Придётся иметь некий namespaces_declaration.tcl, добавленный в сорсы и постоянно исполняемый с данными переменными Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба Приветствую 49 minutes ago, Nick_K said: То есть вначале выполнить некий main.tcl, а далее барахтаться в проекте? Не понял что вы имели ввиду. 50 minutes ago, Nick_K said: Такой нюанс, если работать из-под IDE, как быть тогда? Придётся иметь некий namespaces_declaration.tcl, добавленный в сорсы и постоянно исполняемый с данными переменными Вообще для TCL есть стандартная технология package которая позволяет управлять иерархией проекта на tcl. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 55 minutes ago, RobFPGA said: Не понял что вы имели ввиду. К примеру я хочу задать в запускаемом скрипте (из-под IDE) переменную, которая содержит абсолютный путь к данному скрипту. При выполнении Вашего присвоения, Vivado ругается на normilize в любых вариантах расположения и конфигурации. Раньше я пользовался конструкцией get_property DIRECTORY [current_project] - оно спасало когда работать с одним проектом. Но когда начинаешь править IP коры или вызывать какие-то скрипты из другого проекта, то начинается белиберда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба Приветствую! 48 minutes ago, Nick_K said: При выполнении Вашего присвоения, Vivado ругается на normilize в любых вариантах расположения и конфигурации. Правильно ругается - normilize это что ? set DSN_ROOT [file normalize [file join [file dirname [info script]] ".."]] Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба Приветствую! Чудеса - "... 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 Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба Да обычный копипаст с браузера) Хотя не исключено) UPD да, с браузера влез какой-то символ. Чудеса Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться