۲۳ آبان ۱۳۹۷

درباره نویسنده

زئوس Zeus

زئوس Zeus

زئوس هستم خدای المپزئوس هستم خدای المپ

مطالب مشابه

6 Comments

  1. 3

    علی

    با سلام
    اگر در تعریف lookup table از کلمه کلیدی const استفاده میشد بهتر نبود؟ چراکه در اینصورت در حافظه فلش ذخیره میشد. هرچند که مطمئن نیستم که آیا این باعث کندتر خواندنش میشود یا خیر.

    پاسخ
    1. 3.1
      زئوس Zeus

      زئوس Zeus

      خوب ، البته بسته به مدل طراحی پردازنده میتونه قضیه متفاوت باشه ، ببینید حافظه RAM سریعتر است و پردازنده به صورت مستقیم معمولا بهش دسترسی داره اما حافظه Flash بسته به ساخناری که داره کندتر از RAM هست و توی برخی معماری ها پردازنده دسترسی مستقیم بهش نداره مثل خانواده های ARM پس تعریف const میتونه باعث کاهش سرعت بشه

      پاسخ
  2. 2

    محمد

    با عرض سلام مجدد
    این برنامه رو هم یکم بهینه تر میشه نوشت البته باز هم بدون استفاده از تابع یعنی:
    cs_clr();

    if(data & 0x100)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x80)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x40)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x20)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x10)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x08)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x04)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x02)) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & 0x01)) sda_set(); else sda_clr();clk_set();clk_clr();

    cs_set();

    پاسخ
    1. 2.1
      زئوس Zeus

      زئوس Zeus

      سلام
      پیشنهاد خوبیه ولی اگر کد اسمبلی رو نگاه کنید موقع کامپایل خود کامپایلر کد قبلی رو به همین حالت تغییر میده ! 🙂
      ببینید به عنوان راهنمایی باید بگم باید دیگه اسمبلی کدها رو بنویسید و در بهترین حالت قرار بدید

      پاسخ
  3. 1

    محمد

    درود
    به نظر من اگه واسه این کار از تابع استفاده نشه و به جای تابع lcd_send از خود دستورات به جای فراخوانی تابع استفاده بشه سرعت بالاتر خواهد رفت چون دستور پرش به یک زیر برنامه و بازگشت به برنامه اصلی چند سیکل رو توی برنامه تلف میکنه و راه حل استفاده نکردن از تابع برای دستیابی به حداکثر سرعت هستش.
    static uint16_t ShiftBit[] = {0x100,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
    cs_clr();

    if(data & ShiftBit[0])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[1])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[2])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[3])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[4])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[5])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[6])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[7])) sda_set(); else sda_clr();clk_set();clk_clr();
    if(data & ShiftBit[8])) sda_set(); else sda_clr();clk_set();clk_clr();

    cs_set();

    پاسخ
    1. 1.1
      زئوس Zeus

      زئوس Zeus

      درود
      پیشنهاد خوبیه ، این کار بی تاثیر نیست ، شاید در حدود 20 میلی ثانیه نه 200 میلی ثانیه
      ولی همین اقدامات کوچیک باعث این بهبود ها میشه 🙂

      پاسخ

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

کلیه حقوق این سایت متعلق به سیسوگ بوده و انتشار مطالب بدون ذکر نام و وب سایت سیسوگ اخلاقا مجاز نمی باشد. Sisoog