Σελίδα 2 από 3 ΠρώτηΠρώτη 1 2 3 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 11 έως 20 από 21

Θέμα: Arduino array pointer

  1. #11
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Υπαρχει σχετικη συζητηση και στους AVRFreaks και στην ST και στην NXP.

    Δε διαφωνω για το προσεκτικος,απλα προσθετω το ΠΑΡΑ πολυ.

    0 Not allowed! Not allowed!

  2. #12
    Μέλος Το avatar του χρήστη klik
    Όνομα
    just a click away
    Εγγραφή
    Oct 2009
    Περιοχή
    Θεσσαλλλονίκη
    Μηνύματα
    2.555

    Προεπιλογή

    Η περίπτωση "arxeio.hlektronikon.txt" δεν θα παίξει (περισσότερες από μια τελείες) με τους παραπάνω κώδικες.
    Στον κώδικα σου δεν παίζει επίσης η περίπτωση να μην υπάρχει τελεία.

    0 Not allowed! Not allowed!

  3. #13
    Μέλος
    Όνομα
    ΑΛΕΞΑΝΔΡΟΣ
    Εγγραφή
    Jan 2012
    Περιοχή
    Άνω Αχαρναί
    Μηνύματα
    717

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από picdev Εμφάνιση μηνυμάτων
    Προβλήματα δεν δημιουργεί , πρέπει να είσαι προσεκτικός αλλά είναι ο μόνος τρόπος να φτιάξεις δυναμική μνημη στη c, και να ορίζεις μεταβλητές κατά τη ροή του προγράμματος
    Το πρόβλημα με την δυναμική μνήμη, είναι ότι κατακερματίζει την RAM σε πολλά μικρά κομμάτια και όταν υπάρχει περιορισμός στο μέγεθος της μνήμης, όπως συμβαίνει με τους περισσότερους m/c, καλό είναι να βρίσκουμε διαφορετικό τρόπο χειρισμού των strings.

    0 Not allowed! Not allowed!

  4. #14
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από klik Εμφάνιση μηνυμάτων
    Η περίπτωση "arxeio.hlektronikon.txt" δεν θα παίξει (περισσότερες από μια τελείες) με τους παραπάνω κώδικες.
    Στον κώδικα σου δεν παίζει επίσης η περίπτωση να μην υπάρχει τελεία.
    Τιποτα απο αυτα δε θα γινει Klik.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη SProg : 26-02-17 στις 13:13

  5. #15
    Μέλος Το avatar του χρήστη klik
    Όνομα
    just a click away
    Εγγραφή
    Oct 2009
    Περιοχή
    Θεσσαλλλονίκη
    Μηνύματα
    2.555

    Προεπιλογή

    Η πρώτη αναφορά για τις πολλαπλές τελείες
    Παράθεση Αρχικό μήνυμα από klik Εμφάνιση μηνυμάτων
    Η περίπτωση "arxeio.hlektronikon.txt" δεν θα παίξει (περισσότερες από μια τελείες) με τους παραπάνω κώδικες.
    την έχω κάνει γενική (πληθυντικός) και αφορά ΚΑΙ εσένα SavKok

    Κώδικας:
    #include <string.h>
    #include <stdio.h>
    
    
    char name[] = "hello.world.of.electronics.txt";
    
    
    int main(){
    	printf("savas result = %s\n", strtok(name,"."));
    	return 0;
    
    
    }
    //αποτέλεσμα:
    hello
    Η δεύτερη αναφορά
    Παράθεση Αρχικό μήνυμα από klik Εμφάνιση μηνυμάτων
    Στον κώδικα σου δεν παίζει επίσης η περίπτωση να μην υπάρχει τελεία.
    την έχω κάνει σε ενικό αριθμό και αφορά το νηματοθέτη (θεώρησα ότι είναι φανερό αφού εκείνος δεν έχει ελέγξει για NUL):
    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    ...

    που ελέγχει μόνο για '.' και όχι για 0.

    0 Not allowed! Not allowed!

  6. #16
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    Ήθελα από ένα char array γνωρίζοντας τον pointer να αφαιρέσω τα γράμματα μετά την τελεία (file extension).
    Αυτο αναφερει.


    Υ.Γ Τωρα το ξαναειδα.Ειχα στο μυαλο μου οτι απλα ηταν της μορφης xxxx.txt κτλ.

    Κώδικας:
    char remove_extension(char* filename,char* extension)
    {
        char * pch;
        
        pch=strstr(filename,extension);
        if((pch != NULL) && (&pch[0] == &filename[strlen(filename)-strlen(extension)]))
        {    
            pch[0]='\0';
            printf("%s\n",filename);   
            return 1;
        }    
        return 0;
    }
    
    
    
    
    int main()
    {
       char filename[] = "Test.azxcvbnm.txt";
       remove_extension(filename,".txt");   
       return(0);
    }
    Που και εδω υπαρχει η πιθανοτητα να ειναι το ονομα test.document.docκαι ο παραπανω κωδικας να μην το βρισκει σωστα.Το πιο σωστο ειναι να πας απο πισω προς τα μπροστα byte-byte.

    Κώδικας:
    #include <stdio.h>
    #include <string.h>
    
    
    char remove_extension(char* filename,char* extension)
    {
        char len_f,len_e;    
        len_f=strlen(filename);
        len_e=strlen(extension);
        
        char index=0;
        while(index < len_e)
        {
            if(filename[len_f-index] != extension[len_e-index])
            {
                return 0;
            }
            index++;
        }
        filename[len_f-len_e]='\0';
        printf("%s",filename);
        return 1;
    }
    
    
    
    
    
    
    
    
    int main()
    {
       char filename[] = "Test.document.doc";
       remove_extension(filename,".doc");   
       return(0);
    }

    1 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη SProg : 26-02-17 στις 15:31

  7. #17
    Μέλος Το avatar του χρήστη klik
    Όνομα
    just a click away
    Εγγραφή
    Oct 2009
    Περιοχή
    Θεσσαλλλονίκη
    Μηνύματα
    2.555

    Προεπιλογή

    ϊσως να θέλει κάτι της μορφής:
    Κώδικας:
    register char *p;
    if((p=strrchr(name,'.'))!=NULL)
          *p = 0;
    αν και θα προτιμούσα να χρησιμοποιηθεί μόνο με το μήκος και χωρίς παρέμβαση στα data όπως είχε προτείνει ο Άκης:
    Κώδικας:
    unsigned short fname_len(const char *name){
            regsiter char *p;
            if((p=strrchr(name,'.'))!=NULL)
                     return p - name;
            return strlen(name);//η return ~0u (αρκεί ο κώδικας μας στην εκτύπωση να προβλέπει το NUL check)
    }

    1 Not allowed! Not allowed!

  8. #18
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    Παιδιά σας ευχαριστώ πάρα πολύ!
    Τα αρχεία τα δημιουργεί ο ίδιος ο μΕ και προέρχονται από UART από ειδικό πρόγραμμα σε windows και την μορφή την έχω ορίσει xxxxxxxx.xxx οπότε δεν υπάρχει πιθανότητα να έχει περισσότερες τελείες ή καμία ή extension με διαφορετικό μέγεθος.

    Στην αρχή δεν είχα καν σκοπό να βάλω file extension αλλά μετά σκέφτηκα να τα κάνω ίδια με αυτά που θα ανοίγουν με double click το αντίστοιχο πρόγραμμα για επεξεργασία στο pc για να μπορούν να γίνουν copy paste απευθείας στην SD. Εφόσον υπάρχει και ο περιορισμός 8.3 στην βιβλιοθήκη της SD θα κάνω κάποιο document που να αναφέρει τους περιορισμούς στην δομή του ονόματος για copy paste.

    Μου δώσατε αρκετές πληροφορίες, θα το αφήσω έτσι που κάνει copy μέχρι και την τελευταία τελεία και στην συνέχεια την αντικαθιστά με /0

    Κώδικας:
    char* CutFileType(char* CharArray) {
      byte len;
      len = strlen(CharArray);
      char *NewName=new char[len - 3];
      memcpy(NewName, CharArray, len - 3);
      NewName[len - 4] = '\0';
      return NewName;
    }
    Ευχαριστώ πάρα πολύ!

    Η register char *p; τι ακριβώς κάνει? Μιας και το αναφέρατε.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη Fire Doger : 26-02-17 στις 16:50

  9. #19
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Υποθετεις οτι το extension είναι της μορφης .xxx ,εαν ειναι παντα .txt τοτε ειναι ΟΚ. Το καλυτερο ειναι η συναρτηση να εχει γενικη χρηση ακομα και για αρχεια με καταληξη .xx ή .xxxx.


    Για το αλλο που ρωτησες,παραθετω:

    Κώδικας:
    There is no good example of register usage when using modern compilers (read: last 15+ years) because it almost never does any good and can do some bad. When you use register, you are telling the compiler "I know how to optimize my code better than you do" which is almost never the case. One of three things can happen when you use register:
    
    
    • The compiler ignores it, this is most likely. In this case the only harm is that you cannot take the address of the variable in the code.
    • The compiler honors your request and as a result the code runs slower.
    • The compiler honors your request and the code runs faster, this is the least likely scenario.
    Even if one compiler produces better code when you use register, there is no reason to believe another will do the same. If you have some critical code that the compiler is not optimizing well enough your best bet is probably to use assembler for that part anyway but of course do the appropriate profiling to verify the generated code is really a problem first.

    1 Not allowed! Not allowed!

  10. #20
    Μέλος Το avatar του χρήστη klik
    Όνομα
    just a click away
    Εγγραφή
    Oct 2009
    Περιοχή
    Θεσσαλλλονίκη
    Μηνύματα
    2.555

    Προεπιλογή

    Στη C το register είναι hint προς τον compiler βαριάς τοπικής χρήσης και επιτρέπει στον compiler να ΜΗΝ ενημερώνει την αποθηκευμένη θέση στη μνήμη (αν υπάρχει τέτοια).
    Οπότε αν κάνεις διαδοχικές πράξεις πάνω του (όπως στον κώδικα μου), όπου πρώτα αποδίδεται τιμή, μετά ελέγχεται ως προς μια σταθερά και μετά χρησιμοποιείται η τιμή αυτή, αν γίνει register ΔΕΝ υπάρχει περίπτωση να επιβαρύνεις τον compiler.

    Στη C++ από το πρότυπο C++11 (Annex D.2):, η δήλωση αυτή αγνοείται.
    Το arduino δεν ξέρω τι πρότυπα ακολουθεί.

    1 Not allowed! Not allowed!

Σελίδα 2 από 3 ΠρώτηΠρώτη 1 2 3 ΤελευταίαΤελευταία

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

  1. Control Array σε VB.net
    By TomMan in forum Software Η/Υ
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 22-06-10, 15:21
  2. Αγορά PIR (passive infrared) Detectors σε array
    By solli144 in forum Όργανα & Εξοπλισμός
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 25-04-10, 17:07
  3. Three Element Circular Array Beam 88-108
    By radioamateur in forum Κεραίες & Καλώδια
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 01-06-08, 03:15
  4. Laser pointer
    By NUKE in forum Εξαρτήματα & Datasheets
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 20-06-06, 14:42

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

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