לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 29-07-2009, 22:22
  רמי ד רמי ד אינו מחובר  
 
חבר מתאריך: 07.10.06
הודעות: 1,795
בתגובה להודעה מספר 2 שנכתבה על ידי המממ שמתחילה ב "זה כבר עניין של חומרה"

המממ: תודה רבה לך, אני חושב שאשתמש באחד מהפתרונות שמצאת...
וכן, 0.1uS זה מצויין ובהחלט מה שהייתי צריך!

ל-Dark Knight , תודה גם לך.
אני גם מצאתי את הפיתרון שלך, והחיסרון בו שהתוכנה צריכה לעשות POLLING. ואפילו אם זה על thread ניפרד ב-priority נמוך, זה דבר שיכול לבזבז זמן עיבוד יקר, אנרגיה, וחום.
אתה צודק בקשר לזה שהתוכנה יכולה שלא לרוץ זמן ארוך מספיק כדי לדלג על פסיקה, אך זה לא מה שימנע מהמשך הריצה של הטימר.
מה גם שאני הולך לשים מחשב עם מערכת הפעלה והתוכנה הזו בלבד, כך שהוא יהיה יעודי לפרוייקט.
לכן ממש כמו על מיקרו קונטרולר, ניתן יהיה לתת לכל חלק בתוכנה עדיפות משלו, ולא לדאוג שאיזה תוכנית אחרת תגנוב הרבה זמן איבוד.

לדור:
חשבתי על אסמבלר, והשארתי אותו כאופציה אחרונה (לפני שימוש במיקרו בקר חיצוני)
ואם כבר עובדים באסמבלר, אז לא צריך להתחשב בכמה פקודות לשניה (בעייתי מאוד לחישוב על PC) אלא ניתן להשתמש בארכיטקטורה של המעבד שיפעיל טימר שירוץ במקביל לעבודתו.

שוב תודה לכולם!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 29-07-2009, 13:29
  Dark Knight Dark Knight אינו מחובר  
 
חבר מתאריך: 30.07.05
הודעות: 949
שלח הודעה דרך ICQ אל Dark Knight
בתגובה להודעה מספר 1 שנכתבה על ידי רמי ד שמתחילה ב "כתיבת טימר מהיר"

אני חושש שעלולה להיות לך בעיה בנושא....
לפני תקופה לא גדולה הייתי צריך משהו דומה, ועשיתי מחקר קטן באינטרנט בנושא.

