Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опрос порта + лог в реальном времени (100+ кГц), Остановить Win или разбираться с DOS? 
:(
    Опции темы
Jek1975
Дата 17.5.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 26.5.2008

Репутация: нет
Всего: нет



Хочу написать очень простую программу на ассемблере (почти полный код см.ниже). Смысл программы в том, что она читает содержимое порта в котором изменяются только 4 бита (т.е. всего 16 вариантов в AL). Если значение порта изменилось, то текущее время сохраняется в одном из 16 массивов (размер каждого 64 Мб или больше). Так задумано для экономии времени и упрощения структуры массивов. Обработка результатов осуществляется после окончания работы этой программы.

Мне проще писать в Delphi, но скорее всего придётся писать под DOS, так как там нет проблем с монопольным исполнением кода, но в DOSе я не умею работать с большими объемами памяти без переключения страниц.
Может быть подскажете, если возможно, как организовать выполение этого кода под Win9x или WinXP, так чтобы полностью остановить ОС, включая любые прерывания, а потом возобновить её работу. (остановить нужно примерно на 60 секунд).
Или если под Win это сделать нельзя, то есть ли среда программирования для DOS, в которой можно создавать большие массивы 32 битных чисел, и обращаться к ним линейно (без переключения страниц)? (язык почти всё равно какой, главное чтобы ASM вставлять можно было)

Код

start:        cli
            xor    AX,AX
            mov    DX,PortNumber

next_input:    in    AL,DX        ; важны только 4 бита из 8
            cmp    AL,AH        ; поэтому для экономии памяти сохраняем не AL+TimeStamp,
            je    next_input       ; а только TimeStamp в одном из заранее созданных 16 массивов.
            
            mov AH,AL
            EBX:=TimeStamp         ; разность между двумя RDTSC
            SaveTimeStamp (AL,EBX) ; сохраняем TimeStamp, в массиве с номером  0..15 (номер в AL)
            cmp TimeStamp,EndTime  ; повторяем в течении заданного времени
            jnz next_input
            
exit:            sti            


P.S. Если возможно монопольное выполнение этой программы под Windows, то на Delphi код функции SaveTimeStamp реализуется очень просто:

Код

tBigArray = record 
              A:array [0..64000000] of LongWord;
              LastIndex:LongWord;
            end;
                           
Data : array [0..15] of tBigArray;


procedure SaveTimeStamp (PortValue:byte);
begin
 with Data[PortValue] do 
  begin
    A[LastIndex]:=TimeStamp;
    Inc (LastIndex);
  end; 
end;

PM MAIL WWW ICQ   Вверх
bartram
Дата 18.5.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(Jek1975 @  18.5.2010,  01:29 Найти цитируемый пост)
Может быть подскажете, если возможно, как организовать выполение этого кода под Win9x или WinXP, так чтобы полностью остановить ОС, включая любые прерывания, а потом возобновить её работу. (остановить нужно примерно на 60 секунд).

Зачем так долго?



Цитата(Jek1975 @  18.5.2010,  01:29 Найти цитируемый пост)
Или если под Win это сделать нельзя, то есть ли среда программирования для DOS, в которой можно создавать большие массивы 32 битных чисел, и обращаться к ним линейно (без переключения страниц)? (язык почти всё равно какой, главное чтобы ASM вставлять можно было)

А не проще написать драйвер на ассемблере под Windows?, и потом собирать данные от драйвера в приложении. Тогда и с DOS заворачиваться не надо будет.


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Jek1975
Дата 18.5.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 26.5.2008

Репутация: нет
Всего: нет



Цитата(bartram @  18.5.2010,  09:19 Найти цитируемый пост)

Зачем так долго?


Хочу попробовать записать осцилограмму I2C обмена данными во время прошивки монитора. Процесс длится около 40 секунд

Цитата(bartram @  18.5.2010,  09:19 Найти цитируемый пост)
А не проще написать драйвер на ассемблере под Windows?, 


А какие у него преимущества перед просто программой? Его выполнение невозможно прервать?

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0636 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.