اطلاعیه

Collapse
No announcement yet.

مشکل در کدویژن

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

    مشکل در کدویژن

    با سلام
    من داشتم هدر فایل یک آیسی رو برای اینکلود کردن در نرم افزار کدویژن میخوندم ولی چند تا خطش برای من ناشناخته بود..آیا کسی میدونه منظور از این دستورات چیه؟
    کد:
    #define CDSCLK1 (1<<29) 
    #define CDSCLK2 (1<<30) 
    #define ADCCLK (1<<28) 
    #define SLOAD (1<<7) 
    #define SDATA (1<<6)

    #2
    پاسخ : مشکل در کدویژن

    با استفاده از دستور define شما به یک عبارت یک برچسب اختصاص میدید. یعنی اگر قرار باشه مثلا اون عبارت عوض بشه، دیگه لازم نیست تو کل برنامه اون عبارت رو عوض کنید، کافیه اون برچسب رو عوض کنید. مثلا ::
    [code=c]#define CDSCLK1 (1<<29) [/code]
    الان توی کد هر جا بنویسید CDSCLK یعنی 29>>1 و وقتی بخواهید مثلا یک رو بیشتر یا کمتر شیفت بدید، فقط توی این قسمت اونرو عوض می کنید.
    ---------
    .
    .
    ...........

    دیدگاه


      #3
      پاسخ : مشکل در کدویژن

      ممنونم از پاسختون،
      این عبارت 29>>1 یعنی چی؟ که بعضی وقتها مثلا 9>>0 است؟

      دیدگاه


        #4
        پاسخ : مشکل در کدویژن

        این یعنی 1 رو به اندازه 29 تا شیفت بده به سمت چپ.
        مثلا شما میخواهی توی ARM، که یک پورت 32 بیتی داره، بیت 25 رو 1 کنی. 3 تا راه داری :
        1- نمایش اون به صورت باینری :
        [code=c]0b0000001000000000000000000000000[/code]
        2- نمایش به صورت هگز :
        [code=c]0x02000000[/code]
        3- نمایش به صورت دهدهی
        [code=c]33554432[/code]
        روش اول که فقط توی AVR و برای پورت و رجیسترهای 8 بیتی کاربرد داره. روش سوم هم که اصلا منطقی نیست تو اعداد بزرگ استفاده بشه.
        روش دوم، مناسب هست اما بهینه نیست. یعنی بعدا اگر بخوای کد رو بخونی یا کمی تغییرش بدی، اذیت میشی. پس راهش چیه ؟ میان از شیفت استفاده می کنند.
        مثلا میگن 1 رو به اندازه 25 تا شیفت بده به سمت چپ. این یعنی یک عدد که بیت 25 اون 1 هست و بقیه بیت ها صفر.
        ---------
        .
        .
        ...........

        دیدگاه


          #5
          پاسخ : مشکل در کدویژن

          سپاس، توضیحاتتون خیلی کامل بود...
          پس توی هر میکرویی اگر به صورت پیشفرض خواستیم مقدار بیت n ام را صفر یا یک کنیم از این دستور استفاده می کنیم..و به جای 29 ، n در حالت کلی قرار میگیرد.

          دیدگاه


            #6
            پاسخ : مشکل در کدویژن

            نوشته اصلی توسط Soheilas
            سپاس، توضیحاتتون خیلی کامل بود...
            پس توی هر میکرویی اگر به صورت پیشفرض خواستیم مقدار بیت n ام را صفر یا یک کنیم از این دستور استفاده می کنیم..و به جای 29 ، n در حالت کلی قرار میگیرد.
            بله.
            فقط حواستون باشه اگر بخواهید که تو یک رجیستر فقط بیت های دلخواه رو صفر و یک کنید باید از روش زیر استفاده کنید :
            برای یک کردن :
            [code=c]PORTA |= (1<<n)[/code]
            برای صفر کردن :
            [code=c]PORTA &= ~(1<<n)[/code]
            اما اگر می خواهید از ابتدا به اون مقدار بدید همون روش پست قبلی کفایت می کنه.
            ---------
            .
            .
            ...........

            دیدگاه


              #7
              پاسخ : مشکل در کدویژن

              تشکر لطف کردید.

              دیدگاه

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