PDA

Επιστροφή στο Forum : προγραμματισμός PIC16F874A



mad_inventor
12-04-09, 13:10
Καλησπέρα!! Γνωρίζετε αν υπάρχει κάποιο πρόγραμμα που να μπορώ να γράφω σε κώδικα C ή visual basic για τον PIC16F874A και να το "ρίχνω" κατευθείαν στον μικροελεγκτή μέσω της σειριακής χωρίς να χρειάζεται
να το γράφω σε assembly?

billtech
12-04-09, 13:32
κοιτα εγω τελευταια ασχοληθηκα με PIC και προτιμο την Microbasic.
το γραφεις το κανεις hex και με το WinPic800 το ριχνεις στον επεξεργαστη σου.
ουτε εγω προτιμο την assembly

mad_inventor
12-04-09, 13:57
To winpic800 έχει μέσα την πλατφόρμα για την microbasic? Η' χρειάζεται άλλο πρόγραμμα για microbasic και απλά ο winpic800 το μετατρέπει και το "πετάει" στο PIC??

lastid
12-04-09, 14:29
Τί θέλεις ακριβώς? Να γράφεις σε γλώσσα και όχι σε assembly? Η να προγραμματίζεις τον PIC χωρίς programmer?

mad_inventor
12-04-09, 15:21
Κάτι σαν αυτό:

http://www.basicx.com/ -> downloads -> BasicX Software Setup-Complete

Να γράφω σε γλώσσα C ή Visual Basic ή κάποια άλλη του ίδιου επιπέδου και να το "ρίχνω" μέσω της RS232 στον μικροελεγκτή.

billtech
12-04-09, 15:28
το hex το μετατρεπει η Microbasic η ιδια.το WinPic800 απλα περνει το Hex και το φωρτωνει στον επεξεργαστη.δηλαδη απο οποια γλωσσα προγραμματισμου δημιουργησεις το Hex παλι στο φωρτωνει.

mad_inventor
12-04-09, 15:43
Ωραίος. Την microbasic που την κατεβάζουμε? Έψαξα λίγο στο google άλλα έπεσα σε κάτι άκυρα...:001_huh:

VaGyver
12-04-09, 15:47
Γεια χαρα,

Αν μου επιτρέπετε, να βοηθήσω να το ξεκαθαρίσετε λιγάκι.

Λοιπόν οι microcontroller (τώρα θα μιλήσω για τους microchip) μπορούν να φορτωθούν μόνο με αρχείο τύπου *.ΗΕΧ.
Και αυτό είναι και το πρόγραμμα που θα τρέχουνε. Δηλαδή το τι θα κάνουνε.


Λοιπόν, τώρα χρειαζόμαστε να δημιουργήσουμε το αρχείο τύπου *.HEX.

Επειδή το περιεχόμενο του *.ΗΕΧ αποτελείται από δεκαεξαδικούς αριθμούς, καταλαβαίνετε ότι είναι πραγματικά πολύ δύσκολο να δουλέψεις/γράψεις κώδικα έτσι.

Έτσι χρησιμοποιούμε τρόπους/προγράμματα τα οποία είναι σαφώς πιο κατανοητά από το *.ΗΕΧ, και γράφουμε τον κώδικα με αυτά.
Στην συνέχεια αυτάς ο τρόπος/πρόγραμμα μετατρέπει τον κώδικα σε τύπου *.ΗΕΧ που καταλαβαίνει ο microcontroller (οπότε είναι πιο εύκολο).


Πάμε σε αυτά τα προγράμματα τώρα.
Ένα βήμα πιο πάνω λοιπόν είναι η assembly (ή γνωστή και γλώσσα μηχανής). Νομίζω την διδάσκουνε ακόμα, κάποιες σχολές.
Δηλαδή γράφεις τον κώδικα σου σε assembly και μόλις τελειώσεις το ίδιο το πρόγραμμα το μετατρέπει σε *.HEX.

