Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2014, 12:48   #11
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

не надежно все это... проц смените - значения поплывут...
на некоторых процах вообще "рабочесть" потеряется http://geektimes.ru/post/92597/
тут нужен реалтайм на базе контроллера, для тестов потренироваться на ардуине

ну а если уж затеяли, то убирайте даблы из работы таймера... т.к. плавающая арифметика работает на сопроцессоре, и может вносить существенные задержки
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 28.10.2014 в 12:54.
Slym вне форума Ответить с цитированием
Старый 28.10.2014, 12:55   #12
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
не надежно все это... проц смените - значения поплывут...
Кому надо - допилит калибровку по кварцевому генератору из BIOS.
Мне понадобится, я допилю.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.10.2014, 14:17   #13
poligon
 
Регистрация: 28.10.2014
Сообщений: 6
Восклицание

Цитата:
Сообщение от Slym Посмотреть сообщение
тут нужен реалтайм на базе контроллера, для тестов потренироваться на ардуине
Ардуина - зло. Бортовой компьютер на микроконтроллере у меня уже давно работает. И для ВАЗа и для Дэу Нэксия. И статьи уже написаны. Там таких проблем нет:
http://cxem.net/avto/electronics/4-116.php
http://cxem.net/avto/electronics/4-145.php

А сейчас разобрался с протоколом диагностики Рено Логан и хотел написать небольшую программку на русском языке. Думаю многим будет полезно. Потому что единственное из подручных средств чем сейчас можно диагностировать Рено это программа DDT2000. Но она очень заморочена, работает только со своим адаптером и полностью на французском. Что сами понимаете не айс.

Попробовал сейчас к своей калине подключится - не отвечает контроллер. Пробую программой OpenDiag - тут же отвечает и всё работает. То что с запросами всё правильно тут без вариантов, я уже собаку на этом съел. Но вот с COM портом в делфи я что то не подружился. Связывался с одним из авторов программ диагностики - не говорит как задержку делает, мол гугли.

OLED дисплей с Ebay скоро приедет, сделаю на контроллере бортовик да и всё. Дам описание протокола. Кто захочет повторит.
poligon вне форума Ответить с цитированием
Старый 29.10.2014, 14:08   #14
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

убери даблы из таймера и потести
юнит в МИКРОсекундах
Код:
unit HRTimerInt;

interface

uses Windows;
type
  THRTimer = class(TObject)
  private
    ClockRate,StartTime:Int64;
  public
    Exists: Boolean;
    constructor Create;
    function StartTimer: Boolean;
    function ReadTimer: Int64;
  end;

function HRDelayMks(const mksec: Int64): Int64;

implementation

var
  Timer: THRTimer;

function HRDelayMks(const mksec: Int64): Int64;
begin
  Timer.StartTimer();
  repeat
    Result:= Timer.ReadTimer();
  until Result >= mksec;
end;

{ THRTimer }

constructor THRTimer.Create;
begin
  inherited Create;
  Exists := QueryPerformanceFrequency(ClockRate);
  ClockRate:=ClockRate div 1000000;
end;

function THRTimer.StartTimer: Boolean;
begin
  Result := QueryPerformanceCounter(StartTime);
end;

function THRTimer.ReadTimer: Int64;
var ET: Int64;
begin
  QueryPerformanceCounter(ET);
  Result := (ET - StartTime)/**1000000*/ div ClockRate;
end;

initialization
  Timer:= THRTimer.Create();

finalization
  Timer.Free();
end.
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 29.10.2014 в 14:21.
Slym вне форума Ответить с цитированием
Старый 29.10.2014, 14:56   #15
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от poligon Посмотреть сообщение
не говорит как задержку делает, мол гугли
У вашей задачи может просто не быть простого решения (RDTSC имеет подводные камни). Полистать тут: http://windowstimestamp.com/description
StriderX вне форума Ответить с цитированием
Старый 29.10.2014, 15:29   #16
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Windows не является операционной системой реального времени, не для этого предназначена она.

Взгляните на МК FreeRTOS и далее...

если вам нужна очень высокая точность(менее 30 мс, винда уже грешит), об этом сами мелкософт пишут:
Цитата:
This function causes a thread to relinquish the remainder of its time slice and become unrunnable for an interval based on the value of dwMilliseconds. The system clock "ticks" at a constant rate. If dwMilliseconds is less than the resolution of the system clock, the thread may sleep for less than the specified length of time. If dwMilliseconds is greater than one tick but less than two, the wait can be anywhere between one and two ticks, and so on.
В двух словах, ровно 25 мс поток спать не будет(в действительной реальности) или на пару мс больше или меньше.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
диагностика сетевых интерфейсов. Ol'ga Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 05.06.2014 12:13
Авто-копирование строки вниз при заполнении текущей (или авто-отображение скрытой ниже) bygaga Microsoft Office Excel 6 25.11.2011 14:46
Диагностика компьютеров yojeen Софт 5 31.12.2010 07:37
Диагностика нерабочего железа ssdm Компьютерное железо 2 01.12.2010 15:19
Как получить данные с COM-порта или другого любого порта? DeLure Общие вопросы C/C++ 5 20.09.2007 00:50