Jump to content

    

Amper25

Свой
  • Content Count

    213
  • Joined

  • Last visited

Everything posted by Amper25


  1. Спасибо за советы. Разобрался уже. Чтобы не подвисало надо перед чтением делать CloseHandle для Pipe c той стороны. Иначе, если вызванный процесс завершился, и попробовать выполнять ReadFile, то он будет до бесконечности ждать ввода с той стороны.
  2. Спасибо за ответы. А как обычно определяют конец передачи по Pipe? Я сейчас жду окончания процесса, и затем читаю Pipe. Но он подвисает во время чтения.
  3. Есть вопрос сугубо PC-программерский. ShellExecute() позволяет выполнять любые консольные команды. А вот как получать ответ этих команд? К примеру я выполняю Ping c помощью ShellExecute. При этом в окошке Ping пишет доступен или нет такой-то адрес. А как с помощью программы прочитать то что ответил этот пинг?
  4. Либо для ClassicTimeAnalyser - в основном это параметры: Tsu, Th - для входных сигналов, Tco - для выходных. Что касается размещения кусков проекта в конкретных метсах ПЛИС, слышал об этом, но почему то никогда не пользовал.
  5. Да уже наверно и не надо. Решил делать RAM с помощью мегафункций и файлы с их описанием конектить к моему VHDL.
  6. Пробовал компилить array of std_logic_vector, помещает в логические ячейки а не в RAM. Что делать?
  7. При компиляции проекта, тебе напишут сколько ячеек из 10000-25000 было использовано. CLK входы отличаются от других только тем, что они "заточены" под тактовый сигнал. То есть время распространения клока через них намного меньше чем через обычные входы. Таким образом тактовый сигнал можно заводить через любой логический вывод, но при этом параметры задержки будут намного хуже. Еще CLK можно использовать как обычный вход, если не хватает стандартных ног.
  8. Понтяно. А, вообще, есть ли в VHDL(без привязки к мегафункциям quartus-а) какой нибудь тип или класс, с помощью которого можно реализовать двупортовую память размером 1024х32 с разными клоками на чтение и запись?(+ защелки на чтение и запись) Или просто можно сделать так: ------------------------------------------- type RamBlock is array(0 to 1023) of std_logic_vector(31 downto 0); signal RAM : RamBlock; signal WR_ADDR: integer range 0 to 1023; signal WR_DATA: std_logic_vector(31 downto 0); signal WR_EN: std_logic; signal RD_ADDR: integer range 0 to 1023; signal RD_DATA: std_logic_vector(31 downto 0); if ((WR_CLK'event) and (WR_CLK='1')) then if (WR_EN='1') then RAM(WR_ADDR) <= WR_DATA; end if; end if; if ((RD_CLK'event) and (RD_CLK='1')) then RD_DATA <= RAM(RD_ADDR); end if; -------------------------------------------- И если сделать так, то разместит он в блоках RAM это или нет? И еще вопрос по защелкам WR_ADDR, WR_DATA ... С CycloneIII были проблемы, компиллер ругается что нельзя делать блоки RAM без защелкивания адреса и данных.(асинхронный вариант) Хотя для Acex1K можно было.
  9. Такой подход понятен, но как указать ему, что "array() of std_logic_vector" надо на кристале потом разместить в RAM блоках а не реализовать в виде логики? 8192x32 как то не очень хорошо реализуются с помощью D-тригеров.
  10. Раньше во всех проектах всю логику писал на VHDL, потом делал блок по VHDL файлу и к этому блоку в схемном редакторе подключал проводами RAM. Но вот захотелось написать все в виде одного VHDL файла, чтобы потом легче портировалось. А как описать блок RAM и потом подключить его к VHDL файлу в текстовом виде незнаю.
  11. ISPProg некоректно шьет AT45DBxx, если установить размер страницы не 528 а 512байт. Походу прога не доделаная и при работе с 512 байтными страницами неправильно передаются адреса. Есть ли еще какой вариант AT45DBxx LPT программатора?
  12. Не нашел ISPPROG здесь на форуме. Нагуглил ISPProg какогото поляка, это он?
  13. Существует ли в природе простой программатор последовательного FLASH типа AT45DB081 или др. из AT45DB серии? Нужно что-то вроде AVReal с LPT интрефейсом. То есть бесплатный софт и возможность настраивать железо под свое усмотрение.( например LPT2 - clk, LPT3 - MISO ...) Задача в общем-то не сложная, но как-то ломает покупать или самому писать софт.
  14. А, примерно так и предполагал. Всем спасибо за помощь.
  15. Не, был метод попроще, что то вроде: *(0xFFC0) = 125; Но не могу впомнить и найти исходники.
  16. Есть AVR у которого с помощью интерфейса внешней SRAM организован доступ так сказать к "периферии". То есть, для обращения к этой "периферии", надо выполнять LDS/STS с адресным пространоством external SRAM. В asm проблем нет, просто пишем нечто вроде STS ADDR,R16 ... и все. А как заставить GCC обратится к такой-то конкретной ячейке памяти, при условии что эта ячейка находится во внешней SRAM? А самой этой SRAM на самом деле нет. То есть нельзя линкеру сообщать что есть внешняя SRAM, чтобы он туда не запихал стек, HEAP или еще что нибудь. Делал давно подобное для IAR+ARM, но железно не могу вспомнить как именно.
  17. Вообщем, используется TFP401 приемник совместно с FPGA. Когда подаю на вход DVI сигнал, то все нормально работает, декодируется c нормальным клоком 108MHz и т.д. Если отключить либо сам источник DVI(видеокарта) либо питание источника, то клок на выходе TFP401 пропадает. Но если вообще отключить DVI разъем, то на выходе TFP401 может появится хаотический клок с частотой примерно 2MHz. И этот клок не зависит от того вставлен разъем или нет. Я так подозреваю, что TFP401 цепляется к каким-нибудь наводкам на DVI входе и пытается их декодировать, запускает PLL и т.д. Отсюда и этот странный клок. Вопрос в том, нормальная ли это ситуация или нет? Поделитесь опытом, кто работал с TFP401.
  18. да и в самом определении PostMessage HWND hWnd //handle of destination window Тоесть только окнам.
  19. BOOL PostMessage( HWND hWnd, // handle of destination window UINT Msg, // message to post WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); Проблема в этом: HWND hWnd, // handle of destination window Если я в качестве этого поставлю: MY_Thread->Handle, то компилятор ругается: Error: Cannot convert "const unsigned int" to "void" Потому что FORM->Handle - имеет тип void* а TThread->Handle это просто константа типа unsigned int. Из этого я сделал вывод, что сообщения можно посылать только окнам.
  20. Angelo, спасибо за PDF-ку, очень доходчиво написано. Возник такой вопрос: Я создаю объект TThread, и в Execute() ему помещаю то, что должно делатся в во втором потоке. Из этого Execute я могу посылать сообщения(Postmessage) основному окну и сообщать о текущем состоянии и пр. Но из основного окна я не могу посылать сообщения дочернему потоку, так как объект TThread не является окном. Что в этом случае делать? Просто объявить глобальную переменную bool FLAG, в основном потоке писать в нее, а в дочернем постоянно читать? Да, и как быть с ситуацией, когда запись FLAG прерывается на пол пути для переключения к другому процессу? Использовать эмбедерские свойства volatile, или организовывать Mutex для этого флага?
  21. Не умножители, а каскады диодов. Умножитель - умножает, а в ТДКС просто выпрямляются импульсы обратного хода, без умножения.
  22. Вот еще глюки поймал. Почему то в билдере, при добавлении(создании) класса TThread, из ClassExplorer исчезли созданные мною ранее классы. Причем они все равно используются и проект компилируется, но ClassExplorer их не видит. Что это может быть такое?
  23. Всем спасибо за ответы. Отлично, прямо то что надо в данной ситуации. На все реагирует, только не хочет закрывать прогу почемуто.
  24. Собственно вопрос в теме. Есть проект типа WindowsForm, всякие кнопочки и прочая лабуда. Проблема в следующем, при нажатии на кнопку, управление к форме возвращается только после того, как завершится выполнение функции, привязаной к данной кнопке. Так вот если кнопкой читать какой либо большой файл или общатся по COM порту, то прога на длительные времена просто "подвисает" и перестает реагировать. Самое простое что мне пришло на ум - это организовать чтение или обмен в другом потоке(tread). Но как это сделать я не представляю. Вообще в проекте типа формы это реально? В данный момент все решено с помощью объекта TIMER с периодом 1мс. Процесс чтения разбивается на куски, и после каждых 2кб данных, ждем следующее переполнение. Метод конечно крайне кривой, и хотелось бы сделать как нормальные люди... Вообщем, объясните, если не трудно что и как надо делать, или хоть направление куда идти. PS: среда C++Bulder 6.
  25. Неплохо еще при переводе из строки в число пользовать try-catch, чтобы прога не вылетала, если введено не число а символы или пустая строка.