Ενα ακόμα βήμα πιο πάνω, είναι οι γνωστοί σε όλους Compilers.
Δηλαδή προγράμματα σε διάφορες γλώσσες π.χ. Basic, Pascal, C κ.α ΣΑΦΩΣ πιο βατές από την assembly.
Γράφεις τον κώδικα σου λοιπόν σε αυτούς (π.χ. προσωπικά χρησιμοποιώ Basic) και μετά το ίδιο πρόγραμμα δημιουργεί το αντίστοιχο αρχείο assembly και αμέσα δημιουργεί και το αρχείο *ΗΕΧ.


Τελειώνοντας, με το αρχείο τύπου *.ΗΕΧ έτοιμο πλέον, χρειάζεσαι έναν τρόπο να το "φορτώσεις" στον microcontroler.
Η πιο απλή λύση είναι ένας programmer. Υπάρχουνε πάρα πολλοί στην αγορά αλλά και κυκλώματα στο internet να φτιάξεις.
Αυτός που αναφέρεται στο thread (ο Winpic800) είναι programmer.

Τέλος, υπάρχουν και άλλη τρόποι για να φορτώσεις το *.ΗΕΧ στον microcontroller (όπως π.χ, μέσω RS232, USB κ.α.) αλλά να μην επεκταθώ σε αυτό.


Ελπίζω να σας φανεί χρήσιμο όλο αυτό το μυθιστόρημα!
Στην διάθεσή σας, αν χρειάζεστε και επιπλέον επεξήγηση σε κάποιο από τα παραπάνω.


Φιλικά!

mad_inventor
12-04-09, 15:55
πολύ κατατοπιστικός!!!! thanx!

gsmaster
12-04-09, 15:59
Εγώ όμως θα επεκταθω λίγο παραπέρα για να πώ ότι για να περάσεις μέσω σειριακής το hex σε άδειο controller χωρίς να έχεις καθόλου προγραμματιστή δεν γίνεται.
Πρεπει την πρώτη τουλάχιστον φορά να προγραμματίσεις τον bootloader στον κοντρολλερ ο οποίος είναι ενα μικρό πρόγραμμα το οποίο τρέχει στην αρχή και πρίν απο το κανονικό πρόγραμμα και γράφει το hex στον controller. Δηλαδή ο controller ο ίδιος αυτοπρογραμματίζεται, με δεδομένα που του στέλνεις με κάποιο τρόπο.

Υπάρχουν bootloader μέσω σειριακής (το πιο συνηθησμένο) μέσω USB, ethernet, καρτων μνήμης κτλ... Όρεξη και φαντασία να έχεις.

Λογικό είναι ότι δεν υποστηρίζουν όλοι οι μικροελεκτές bootloader.

Αν δεν θες να μπλέξεις με όλα αυτά που λέω παραπάνω, δες προς τα συστήματα με Basic Stamp. Βασίζεται στους PIC και γράφεις πρόγραμμα σε compiler σε απλή γλώσσα που έχω την εντύπωση ότι μοιάζει με την basic. Είναι πιο ακριβα όμως και δεν έχουν και τις τρελλές δυνατότητες, οποτε αν έχεις σκοπό να ασχοληθείς σοβαρά άστο καλύτερα. Για Hobby ή για να ξεκινήσεις να ασχολείσαι είναι super.

mad_inventor
12-04-09, 16:27
οκ, λοιπόν εγώ θέλω απλά να γράψω ένα πρόγραμμα σε visual basic και μετά να το περάσω στο pic16f87a μέσω rs232. Υπάρχει κάποιο πρόγραμμα που να το κάνει τσακ-μπαμ όπως με το ΒΧ-24 της www.netmedia.com ???

Έχω μπερδευτεί τώρα!!!!! :001_smile:

gsmaster
12-04-09, 17:12
Το πρόβλημα είναι ότι ο άδειος pic16f874a δεν μπορεί με τίποτα να επικοινωνήσει μεσω rs232. Άν έχεις άδειο μικροελεκτή τότε αυτός πρέπει να συνδεθεί σε προγραμματιστή για να προγραμματιστεί, τουλάχιστον την πρώτη φορά.

Το BX24 http://www.basicx.com/Products/BX-24/bx24main.htm είναι αντίστοιχο του basic stamp http://www.parallax.com/tabid/295/Default.aspx


Να τα πω μια ακόμα απ την αρχή:
Έναν έτοιμο PIC16F874A όταν τον αγοράζεις είναι άδειος. Δεν έχει μέσα τίποτα προγραμματισμένο.
Σε αυτή την φάση, για να τον προγραμματίσεις μέσω σειριακής (χωρίς προγραμματιστή) δεν γίνεται.
Άρα τι μας μένει? κανονικός προγραμματιστής.
Με τον κανονικο προγραμματιστή μπορείς να περάσεις κανονικά το πρόγραμμα στον μικροελεκτή και να δουλεύει κανονικά.

Πολλοί PIC (συμπεριλαμβανομένου και του PIC16F874A) υποστηρίζουν την λειτουργία Self programming, που σημαίνει ότι το πρόγραμμα που έχει μέσα μπορεί να αλλάξει κομμάτια του.
Αυτό μπορούμε να το εκμεταλλευτούμε για να κάνουμε τον μικροελεκτή να προγραμματίζεται με δεδομένα που του στέλνουμε μέσω σειριακής.
Για να μπορέσει ο μικροελεκτής να καταλάβει ότι τα δεδομένα που του στέλνουμε πρέπει να τα αποθηκεύσει ώς πρόγραμμα, πρέπει να έχει ήδη απο πριν περασμένο ένα βασικό πρόγραμμα το οποίο αναγνωρίζει τα δεδομένα που του στέλνουμε μέσω σεριακής και να τα αποθηκεύει στην μνήμη προγράμματος. Αυτό λέγεται Bootloader.
O Bootloader δεσμεύει ένα κομμάτι της μνήμης του μικροελεκτή, και πρέπει να περαστεί στον μικροελεκτή με κανονικό προγραμματιστή. Δεν υπάρχει άλλος τρόπος.

Οι εφαρμογές που δουλεύουν με Bootloader δεν είναι για αρχάριους στον προγραμματισμό, είναι πολλά που πρέπει να ληφθούν υπόψη. Ένα συνήθες πρόβλημα είναι ότι ο bootloader αυτοκαταστρέφεται (γράφει το κανονικο πρόγραμμα εκεί που είναι το πρόγραμμα του bootloader)

Αν δεν μπορείς να βγάλεις άκρη με αυτά και δεν θες να έχεις προγραμματιστή ξαναδές τους basic stamp η τους BX24.

Απ όλα αυτά που έγραψα παραπάνω πρέπει τουλάχιστον να κατάλαβες, ότι πρέπει να έχεις προγραμματιστή. Αλλά τι έχεις πάθει και θέλεις σώνει και καλά σειριακή?

mad_inventor
12-04-09, 17:34
Για λόγους οικονομίας. Ένας προγραμματιστής που λες πόσο κοστίζει???

mad_inventor
12-04-09, 17:44
το basic stamp κάνει για τον pic που θέλω???

mad_inventor
12-04-09, 17:45
σόρρυ για τις πολλές ερωτήσεις που θέτω

