Προς το περιεχόμενο

Ιδέες για project σε C


gon1332

Προτεινόμενες αναρτήσεις

Μια και μιλάμε για projects στη C να κανω μια ερώτηση :

Ιδέες για project είναι το νήμα όχι ό,τι να ναι ερωτήσεις αρκεί να είναι για C.

 

Αν έχω μια μεταβλητή δεικτη που δειχνει σε μια περιοχη μνήμης οπου εκει αποθηκεύεται αυτο που πληκτρολογεί ο χρήστης και έχω ορισει τον δεικτη να ειναι τύπου volatile αν ο χρηστης δώσει το a και μετα ξανα τον a χαρακτήρα τοτε αυτος δεν θα γινει 2 φορες fetched απο την μνήμη. Moνο αν ο χρηστης δωσει διαφορετικο χαρακτήρα.

Ο compiler όταν πάει να παράξει κώδικα ξέρει τι θα δώσει ο χρήστης σου όταν τρέξει το πρόγραμμα ?

 

Όταν δηλώνεις κάτι σαν volatile λες στον compiler ότι οποιαδήποτε προσπέλαση του αντικειμένου θα ξαναδιαβάσει τη μνήμη αντί να γίνει optimize (με δεδομένο φυσικά ότι δεν θα το αγνοήσει ο compiler)

 

Δεν κατάλαβα ποια είναι η ερώτηση -- περισσότερο σαν διαπίστωση μου μοιάζει.

 

Ή θλελεις τα περιεχόμενα να θεωρούνται volatile, πχ

volatile char * kbdinput;
Ρωτάω διότι, αν θυμάμαι καλά, το δεύτερο είναι το πιο συνηθισμένο.

 

Συνήθως αυτό (ή και σκέτη μεταβλητή χωρίς δείκτη) γιατί τα δεδομένα θα είναι σε μια memory mapped περιοχή που αλλάζει από εξωτερικό παράγοντα ή ποιος ξέρει τι. Συνήθως το αγνοεί ο compiler εκτός και αν μιλάμε για κάποιο embedded που έχει πιο πολύ νόημα.

 

Μια συνήθης χρήση σε DOS ήταν για να διαβάζεις την περιοχή μνήμης 0040:XXXX στην οποία υπήρχαν οι ρυθμίσεις του BIOS (ακόμη και τώρα μπορείς να διαβάσεις την περιοχή αλλά με κάποιο σωστό τρόπο που σου παρέχει το λειτουργικό από την protected mode)

 

Τρέχοντας debug (ας πούμε mini assembler) σε DOS έχουμε.

C:\>debug
-a
1111:0100 mov ax,0040
1111:0103 mov ds,ax
1111:0105 mov bx,0000
1111:0108 mov cx,word ptr [bx]
1111:010A mov bx,0013
1111:010D mov dx,word ptr [bx]
1111:010F mov bx,006c
1111:0112 mov ax,word ptr [bx]
1111:0114 mov bx,word ptr [bx]
1111:0116
-p
Οι δύο πρώτες εντολές θέτουν στον καταχωρητή DS την τιμή 0x0040 (Δεν μπορείς να βάλεις literal στον DS οπότε το κάνεις έμμεσα μέσω του AX). Οι επόμενες εντολές διαβάζουν την τιμή που υπάρχει στη διεύθυνση DS:BX οπότε διαβάζουν τις τιμές των διευθύνσεων 0040:0000, 0040:0013 και 0040:006C.

 

Τρέχοντας με διαδοχικά p τον παραπάνω κώδικα παίρνουμε CX=03F8 και DX=027F. Στην διεύθυνση 0000 υπάρχει η πόρτα της COM1 (το πιο σύνηθες είναι 0x03F8) και στη διεύθυνση 0013 υπάρχει η μνήμη του συστήματος (0x027F = 639 δηλαδή τα 640K του DOS). Οι συγκεκριμένες διευθύνσεις φυσικά έχουν υπό κανονικές συνθήκες την ίδια τιμή πάντα αλλά η 6C έχει το ρολόι οπότε για την πρώτη εκτέλεση παίρνουμε AX=D55D ενώ για την δεύτερη BX=D59F δηλαδή 66 ticks διαφορά μεταξύ των δύο εντολών (18 ticks κάθε δευτερόλεπτο)

 

Σε ένα αντίστοιχο κώδικα σε C όπου θα έθετες τον δείκτη να δείχνει στην 0040:006C θέλεις το volatile ώστε κάθε φορά που διαβάζεις το δείκτη να παίρνεις τη νέα τιμή του ρολογιού.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 138
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Λοιπόν τα σουλούπωσα και εγώ λίγο. Με έναν φίλο από σχολή έχουμε και εμείς αυτό το domain με αρχική ιδέα να τα μαζεύουμε εκεί, αλλά τελικά πιο πολύ το χρησιμοποιούμε για δοκιμές και πολλά subdomains.

