اطلاعیه

Collapse
No announcement yet.

کامپایلر IAR

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : کامپایلر IAR

    معذرت میخوام . اما این روش برای تبدیل یک رشته عددی به عدد هست و برای اعداد تا 4,294,967,296 که میشه unsigned long میشه استفاده کرد ، اما من تعداد ارقامم 15 رقم هست . اصلا نمیدونم متغیری هست که این عدد توش جا بشه یا نه. (هفت بایت).

    ممنون بابت جوابتون

    دیدگاه


      پاسخ : کامپایلر IAR

      آقا مشکل حل شد از long long استفاده کردم.

      کد:
      	long long SNum=0;
      	int i;
      	long long per=1;
      	for (i=0 ; i<15 ; i++)
      	{
      		SNum += (long long)(sw[14-i]-48)*per;
      		per*=10;		
      	}

      دیدگاه


        پاسخ : کامپایلر IAR

        با سلام
        دوستان من چند وقت پیش یه مطلبی درباره cstack , rstack رو تو یه تاپیک دیگه گفتم اما مورد توجه قرار نگرفت، الانم قصدم از نقل کردن اون اینجا اینه که از صحت و صقمش مطمئن بشم ، چیزی که من فهمیدم:
        ____________
        نقل به مضمون همون تاپیک (ببخشید):
        آقا من یه چیزی در مورد نحوه محاسبه CSTACK و RSTACK با استفاده از فایل MAP تو کامپایلر IAR به نظرم امد گفتم بگم ؛
        خوب اگه تنظیمات لازم رو برای تولید فایل MAP انجام داده باشید بعد از عمل کامپایل و بیلد به همراه فایل هگزه یه فایل دیگه به نام MAP تولید میشه حالا برای اینکه مقدار CSTACK و RSTACK رو از روی اطلاعات این فایل استخراج کنیم میاییم چک میکنم که هر قسمت برنامه به چه مقداری CSTACK و RSTACK نیاز داره (مصرف میکنه ) برای اینکار تو پنجره ای که اون بالا برای سرچ کردن به صورت فیلد هست CSTACK و RSTACK رو مینویسیم و بعد با اینتر کردن هر جا که CSTACK و RSTACK هست ارجاع داده میشید ، خوب به این ترتیب میفهمیم که هر قسمت از برنامه به چه اندازه CSTACK و RSTACK مصرف کرده حالا ماکزیمم مقدار رو پیدا میکنیم و به همون اندازه یا مثلا چند تا بیشتر (به جهت احتیاط) از حافظه SRAM رو به این دو اختصاص میدیم .

        مثلا فایل MAP یه برنامه است :

        remote.map

        خوب من با سرچ کردن CSTACK و RSTACK تو این فهمیدم که حداکثر CSTACK مصرفی برابر هست با : 23 بایت که معادل با 17 هگزه هست (تو تنظیمات باید مقدار CSTACK رو برحسب هگزه قرار بدید) و حداکثر RSTACK مصرفی برابر با :16 بایت که معادل با 10 هگزه هست ، تو تنظیمات ، مقدار RSTACK بر حسب LEVEL تعین میشه طوری که هر LEVEL معادل 2 بایت در نظر گرفته میشه مثلا اینجا باید مقدار RSTACK رو تو تنظیمات حداقل 8 بزاریم.

        این هم در مورد عواقب تعیین نامناسب فضای STACK از زبون داکیومنت IAR :


        Stack size considerations
        The compiler uses the internal data stack, CSTACK, for a variety of user program
        operations, and the required stack size depends heavily on the details of these
        operations. If the given stack size is too large, RAM is wasted. If the given stack size is
        too small, two things can happen, depending on where in memory you located your
        stack. Both alternatives are likely to result in application failure. Either program
        variables will be overwritten, leading to undefined behavior, or the stack will fall outside
        of the memory area, leading to an abnormal termination of your application.
        _________________________

        نظرتون چیه ؟

        ممنون از توجهتون

        دیدگاه


          پاسخ : کامپایلر IAR

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

          دیدگاه


            پاسخ : کامپایلر IAR

            جناب طراح سوال داشتم در رابطه volatile
            ایا میشود ارایه هم از این نوع تعریف کرد و با توابع str هم کار کرد
            و سوال دوم
            این هشدار دقیقا چه چیزی را میرساند
            Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement D:\iar\Gd\main.cpp 348
            هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
            بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
            میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

            تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

            دیدگاه


              پاسخ : کامپایلر IAR

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

              دیدگاه


                پاسخ : کامپایلر IAR

                با سلام خدمت استاد کی نژاد ، در برنامه نوشته شده توسط اینجانب با میکروی XMEGA64A3 چندین متغییر سراسری تعریف کرده ام که مقدار آنها بسته به نیاز بر روی LCD گرافیکی نمایش داده میشود اگر در ابتدای برنامه برای آنها مقدار صفر تعریف کنم در هنگام استفاده از متغییر در قسمت مربوطه مثلا متغییر volt_A از نوع charدر برنامه زیر که بخشی از پروژه می باشد مقدار صفر به عدد 120 تغییر داده می شود
                //-----------------------------------------------------------

                void nu_volt(void)
                {

                uint8_t n[3];
                n[0]=volt_A/100;
                n[1]=((volt_A%100)/10);
                n[2]=volt_A%10;
                glcd_display(n[0],4,1);
                glcd_display(n[1],4,23);
                glcd_display(n[2],4,43);

                uint16_t q;
                uint8_t y_up=13,y_down=13,page_up=5,page_down=6;
                for(uint8_t k=0;k<3;k++)
                {
                q=((num_to_font(n[k])-32)*6);
                for(uint8_t n=0;n<6;n++)
                {
                shift_6and2(xmega[q],&CS2_lcd[page_up][y_up],&CS2_lcd[page_down][y_down]);
                ++q;
                ++y_up;
                ++y_down;
                }
                }
                if(volt_A<10)
                {
                uint8_t y_up=13,y_down=13;
                for(uint8_t n=0;n<12;n++)
                {
                shift_6and2(0,&CS2_lcd[page_up][y_up],&CS2_lcd[page_down][y_down]);
                ++y_up;
                ++y_down;
                }
                }
                else if(volt_A<100)
                {
                uint8_t y_up=13,y_down=13;
                for(uint8_t n=0;n<6;n++)
                {
                shift_6and2(0,&CS2_lcd[page_up][y_up],&CS2_lcd[page_down][y_down]);
                ++y_up;
                ++y_down;
                }
                }

                ram_to_lcd(true,page_up,13,18);
                ram_to_lcd(true,page_down,13,18);
                }

                در هیچ کجای برنامه بر روی volt_A پردازشی صورت نگرفته جز در قسمت زیر . در میان قسمت های دیگر برنامه ها volt_A=0 را قرار دادم از یک خط به بعد که ارتباطی به متغییر مورد اشکال ندارد مقدار صفر درست باقی می ماند مثلا در قسمت زیر که ارتباطی به متغییر ندارد مقدار volt_A از 0 به 120 تغییر میکند
                //-----------------------------------------------------------

                void line_3run(uint8_t line)
                {
                uint16_t icon=line;
                line=convert_encodre(line);
                page_y_left(6,0);
                for(uint8_t i=0;i<9;i++)
                {
                if(highlight_text == 3)one_inv_char_send(main_text[line]);
                else one_char_send(main_text[line]);
                line++;
                }
                page_y_left(5,0);
                for(uint8_t i=0;i<54;i++)
                {
                if(highlight_text == 3)lcd_dataout(0x80);
                else lcd_dataout(0x00);
                }
                page_y_right(5,0);
                icon=address_icon(icon);
                for(uint8_t i=0;i<48;i++)
                {
                lcd_dataout(main_icon[icon]);
                ++icon;
                }
                icon+=16;
                page_y_right(6,0);

                volt_A; //??????????????????????????????????????????????????
                for(uint8_t i=0;i<48;i++)
                {
                lcd_dataout(main_icon[icon]);
                ++icon;
                }
                }

                بعد از for مقدار عدد صفر در volt_A درست باقی می ماند
                مقدار cstack و rstack را افزایش دادم باز درست نشد ولی هرمقدار دیگری غیر از 0 قرار دهم مقدر آن بصورت درست باقی می ماند بعد قرار دادن volt_A=0; صحیح ماندن مقدار صفر در بعضی از خطوط برنامه اینجوری برداشت کردم که کاپایلر باگ دارد؟!!

                دیدگاه


                  پاسخ : کامپایلر IAR

                  در ادامه پست قبلی یک ارایه 1 کیلو بایتی سراسری و 58 متغییر دیگر بصورت سراسری تعریف کرده ام دوباره بررسی کردم متوجه شدم اگر همزمان در ابتدای برنامه هنگام تعریف همرمان به چند متغییر مقدار صفر وارد کنم مقدار بعضی به 120 تغییر و حتی مقدار بعضی از متغییر های دیگر که غیر صفر بودن به اعداد 8 و 32 تغییر میکند ؟!!!!

                  دیدگاه


                    پاسخ : کامپایلر IAR

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

                    دیدگاه


                      پاسخ : کامپایلر IAR

                      با سپاس با راهنمایی شما در پست قبلی و مطالعه جدول 38 و Compiler reference مشکل را حل کردم مقدار زیادی به اطلاعاتم در مورد برنامه نویسی c افزوده شد ولی کارهای زیر را با کمک راهنمای iar و مقداری حدس و گمان انجام دادم ولی نمی دانم حدسم دقیقا درست بوده یا خیر ؟
                      در option تیک not in xcl را برداشتم و دوباره کمپایل کردم که خطای زیر که قبل از xcl نبود صادر شد :
                      Fatal Error[e140]: The range declaration used in -Z(CODE)TINY_F=_..X_INTVEC_SIZE-_..X_FLASH_TEND is illegal since 0x1e8 > 0xff.

                      TINY_F را در راهنمای iar جستجو کردم در صفحه 118 خواندم که مریوط به نگهداری متغییر های استاتیک و سراسری با مقدار صفر می باشد و حداکثر آدرس آن 0xFF می باشد و حدس زدم که این حداکثر آدرس رابطه ای با تعداد متغییر ها در شروع برنامه دارد همانطور که در زیر مشاهده می کنید به غیر از متغییر دو آرایه CS1_lcd[8][64] و CS2_lcd[8][64] که 1کیلو بایت هستند وجود دارند و مجموع تعداد متغییر ها و آرایه ها از 0xFF بیشتر می شود احتمالا آنهایی که مقدار صفر دارند با کد برنامه تداخل کرده و مقدارشان تغییر می کند و چون مقدار محتوای آرایه ها در ابتدای برنامه مهم نبود آنها را به انتهای متغییر ها انتقال دادم و مشکل حل شد حتی وقتی آرایه ها را در قسمت 1........ قرار می دادم حتی قسمت هایی از برنامه که با متغییر های تعریف شده در ابتدا کار میکردند بهم می ریخت .
                      1- حالا اگر حدس من درست بوده پس چه اتفاقی برای کدهای برنامه که با متغییر تداخل کرده پیش می آید ؟
                      2- اگر در پروژه ای نیاز است که 2 کیلو بایت متغییر سراسری با مقدار صفر در ابتدای برنماه تعریف شود چاره چیست ؟
                      //1................................................. ....................
                      bool menu_end=false,CS_lcd=true;

                      unsigned int encode_new_A=0,encode_old_A=0,encode_new_B=0,encod e_old_B=0;
                      unsigned int scroll_new_A=0,scroll_old_A=0,scroll_new_B=0,scrol l_old_B=0;
                      unsigned char highlight_text,hilight_menu;
                      unsigned int temp1=0;
                      unsigned int temp3;
                      unsigned char line_1=0,line_2=1,line_3=2; //line_1= volume value
                      //2................................................. ....
                      unsigned char page_lcd=0, y_lcd=0,upline_modified,downline_modified;
                      unsigned int freq_A=0,freq_B=0,pulse_A=0,pulse_B=30;
                      unsigned char mode_A=1,mode_B=1,polar_A=1,polar_B=1,hold_A=10,ho ld_B=0,rest_A=3,rest_B=4,memory[6];
                      unsigned char minute_A=0,second_A=0,minute_B=0,second_B,volt_B=0 ,volt_A=0,display_channel=1;

                      unsigned char CS1_lcd[8][64];
                      unsigned char CS2_lcd[8][64];

                      دیدگاه


                        پاسخ : کامپایلر IAR

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

                        http://www.eca.ir/forum2/index.php?t...8842#msg338842
                        اوژن: به معنای افکننده و شکست دهنده است
                        دانایی، توانایی است-Knowledge is POWER
                        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                        دیدگاه


                          پاسخ : کامپایلر IAR

                          با سپاس از پاسخ شما
                          نوشته اصلی توسط طراح
                          1- کدهای برنامه توسط پروگرامر (یا Bootloader) در حافظه flash قرار داده می شوند. در حالیکه متغیرها در sram قرار می گیرند و این دو ناحیه ارتباطی با هم ندارند.
                          منظورم از از تداخل کدهای برنامه با مقدار متغییر ها مقداری بود که در ابتدای برنامه مثلا uint8_t a = 2 که عدد 2 یکبار از حافظه flash با این دستور در متغییر a (که در sram می باشد ) قرار می گیرد و اگر نه که متغییر در طول برنامه در sram بسته به نیاز با عملیات های گوناگون تغییر میکند .
                          باپوزش چون تازه با زبان c شروع کردم و قبلا سالها با اسمبلی کار کردم و از نحوه کامپایل شدن بعضی از دستورات c اطلاع کافی ندارم .

                          دیدگاه


                            پاسخ : کامپایلر IAR

                            با سلام خدمت استاد کی نژاد
                            مشکلی که در پست های قبلی مطرح کردم در مورد تغییرمحتوای متغییر های با مقدار دهی صفر در ابتدای برنامه هنوز حل نشده از طریق فایل xcl موفق نشدم و فایل های راهنمای IAR را خواندم ولی کاملا متوجه نشدم مثلا تفاوت استفاده near flash و tiny flash را متوجه نشدم ؟

                            1-اگر امکان دارد مقداری در مورد xcl توضیح دهید مثلا خط زیر آیا حاصل عملیات تفریق درون TINY_F قرار گرفته یا خیر ؟ زمانیکه تیک not in xcl را بردارم خطای زیر صادر می شود هر چند که حتی اگر آرایه سراسری 1کیلو بایتی را حذف کنم باز این خطا صادر می شود یعنی مشکل تغییر ناخواسته مقدار متغییر های 0 از خطای زیر نیست ؟! (البته یاد آور می شوم بدون برداشتن تیک xcl خطای زیر صادر نمی شود فقط مشکل متغییر با مقدار صفر را خواهم داشت)
                            Fatal Error[e140]: The range declaration used in -Z(CODE)TINY_F=_..X_INTVEC_SIZE-_..X_FLASH_TEND is illegal since 0x1e8 > 0xff.

                            2- X_INTVEC_SIZE (بردار وقفهآ‌) چرا مقدارش 1E8 در بالا می باشد تا خطای بالا صادر شود ؟
                            3- اگر مقدار X_FLASH_TEND را از 1E8 قرار دهم خطا رفع می شود لطفا توضیحی در مورد این خطا داده و در صورت امکان منبعی با توضیحاتی کاملتر از IAR معرفی کنید . با سپاس

                            دیدگاه


                              پاسخ : کامپایلر IAR

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

                              دیدگاه


                                پاسخ : کامپایلر IAR

                                درباره صورت مسئله شما بطور خاص در مورد ATXMEGA64A3 یک بررسی را انجام دادم. ظاهرا در فایل lnkxm64a3s.xcl تعریفی وجود دارد که منجر به خطای شماره 140 می شود. با توجه به اینکه قبلا در مورد mega64 مشاهده کرده بودم که خطایی در نسخه 5.20 ایجاد می شد که با ارتقا به نسخه 5.50 این خطا بر طرف می شد و همچنین پست هایی در همین رابطه در AVRFreaks، کافی است خط مورد نظر را در فایل comment کنید تا error برطرف شود. اما درباره شیوه تغییر مرزهای سگمنت ها، علاوه بر حذف تیک Configure system using dialogs not in *XCL file باید فایل lnkxm64a3s.xcl در فولدر پروژه کپی شود و در مسیر Project\Options\Linker\Config\Linker command file تیک override default را بزنید و از طریق Browse کردن با گزینه ... مسیر این فایل را به کامپایلر معرفی کنید. حال اگر لازم باشد تغییری در سایز سگمنت ها داده شود با تغییر در فایل کپی شده می توان این کار را انجام داد. مثلا در این فایل برای CSTACK مقدار پیش فرض 0x200 یا 512 بایت و برای RSTACK مقدار 0x40 یا 64 بایت در نظر گرفته شده است(اعداد در فایل در مبنای 16 هستند). در این شرایط تنظیمات CSTACK و RSTACK در پروژه غیر فعال است و توسط مقادیر موجود در فایل تعیین می شود. حال اگر برنامه زیر را به عنوان یک آزمایش کامپایل کنیم:

                                کد:
                                #include <ioavr.h>
                                
                                unsigned char a[4000];
                                void main()
                                {
                                 for(unsigned int i=0;i<4000;i++)a[i]=0;
                                 while(1);
                                }


                                خطای زیر ایجاد خواهد شد:

                                Error[e16]: Segment CSTACK (size: 0x200 align: 0) is too long for segment definition. At least 0x1e0 more bytes needed. The problem occurred while processing the
                                segment placement command "-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END", where at the moment of placement the available memory
                                ranges were "DATA:2fe0-2fff"
                                Reserved ranges relevant to this placement:
                                DATA:2000-2f9f NEAR_Z
                                DATA:2fa0-2fdf RSTACK
                                DATA:2fe0-2fff CSTACK
                                Error while running Linker



                                که دلیل آن واضح است. زیرا در ATXMEGA64A3 تنها 4096 بایت SRAM وجود دارد که در صورتی که 4000 بایت آن به آرایه تعریف شده اختصاص یابد، امکان وجود مقادیر پیش فرض 512 بایت برای CSTACK و 64 بایت برای RSTACK وجود ندارد. در این شرایط می توان CSTACK و RSTACK را بصورت دستی کاهش داد تا خطای مورد نظر بر طرف شود. البته این تغییر در محدوده سگمنت ها باید کاملا هوشمندانه و با توجه به میزان مصرف هر بخش در مراحل مختلف برنامه باشد که از طریق بررسی جزئیات فایل map می توان میزان مصرف حافظه را پیگیری کرد.
                                اوژن: به معنای افکننده و شکست دهنده است
                                دانایی، توانایی است-Knowledge is POWER
                                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                                دیدگاه

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