اطلاعیه

Collapse
No announcement yet.

بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

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

    #16
    پاسخ : بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

    نوشته اصلی توسط tohid041
    چند وقتی میشه با کدویژن کار نکردم ، avr-gcc یه چی دیگست - یه چیزایی نوشتم
    کد:
    #define change_stck() \
     #asm \
      pop r26 \
      pop r26 \
      ldi r26, high(L1) \
      push r26 \
      ldi r26, low(L1) \
      push r26 \
     #endasm
    
    bit true=0;
    
    interrupt[TCD0_OVF_vect] void tcd0_ovf_isr() {
     change_stck();
     true=0;
    }
    
    interrupt[TCC0_OVF_vect] void tcc0_ovf_isr() {
     change_stck()
     true=1;
    }
    
    void main() {
     while(2) {
      #asm("L1:")
      while(true==1) {
       line1;
       line2;
       line3;
       ...
      }
      while(true==0) {
       line1;
       line2;
       line3;
       ...
      }
     }
    }
    البته نمیدونم که اول بایت پایین و بعد بایت بالایی به استک فرستاده میشه یا بر عکس
    اگر درست کار نکرد جای ldi r26, low(L1) رو با ldi r26, high(L1) عوض کن
    تستش کنید و خبر بدین لطفا

    خیلی خیلی ممنون بابت جوابتون . این امتحان کردم متاسفانه کامپایلر این ارور رو میده :
    no matching #endasm

    توی اون برنامه اولی یه چیزی رو کم نوشتم :

    کد:
    bit true =0;
    interrupt[TCD0_OVF_vect] void tcd0_overflow_isr{
    true = 0;
    }
    interrupt[TCC0_OVF_vect] void tcc0_overflow_isr{
    true = 1;
    }
    void main(){
    #asm("sei")
    while(1){
    while(true==1){
    line1;
    line2;
    line3;
    .
    .
    .
    }
    while(true==0){
    line1;
    line2;
    line3;
    .
    .
    .
    
    }
    }

    به نظر شما ممکنه به خاطر اون دستور فعال کردن وقفه سراسری باشه ؟ (#asm("sei&quot)
    یا حق

    دیدگاه


      #17
      پاسخ : بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

      بله باید وقفه سراسری رو فعال کنین (sei) ولی احتمالا ارور از این # هایی که قبل از asm , enasm قرار داره باشه
      آخه در داخل این ماکرو ها # کاربرد دیگری داره - اینو بتست :
      کد:
      bit true=0;
      
      interrupt[TCD0_OVF_vect] void tcd0_ovf_isr() {
       if(true!=0) {
        #asm
         pop r26
         pop r26
         ldi r26, high(L1)
         push r26
         ldi r26, low(L1)
         push r26
        #endasm
        true=0;
       }
      }
      
      interrupt[TCC0_OVF_vect] void tcc0_ovf_isr() {
       if(true!=1) {
        #asm
         pop r26
         pop r26
         ldi r26, high(L1)
         push r26
         ldi r26, low(L1)
         push r26
        #endasm
        true=1;
       }
      }
      
      void main() {
       #asm("sei")
       while(2) {
        #asm("L1:")
        while(true==1) {
         line1;
         line2;
         line3;
         ...
        }
        while(true==0) {
         line1;
         line2;
         line3;
         ...
        }
       }
      }
      گذشت خصلت مردان است

      دیدگاه


        #18
        پاسخ : بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

        نوشته اصلی توسط tohid041
        بله باید وقفه سراسری رو فعال کنین (sei) ولی احتمالا ارور از این # هایی که قبل از asm , enasm قرار داره باشه
        آخه در داخل این ماکرو ها # کاربرد دیگری داره - اینو بتست :
        کد:
        bit true=0;
        
        interrupt[TCD0_OVF_vect] void tcd0_ovf_isr() {
         if(true!=0) {
          #asm
           pop r26
           pop r26
           ldi r26, high(L1)
           push r26
           ldi r26, low(L1)
           push r26
          #endasm
          true=0;
         }
        }
        
        interrupt[TCC0_OVF_vect] void tcc0_ovf_isr() {
         if(true!=1) {
          #asm
           pop r26
           pop r26
           ldi r26, high(L1)
           push r26
           ldi r26, low(L1)
           push r26
          #endasm
          true=1;
         }
        }
        
        void main() {
         #asm("sei")
         while(2) {
          #asm("L1:")
          while(true==1) {
           line1;
           line2;
           line3;
           ...
          }
          while(true==0) {
           line1;
           line2;
           line3;
           ...
          }
         }
        }
        باز هم از لطفتون ممنونم . ارورش برطف شد . فردا رو میکرو تستش میکنم .
        یا حق

        دیدگاه


          #19
          پاسخ : بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

          متاسفانه باز هم مشکل .
          هنگام پرش به بردار وقفه خود کامپایلر تمامی رجیستر ها رو در استک ذخیره میکنه و قبل از خروج دوباره اونهارو باز نشانی میکنه
          خروجی اسمبلی رو نیگا کنی متوجه میشه ، که باعث تغییر اشاره گر میشه .
          داستم به روش پرش فکر میکردم که دیدم باید بعد از پرش تمامی مقادیر فرستاده شده به استک رو هم باید برگردونیم .
          پس مجبوریم کل بردار وقفه رو اسمبلی کنیم (الان دارین فحش میدین و میگین همون if هابهتر بود :mrgreen
          یا اینکه خروجی اسمبلی رو دستکاری کنیم ، که به صرفه تره ولی پروژه میشه اسمبلی :surprised: oo:
          گذشت خصلت مردان است

          دیدگاه


            #20
            پاسخ : بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

            حالا چه اصراری داری که یکهویی بیای بیرون؟
            اگر دلیل قانع کننده ای نداری اجازه بده حلقه کارش رو انجام بده.

            دیدگاه


              #21
              پاسخ : بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

              نوشته اصلی توسط tohid041
              متاسفانه باز هم مشکل .
              هنگام پرش به بردار وقفه خود کامپایلر تمامی رجیستر ها رو در استک ذخیره میکنه و قبل از خروج دوباره اونهارو باز نشانی میکنه
              خروجی اسمبلی رو نیگا کنی متوجه میشه ، که باعث تغییر اشاره گر میشه .
              داستم به روش پرش فکر میکردم که دیدم باید بعد از پرش تمامی مقادیر فرستاده شده به استک رو هم باید برگردونیم .
              پس مجبوریم کل بردار وقفه رو اسمبلی کنیم (الان دارین فحش میدین و میگین همون if هابهتر بود :mrgreen
              یا اینکه خروجی اسمبلی رو دستکاری کنیم ، که به صرفه تره ولی پروژه میشه اسمبلی :surprised: oo:
              بله . مثل اینکه مشکل بوجود اومد باز . تستش کردم ولی تمام وقفه های دیگمو بهم ریخته بود . هیچکدوم درست کار نمیکرد .
              به هر حال ازینکه وقتتونو گرفتم خیلی خیلی شرمندم. دارم به طور کامل روشمو عوض میکنم . ببینم جواب میگیرم . میخوام کارای توی حلقه رو با DMA انجام بدم .
              یا حق

              دیدگاه


                #22
                پاسخ : بیرون آمدن از حلقه به محض بر آورده نشدن شزایط حلقه

                کسی هست راجع به pll بدونه ؟ سوال دارم !!!!

                دیدگاه

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