lastid
12-04-09, 18:24
Πολλές? Ακόμη δεν άρχισες!
Θέλεις λοιπόν έναν bootloader για τον 16F874.
Κατ΄ αρχήν, μπορείς να χρησιμοποιήσεις αυτόν που δίνει σαν υπόδειγμα η ίδια η Microchip:
Application Note 851 (http://www.microchip.com/Stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en012031)
Όπως λέει και ο gsmaster, για να ρίξεις την πρώτη φορά τον bootloader μέσα στον PIC, χρειάζεσαι έναν programmer. Δεν γίνεται αλλιώς. Φτιάξε, αγόρασε ή δανείσου έναν.
Κατόπιν, δεδομένου ότι στην κατασκευή σου έχεις υλοποιήσει μία σειριακή και την έχεις συνδέσει με το PC, ανοίγεις την τροφοδοσία. Ο bootloader τρέχει και περιμένει εντολές από την σειριακή. Πώς θα τις δώσεις? Τρέχοντας την απλή εφαρμογή Quick Programmer της Microchip. Εκεί, αφού ορίσεις τύπο PIC και σειριακή, δίνεις εντολές του τύπου "Πάρε το τάδε ΗΕΧ αρχείο", "Διάβασε τη μνήμη", "Κάνε reset", "Ξεκίνα την εκτέλεση". Η εφαρμογή αυτή φροντίζει να επικοινωνήσει με τον bootloader που "ακούει" στην άλλη άκρη της σειριακής και να μεταβιβάσει τις παραπάνω εντολές ή τα δεδομένα.

mad_inventor
12-04-09, 19:14
Πολύ ωραία!!! Quick Programmer είναι το Microchip Application Maestro ?

Κάτι άλλο: Το basic stamp κάνει για το συγκεκριμένο pic?? Δηλαδή να το γράψω σε κώδικα που καταλαβαίνω και μετά να το κάνει ΗΕΧ??

lastid
12-04-09, 20:00
Όχι, δεν είναι το Maestro.
Κατεβάζεις το AN851.exe. Θα το βρεις μέσα στo url που σου έγραψα παραπάνω σαν "ΑΝ851 Source Code". Το τρέχεις και σου εγκαθιστά τον Quick Programmer. Κάπου μέσα στoν φάκελο C:\AN851\ που θα δημιουργηθεί, βρίσκεις και 2 (νομίζω) bootloaders για τις δύο οικογένειες PIC, την 16F και την 18F.
Το documentation λέει ότι είναι για τους 16F876 και 16F877. Λογικά όμως πρέπει να κάνει και για τον 16F874. Χρειάζεται επαλήθευση.

Οποιοσδήποτε compiler/assembler βγάζει HEX που να μπορεί να φορτωθεί στη διεύθυνση 0x200 (και να ξεκινήσει από εκεί η εκτέλεσή του) μας κάνει.

mad_inventor
18-04-09, 15:46
Καλησπέρα, οκ αγόρασα το pic programmer, διάβασα και κάποια τutorial για το Pic. Να κάνω μια διόρθωση όμως, κατά λάθος έγραψα PIC16F874A ενώ είναι PIC16F877A-1/P .Όταν λες 0x200 εννοείς την 0200H φαντάζομαι έτσι??? Υπάρχει κάτι που πρέπει να προσέξω μην καταστρέψω το PIC κατά την φόρτωση του boot loader??

lastid
18-04-09, 16:03
Ναι, την 0200Η εννοώ.
Να καταστραφεί κάτι στον PIC, δεν νομίζω. Μόνο αν βάλεις λάθος fuses μπορεί να μη σου δουλεύει και να μην σου ξαναγράφεται και να παιδευτείς λίγο παραπάνω μέχρι να το διορθώσεις.
Όπως και νά'χει, αν τα βρεις σκούρα τον ξαναπρογραμματίζεις με τον programmer.

mad_inventor
18-04-09, 16:09
Αυτό με to fuses τι είναι?? Μου το τονίσανε και στο κατάστημα ηλεκτρονικών να το προσέξω, αλλά δεν μου έδωσε παραπάνω πληροφορίες γιατί δεν ήξερε και πολλά από ότι κατάλαβα αυτός.Απλά μου πε να το προσέξω...!!! Μπορείς να μου δώσεις τα φώτα σου???

lastid
18-04-09, 16:33
Υπάρχουν τρεις "μνήμες" που προγραμματίζεις μέσα σε έναν PIC:
- Η μνήμη προγράμματος. Εκεί θα ρίξουμε το πρόγραμμά μας (που συμπεριλαμβάνει και τον bootloader στην περίπτωσή μας).
- Η EEPROM μνήμη δεδομένων. Αν δεν την θέλουμε, δεν τη γράφουμε. Για αρχή ας την αφήσουμε στην άκρη.
- Το configuration word ή "fuses". Λίγα αλλά σημαντικά bits στα οποία δηλώνουμε το είδος του ταλαντωτή, το αν θα προστατέψουμε τον PIC από ανάγνωση, και άλλα. Κάθε οικογένεια PIC έχει γενικά διαφορετικά fuses. Καλό είναι να μελετήσεις το "Configuration word" κεφάλαιο του PIC ώστε να το γνωρίσεις καλύτερα.

mad_inventor
02-05-09, 13:55
Καλησπέρα, βάζω το bootloader στον PIC16F877A, τοο οποίο καταλαμβάνει τις θέσεις μνήμης από 0000h-0100(λίγο πριν την 0100h για την ακρίβεια) και από τα manual που διάβασα πρέπει λογικά να έχει αλλάξει το reset και να ξεκινάει από το 0100h. Το 0200h είναι για τα PIC18FΧΧ αν διάβασα καλά. το τοποθετώ στην συνέχεια στην πλακέτα για να μπορώ να το προγραμματίσω μέσω της RS232, αλλα το πρόγραμμα που χρησιμοποιώ:
http://www.easytechnology.gr/index.php?main_page=product_info&cPath=3_14&products_id=679

δεν βρίσκει τηνRS232. Μου διαφεύγει κάτι?????

lastid
02-05-09, 14:11
Θες να πεις ότι το πρόγραμμα "PIC18F/PIC16F Quick Programmer" σου λέει "Not connected..." για την COM1, όταν έχεις συνδέσει την πλακέτα σου στην COM1 του PC?

mad_inventor
02-05-09, 15:37
μου γράφει: "Device found...pic16f877a" αλλά όταν πατάω "read.." μου λέει "failed to read device"!!
Δεν θα έπρεπε έστω να μου διαβάσει το bootloader που έχω αποθηκεύσει????

mad_inventor
02-05-09, 22:21
κάποιος να βοηθήσει???????:saad:

lastid
02-05-09, 23:29
Πιθανόν να μην επικοινωνείς ακόμη με την πλακέτα, γιατί κι εμένα μου βγάζει "Device found" και δεν έχω συνδέσει τίποτε.
Μπορείς να ελέγξεις τα παρακάτω:

Ξέρεις ποια σειριακή είναι (COM1,COM2,...) ?
Οι ρυθμίσεις της σειριακής σου είναι οκ (9600,N,8,1)?
H πλακέτα σου έχει μετατροπέα RS232 σε TTL?
Το καλώδιό σου κάνει τη σύνδεση των σημάτων σωστά (Tx σε Rx και Rx σε Tx)?
Γεφυρώνεις από τη μεριά του PC τα pins 7 και 8?
Γεφυρώνεις από τη μεριά του PC τα pins 1,4 και 6?
Ο PIC σου έχει τροφοδοσία?

Επίσης, δεν κατάλαβα καλά τί εννοείς παραπάνω:


το τοποθετώ στην συνέχεια στην πλακέτα για να μπορώ να το προγραμματίσω μέσω της RS232, αλλα το πρόγραμμα που χρησιμοποιώ:
http://www.easytechnology.gr/index.p...roducts_id=679 (http://www.easytechnology.gr/index.php?main_page=product_info&cPath=3_14&products_id=679)
δεν βρίσκει τηνRS232. Μου διαφεύγει κάτι?????

Ο USB programmer που φαίνεται στο λινκ, δεν έχει καμία σχέση με τον bootloader. Τί ακριβώς εννοείς?

stavroskaloxrist
02-05-09, 23:36
φιλε lastid εσυ που ξερεις απο προγραμματιστες και προγραμματισμους μπορεις να μου βρεις ενα απλο και ευκολο κυκλωμα για να φτιαξω ενα απλο προγραμματιστη για pic 16fxxxxxx γιατι ψαχνω και οσο ψαχνω μπερδευομε και ειμαι και ασχετος απο προγραμματιστες και εχω φαει τα κοματια μου...ευχαριστω!

mad_inventor
02-05-09, 23:55
Πιθανόν να μην επικοινωνείς ακόμη με την πλακέτα, γιατί κι εμένα μου βγάζει "Device found" και δεν έχω συνδέσει τίποτε.
Μπορείς να ελέγξεις τα παρακάτω:

Ξέρεις ποια σειριακή είναι (COM1,COM2,...) ?
Οι ρυθμίσεις της σειριακής σου είναι οκ (9600,N,8,1)?
H πλακέτα σου έχει μετατροπέα RS232 σε TTL?
Το καλώδιό σου κάνει τη σύνδεση των σημάτων σωστά (Tx σε Rx και Rx σε Tx)?
Γεφυρώνεις από τη μεριά του PC τα pins 7 και 8?
Γεφυρώνεις από τη μεριά του PC τα pins 1,4 και 6?
Ο PIC σου έχει τροφοδοσία?

Επίσης, δεν κατάλαβα καλά τί εννοείς παραπάνω:

Ο USB programmer που φαίνεται στο λινκ, δεν έχει καμία σχέση με τον bootloader. Τί ακριβώς εννοείς?
Μέσω του USB programmer αποθήκευσα τον bootloader για την σειρά PIC16F που πα΄ρεχει δωρέαν η Microchip στo αρχείο ΑΝ851 που μου είπανε στο forum εδώ σε προηγούμενη σελίδα. Φόρτωσα το bootload στην διεύθυνση 0000h και στην συνέχεια μέσω του USB programmer και έπειτα ( άλλη προσπάθεια) μέσω του Quick programmer 16F/18F προσπάθησα να το προγραμματίσω από την RS232.... αλλά μου δίνει σφάλμα και το ένα και το άλλο πρόγραμμα!!!

lastid
03-05-09, 00:22
:confused1: Για να καταλάβω:
Όταν σου δίνει σφάλμα, σε ποια πλακέτα είναι κουμπωμένος ο PIC?

mad_inventor
03-05-09, 01:01
στην πλακέτα με το κύκλωμα. Εκεί δηλαδή που θέλω να το έχω μόνιμα και να ελέγχω το πρόγραμμα του PIC μέσω της RS232.

lastid
03-05-09, 01:12
Τους παραπάνω ελέγχους τους έχεις κάνει?
Π.χ. είσαι σίγουρος ότι το σήμα που φεύγει από το pin Tx του PIC περνάει σωστά μέσα από τον RS232 converter και καταλήγει τελικά στο pin Rx του PC?

mad_inventor
03-05-09, 01:21
Αυτό τον έλεγχο κάνω τώρα. Υπάρχει περίπτωση να ευθύνεται το WDT????

mad_inventor
03-05-09, 01:25
Αυτό είναι το κύκλωμα

lastid
03-05-09, 01:55
Το WDT σίγουρα δεν φταίει.
Τα υπόλοιπα bits του configuration register (π.χ. oscillator configuration) μπορεί να φταίνε.
Αυτό όμως που σίγουρα φταίει είναι ότι ενώ σωστά περνάς τα Tx και Rx μέσα από το Max232 για να τα κάνεις RS232, τα άλλα (RTS,CTS κλπ) τα δίνεις χύμα στο PC σαν TTL.

lastid
03-05-09, 01:59
Και ο διακόπτης δουλεύει σωστά μόνο στη θέση "Run", αν το κατάλαβα καλά.

mad_inventor
03-05-09, 03:45
Δεν έχω δει τπτ ούτε εκεί!!!

mad_inventor
03-05-09, 12:03
καλώδια περνάνε και απο την πάνω πλευρα της πλακέτας. RTS,CTS???ποια δηλαδή??

sokiaoki
04-05-09, 07:56
Αυτό με to fuses τι είναι?? Μου το τονίσανε και στο κατάστημα ηλεκτρονικών να το προσέξω, αλλά δεν μου έδωσε παραπάνω πληροφορίες γιατί δεν ήξερε και πολλά από ότι κατάλαβα αυτός.Απλά μου πε να το προσέξω...!!! Μπορείς να μου δώσεις τα φώτα σου???

Φιλε μου προσθεσα ακομα ενα tutorial για τον USB PIC προγραμματιστη ελπιζω να σε βοηθησει
http://www.easytechnology.gr/download/Help-Tutorial-USB-PIC-Programmer.doc

panpanta
09-09-09, 03:51
χαιρετώ την παρέα.

θέλω να ρωτήσω και εγώ κάτι.

Έχω τον Pic start plus, όταν γράφω assembly Κάνει την μεταγλώττηση το mPLAB σε Hex και προγραμματίζει τον κοντρόλερ.

Τελευταία έγραψα κώδικα σε microbasic ο compiler της το έκανε hex αλλά δεν μπόρεσα με το MPlab να το κατεβάσω στον κοντρόλερ.

Μήπως γνωρίζεται πως μπορώ να το κάνω ?

Ευχαριστώ για το χρόνο σας....

panpanta
09-09-09, 05:46
Το βρήκα !!! ολα καλά.... μετά την assembly βούρ στην micro_c & Μicrobasic.

Αλήθεια ποιά προτείνετε για επόμενη μετά την assembly ?

Νομίζω ότι η microbasic είναι πιο κατανοητή από την C...

HFProject
09-09-09, 08:16
Άν έχεις "περάσει" από assembly τότε πήγαινε C.

Είναι περισσότερο χρήσιμη. (Γενικά)

panpanta
10-09-09, 00:28
Ευχαριστώ πολύ για την απάντηση.

έχω γράψει κώδικα σε MicroC παίζοντας με τις εξόδους της πόρτας Β.

Αυτό που δεν μπορώ να καταλάβω είναι πως φτιάχνεις ρουτίνα και πως την καλέις. Μάλλον με την χρήση των Function, αλλά μου έρχεται στο μυαλό η Assembly με τις ενολές Call - return και μπερδεύομαι. Επίσης με ψιλομπερδεύει η παράξενη λογική της C στην σύνταξη του κώδικα.

Υπάρχει κανένα καλό βιβλίο ή βοήθημα στο να γίνει πιο κατανοητή ?

lastid
10-09-09, 14:25
Το βιβλίο που είχε βοηθήσει εμένα να καταλάβω επιτέλους την C έγκυρα, απλά και τεκμηριωμένα, ήταν το "The C programming language" των Kernighan και Ritchie, οι οποίοι είναι οι δημιουργοί της. Υπάρχει και σε Ελληνική έκδοση.

Σωστά όπως λες ρουτίνα είναι η function. Ουσιαστικά είναι η call της assembly. Έχει ενισχυθεί όμως με μηχανισμό για να δέχεται παραμέτρους και να επιστρέφει αποτέλεσμα - όλα αυτά προαιρετικά.
Μία function πρέπει να την δηλώσεις, (περι)γράφοντας τί κάνει. Μπορείς να τη χρησιμοποιήσεις (καλέσεις) όσες φορές θέλεις.
Στη χρήση της, επειδή μπορεί και επιστρέφει κάτι (π.χ. έναν αριθμό), είναι καλύτερα να την φαντάζεσαι περισσότερο σαν μία σταθερά παρά σαν μία εντολή, π.χ.
c=getch();
Μπορείς όμως και να την καλέσεις απλά σαν εντολή, χωρίς να χρησιμοποιήσεις το αποτέλεσμα που αυτή επιστρέφει, π.χ.
getch();