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

Θέμα: Προβληματάκι σε C για AVR.

  1. #1
    Μέλος Το avatar του χρήστη Thansavv
    Όνομα
    Θανάσης
    Εγγραφή
    Nov 2008
    Περιοχή
    Φινλανδία
    Μηνύματα
    557

    Προεπιλογή Προβληματάκι σε C για AVR.

    Γεια σας...
    Ασχολούμαι λίγο με προγραμματισμό AVR σε C, και επειδή δεν τα κατέχω καλά κάπου μου σκαλώνει το πρόγραμμα.
    Είναι ένα κομματάκι από ένα μεγαλύτερο πρόγραμμα, και έβαλα εδώ μόνο το κομμάτι που είναι σχετικό με το πρόβλημα.

    Είναι μια λούπα που γυρνάει ένα βηματικό μοτέρ 150 βήματα δεξιά, 150 βήματα αριστερά, μετά κάνει μια μικρή παύση και ξανά από την αρχή.
    Το πρόβλημα είναι ότι για 2 λεπτά δουλεύει κανονικά, και μετά κολλάει και γυρνάει συνεχώς δεξιά χωρίς να κάνει ούτε την παύση...
    Που έχω φταίξει?

    Δεν έχω βάλει σωστά τη δομή του προγράμματος αλλά μόνο αυτά που θεώρησα αναγκαία.
    Συνημμένα Αρχεία Συνημμένα Αρχεία

    0 Not allowed! Not allowed!

  2. #2
    Μέλος
    Όνομα
    Καλαρακης Μιχαλης
    Εγγραφή
    Jan 2011
    Περιοχή
    Ηρακλειο
    Μηνύματα
    2.043

    Προεπιλογή

    βαλε ενα do .... loop
    γιατι καθε φορα που καλά τη συναρτηση χανεις και λιγο απο το stack
    στο τελος κανεις overflow και εισαι τυχερος που γυρνα συνεχεία κανονικά έπρεπε να κολα
    foray=-1
    do
    a=0;
    r=150;
    foray= not foray
    monostepy();
    _delay_ms(150);
    loop

    0 Not allowed! Not allowed!

  3. #3
    Μέλος Το avatar του χρήστη Thansavv
    Όνομα
    Θανάσης
    Εγγραφή
    Nov 2008
    Περιοχή
    Φινλανδία
    Μηνύματα
    557

    Προεπιλογή

    Μιχάλη δεν θέλω να το κάνω με do - loop αλλά με κλήση της monostepy() γιατί γίνεται από διάφορα σημεία υπό συνθήκη. Απλά επειδή είναι ένα μέρος του προγραμμάτου γι αυτό το έβαλα έτσι.

    Αυτό με το stack το έχασα...Αν μπορείς να μου το εξηγήσεις λίγο (και πως μπορώ να το αποφύγω)...

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Δεν είναι η monostepy() το πρόβλημά σου. Όπως σωστά είπε και ο Μιχαλης παραπάνω γεμίζεις το stack για αυτό κολάει το πρόγραμμα. Βασικά φτέει η resety(). To stack είναι πρακτικά μνήμη η οποία σχετίζεται με τις συναρτήσεις που καλεί ο επεξεργαστής, καλώντας μια συνάρτηση δεσμεύεις κάποιο μέρος αυτής της μνήμης, μόλις η συνάρτηση σου ολοκληρωθεί και επιστρέψεις (κάνει return δλδ η συνάρτησή σου) αυτό το κομμάτι μνήμης αποδεσμεύετε. Η resety() στο πρόγραμμα σου καλεί συνεχώς τον εαυτό της, κάθε κλήση δεσμεύει stack, η resety() αφού καλεί συνεχώς τον εαυτό της δεν επιστρέφει ποτε οπότε κάποια στιγμή το stack γεμίζει και το πρόγραμμα κολάει. Οπότε αν θες να καλείς συνεχώς την resety() δεν θα το κάνεις μέσα από την συνάρτηση αλλά με ένα εξωτερικό loop. πχ
    Κώδικας:
    for(;;) {
        resety();
    }

    0 Not allowed! Not allowed!

  5. #5
    Μέλος
    Όνομα
    Καλαρακης Μιχαλης
    Εγγραφή
    Jan 2011
    Περιοχή
    Ηρακλειο
    Μηνύματα
    2.043

    Προεπιλογή

    Μάλλον το πρόβλημα έρχεται από άλλο σημείο.
    O someone το εξηγεί οκ
    Βάλε όλο το πρόγραμμα γιατί το πιθανότερο είναι να έχει κάπου σφάλμα στο κώδικα.

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη Thansavv
    Όνομα
    Θανάσης
    Εγγραφή
    Nov 2008
    Περιοχή
    Φινλανδία
    Μηνύματα
    557

    Προεπιλογή

    Παιδιά ευχαριστώ πολύ! .Ετσι όπως το είπατε είναι. Μάλλον έφταιγε ότι καλούσα τη ρουτίνα μέσα από τον εαυτό της.
    Τώρα την "καλώ" απ' εξω σε λούπα και εδώ και 10 λεπτά παίζει μια χαρά...
    Ευτυχώς που παθαίνω και μαθαίνω!!!

    0 Not allowed! Not allowed!

  7. #7
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Το πρόβλημα ευρίσκεται στη ρουτίνα resety(), ακριβώς όπως το επεσήμανε ο Φώτης. Δεν μπορεί να καλεί τον εαυτό της, γιατί ο programm counter του controller προσθέτει +1 στον stack που με αυτόν τον τρόπο κάνει overflow, γιατί δεν υπάρχει επιστροφή απο την κλήση της ρουτίνας αυτής.
    Και τώρα βλέπω οτι το έλυσες! Μπράβο για το πάθημα και το μάθημα!

    0 Not allowed! Not allowed!

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

  1. Προβληματάκι σε Yaesu VX-2
    By leosedf in forum Ραδιοερασιτεχνισμός
    Απαντήσεις: 37
    Τελευταίο Μήνυμα: 19-11-17, 14:18
  2. Προβληματάκι με το "επισκευές"
    By kostas stathopoulos in forum Site & Forum
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 20-04-17, 23:04
  3. AVR: Ερώτηση για χρήση υπορουτινών και RAM σε AVR
    By Ηλιάδης Μάνος in forum Μικροελεγκτές
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 19-12-15, 16:49
  4. Τελείωσα τον μικρό προενισχυτή.Ένα προβληματάκι...
    By kitsof in forum Συσκευές Εικόνας-Ήχου
    Απαντήσεις: 21
    Τελευταίο Μήνυμα: 09-02-15, 15:39
  5. AVR studio4 και AVR-readyboard1 δεν συνεργάζονται.
    By PATENTAS10 in forum Μικροελεγκτές
    Απαντήσεις: 22
    Τελευταίο Μήνυμα: 18-03-11, 01:50

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

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