اطلاعیه

Collapse
No announcement yet.

ُسوال هایی درباره عملکرد میکرو ؛ بهینه سازی ، هنگ کردن میکرو

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

    #16
    پاسخ : پاسخ : ُسوال هایی درباره عملکرد میکرو ؛ بهین&

    نوشته اصلی توسط کیوان قاسمی
    نه نزاشتم ...
    آره به نظر میرسه با هنگ کردن رجستر ها به حالت اولیه نمیرن نمیرن...
    ولی من اومدم از cli در اول برنامه استفاده کردم و رجسترهامو که مقدار دادم بعد sei گذاشتم که درست ریست بشه...

    کد:
    void main()
    {
    cli();
    // code
    sei();
    
    //code
    
    }
    سایز برنامم :
    لب مرزه عیب نداره ؟
    --------------------------------------
    خیلی عجیبه!
    معمولا اگه میکرو بخواد ریست کنه دم به دیقه ریست میشه و چیزی از برنامرو نمیخونه!!!!
    ولی برای ایمنی خوب کاری میکنی که قبل از هرچیز cli میزاری :job:
    1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
    من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
    !Electronic On! Programming On
    هوشمندانه سوال بپرسیم!
    http://ir02x6.persiangig.com/logo/eca/tanks_01.png

    دیدگاه


      #17
      پاسخ : ُسوال هایی درباره عملکرد میکرو ؛ بهینه سازی ، هنگ کردن میکرو

      روز بخیر ماهان جان :smile:
      نه فقط یه بار ریست میکنه :sad: آقایون کسی راجب ریست کردن دیگه نظری نداره ؟
      توی اسمبلی یادمه توی روال وقفه ها یه مقدار محدودی می شد کد نوشت...
      تو اسمبلی تو روال وقفه یه جامپ میزاشتیم و مشکل اون محدودیته حل میشد ...
      توی c هم اینجوریه ؟ اگه یه تابع دیگه و مثلا توی روال وقفه تایمر فراخونی کنیم که میکرو هنگ نکنه ؟ یا فرقی نداره؟

      دیدگاه


        #18
        پاسخ : ُسوال هایی درباره عملکرد میکرو ؛ بهینه سازی ، هنگ کردن میکرو

        نوشته اصلی توسط کیوان قاسمی

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

        یه کتابی داشتم میخوندم . نوشته بود اگه محل ذخیره یه متغیر رو به کامپایلر نگیم اون رو تو sram ذخیره میکنه . منظورش flash یا eeprom بود .
        الان flash جزو حجم program هست یا جزو data ?
        پس میتونم با تعریف بعضی متغیرا توی flashبه آزاد شدن sram کمک کنم ؟

        دیدگاه


          #19
          پاسخ : ُسوال هایی درباره عملکرد میکرو ؛ بهینه سازی ، هنگ کردن میکرو

          یه پروژه از اقای نوربخش داشتم .به نظرم هر پروژه ایشون 1000 نکته برنامه نویسی داره ... دستشون درد نکنه :job:
          یه سرچی هم تو گوگل کردم.... با بررسی این دو مورد متوجه شدم که یکی از راه ها استفاده از PGM PSTR هست...
          با دستور PSTR ,PGM رشته هارو به حافظه برنامه انتقال دادم که حجم دیتا شد 80 درصد :applause:
          یه جوون مرد بیاد بیشتر توضیح بده باز چه کارایی انجام میشه داد تا خجم دیتارو بیارم پایین الان 20 درصد کاهش پیدا کرد ...
          با سرچ توی گوگل میشه خیلی چیزا پیدا میشه... ولی من دلم میخواد بقیه بیان تجربیاتشون و به اشتراک بزارن ... :read:
          کد:
          #define PSTR	(s)	  ((const PROGMEM char *)(s))
          
          #define PGM_P  const char *
          فک کنم PROGMEM همون flash توی کدویژن باشه
          این لینکم مرتبط با این مطبله :
          http://www.nongnu.org/avr-libc/user-.../pgmspace.html

          آیا درسته بیشتر متغیر هامونو اینجوری تعریف کنیم ؟
          و از اینا استفاده کنیم ؟
          کد:
          #define 	pgm_read_byte_near(address_short)  __LPM((uint16_t)(address_short))
          #define 	pgm_read_word_near(address_short)  __LPM_word((uint16_t)(address_short))
          #define 	pgm_read_dword_near(address_short)  __LPM_dword((uint16_t)(address_short))
          #define 	pgm_read_float_near(address_short)  __LPM_float((uint16_t)(address_short))
          #define 	pgm_read_byte_far(address_long)  __ELPM((uint32_t)(address_long))
          #define 	pgm_read_word_far(address_long)  __ELPM_word((uint32_t)(address_long))
          #define 	pgm_read_dword_far(address_long)  __ELPM_dword((uint32_t)(address_long))
          #define 	pgm_read_float_far(address_long)  __ELPM_float((uint32_t)(address_long))
          بیشتر چه مواقعی از این روش استفاده میکنن ؟

          یکی توضیح بده :sad: :sad:

          دیدگاه


            #20
            پاسخ : ُسوال هایی درباره عملکرد میکرو ؛ بهینه سازی ، هنگ کردن میکرو

            نوشته اصلی توسط کیوان قاسمی
            یه جوون مرد بیاد بیشتر توضیح بده باز چه کارایی انجام میشه داد تا خجم دیتارو بیارم پایین الان 20 درصد کاهش پیدا کرد ...
            سلام
            به منوی project--->configureو سربرگ C Compiler برو
            و این دو گزینه رو اینجوری تنظیم کن:



            1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
            من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
            !Electronic On! Programming On
            هوشمندانه سوال بپرسیم!
            http://ir02x6.persiangig.com/logo/eca/tanks_01.png

            دیدگاه


              #21
              پاسخ : ُسوال هایی درباره عملکرد میکرو ؛ بهینه سازی ، هنگ کردن میکرو

              یکم تو این PSTR PGM مشکل دارم :sad:

              یکی با مثال توضیح میده که چطور یه رشته ای ای که با PSTR به به تابع میفرستیم استفاده کنیم ؟
              فک کنم آرگومان تابع باید PGM_P باشه ولی بعضی جاها دیدم const char * هم میزارن . فرق داره ؟
              مثلا تو اینجا :
              کد:
              SendMSG(PSTR("+98911xxxxx"),PSTR("Sensor Or RLY Problem, \n "));
              کد:
              void SendMSG(const char *num,const char *msg)
              {
              	uint8_t ref;
              	int8_t r;
              	sei();
              	if(!SimReady)
              		if(!Sim_Init())
              			return;
              	r=SIM900SendMsg(num,msg,&ref);
              کد:
              int8_t	SIM900SendMsg(const char *num,const char *msg,uint8_t *msg_ref)
              {
              	UFlushBuffer();
              	
              	char cmd[25];
              	
              	sprintf(cmd,"AT+CMGS= %s",num);
              باید همین const char bashe یا PGM_P بزارم....و چون از آرگومان num استفاده کردم که با PSTR(num( به این تابع ارسال کردم باید از sprintf_P استفاده کنم ؟

              2.اگه مثلا آرگومان یه تابعی const char باشه و مقدار اون آرگومان رو به یه تابع دیگه بفرستم ولی به عنوان char اشکال داره ؟
              آخه lcd گرافیکی استفاده میکنم یه جاهایی کاراکترو درست نشون میده یه جایی اشتباه...
              حجم برنامم 30 درصد کم شده ولی افتادم تو یه چالش جدید

              بازم ممنون

              دیدگاه

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