http://codescar.eu/category/projects

 

Αν βρω κανένα άλλο ξεχασμένο αλλού θα το προσθέσω..

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

@imitheos δεν ευθυνομαι εγω που το θρεντ ερωτησεις για C έχει κλειδωθεί. :P

 

Πιο απλά και χωρις πολλες τεχνικές αναλύσεις που βάζουν και assembly στο παιχνιδι άν έχεις

i=0; if(i==0) { // ... }

ο μεταγλωτιστής κανονικα θα παραλείψει τον έλεγχο διοτι "ξέρει" οτι ειναι TRUE. Αν ομως το i δηλωθει σαν volatile τοτε ο μεταγλωτιστης θα φορτώσει το i ξανά απο την μνήμη. Ο λογος ειναι οτι ειναι μια ένδειξη οτι κάτι άλλο μπορει να αλλάξει την τιμή του i χωρις το ιδιο το προγραμμα να το κάνει. Απλα μια εισαγωγή και αν κάποιος θέλει να το ψάξει παραπάνω μπορει να αρχισει εκει με τους καταχωρητες με την assembly τα ρολογια κτλπ.

Επεξ/σία από Star_Light
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πολύ ενδιαφέρον ιδέες θα μ έψηνε πολύ να βοηθήσω αλλά νομίζω δε έχω ούτε το 1/3 των γνώσεών σας. Αν θέλετε να καταλείξετε κάπου όλοι μαζί κ όχι να σπάσετε πολλά άτομα σε πολλά projects κάντε κάνα poll και ότι βγει πρώτο ξεκινάτε(δημοκρατία έχουμε ;) )

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πολύ ενδιαφέρον ιδέες θα μ έψηνε πολύ να βοηθήσω αλλά νομίζω δε έχω ούτε το 1/3 των γνώσεών σας.

Γνώσεις πολλές δεν χρειάζονται, ανάλογα το project βέβαια. Σε αυτές τις περιπτώσεις, το μεράκι και η όρεξη για μάθηση νομίζω είναι αρκετά.

 

Αν θέλετε να καταλείξετε κάπου όλοι μαζί κ όχι να σπάσετε πολλά άτομα σε πολλά projects κάντε κάνα poll και ότι βγει πρώτο ξεκινάτε(δημοκρατία έχουμε ;) )

Μπα... δεν νομίζω να τίθεται τέτοιο θέμα. Αν δημιουργηθούν πχ 5 projects με 2-3 άτομα το καθένα, αυτό θα είναι ένα πετυχημένο thread!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν, πρόσφατα έκανα συμβόλαιο(Internet) με νέο πάροχο και μαζί με το συμβόλαιο είχε δώρο tablet. Το tablet με λίγα λόγια, είναι για τον π^#^σο. Σκέφτομαι(για εκπαιδευτικούς σκοπούς περισσότερο) να προσπαθήσω να κάνω μια δικιά μου custom rom για το tablet(μιας και δεν υπάρχουν άλλες αφού είναι ένα noName chinese tablet) η οποία θα το 'αναστήσει' λιγάκι. Δεν έχω ψάξει-βρει ακόμα κάτι αλλά όρεξη υπάρχει. Αν ενδιαφέρεται κανένας, join.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν δεν βρεθεί κάποιος άλλος, το αναλαμβάνω εγώ.

 

Υποψηφιότητες;;;

Αν είναι, περιμένετε λίγο ακόμα να προσθέσω και το Redo σε αυτό εδώ και το ανεβάζετε μετά.

 

Αν και δεν βλέπω να ψήνεται κανείς άλλος, αλλά δεν βαριέσαι :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έτοιμος είμαι (όχι ότι είναι οκ ο κώδικας αλλά δείχνει να δουλεύει... κυρίως όμως γιατί μπούκωσα :P). Βασικά θέλεις να το παλέψεις κι εσύ, ή απλά να κάνεις host στον κώδικα σε κάποιο cvs;
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πρώτο μου πρόγραμμα σε C ήταν ένα πρόγραμμα διαχείρισης αποθήκης.

Στην ουσία ο χρήστης καταχωρούσε προϊόντα με βάση κάποια στοιχεία όπως;

-όνομα εταιρίας, 

-αφμ

-είδος

-τιμή

-ημερομηνία

και 2-3 ακόμα που δε θυμάμαι.

Ήταν σε κονσόλα και ο χρήστης καταχωρούσε ένα-ένα τα δεδομένα και το πρόγραμμα τα έγγραφε σε ένα αρχείο txt.

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

Θα πρεπε να χε και αναζήτηση αλλά δεν είχε.

Καταχωρούσες, διάβαζες και έσβηνες, μόνο αυτό.

μου πήρε 4 μέρες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...