اطلاعیه

Collapse
No announcement yet.

data stack

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

    data stack

    سلام
    من یک تابع درم که درست کار نمیکنه و warning زیر رو میده :
    function 'setingmood' not used in data stack usage calculation due to possible recursive calls

    اسم تابع من setingmood هست و به صورت زیره، تو تابع یه متغیر index دارم که با تغیر مقدارش به حلقه بعدی پرش میکنه و مقدار متغیرم وقتی صفحه کلید زده میشه و اینتراپت اتفاق میافته تغیر میکنه.
    کد:
    void setingmood (){
    
        lcd_clear();
        do{
    
        delay_ms(300);
         lcd_gotoxy(1,0);
         lcd_putsf("Select Seting");
         lcd_gotoxy(0,1);
         lcd_putsf("-> Time");
         lcd_gotoxy(3,2);
         lcd_putsf("Date");
         lcd_gotoxy(3,3);
         lcd_putsf("Alarm set");
         if(index==0&&key==0x77 ){
         timeseting();
         }
    
          if (key==0xe7){
            lcd_clear();
            main();
          }
    
    
         while( index==1){
            // ||index==1&& key==0xd7){
            delay_ms(50);
            lcd_gotoxy(0,1);
            lcd_putsf("  Time");
            lcd_gotoxy(0,2);
            lcd_putsf("-> Date");
            lcd_gotoxy(0,3);
            lcd_putsf("  Alarm set");
            if (key==0xe7){
            lcd_clear();
            main();
             }
    
             if(index>=3){
             index=0;
             }
    
            if(key==0xd7){
             index--;
            }
    
            if(index==1&&key==0x77 ){
             dateseting();
            }
    
            }
         while(index==2){
    
            lcd_gotoxy(1,0);
            lcd_putsf("Select seting ");
            lcd_gotoxy(0,1);
            lcd_putsf("  Time");
            lcd_gotoxy(0,2);
            lcd_putsf("  Date");
            lcd_gotoxy(0,3);
            lcd_putsf("-> Alarm set");
             if (key==0xe7){
             lcd_clear();
             main();
             }
    
             if(index==2&&key==0x77){
             Alarmseting();
             }
    
             if(key==0xd7){
             index--;
             }
    
    
            }
    
          if(index>3){
            index=0;
          }
    
          if (key==0xe7){
           lcd_clear();
           main();
          }
         #asm("sei")
        }while(key!=0xe7);
    }
    گلن نه دي،گئدن نه دي؟ بلک نه دي،کفن نه دي!؟
    بو دونيا اوُز کئفينده دي، ياغيش يويور،گون قورودور.

    #2
    پاسخ : data stack

    یک دلیل آن می تواند احضار تابع main در زمان اجرای تابع مورد نظر باشد که این یک نوع برنامه نویسی بسیار غیر اصولی است و برای انجام عملیات مورد نظر باید اصلاح شود.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : data stack

      سلام
      من میخوام وقتی صفحه کلیدم فشار داده میشه اینتراپت بکنه و بعد از بازگشت یه شرط رو چک بکنه و به یه تابع دیگه که بالاتر از تابع فعلیم نوشته شده بره . الان برنامه رو یکم تغیر دادم به main هم نمیره فقط میخوام به یه تابع دیگه برم . فکر میکنم چون اینتراپت میشه stack point به تابع اینتراپت اشاره میکنه و وقتی تموم شد دباره میخواد برگرده به جایی که از اونجا اینتراپت شده ولی pc یه مقدار دیگه داشته باشه و درست کار نکنه . متشکرم که جواب میدین
      گلن نه دي،گئدن نه دي؟ بلک نه دي،کفن نه دي!؟
      بو دونيا اوُز کئفينده دي، ياغيش يويور،گون قورودور.

      دیدگاه


        #4
        پاسخ : data stack

        سلام
        چرا نمیتونم داخل حلقه ، یه تابع را فراخانی بکنم؟ چه اتفاقی میافته مگه؟ اصلا من هرجای برنامه که میخوام چندتا تابع رو فراخانی بکنم بازم درست کار نمیکنه
        گلن نه دي،گئدن نه دي؟ بلک نه دي،کفن نه دي!؟
        بو دونيا اوُز کئفينده دي، ياغيش يويور،گون قورودور.

        دیدگاه


          #5
          پاسخ : data stack

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


          کد:
          goto label;
          به جای label می تونید هر اسمی بذارید و اون اسم رو در هر جای دیگه برنامه بذارید تا به اونجا پرش کنه. به مثال زیر توجه کن:

          کد:
          /*use of goto statement*/
          #include<stdio.h>
          #include<conio.h>
          void main(){
          int a;
          goto label;
          a = 10;
          printf(“%d”, a);
          label:
          a = 20;
          printf(“%d”, a);
          }
          Output:
          20

          دیدگاه


            #6
            پاسخ : data stack

            دستتون درد نکنه خیلی خیلی کمکم کردین
            گلن نه دي،گئدن نه دي؟ بلک نه دي،کفن نه دي!؟
            بو دونيا اوُز کئفينده دي، ياغيش يويور،گون قورودور.

            دیدگاه

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