Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

2 mõõtmeline array

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    2 mõõtmeline array

    Tekkis väike probleem, vaja 2 mõõtmelist arrayd aga vaja öelda ka selle algus adre (base address) kuidas see peaks välja nägema C-s. definitsioon ja sinna kirjutamine.
    Ise kasutanud seni
    unsigned int [x][y] ;
    Kuidas sellisele öelda algus adre.
    Hea oleks kui saaks ka 1 mõõtmelise aga algus adre on määratud.
    Just see algus adre määramine on paras peavalu. compileri help ei olnud ka just informatiivne. Ja mikroelektronika MicroC-s kasutatud süntaksi
    (muutuja absolute 0x0000 ) peetakse mingiks läbuks.
    Modelleerimises ja tootmises kehtivad:
    1. Avariikindel vooluring lühistab kõik teised.
    2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

    #2
    Vs: 2 mõõtmeline array

    C standarti järgi ongi muutuja a ilma indeksita selle algusaadress.

    Comment


      #3
      Vs: 2 mõõtmeline array

      mul on vaja et muutuja alg. adre. algaks 0x04000000
      Modelleerimises ja tootmises kehtivad:
      1. Avariikindel vooluring lühistab kõik teised.
      2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

      Comment


        #4
        Vs: 2 mõõtmeline array

        Muganda alljärgnev kood. Asenda "matrix = buffer" lausega "matrix = (ArrayOf5*)0x04000000. Ja töötab.

        Kood:
        #include <stdio.h>
        
        typedef int ArrayOf5[5];
        
        int
        main(
                int     argc,
                char**  argv
        )
        {
                int             buffer[20] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 };
                ArrayOf5*       matrix = buffer;
                // int[4][5]    matrix;
        
                matrix[3][3] = 100;
        
                printf("buffer : %08x\n", buffer);
                printf("matrix : %08x\n", matrix);
                printf("buffer[18] : %d\n", buffer[18]);
        
                return 0;
        }
        ~
        p.s. viga parandatud.
        viimati muutis kasutaja andreie; 27 September 2007, 12:30.
        If you think education is expensive, try ignorance.

        Comment


          #5
          Vs: 2 mõõtmeline array

          76: data = (ArrayOf5*)0x04000000) ;

          main.c(76): warning: assignment makes integer from pointer without a cast
          main.c(76): error: parse error before ')' token
          Modelleerimises ja tootmises kehtivad:
          1. Avariikindel vooluring lühistab kõik teised.
          2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

          Comment


            #6
            Vs: 2 mõõtmeline array

            Viimane ehk &#252;ks sulg puudu?

            data = (ArrayOf5*)0x04000000));

            Comment


              #7
              Vs: 2 mõõtmeline array

              Mitte nii kiiresti.

              Mediteerida on ka vaja.
              If you think education is expensive, try ignorance.

              Comment


                #8
                Vs: 2 mõõtmeline array

                sulg teeb veel 1 &#252;learu
                Modelleerimises ja tootmises kehtivad:
                1. Avariikindel vooluring lühistab kõik teised.
                2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

                Comment


                  #9
                  Vs: 2 mõõtmeline array

                  vastus on:

                  #define Buffer_base 0x04000000 /* UART0 Base Address */

                  ....

                  unsigned long adre, data;

                  ....


                  REG32(Buffer_base + adre)= data ;


                  kompilaator n&#245;uab mis t&#252;&#252;pi registriga viga kas 32/16/8 vastus saadud katse eksituse meetodil, t&#246;&#246;tab alati aga v&#245;tab aega et vastus saada.


                  teise m&#245;&#245;tma saamiseks tuleb n&#228;ppida vastavalt kas longist ylemist 16 bitti v&#245;i almist 16 bitti
                  Modelleerimises ja tootmises kehtivad:
                  1. Avariikindel vooluring lühistab kõik teised.
                  2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

                  Comment


                    #10
                    Vs: 2 mõõtmeline array

                    Ma vist ikka maru segaselt kirjutasin. Tegelikult olen laisk.

                    Saab ka inimlikumalt:

                    Kood:
                    #include <stdint.h>    // uint32_t
                    
                    typedef uint32_t    ArrayOf100[100];
                    
                    int
                    main(
                        int    argc,
                        char**    argv)
                    {
                        ArrayOf100*    matrix = (ArrayOf100*)0x04000000;
                    
                        matrix[0][20] = 0x00;    // kasutamine.
                    
                        return 0;
                    }

                    ja ühemõõtmelises massiivis:
                    Kood:
                    #include <stdint.h>    // uint32_t
                    
                    int
                    main(
                        int    argc,
                        char**    argv)
                    {
                        uint32_t*    array1d = (uint32_t*)0x04000000
                    
                        array1d[3] = 0x00;    // kasutamine
                    
                        return 0;
                    }
                    If you think education is expensive, try ignorance.

                    Comment


                      #11
                      Vs: 2 mõõtmeline array

                      kas see C ei toeta kirjaviisi :
                      unsigned int my_array[x][y] @ 0x4000;

                      veel on vöimalik läbi ASMi defineerida

                      extern my_array;
                      ORG H'4000'
                      my_array: // siit saab aadressi
                      ds x*y*2; // reserveerib x*y*2 baiti

                      njah, tegelt pole ma microC ga tegelenud ja arvatavasti on see ANSI C-st üsna kauge asi.

                      Comment


                        #12
                        Vs: 2 mõõtmeline array

                        Andreie viimane postitus peaks õige olema.
                        Niikaua, kuni meil ei ole mingit mälukaitset. Muidu saad lihtsalt segmentation fault'i kui oma segmendist välja ronid.

                        Comment

                        Working...
                        X