NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3562 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 7 از 7

موضوع: چطوري ميتونم يک دستور رو داخل متغير بريزم

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2011
    نوشته ها
    20
    تشکر
    3
    تشکر شده 8 بار در 7 پست

    پیش فرض چطوري ميتونم يک دستور رو داخل متغير بريزم

    سلام
    من ميخام در ميکرو lpc1768 و کيل دستوز رو توسط sprintf بسازم و بعد اجراش کنم دليل استفاده هم اين هست که حدود 100 دستور ساختم که فقط عدد اخرشون فرق داره و ميخام اين عدد رو تغير بدم و اجراش کنم!!
    مثلا

    کد:
    #define pin_out_1 1<<0
    #define pin_in_1  1<<1
    #define port_io_1 LPC_GPIO1
    #define port_in_1 FIO_ReadValue(1)
    #define out1_on   LPC_GPIO1->FIOSET = pin_out_1
    #define out1_off  LPC_GPIO1->FIOCLR = pin_out_1
    
    
    
    
    #define pin_out_2 1<<4
    #define pin_in_2  1<<8
    #define port_io_2 LPC_GPIO1
    #define port_in_2 FIO_ReadValue(1)
    #define out2_on   LPC_GPIO1->FIOSET = pin_out_2
    #define out2_off  LPC_GPIO1->FIOCLR = pin_out_2
    
    
    
    
    #define pin_out_3 1<<9
    #define pin_in_3  1<<10
    #define port_io_3 LPC_GPIO1
    #define port_in_3 FIO_ReadValue(1)
    #define out3_on   LPC_GPIO1->FIOSET = pin_out_3
    #define out3_off  LPC_GPIO1->FIOCLR = pin_out_3

    اينها رو ببينيد
    out1_on
    out2_on
    out3_on
    اين سه خط تنها تفاوتشون در يک عدد هست که ميشه با يک کانتر ساخت
    پس ميشه با يک حلقه for اين عدد رو ساخت و با sprintf متن رو داخل يک متغير ريخت
    حالا ميمونه که خود ميکرو اين رو اجرا کنه!!

    مزيت اين که بجاي اين که من کلي دستور بنويسم ک اگر خروجي اين بود و اين اون بود و ان اين بود خروچي رو روشن و يا خاموش کن حالا بجاي اين گه ان اين اون رو صد بار تکرار کنم ميام ميزارمش توي يک حلقه و...

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    ما که نفهمیدیم!!! ولی اونا ماکرو هستن برادر و نمیتونی در زمان runtime بسازی...

    ولی یا میتونی از اشاره گر ها استفاده کنی که اصل قدرت c در اشاره گر ها نهفته هست...

    مثلن یه ارایه تعریف کنی که هر عنصر به خونه ای از حافظه اشاره داره که محل شروع یه تابع هست! حتا در زمان اجرا هم میشه ادرس رو عوض کرد...


    یا اینکه یه ماکرو تعریف کنی که مثلن اینطوری باشه


    #define SetPin(pin) PortNumber |= (1<<pin)
    ویرایش توسط behnam6500 : 08-06-2014 در ساعت 00:08

  4. کاربران : 2 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2011
    نوشته ها
    20
    تشکر
    3
    تشکر شده 8 بار در 7 پست

    پیش فرض

    نقل قول نوشته اصلی توسط behnam6500 نمایش پست ها
    ما که نفهمیدیم!!! ولی اونا ماکرو هستن برادر و نمیتونی در زمان runtime بسازی...

    ولی یا میتونی از اشاره گر ها استفاده کنی که اصل قدرت c در اشاره گر ها نهفته هست...

    مثلن یه ارایه تعریف کنی که هر عنصر به خونه ای از حافظه اشاره داره که محل شروع یه تابع هست! حتا در زمان اجرا هم میشه ادرس رو عوض کرد...


    یا اینکه یه ماکرو تعریف کنی که مثلن اینطوری باشه


    #define SetPin(pin) PortNumber |= (1<<pin)

    مثلن یه ارایه تعریف کنی که هر عنصر به خونه ای از حافظه اشاره داره که محل شروع یه تابع هست! حتا در زمان اجرا هم میشه ادرس رو عوض کرد...
    این رو میشه بیشتر توضیح بدین؟؟

  6. #4
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    اول به ساختار به اين صورت تعريف كن:
    کد:
    typdef struct list_function
    {
     void (*handler)(void);
    }list_function;
    بعدش بيا اون توابعي كه ميخواي اجرا كني را درون ليست مورد نظر قرار بده:
    کد:
    list_function lfuc[] ={
                           {&func1},
                           {&func1},
                           {&func2},
                           {&func3},
                           {&func4},
                           {&func5},
                            .
                            .
                            .
                           {&funcN}
                            };
    توابع هم كه ميخواي اجرا كني اينطوري تعريف كن:
    کد:
    void func1(void)
    {
    }
    
    void func2(void)
    {
    }
    
    void func3(void)
    {
    }
    
    void func4(void)
    {
    }
    .
    .
    .
    void funcN(void)
    {
    }
    هر جا خواستي كد مورد نظر را اجرا كني قفط كافيه بنويسي:
    کد:
    lfunc[شماره انديس].handler();
    _____________________________________
    _____________________________________

  7. کاربران : 6 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  8. #5
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2011
    نوشته ها
    20
    تشکر
    3
    تشکر شده 8 بار در 7 پست

    پیش فرض

    خیلی ممنون جناب sadmonew
    خیلی جالب بود و باورم نمیشد بشه همچین کاری کرد!!

    سوال
    نمیشه مثلا یک دستور رو توی یک رشته ساخت و بعد از ساختن اجرا کرد؟؟
    مثلا بیایم با دستور sprintf یک رشته بسازیم که در کل یکی از دستورات باشه و بعد اجراش کنیم؟؟
    مثلا
    LPC_GPIO1
    اجرا
    بعد یک رو دو کنیم توی رشته و اجرا بعد 3 اجرا؟؟

  9. #6
    کاربر فعال
    تاریخ عضویت
    Nov 2009
    نوشته ها
    115
    تشکر
    77
    تشکر شده 83 بار در 35 پست

    پیش فرض

    اشاره گرها کار خوبیه اما خوب هر اشاره گر 4 بایت از حافظه رو میگیره
    برای کار شما بهترین حالت استفاده از ## است.
    تو اینترنت سرچ کنی بهتر متوجه میشی
    define ADC_PINSEL_REG(NUM_SEL) LPC_PINCON->PINSEL##NUM_SEL

  10. #7
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2011
    نوشته ها
    20
    تشکر
    3
    تشکر شده 8 بار در 7 پست

    پیش فرض

    نقل قول نوشته اصلی توسط m_online3710 نمایش پست ها
    اشاره گرها کار خوبیه اما خوب هر اشاره گر 4 بایت از حافظه رو میگیرهبرای کار شما بهترین حالت استفاده از ## است.تو اینترنت سرچ کنی بهتر متوجه میشیdefine ADC_PINSEL_REG(NUM_SEL) LPC_PINCON->PINSEL##NUM_SEL
    افا من که هرچی میگردم هیچی پیدا نمیکنم

موضوعات مشابه

  1. ذخيره ماندن متغير بعد ازريست
    توسط wiki در انجمن AVR
    پاسخ: 14
    آخرين نوشته: 08-06-2017, 13:04
  2. كامپايلر پايتون براي arm
    توسط hitler در انجمن پرسش و پاسخ (نرم افزارهای تخصصی)
    پاسخ: 6
    آخرين نوشته: 24-02-2013, 12:07
  3. حفره‌هاي امنيتي گوگل را گزارش كنيد و جايزه بگيريد
    توسط arsalan681 در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 0
    آخرين نوشته: 04-11-2010, 18:35
  4. پاسخ: 1
    آخرين نوشته: 08-10-2009, 01:29
  5. تبديل چند متغير به يكي
    توسط esmaeil57 در انجمن AVR
    پاسخ: 0
    آخرين نوشته: 13-05-2009, 21:19

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •