Εμφάνιση αποτελεσμάτων : 1 έως 7 από 7

Θέμα: Ιδέες για task manager και delay

  1. #1
    Μέλος Το avatar του χρήστη picdev
    Όνομα
    akis
    Εγγραφή
    Jul 2007
    Περιοχή
    ____
    Μηνύματα
    7.375

    Προεπιλογή Ιδέες για task manager και delay

    Σκέφτομαι καποια στιγμή να φτιάξω ενα task manager, RTOS και καλά ,
    αυτό που με προβληματίζει ειναι το delay που δεν θα πρέπει να μπλοκάρει τα υπόλοιπα tasks, πως λέτε να μπορεί να υλοποιηθεί ?
    να μειώνεται ενας counter και αν δεν εχει μηδενιστεί να κάνει return ? και να βγαίνει εκτός ?
    μετά έρχεται ενα άλλο πρόβλημα, αν θελεις να βάλεις άλλο delay θα πρέπει να χρησιμοποιεί άλλη global μεταβλητή μετρητή ? δηλαδή θα πρέπει να φτιάχνεις όσα delay χρησιμοποιείς στο πρόγραμμα ?

    το πιο σωστό θα ήταν με timer γιατι δεν ξέρεις ποσο παιρνει να εκτελεστούν κάποια tasks,

    αν πάμε σε ρουτίνα task manager ώστε να μπλοκάρει tasks που δεν εκτελεστήκαν σε συγκεκριμένο χρόνο, γίνεται αρκετά πολύπλοκο

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη xmaze
    Όνομα
    Νίκος
    Εγγραφή
    May 2010
    Περιοχή
    Μακεδονία
    Μηνύματα
    1.034

    Προεπιλογή

    εγω χρησιμοποιώ το κάτωθι
    https://sites.google.com/site/avrtutorials2/scheduler
    αλλά όπως λές delay απαγορευεται και εχει ενα bug, εάν κάποιο task διαρκεί περισσότερο απο το επιτρεπτό, τότε στον ενδιάμεσο διάστημα έρχεται ο time interupt και εκτελεί το, task_list[i].delay--;
    με αποτέλεσμα να μπαίνει σε αρνητικούς αριθμούς.

    0 Not allowed! Not allowed!

  3. #3
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618


    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη GeorgeVita : 19-12-15 στις 11:18

  4. #4
    Μέλος Το avatar του χρήστη picdev
    Όνομα
    akis
    Εγγραφή
    Jul 2007
    Περιοχή
    ____
    Μηνύματα
    7.375

    Προεπιλογή

    γιώργο αυτό που έδειξες ειναι σε assembly και δεν βοηθάει και τόσο,

    το εύκολο ειναι να τρέχεις τις συναρτήσεις σου με pointer στη main και με κάποιο χρόνο που θα παίρνεις απο interrupt. Καλά έως εδώ και εύκολα υλοποιήσημο.

    Τι γίνεται ομως αν μία συνάρτηση κάνει παραπάνω από οσο πρέπει πως το διαχείρεζεσαι ? εχεις τη ρουτίνα του ιντεραπτ και τη main.
    Βασικό πρόβλημα ειναι οτι δεν μπορεί να τρέξεις την ίδια συνάρτηση μεσα στο ιντεραπτ και μεσα στη μαιν , το γνωστό retrancy, γιατί αν μοιράζονται τις ίδιες μεταβλητές αλλοιώνονται τα δεδομένα, οπότε πάμε σε λύσεις mutex .
    Δεν ξέρω αν μπορεί τελικά να υλοποιηθεί κάτι τέτοιο εύκολα,
    τώρα μπακαλίστικα με flag τρέχω τις συναρτήσεις μεσα στη μαιν με flags που ανοιγουν απο τα ιντεραπτ, και time critical συναρτήσεις μεσα στο isr

    0 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη The_Control_Theory
    Όνομα
    Tedi
    Εγγραφή
    Apr 2012
    Περιοχή
    Βόλος
    Μηνύματα
    890

    Προεπιλογή

    Βάλε ένα timer interrupt και ρύθμιζε το στην αρχή του κάθε task πόση ώρα να αφήνει το task πριν αλλάξει.

    Με το που τερματίζει να αλλάζει όχι flags( κοινά global variables BAD ) αλλά ένα δείκτη σε συναρτήσεις task. Στην επόμενη task δηλαδή.

    Ξαναεπαναλαμβάνω στην αρχή του επόμενου task ξαναρυθμίζεις το νέο χρονικό όριο που θα μείνει ανοιχτό.

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη picdev
    Όνομα
    akis
    Εγγραφή
    Jul 2007
    Περιοχή
    ____
    Μηνύματα
    7.375

    Προεπιλογή

    και αν ενα task πάρει παραπάνω χρόνο να εκτελεστεί ? τότε τι γίνεται, κανονικά στα rtos εχουν προτεραιότητες και εκτελούντα αυτά που πρέπει , και οσαν ειναι σε δευτερη προταιρεότητα και δεν εχουν προλάβει να εκτελεστούν τα σταματάει και πάει στα επόμενα, ειναι αρκετά δύσκολο

    0 Not allowed! Not allowed!

  7. #7
    Μέλος Το avatar του χρήστη The_Control_Theory
    Όνομα
    Tedi
    Εγγραφή
    Apr 2012
    Περιοχή
    Βόλος
    Μηνύματα
    890

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από picdev Εμφάνιση μηνυμάτων
    και αν ενα task πάρει παραπάνω χρόνο να εκτελεστεί ? τότε τι γίνεται, κανονικά στα rtos εχουν προτεραιότητες και εκτελούντα αυτά που πρέπει , και οσαν ειναι σε δευτερη προταιρεότητα και δεν εχουν προλάβει να εκτελεστούν τα σταματάει και πάει στα επόμενα, ειναι αρκετά δύσκολο
    Εχεις και μιά άλλη μεταβλητή Fores (λογικά δεν αποφεύγεις να την κάνεις global ) η οποία θα αφήνει να αλλάξει το task μετά από Χ φορές.

    Οπότε σε συνδιασμό με την μεταβλητή t_limit θα αφήνουν το interrupt να αλλάξει task μόνο όταν περάσει ο χρόνος Fores * t_limit.

    0 Not allowed! Not allowed!

Παρόμοια Θέματα

  1. Arduino και πλήρες Battery Manager.
    By Jimakos_Sn in forum Μικροελεγκτές
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 02-11-15, 23:56
  2. Απαντήσεις: 110
    Τελευταίο Μήνυμα: 24-05-15, 20:25
  3. Πρόβλημα με Task Manager
    By graven24 in forum Software Η/Υ
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 15-09-11, 13:24
  4. Απαντήσεις: 1
    Τελευταίο Μήνυμα: 29-12-09, 20:45
  5. Απαντήσεις: 22
    Τελευταίο Μήνυμα: 03-09-09, 04:02

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας