اطلاعیه

Collapse
No announcement yet.

معادل متغییر overlay تو زبان C

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

    معادل متغییر overlay تو زبان C

    سلام
    توی کامپایلر بیسیک یه نوع متغییر هست به نام overlay
    که به نظر من خیلی عالی هست
    شما مثلا یه آرایه 20 بایتی داری که توش 5 تا متغییر 32 بیتی ذخیره شده
    حالا اگر عدد 32 بیتی مثلا سوم رو بخواهی
    یه آرایه 32 بیتی با طول 5 تعریف میکنی بصورت overlay که آدرس شروعش ،آدرس شروع اون آرایه 20 بایتی هست و حالا برای بدست اوردن متغیر سوم ارایه سوم رو می خونی
    اینکار نیاز به تبدیل و... حین اجرای برنامه از بین میبره و زمان کامپایل ،کامپایلر آدرس دهی میکنه
    حالا سوال من اینه که معادل روش تو زبان C چی هست؟
    توضیحات رو دادم که اگر کسی بیسیک رو آشنایی نداره و سی رو بلد هست در جریان قرار بگیره
    ممنون
    هميشه به ياد خدا باش !

    #2
    پاسخ : معادل متغییر overlay تو زبان C

    مغییرهایی که در زبان سی از نوع POINTER یا اشاره گر تعریف میشن برای انجام اینکار و همچنین انواع انتقال داده از طریق آدرس دهی استفاده میشوند.
    همچنین در زبان اسمبلی از طریق آدرس دهی غیر مستقیم انجام میشود
    از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
    هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
    اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
    اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
    شاد و موفق باشید

    دیدگاه


      #3
      پاسخ : معادل متغییر overlay تو زبان C

      یه مثال از پوینتر مثل توضیحی که دادم میشه لطف کنی بگی به چه صورت متغییر رو تعریف میکنید؟
      مثال تعریف متغییر پست اول
      ممنون
      هميشه به ياد خدا باش !

      دیدگاه


        #4
        پاسخ : معادل متغییر overlay تو زبان C

        یکی از مواردی که باعث شده دسترسی به سخت افزار در زبان C بیشتر بشه همین اشاره گر ها هستند و در واقع هرجا صحبت از بان C هست از اشاره گرها به عنوان یک نقطه قوت در این زبان یاد میکنند. علاوه بر موردی که شما اشاره کردید این نوع متغییر در زبان C کاربردهای فراوان دیگری هم دارد.
        برای تعریف یک متغییر از نوع اشاره گر اول نوع متغییر رو مشخص میکنیم ( اینکه چند بیتی هست، مثلا int هست یا long یا char و ... ) بعد قبل از نام متغییر علامت '*' را قرار میدهیم، به عنوان ساده ترین مثال میشه مثال زیر رو در نظر گرفت
        کد:
        int 	*p,m,s;
        m = 5;
        p = &m;
        s = *p;
        در مثال بالا متغییر P از نوع اشاره گر هست و متغییرهای دیگر متغییر معمولی هستند، اگرچه در زبان C میتوان موقع تعریف متغییر آدرس هم به آن اختصاص داد مثلا کامپایلر را وادار کنید متغییر m را در آدرس خاصی ذخیر کند، اما در این مثال فرض شده ما متغییر را به فرم کلی در نظر گرفتیم و آدرس آن را نمیدانیم.
        خوب در خط اول که 3 متغییر تعریف شده که p از نوع اشاره گر هست. در خط بعد مقدار 5 در m قرار گرفته و در خط سوم آدرس متغییر m در p قرار گرفته، یعنی الان دیگه ما میدانیم متغییر m در چه خانه ای از حافظه ذخیره شده ( خانه ای که متغییر p حاوی آدرس آن است و میتواند به آن اشاره کند ) در خط چهارم محتویات آدرسی که P به آن اشاره میکند در متغییر s قرار میگیرد. این مثال برای درک چگونگی استفاده از اشاره گر هست اما کاربردهای وسیع آن را نشان نمیدهد، به عنوان مثال شما با داشتن متغییر p میتوانید خود m را به طور غیر مستقیم تغییر دهید یا چند خانه قبل و بعد آنرا هم به همین صورت، یا اگر m از نوع 32 بیتی یا حتی آرایه و رشته باشد باز هم از این طریق میتوان قسمتی از آن را تغییر داد یا قبل و بعد از آن مقادیر را ویرایش کرد.
        مثالی که براتون نوشتم یک مثال ساده و معروف هست که از کتاب برنامه نویسی زبان C مهندس جعفرنژاد قمی انتخاب کردم. و برای اطلاعات بیشتر میتونید فصل 6 همین کتاب را مطالعه کنید ( البته در اینترنت هم مثال ها و توضیحات خوبی هست ) از متغییرهای اشاره گر در زبان C استفاده ها گوناگونی میشه که در کارکرد توابع و آرایه ها و رشته ها خیلی کاربرد دارد و ارسال آرگومان ها از طریق فراخوانی یا ارجاع را امکان پذیر می کند.
        از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
        هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
        اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
        اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
        شاد و موفق باشید

        دیدگاه


          #5
          پاسخ : معادل متغییر overlay تو زبان C

          برادر study وقت گذاشتی و جواب دادی ، دمت گرم.
          با پوینترها تا حدودی کار کردم،البته به وفور تو بیسیک و اسمبلی
          با سی خیلی کم،اولین تجربه من تو این زمینه میکروی st و کیل بود
          مشکل من اینه که زیاد از help کیل هنوز سر درنیاوردم،من اکثرا موارد مورد نظرم رو از طریق help و با خود کامپایلر یا سخت افزار یاد میگیرم،تو اینترنت چرخی زدم و مثالهایی از این مورد دیدم،اما این استفاده ای که من تو پست اول ذکر کردم،رو چیزی در موردش ندیدم،حالا یا اینکار کار خنده داری هست و کسی انجام نمی ده ، یا روش راحت تری هست برای استفاده از پوینتر و من بلد نیستم،اما من با این روش و بسکام و البته اسمبلی برنامه هایی نوشتم برای avr با قابلیتهای کم اون نسبت به arm که الان که با st می نویسم به نظرم به اون خوبی نتونستم هنوز راه بیوفتم
          توضیح و مثال شما خوب بود
          مشکل من دقیقا خط دوم مثالت هست p=
          نمی خوام حین اجرای برنامه با یه دستور آدرس متغییر رو بدست بیارم و بعد داخلش مقدار بریزم
          میخوام مثلا
          Int var1
          U8 bufx[100]
          Var1 همیشه یه متغییر int باشه که آدرش بایت 3 تا 7 اون بردار باشه
          و این محاسبات زمان کامپایل اعمال بشه و نه در حین اجرای برنامه
          شایدم بهتره بقول شما اول برم سی بخونم،خنده داره من برای آرم اسمبلی نوشتم اما هنوز سی بلد نیستم
          به هر صورت دستت درد نکنه
          موفق باشی
          هميشه به ياد خدا باش !

          دیدگاه


            #6
            پاسخ : معادل متغییر overlay تو زبان C

            خواهش می کنم قربان
            شاید من درست متوجه منظور شما نشدم، در زبان سی هم میشه در همون ابتدا همزمان با تعریف متغیر آدرس متغییر رو تعریف کرد، هر بلای دیگه هم اگر بخواید بعد تو برنامه میشه هم سر خودش هم آدرسش آورد به شرطی که به طور کلی به ساختار اصلی سی مسلط باشید و بدونید چطور از قابلیت هاش استفاده کنید. همین که با اسمبلی کد نوشتید خیلی عالی هست چراکه برنامه نویسی اسمبلی برای هر میکروکنترلر یا پردازشگر نیازمند آشنایی با معماری و درک مناسب از سیستم هست و اگر موفق شدید اینکار رو بکنید تنها گیر شما در زبان سی یک مطالعه کلی در مورد خود زبان سی و قابلیت هاش هست که با توجه به تجربه برنامه نویسی قیلی شما زمان چندانی هم نمیگیره. یکسری کتاب ها و pdf ها هستند که آموزش c هستند اما با دید میکروکنترلری یاد دادند نه دید کامپیوتری، به همین خاطر قسمتهایی که به کنترل سخت افزاری مربوط میشه و کاربرد داره رو با جزئیات بیشتری توضیح دادند و مثال زدند اگر سی رو برای استفاده میکروکنترلری میخواید فکر میکنم مطالعه اونا مفیدتر از کتابهایی مثل کتاب آقای جعفرنژاد قمی باشه که بیشتر جنبه آموزش دانشگاهی و نرم افزاری داره.
            از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
            هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
            اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
            اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
            شاد و موفق باشید

            دیدگاه


              #7
              پاسخ : معادل متغییر overlay تو زبان C

              دقیقا C رو برای میکرو لازم دارم
              لینک مناسبی سراغ دارید معرفی کنید؟
              هميشه به ياد خدا باش !

              دیدگاه


                #8
                پاسخ : معادل متغییر overlay تو زبان C

                در حال حاضر لینک خاصی تو ذهنم نیست اما بگردید حتما PDF پیدا میکنید، خودم یک کتاب PDF شده خوب در این زمینه داشتم متاسفانه هرچی بین کتابام گشتم براتون UPLOAD کنم پیداش نکردم ببخشید! اگر احیانا چیز خاصی پیدا کردم چشم
                از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                شاد و موفق باشید

                دیدگاه

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