۲۶ شهریور ۱۳۹۷

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

زئوس Zeus

زئوس Zeus

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

مطالب مشابه

4 Comments

  1. 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

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

      پاسخ
  2. 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