כעקרון, חלונות ולינוקס אינן מערכות הפעלה (RTOS (Real Time Operating System כלומר הן אינן תומכות בפעולות זמן אמת. לכן באופן עקרונית, חלון הזמן המינימאלי שאפשר לקבל ב-windows (זו הפלטפורמה עליה בדקתי בעיקר) הוא משהו כמו 10-13 מילי שניות - שזהו בערך גודל ה-time slice שנותן ה-scheduler של מערכת ההפעלה. בנוסף, בגלל שאין לך שליטה על מצב בו מערכת ההפעלה יכולה להפקיע את המעבד מהתוכנה שלך, אתה לא יכול למדוד תזמונים קטנים כ"כ בצורה מדוייקת - תחשוב שמדדת 5 מילי שניות ואז מערכת ההפעלה פשוט עושה context-switch ושמה תהליך אחר לרוץ והתהליך שלך יחזור רק עוד איזה 100-200 מילי שניות למעבד... זה בעייתי.
בזמנו לא מצאתי לזה פתרון, חוץ ממישהו שהציע לי לכתוב דרייבר... למזלי אחרי שדיברתי עם מנחה הפרויקט שלנו סגרנו על תזמונים ברזולוציה של 10 מילי שניות.

יש דרך למדוד תזמונים בצורה מדוייקת למדי שמצאתי תחת windows:
קוד PHP:
 //StopWatch.cpp:
#include "stdafx.h"
#include "StopWatch.h"

StopWatch::StopWatch()  : is_running(false
    { 
Reset(); QueryPerformanceFrequency( &); }
    
void StopWatch::Start() {
    if (
is_running) return; // If stopwatch running already, do nothing...
    
is_running true;
    
QueryPerformanceCounter(&start); 
}

void StopWatch::Stop() {
    if (!
is_running) return; // If stopwatch no running, do nothing
    
is_running false;
    
QueryPerformanceCounter(&end); 
}

void StopWatch::Reset() {
    
is_running false;
    
start.QuadPart end.QuadPart 0
}

double StopWatch::getTimePassed() {
    if (
is_running
        
QueryPerformanceCounter(&end); // If running, update with current time
    
return ((double)(end.QuadPart start.QuadPart)) / (double)f.QuadPart



קוד PHP:
 //StopWatch.h
#ifndef STOPWATCH_H
#define STOPWATCH_H

/* ----------------------------------------------------------------------------
 * File name: StopWatch.h
 * Implements: This class implements a stopwatch which mesures the time[sec]
 *                passed between it's starting and stopping.
 * Created: May 5th, 2009.
 * Version: 1.0
 * Note: This class will only work on MS™ Windows©. 
 * ----------------------------------------------------------------------------
 * Operations:
 *        Start:     The stopwatch will begin mesuring time from the moment this
 *                   method is called. If already running this method does nothing.
 *        Stop:     Stops the time mesurement and remmembers the time elapesed.
 *                If not running, this method does nothing.
 *        Reset:    Resets the stopwatch. (nulls the mesurements and stops it).
 *        getTimePassed:    Calculates and returns the time passed from the call
 *                        to Start. if stoped, will return the mesured time
 *                        until Stop was called.
 *        
 */


#include <windows.h>

class StopWatch {
public:
    
StopWatch();
    
void Start();
    
void Stop();
    
void Reset();
    
double getTimePassed(); 
private:
    
typedef LARGE_INTEGER ticks;
    
typedef LARGE_INTEGER frequency;
    
ticks startend;
    
frequency f;
    
bool is_running;
};

#endif 


אבל לתזמן ברזולוציות כאלו - זה כנראה לא אפשרי תחת windows, או לפחות לא באופן טריביאלי כלשהו. ייתכן שיש איזה API שיתן לך משהו כזה, אבל זה בעייתי...
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 29-07-2009, 21:08
  Dark Knight Dark Knight אינו מחובר  
 
חבר מתאריך: 30.07.05
הודעות: 949
שלח הודעה דרך ICQ אל Dark Knight
בתגובה להודעה מספר 7 שנכתבה על ידי dorM שמתחילה ב "האם הבעיה הזו קיימת גם..."

עד כמה שידוע לי אי אפשר לעשות דברים כאלו... בד"כ החלפת הקשר (context switch) מתרחשת עקב פסיקה - שזה כמובן תהליך אסינכרוני.
זו יכולה פסיקת שעון, פסיקת I/O (למשל סיום של קריאה מדיסק) או אפילו פסיקה יזומה של תוכנה.
בקורס מע' הפעלה שלקחתי התייחסנו לזה בד"כ כמשהו שאי אפשר לצפות אותו. כמובן שזה לא מדויק, אבל הרי כל המטרה של מע' ההפעלה היא לספק לתהליך אבסטרקציה שהוא לבד במחשב...

בעקרון 2 הפתרונות היחידים שאני מצאתי בזמנו הם לכתוב דרייבר - שזה יכול לרוץ בהרשאות kernel וברמת החומרה, או שימוש במע' הפעלה real-time, כלומר RTOS שמספקת שירותים שמספקים דיוק שכזה...

הידע שלי בנושא לא מאד מעמיק, אז אולי יש דברים ב-windows שאני לא מכיר ומסוגלים לספק קירוב לתזמונים כאלו, אבל אני מטיל בכך ספק...
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 14:54

הדף נוצר ב 0.08 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר