اطلاعیه

Collapse
No announcement yet.

استفاده از حافظه فلش در آرگمان تابع کامپایلر GCC

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

    استفاده از حافظه فلش در آرگمان تابع کامپایلر GCC

    تو کامپایلر های GCC وقتی متغییر رو داخل فلش ذخیره میکنیم چطوری میتونیم یه تابع تعریف کنیم که آرگمانهاش رو از حافطه فلش بگیره
    تو کد ویژن همچین کدی رو دیدم نمیدونم چطوری تو GCC ازش استفاده کنم.


    کد:
    void lcd_putsf(flash char *string,int forground_color,char background_color_activation,int background_color)
      {
      while(*string)
       lcd_putchar(*string++,forground_color,background_color_activation,background_color);
      }
    نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

    #2
    پاسخ : استفاده از حافظه فلش در آرگمان تابع کامپایلر GCC

    برای خواندن رشته ای که در حافظه فلش ذخیره شده می توانید از تابع strcpy_P که در هدر pgmspace.h قرار دارد استفاده کنید. کار این تابع کپی کردن رشته از فلش به رم هست.
    [code=c]
    char StrBuff[16];

    void lcd_puts(char *string, int forground_color, char background_color_activation, int background_color)
    {
    while(*string)
    lcd_putchar(*string++, forground_color, background_color_activation, background_color);
    }

    void lcd_putsf(const char *string, int forground_color, char background_color_activation, int background_color)
    {
    lcd_puts(strcpy_P(StrBuff, string), forground_color, background_color_activation, background_color);
    }[/code]
    تابع اول تابع معمول نمایش رشته از حافظه رم هست و تابع دوم تابع مورد نظر شماست. روش استفاده هم به صورت زیر هست:
    [code=c]const char Str[] PROGMEM = "String in flash";

    lcd_putsf(Str, forground_color, . . .);[/code]
    البته اگر از یک رشته ای فقط یکبار استفاده می کنید می توانید به این صورت هم عمل کنید:
    [code=c]lcd_putsf(PSTR("String in flash&quot, forground_color, . . .);[/code]
    گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

    دیدگاه

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