اطلاعیه

Collapse
No announcement yet.

کوچ کردن از کدویژن به AtmelStudio

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

    #61
    پاسخ : کوچ کردن از کدویژن به AtmelStudio

    نوشته اصلی توسط RubeuS
    کامپایلر خودش سر خود و بدون اطلاع برنامه نویس سعی میکنه که کدهایی که برنامه نویس مینویسه را بهینه کنه و بعضی از کدهای اضافی را پاک کنه.
    برای مثال کد زیر را نگاه کنید:

    کد:
    int x;
     
    void function(void) 
    {
      x= 0;
      while (x != 255);
    }
    خوب برای مثال من این کد را نوشتم ، کامپایلر میگه خوب x که قبل از ورود به وایل 0 شده و هیچوقت 255 نمیشه که از وایل بیاد بیرون پس این حلقه وایل یک حلقه بینهایته. پس میاد کد را به شکل زیر پتیمایز میکنه:

    کد:
    int x;
     
    void function(void) 
    {
      x= 0;
      while (1);
    }
    سلام سید.
    یه سوال داشتم از خدمتت. شما از کجا میدونی که کامپایلر کد اول رو به صورت کد دوم اپتیمایز میکنه؟
    و در نظر میگیره؟
    خیلی برام جالبه و میخام یاد بگیرم.
    خیلی ممون.

    دیدگاه


      #62
      پاسخ : کوچ کردن از کدویژن به AtmelStudio

      نوشته اصلی توسط سینا_80
      سلام سید.
      یه سوال داشتم از خدمتت. شما از کجا میدونی که کامپایلر کد اول رو به صورت کد دوم اپتیمایز میکنه؟
      و در نظر میگیره؟
      خیلی برام جالبه و میخام یاد بگیرم.
      خیلی ممون.
      سلام

      کلا مبحث optimization مربوط به خود کامپایلر است و به کامپایلری که استفاده میکنید متفاوت است . ولی کل کامپایلر های امروزی دیگه کدها را بهینه سازی میکنند.
      به عنوان مثال در همین اتمل استادیو شما میتونید به کامپایلر بگید که کدتون را بهینه کند یا نه و اینکه میخواید کدتون بهینه بشه در چه سطحی و چقدر بهینه سازی انجام شود. برای اینکار مسیر زیر را دنبال کنید:
      project --> main properties --> Toolchain --> AVR/GNU C Compiler --> Optimization
      و در اینجا میتونید سطح بهینه سازی ( Optimization Level ) را تعیین کنید.

      یادگیریش تجربیه و باید تو عمل ببنید:
      به عنوان شروع یک مثال بتون میگم شما خودتون تستش کنید:
      شما کد زیر را در حالت های:
      1- سطح بهینه سازی = None ( بدون بهینه سازی )
      2- سطح بهینه سازی = Optimize ( بهینه سازی فعال )
      دیباگ کنید:

      کد:
      int main(void)
      {
      	char x=0x01;
      	PORTB=x;
      	while(1);
      }

      برای مثال برای volatile کد زیر را در حالت Optimize دیباگ کنید و با حالت های قبل مقایسه کنید.

      کد:
      int main(void)
      {
      	volatile char x=0x01;
      	PORTB=x;
      	while(1);
      }
      جوابشون رو نمیگم چون باید خودتون برید دیباگ کنید ، چون اینجوری خیلی بهتر متوجه میشید تا من بیام کامل همه را توضیح بدم.

      با محیط دیباگ و کار کردن با اون که آشنا هستید؟
      راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
      کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
      نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

      دیدگاه


        #63
        پاسخ : کوچ کردن از کدویژن به AtmelStudio

        خیلی خیلی ممنونم.
        راستش چند وقتی هست که هارد کامپیوترم سوخته و بعضی وقتا با کامپوتر داداشم میام سایت رو چک میکنم و میرم.
        و این روزا هم برنامه‎نویسی رو، رو کاغذ دارم مینویسم و تمرین میکنم.
        هرچند که اگر هم کامپیوترم درست بود بازم بلد نبودم با محیط دیباگ کار کنم.
        فقط یه بار محیط دیباگ Avrgcc رفتم و هیچی متوجه نشدم.
        به هرحال....
        بازم ممنونم از وقتی که گذاشتی.
        شاد و سلامت باشین.

        دیدگاه


          #64
          پاسخ : کوچ کردن از کدویژن به AtmelStudio

          نوشته اصلی توسط سینا_80
          خیلی خیلی ممنونم.
          راستش چند وقتی هست که هارد کامپیوترم سوخته و بعضی وقتا با کامپوتر داداشم میام سایت رو چک میکنم و میرم.
          و این روزا هم برنامه‎نویسی رو، رو کاغذ دارم مینویسم و تمرین میکنم.
          هرچند که اگر هم کامپیوترم درست بود بازم بلد نبودم با محیط دیباگ کار کنم.
          فقط یه بار محیط دیباگ Avrgcc رفتم و هیچی متوجه نشدم.
          به هرحال....
          بازم ممنونم از وقتی که گذاشتی.
          شاد و سلامت باشین.
          سینا جان انشا الله کامپیوترت درست میشه.
          در ضمن پروتیوس هم هست.اونجا کار کنی بهتره.
          عملی هم باشه نور علی نور
          تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


          تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

          دیدگاه


            #65
            پاسخ : کوچ کردن از کدویژن به AtmelStudio

            با سلام.
            سید من این کد رو توی مثالی درباره lcd دیدم.
            به نظرم هدف نشان دادن یک متغیره درسته؟
            کد:
             sprintf((char*)str3, " number --> %d ", a);
            تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


            تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

            دیدگاه


              #66
              پاسخ : کوچ کردن از کدویژن به AtmelStudio

              1-در یه تابع که دارای مقدار بازگشتی باشه لازمه که ریترن نوشته بشه ؟
              2-ریترن 0 و ریترن 1 چه تفاوتی داره ؟
              ابهامات مربوط به قسمتی از پروژه شبکه بندی یوزارت نوشته آقای طراح هست(مشکل تو سه خط آخر هستش)و در خط دوم از بالا چه داده ای در tempریخته میشه ؟

              کد:
               send_ID(Slave_0_ID);
              	 temp=Receive_Data();
              	 _delay_ms(1);
              	 if (temp && (Data=slave_add1))   send_Data(SADEQ);
              	 _delay_ms(1);
              	 send_ID(slave_add2);
              	 temp=Receive_Data();
              	 _delay_ms(1);
              	 if(temp && (Data==slave_add2)) send_Data(sadeq 2);
              	.
              	.
              	.
              	unsigned char Receive_Data(void)
              {
              	unsigned char temp;
              	Timeout=timeout_value;
              	do 
              	{
              		if(Timeout==0) return 0;
              	} 
              	while (!(UCSRA & (1<<RXC)));
              	temp=UCSRB;
              	Data=UDR;
              	return 1;
              }
              چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

              دیدگاه


                #67
                پاسخ : کوچ کردن از کدویژن به AtmelStudio

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

                حتما همراه با خواندن ، در atmel studio تست شود.

                توصیه میکنم حتما مطالعه شود ، چون این یک مساله ی بسیار پایه ای و مفید است و مطمئنا میتونه مهمترین مطلب برای شما باشد.
                راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                دیدگاه


                  #68
                  پاسخ : کوچ کردن از کدویژن به AtmelStudio

                  نوشته اصلی توسط سعید دلشاد منور
                  با سلام.
                  سید من این کد رو توی مثالی درباره lcd دیدم.
                  به نظرم هدف نشان دادن یک متغیره درسته؟
                  کد:
                   sprintf((char*)str3, " number --> %d ", a);
                  سلام .

                  نه هدف ریختن یک مقدار در رشته است ( کلا توابعی که اولشون s است تو لایبرری stdlib مربوط به کار با رشته اند)

                  ببنید سه تا پارامتر بهش دادید:
                  1- پارامتر اول یک اشاره گر به رشته ی str3 است.
                  2- یک رشته است که از d% در اون استفاده شده
                  3- یک متغییر عدد صحیح ( a ) است.

                  با اجرای این تابع عدد صحیح موجود در متغییر a به معادل اسکی اون تبدیل میشود و به صورت کاراکتر در جای d% در رشته مورد نظر قرار میگیرد، سپس رشته در str3 ریخته میشود.
                  راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                  کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                  نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                  http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                  انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                  دیدگاه


                    #69
                    پاسخ : کوچ کردن از کدویژن به AtmelStudio

                    نوشته اصلی توسط صادق ابراهیمی
                    1-در یه تابع که دارای مقدار بازگشتی باشه لازمه که ریترن نوشته بشه ؟
                    2-ریترن 0 و ریترن 1 چه تفاوتی داره ؟
                    ابهامات مربوط به قسمتی از پروژه شبکه بندی یوزارت نوشته آقای طراح هست(مشکل تو سه خط آخر هستش)و در خط دوم از بالا چه داده ای در tempریخته میشه ؟

                    کد:
                     send_ID(Slave_0_ID);
                    	 temp=Receive_Data();
                    	 _delay_ms(1);
                    	 if (temp && (Data=slave_add1))   send_Data(SADEQ);
                    	 _delay_ms(1);
                    	 send_ID(slave_add2);
                    	 temp=Receive_Data();
                    	 _delay_ms(1);
                    	 if(temp && (Data==slave_add2)) send_Data(sadeq 2);
                    	.
                    	.
                    	.
                    	unsigned char Receive_Data(void)
                    {
                    	unsigned char temp;
                    	Timeout=timeout_value;
                    	do 
                    	{
                    		if(Timeout==0) return 0;
                    	} 
                    	while (!(UCSRA & (1<<RXC)));
                    	temp=UCSRB;
                    	Data=UDR;
                    	return 1;
                    }
                    1- بله ، اصولیش اینه که نوشته بشه و بهترم اینه که نوشته بشه و در اکثر مواقع اگر اینکار انجام نشه ، کامپایلر بتون وارنینگ میده (البته استثناهایی هست که وارنیگ نمیده ولی بهتر وقشنگتره همه جا وقتی تابع دارای مقدار بازگشتی است مقداری return شود)

                    2- والا من خودم این مثال را تحلیل نکردم و فیلم مربوط به اون را مشاهده نکردم . واین که گذاشتین شبه کد است .
                    ولی اینطور که با یک دید به نظر میاد temp یک متغییر از نوع unsigned char است و در خط دوم مقدار بازگشتیه تابع Receive_Data در آن ریخته میشود. این تابع دو مقدار 0 یا 1 را بر میگرداند. به نظر میرسه(البته اصلا مطمئن نیستم و باید کد کامل باشه) تابع تا یک زمانی مشخص برای دریافت اطلاعات منتظر می ماند و در صورتی که این زمان اتمام پیدا کند ( Time Out ) تابع مقدار 0 را به این منظور که بفهماند دیتا دریافت نشده ، بر میگرداند. و در صورتی که دیتا در زمان مشخص در یافت شود و به اصطلاح time out نشود تابع 1 را برمیگرداند.
                    0 و 1 یک قرار داد برنامه نویس پیش خودش است ، که با اجرای تابع ، میتوان مقدار بازگشتیه تابع که یک مقدار( 0 یا 1 ) است را چک کرد ، و به موقعیت پی برد.

                    راستی یک چیز مهم الان دیدم: متغییر های temp گیجتون نکنه . دوتا متغییر مجزا با اسم مشابه temp وجود داره تو برنامه . اون که تو تابع تعریف شده محلی تابع است و بعد از اتمام تابع لایف تامش تموم میشه و از بین میره . به پست صفحه قبلم مربوط به انواع متغییر ها از نظر حوزه دسترسی و life time توجه کنید
                    راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                    کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                    نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                    انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                    دیدگاه


                      #70
                      پاسخ : کوچ کردن از کدویژن به AtmelStudio

                      نوشته اصلی توسط سینا_80
                      خیلی خیلی ممنونم.
                      راستش چند وقتی هست که هارد کامپیوترم سوخته و بعضی وقتا با کامپوتر داداشم میام سایت رو چک میکنم و میرم.
                      و این روزا هم برنامه‎نویسی رو، رو کاغذ دارم مینویسم و تمرین میکنم.
                      هرچند که اگر هم کامپیوترم درست بود بازم بلد نبودم با محیط دیباگ کار کنم.
                      فقط یه بار محیط دیباگ Avrgcc رفتم و هیچی متوجه نشدم.
                      به هرحال....
                      بازم ممنونم از وقتی که گذاشتی.
                      شاد و سلامت باشین.
                      خواهش میکنم .

                      به پست اول مراجعه کنید
                      راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                      کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                      نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                      دیدگاه


                        #71
                        پاسخ : کوچ کردن از کدویژن به AtmelStudio

                        نوشته اصلی توسط RubeuS
                        وقتی از # استفاده شده یعنی این مربوط به پری پروسسور هاست. و در اونجا کاربرد داره.

                        عملگر ## باعث الحاق یا concatenate دو عملوند خود میشود .
                        برای مثال دیفاین زیر را در نظر بگیرید:

                        کد:
                        #define concat(a,b) a##b
                        حالا اگر به شبه تابع concat دو عدد بدهیم آنها را باهم مرج یا الحاق میکند:

                        یعنی کد زیر:
                        کد:
                        x=concat(12,5);
                        با کد زیر برابر است:

                        کد:
                        x= 125;


                        تشکر ، ببخشید این دستور برای رشته ها هم کاربرد داره ؟ یعنی میشه دو رشته رو با این دستور کنار هم قرار داد ؟

                        دیدگاه


                          #72
                          پاسخ : کوچ کردن از کدویژن به AtmelStudio

                          نوشته اصلی توسط aseok
                          تشکر ، ببخشید این دستور برای رشته ها هم کاربرد داره ؟ یعنی میشه دو رشته رو با این دستور کنار هم قرار داد ؟
                          از یک دستور پیش پردازنده نباید انتظار بالا داشت. برای مرج دو رشته میتونید از کتابخانه string.h و تابع strcat استفاده کنید.

                          ولی...

                          همون طور که گفتم بایستی دو طرف این عملگر عدد باشد . دیدیم که در مثال قبل دو عدد 12 و 5 کنار هم اومدن و شدن 125 (یعنی مقدار عددی 125 )
                          میشه یه کارایی کرد که 125 به صورت کارکتری و رشته شود و اون هم استفاده از عملگر # است. در دستورات پیش پردازنده عملگر # ، کد اسکی هرچه بعدش بیاد را برمیگرداند.
                          مثال:
                          کد:
                          #define str(x) #x
                          ولی باز هم نمیشه دو رشته را باهم مرج کرد. در ضمن دستورات پیش پردازنده همون طور که از اسمش پیداست ، پیش پردازنده اند و در کل یک سری قرار داد بین ما و کامپایلر ، قبل از اجرای دستورات هستند.
                          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                          دیدگاه


                            #73
                            پاسخ : کوچ کردن از کدویژن به AtmelStudio

                            نوشته اصلی توسط RubeuS
                            از یک دستور پیش پردازنده نباید انتظار بالا داشت. برای مرج دو رشته میتونید از کتابخانه stdlib استفاده کنید.

                            ولی...

                            همون طور که گفتم بایستی دو طرف این عملگر عدد باشد . دیدیم که در مثال قبل دو عدد 12 و 5 کنار هم اومدن و شدن 125 (یعنی مقدار عددی 125 )
                            میشه یه کارایی کرد که 125 به صورت کارکتری و رشته شود و اون هم استفاده از عملگر # است. در دستورات پیش پردازنده عملگر # ، کد اسکی هرچه بعدش بیاد را برمیگرداند.
                            مثال:
                            کد:
                            #define str(x) #x
                            ولی باز هم نمیشه دو رشته را باهم مرج کرد. در ضمن دستورات پیش پردازنده همون طور که از اسمش پیداست ، پیش پردازنده اند و در کل یک سری قرار داد بین ما و کامپایلر ، قبل از اجرای دستورات هستند.
                            الان داشتم به سوالتون و جوابم فکر میکردم.(شک کردم رفتم امتحان کردم) یکم من کتابخونه ها را قاتی پاتی کردم.
                            برای ادغام دو رشته در یک رشته سه راه وجود دارد:
                            1- استفاده از تابع strcat که در کتابخانه string.h موجود است. دو پارامتر میگیرد(دو رشته) که رشته اول را با رشته دوم ادغام میکند و جواب را در رشته اول میریزد.

                            2- استفاده از تابع sprintf که در کتابخانه stdio.h موجود است. به شکل زیر (مثلا میخواهیم رشته های str1 , str2 را با هم ادغام و در str3 بریزیم):
                            کد:
                            sprintf(str3,"%s%s",str1,str2);
                            3- خودتون دستی میتونید یک تابع بنویسید که اینکار را انجام دهد. بوسیله اشاره گر و این اصل که همیشه کاراکتر آخر یک رشته یک کاراکتر NULL یا صفر اسکی است.
                            راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                            کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                            نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                            انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                            دیدگاه


                              #74
                              پاسخ : کوچ کردن از کدویژن به AtmelStudio

                              سلام سید.من هر چقدر که تو اینترنت گشتم یه راه ساده واسه راه اندازی lcd کاراکتری پیدا نکردم
                              خیلی بد گفتن.
                              اگه شما کار کردین میشه بذارین؟
                              تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


                              تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

                              دیدگاه


                                #75
                                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                                نوشته اصلی توسط RubeuS
                                1- بله ، اصولیش اینه که نوشته بشه و بهترم اینه که نوشته بشه و در اکثر مواقع اگر اینکار انجام نشه ، کامپایلر بتون وارنینگ میده (البته استثناهایی هست که وارنیگ نمیده ولی بهتر وقشنگتره همه جا وقتی تابع دارای مقدار بازگشتی است مقداری return شود)

                                2- والا من خودم این مثال را تحلیل نکردم و فیلم مربوط به اون را مشاهده نکردم . واین که گذاشتین شبه کد است .
                                ولی اینطور که با یک دید به نظر میاد temp یک متغییر از نوع unsigned char است و در خط دوم مقدار بازگشتیه تابع Receive_Data در آن ریخته میشود. این تابع دو مقدار 0 یا 1 را بر میگرداند. به نظر میرسه(البته اصلا مطمئن نیستم و باید کد کامل باشه) تابع تا یک زمانی مشخص برای دریافت اطلاعات منتظر می ماند و در صورتی که این زمان اتمام پیدا کند ( Time Out ) تابع مقدار 0 را به این منظور که بفهماند دیتا دریافت نشده ، بر میگرداند. و در صورتی که دیتا در زمان مشخص در یافت شود و به اصطلاح time out نشود تابع 1 را برمیگرداند.
                                0 و 1 یک قرار داد برنامه نویس پیش خودش است ، که با اجرای تابع ، میتوان مقدار بازگشتیه تابع که یک مقدار( 0 یا 1 ) است را چک کرد ، و به موقعیت پی برد.

                                راستی یک چیز مهم الان دیدم: متغییر های temp گیجتون نکنه . دوتا متغییر مجزا با اسم مشابه temp وجود داره تو برنامه . اون که تو تابع تعریف شده محلی تابع است و بعد از اتمام تابع لایف تامش تموم میشه و از بین میره . به پست صفحه قبلم مربوط به انواع متغییر ها از نظر حوزه دسترسی و life time توجه کنید
                                سلام
                                تمام فرضیاتتون درسته برنامه دقیقا همینطوریه
                                1-مشکل اینجاست که تابع رسیودیتا مقدار یک رو برمیگردونه در حالی که در دستور شرطی خط چهارم شرط به اینصورته که دیتا برابر با آدرس اسلیو باشه(دیتا واقع در تابع رسیو )خوب دیتا که از تابع رسیو دیتا ریترن نشده (منظور اینکه مقدارشو از کجا آورده) ؟؟؟؟
                                2-و آیا مقدار ریترن در تابع رسیو دیتا فقط 0 و 1 هست ؟
                                3-مقادیر دیتا و تمپ هم ازتابع رسیو دیتا استخراج میشه؟؟

                                چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                                دیدگاه

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