اطلاعیه

Collapse
No announcement yet.

تعریف و استفاده از بُــردار

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تعریف و استفاده از بُــردار

    سلام دوستان
    من برای یه کاری در LPC 1768 می خوام یه سری داده رو روی بردار بریزم که طول بردار 1024 بایت یا 256 تا 4 بایت باشه. و با یه اشاره گری، چیزی به هر خانه دسترسی داشته باشم. و بتونم به هر خانه دسترسی داشته باشم. می خواستم بدونم توی C بردار چحوری تعریف می شه. و آیا توی LPC هم جواب می ده؟؟
    یعنی مثل دستور goto محدودیت ایجاد نمی کنه؟؟
    ممنون
    اين که تعداد تشکر هاي اهدايي يه کاربر زياده به اين معنا نيست. که چيزي بلد نيست؛ بلکه نشانه اينه که به تلاش بقيه بچه ها احترام مي گذاره

    #2
    پاسخ : تعریف و استفاده از بُــردار

    اگر منظور شما از بردار رشته یا استرینگ ه به این صورت تعریف میشه :
    data_type name [length] ;
    برای مثال :
    char str [12] ;
    در مثال بالا یک استرینگ به طول 12 بایت تولید شده است.
    برای دسترسی مستقیم کافیست ایندکس دلخواه رو بدهید .مثال:
    str[0]=0xff;
    با این کار اولین خانه این رشته را مقدار 0xff داده ایم.

    sram داخلی lpc1786 مقدار 64kB میباشد . بنابر این از این نظر مشکلی ندارید.

    در مورد دستور goto متوجه سوال شما نشدم
    از جمله ی رفتگان این راه دراز
    باز آمده ای کو که به ما گوید راز
    هان بر سر این دو راهه از روی نیاز
    چیزی نگذاری که نمی آیی باز

    دیدگاه


      #3
      پاسخ : تعریف و استفاده از بُــردار

      ممنون
      خودم یه جورایی برای بردارهای کوچیک(90خونه ای ) راه انداخته بودمش.
      من می خوام یه بردار 512 تایی از مقادیر char ایجاد کنم به نام buf وقتی می نویسم:
      کد:
      char buf[512]={0};
      به مشکل بر می خورم. در واقع بیشتر از 90 واحد، برای این رشته قابل تعریف نیست.
      مثلا کد من اینه:
      کد:
      # include <stdio.h>
      int main (void){
      int bytes_read;
      int i,j={0};
      char temp[4]={0};
      char buf[90]={0};
      bytes_read=5678;
      
      do{
      				sprintf(temp,"%d",bytes_read);
      				for (j=0;j<4;j++){
      					buf [i]=(temp[j]);
      					i++;
      				}
      				buf [i]=10;
      				i++;
      				bytes_read ++;
      			}while(i<=90);
      }
      وقتی به جای 90 های موجود در کد بگذارم 500 برنامه جواب نمی ده و انگار که هنگ می کنه یا توی حلقه بی نهایت می ره!
      حالا برای دنبال کردن کد ها اگه یه جایی یه لامپی رو روشن کنم،(خروجی رو تعریف کنم که یک بشه) لامپه روشن نمی شه! یعنی برنامه به اونجا نرسیده!
      می شه بگین این رجیستر های R0 تا R15 دقیقا کارشون چیه؟؟الان این آرایه ای که مد نظر منه توی این R ها ذخیره می شه یا توی جای دیگه ای توی SRAM؟
      می شه در صورت امکان، راهنمائیم کنین؟
      ممنون
      اين که تعداد تشکر هاي اهدايي يه کاربر زياده به اين معنا نيست. که چيزي بلد نيست؛ بلکه نشانه اينه که به تلاش بقيه بچه ها احترام مي گذاره

      دیدگاه


        #4
        پاسخ : تعریف و استفاده از بُــردار

        خیلی عجیبه. نباید خطایی به وجود بیاد. 1768 تا 32 کیلوبایت بدون محدودیت می تونه از SRAM استفاده کنه.
        امیر خان، رجیسترهای داخلیِ میکروکنترلر رو فراموش کن. اونا برای عملیات سطح پایین انتقال و محاسبه و منطق هسته CPU استفاده می شن. تمام متغیرهایی که توی برنامه تعریف می کنی توی RAM نگهداری می شن.
        شما یه چیزی رو امتحان کن؛ متغیرها رو قبل از main تعریف کن. بعد از include ها. با این کار متغیرها توی پشته (Stack) ذخیره نمی شن و یه راست می رن توی RAM. اگه متغیرها رو در داخل main تعریف کنی، حتماً توی پشته ذخیره می شن و ممکنه سهواً موقع کامپایل اندازه پشته رو مقدار کمی قرار داده باشی (یا به صورت پیش فرض مقدار کمی داشته باشه).
        دقت کن که شمارنده ها و اندیس ها char یا 8 بیتی نباشند که بیشتر از 255 براشون بی معنیه.
        من برنامه هایی با آرایه های بزرگ نوشتم. مشکلی نداشتم تا حالا.
        بیایید با Google آشتی کنیم!

        دیدگاه


          #5
          پاسخ : تعریف و استفاده از بُــردار

          نوشته اصلی توسط محمد رستمی
          خیلی عجیبه. نباید خطایی به وجود بیاد. 1768 تا 32 کیلوبایت بدون محدودیت می تونه از SRAM استفاده کنه.
          امیر خان، رجیسترهای داخلیِ میکروکنترلر رو فراموش کن. اونا برای عملیات سطح پایین انتقال و محاسبه و منطق هسته CPU استفاده می شن. تمام متغیرهایی که توی برنامه تعریف می کنی توی RAM نگهداری می شن.
          شما یه چیزی رو امتحان کن؛ متغیرها رو قبل از main تعریف کن. بعد از include ها. با این کار متغیرها توی پشته (Stack) ذخیره نمی شن و یه راست می رن توی RAM. اگه متغیرها رو در داخل main تعریف کنی، حتماً توی پشته ذخیره می شن و ممکنه سهواً موقع کامپایل اندازه پشته رو مقدار کمی قرار داده باشی (یا به صورت پیش فرض مقدار کمی داشته باشه).
          دقت کن که شمارنده ها و اندیس ها char یا 8 بیتی نباشند که بیشتر از 255 براشون بی معنیه.
          من برنامه هایی با آرایه های بزرگ نوشتم. مشکلی نداشتم تا حالا.
          ممنون داداش لطف بزرگی به من کردی!
          هرچند که این بخش های فروم بیشتر شبیه خونه ارواحه اما یکی هم مثل شما پیدا می شه که کار آدم رو راه بندازه.
          اين که تعداد تشکر هاي اهدايي يه کاربر زياده به اين معنا نيست. که چيزي بلد نيست؛ بلکه نشانه اينه که به تلاش بقيه بچه ها احترام مي گذاره

          دیدگاه


            #6
            پاسخ : تعریف و استفاده از بُــردار

            گفتی ارواح فکر کردم صدای من زدی!!

            ممکنه بخاطر لاینسنس کامپایلرت باشه عوضش کن ببین چی میشه

            انجام پروژه هاي برنامه نويسي اندرويد
            [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
            http://cafebazaar.ir/app/?id=com.atxdroid

            دیدگاه


              #7
              پاسخ : تعریف و استفاده از بُــردار

              ممنون

              با راه حل آقای رستمی کارم راه افتاد . یعنی شما می فرمائین با تعویض لایسنس، بردار توی خود استک هم جواب می ده؟
              لایسنس رو عوض کردم.
              همین دوتا کافیه؟

              ممنون
              اين که تعداد تشکر هاي اهدايي يه کاربر زياده به اين معنا نيست. که چيزي بلد نيست؛ بلکه نشانه اينه که به تلاش بقيه بچه ها احترام مي گذاره

              دیدگاه


                #8
                پاسخ : تعریف و استفاده از بُــردار

                راستی لایسنس ها رو که عوض می کنی فرقی نمی کنه.
                تا بافر رو می برم توی تابع جواب نمی ده و تا می برمشون بیرون(بعد از اینکلود درست می شه!)
                حالا ما تو یه فروم خارجی این رو از ملت پرسیدیم، می گن به صورت موقتی جواب گرفتی. رومون نمی شه بهشون بگیم که دارم کرک استفاده می کنیم که!
                آدرس فروم خارجیه:
                http://www.keil.com/forum/22302/#msg116942
                اين که تعداد تشکر هاي اهدايي يه کاربر زياده به اين معنا نيست. که چيزي بلد نيست؛ بلکه نشانه اينه که به تلاش بقيه بچه ها احترام مي گذاره

                دیدگاه


                  #9
                  پاسخ : تعریف و استفاده از بُــردار

                  نوشته اصلی توسط Amirkhan_0o0
                  ممنون

                  با راه حل آقای رستمی کارم راه افتاد . یعنی شما می فرمائین با تعویض لایسنس، بردار توی خود استک هم جواب می ده؟
                  لایسنس رو عوض کردم.
                  همین دوتا کافیه؟

                  ممنون
                  گفتم شاید به این دلیل باشه که گفتین حل شده پس خدا رو شکر!
                  انجام پروژه هاي برنامه نويسي اندرويد
                  [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
                  http://cafebazaar.ir/app/?id=com.atxdroid

                  دیدگاه


                    #10
                    پاسخ : تعریف و استفاده از بُــردار

                    قربون مرامت امیر خان.
                    ایشاللا که همیشه موفق باشی.
                    باز هم به دوستان توصیه می کنم که متغیرهای با حجم زیاد رو توی توابع فرعی، یا حتی تابع main تعریف نکنند. متغیرها رو عمومی تعریف کنید تا Stack بیخودی اشغال نشه.
                    بیایید با Google آشتی کنیم!

                    دیدگاه

                    لطفا صبر کنید...
                    X