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

موضوع: مدت زمان اجرای هر دستور در بیسکام ؟

  1. #1
    عضو جدید
    تاریخ عضویت
    May 2010
    نوشته ها
    6
    تشکر
    14
    تشکر شده 0 بار در 0 پست

    Icon17 مدت زمان اجرای هر دستور در بیسکام ؟

    سلام
    یک سوال ساده داشتم :
    می خواستم بدونم مدت زمان اجرای و یا هموت تعداد سیکلی که هر دستور بیسکام طول میکشه چقدره ؟
    مثلا یک دستور if ساده توی چند سیکل اجرا میشه و اگر شرط if دوتا بشه چقدر میشه ؟
    ممنون از کمکتون.

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

  3. #2
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    از اونجا اغلب کامپایلر های سطح بالا ( زیان c ، بیسیک ، پاسکال و.. ) برنامه ی نوشته شده رو به زبان سطح پایین و سپس به کد ماشین ترجمه میکنن ، بدست آوردن سرعت دقیق اجرای دستور در اونا یه مقدار مشکل هشت و در کل سرعت اجرای هر دستور بستگی به ساختار کامپایلر و نحوه ی تبدیل کد نوشته شده به کد اسمبلی بستگی داره .
    مثلا توی بسکام دستور start adc به دستورات زیر و سپس به کد هگز تبدیل میشه .
    [HTML]ADMUX=$7C
    ADCSRB=$7B
    ADCSRA=$7A
    ADCSR=$7A
    ADCH=$79
    ADCL=$78[/HTML]
    توی کد ویژن نیازی به نوشتن دو خط از موراد بالا نیست .
    و در اسمبلی میشه با مساوی قرار دادن مقدار ریجستر ها ، یک خط دیگه رو هم حذف کرد .
    در کل توی avr هر دستور توی یک سیکل کلاک اجرا میشه ، مثلا اگه فرکانس کریستال برابر با یک مگاهرتز باشه ، راه اندازی adc ( فقط دستور شروع به کار ) در بسکام 6 میکرو ثانیه و در کد ویژن تقریبا 4 میکرو ثانیه و در اسمبلی تقریبا 3 میکرو ثانیه طول می کشه .
    موارد بالا 100 درصد دقیق نیست و صرفا برای درک موضوع من اونا رو مطرح کردم ، اما اگه شما میخوایید سرعت دقیق اجرای یک دستور رو بفمید میتونید تعداد زیادی از اون رو پشت سرهم بیارید و سپس زمان اچرای کل رو به تعدا تقسیم کنید .

  4. تشکرها از این نوشته :


  5. #3
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    سلام !
    آقای یک نفر درست میفرمایند !
    دقیقا همین مشکلی بود که من داشتم توی پروژه اخیرم ! این که هر دستور چند سیکل مصرف میکنه ولی من با زبان سی مینوشتم
    برای مثال عرض میکنم - من با وین ای وی آر کار میکردم ، اپیمایز کد رو غیر فعال کردم ، مثلا برای پرش به یه تابع اول میرفت تو یه زیر برنامه و تمام رجیستر های کاربردی رو مثل r28,r29,r30,r31 رو پوش میکرد که میشد 16 سیکل ماشین - موقه برگشت هم همه رو پاپ میکنه که اونم میشه 16 سیکل ، حالا باز تو نحوی تعریف حلقه ها تفاوت هست اگه شما از رجیستر های سیستم استفاده کرده باشی مثل متغییر های که تو رجیستر ذخیره میشن و یا نکرده باشی دو متد مختلف داره ، خلاصه من که کاملا نا امید شدم ازش ، آخه کد تولید شده وابستگی های زیادی داره و نمیشه حدس زد که چی تولید میشه تازه این که زبان سی هست و اپتیماز نداره ، چه برسه به بیسیک ، که اصلا معلوم نیست چی به چیه ،
    من قیدش رو زدم و مستقیم با اسمبلی نوشتم برنامه رو دردسر داشت ولی واقعا آدم میبینه دستش بازه روحیه میگیره

  6. #4
    کاربر علاقه مند
    تاریخ عضویت
    Feb 2009
    نام
    سجاد زارعی
    نوشته ها
    32
    تشکر
    21
    تشکر شده 30 بار در 22 پست

    پیش فرض

    سلام!
    برای هر کدی فرق می کنه حتی هر if با if دیگری سیکل مصرفی آن فرق میکنه!
    هدفتون از فهمیدن این زمان چیه ؟ اگر می خواهید یک زمان دقیقی رو تولید کنید از تایمر استفاده کنید.
    یا می تونید از پروتئوس کمک بگیرید من برای فهمیدن دقیق اینکه چقدر طول می کشه از Debug پروتئوس استفاده می کنم.

  7. #5
    کاربر علاقه مند mojtaba_sky آواتار ها
    تاریخ عضویت
    Mar 2010
    نام
    مجتبی کریمی
    نوشته ها
    66
    تشکر
    23
    تشکر شده 133 بار در 62 پست

    پیش فرض

    سلام به اساتید!!!
    اصلا کی گفته که دستورات در bascom از codvision بیشتر تولید میشه و سیکل اجراییش بالا هست؟؟؟؟
    من خودم اصلا غیرتی نیستم و زبان برنامه نویسی برام مهم نیست، خدارو شکر به اکثرشون تسلط دارم. ولی این بحث رو همیشه بین AVR کارها دیدم که....
    رفتم تحقیق کردم و فهمیدم که تمام کد هایی که با کامپایلر های مختلف نوشته میشه، در اخر با کامپوننت و سیستم داخلی که AVRStudio داره به HEX تبدیل میشه و هیچ تفاوتی نمیکنه.
    باید بگم که در واقع حتی Bascom بهتره چون که تمام منابع رو به صورت بهینه کنترل میکنه و ...
    در رابطه با کنترل منابع در میکرو پیشنهاد میکنم که معماری ریز پردازنده ها و معماری رایانه رو برید و بخونین!!!

  8. تشکرها از این نوشته :

    hmg

  9. #6
    کاربر علاقه مند
    تاریخ عضویت
    Feb 2009
    نام
    سجاد زارعی
    نوشته ها
    32
    تشکر
    21
    تشکر شده 30 بار در 22 پست

    پیش فرض

    سلام!

    نقل قول نوشته اصلی توسط mojtaba_sky نمایش پست ها
    تمام کد هایی که با کامپایلر های مختلف نوشته میشه، در اخر با کامپوننت و سیستم داخلی که AVRStudio داره به HEX تبدیل میشه و هیچ تفاوتی نمیکنه.
    شما درست می گید که در آخر فایل اسمبلی تولید شده توسط یک فایل "avrasm" تبدیل به یک فایل می شه ولی در کل کد اسمبلی تولید شده در دو برنامه مختلف فرق می کنند.

    من خودم به شخصاً اول بسکام و بعد اسمبلی و بعد C را یاد گرفتم.

    بسکام ساده و دستت برای کارهای پیچیده مثل پردازش همزمان ( thread ) کارایی دارد ولی زیاد سخت هست!
    در اسمبلی کد های نوشته شده زیاد می شود که بسیاری از موارد پیچیده و گمراه کننده می شود!

    در C چون چندین صفحه و به دلیل آزاد بودن ( نسبت به بیسیک ) در ارتباط با رجیستر های بیسیک از نظر نوشتن برای برنامه های پیچیده بهتر است ( نظر شخصی خودم )!

    برای هر کدی فرق می کنه حتی هر if با if دیگری سیکل مصرفی آن فرق میکنه!
    منظور من اینه که در همان برنامه با هم فرق می کنند!
    مثال از C:

    [HTML]
    ; 0000 0014 if(a==0)PORTD=10;
    TST R5
    BRNE _0x6
    LDI R30,LOW(10)
    OUT 0x12,R30
    ; 0000 0015 if(a==0)
    _0x6:
    TST R5
    BRNE _0x7
    ; 0000 0016 {
    ; 0000 0017 PORTD=10;
    LDI R30,LOW(10)
    OUT 0x12,R30
    ; 0000 0018 PORTC=0x00;
    LDI R30,LOW(0)
    OUT 0x15,R30
    ; 0000 0019 }
    ; 0000 001A if(a==0)
    _0x7:
    TST R5
    BRNE _0x8
    ; 0000 001B {
    ; 0000 001C PORTD=10;
    LDI R30,LOW(10)
    OUT 0x12,R30
    ; 0000 001D PORTC=10;
    OUT 0x15,R30
    ; 0000 001E }
    ; 0000 001F
    ; 0000 0020 };
    _0x8:
    RJMP _0x3
    ; 0000 0021 }
    _0x9:
    [/HTML]

  10. #7
    کاربر علاقه مند mojtaba_sky آواتار ها
    تاریخ عضویت
    Mar 2010
    نام
    مجتبی کریمی
    نوشته ها
    66
    تشکر
    23
    تشکر شده 133 بار در 62 پست

    پیش فرض

    اینی هم که شما میگید درست، اما اطمینان داشته باشید که اگر هم کد های بسکام به مقدار کد زیادی در اسمبلی تبدیل بشه، باز هم در برنامه های با توابع زیاد و پیچیده سریع تر عمل میکند.
    در هر حال در بدترین شرایط برطبق گفته هایی در یک سایت خارجی، سرعت بسکام در استفاده از حد اکثر کلاک AVR برابر 93% و در CodeVision برابر با 96% هست. و اسمبلی 100% است.
    پس اگه واقاٌ کد نویس باشید میبینید که .....
    من خودم روی ربات های انسان نما کار میکنم و بخش کنترل تعادل و حرکت با یک M128 انجام میشود. که نزدیک به 5 thread یا( برنامه همزمان) در میکرو صورت میگیره و در از تمام منابع در میکرو ( تایمر ها ، مبدل ها ، پورت های سریال ، I2c، و.... ) استفاده شده که به جرات میتونم بگم که به هیچ وجه نمیشه این برنامه رو با CV نوشت.

    www.mojtabakarimi.webstarts.com
    mojtaba_sky@live.com

  11. #8
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    اگه توی پست های فوق دقت کنید ، اسمی از تمامی دستورات یک کامیپایلر برده نشده . مثلا هیچ کس نمیتونه ادعا کنه که سرعت اجرای تمامی دستورات بیسیک از دستورات کد ویژن کمتر هست .
    اما چیزی که در اینجا مسلمه این هست که در زبان های c و بیسیک برای اجرای هر دستور ، میکرو باید تابعی رو از کتابخونه ی مربوطه بخونه و اون رو اجرا کنه .
    کد های که در تابع مربوطه قرار دارن توسط برنامه نویس کامپایلر انتخاب شده و از اونجا که ما روش های مختلفی رو برای نوشتن یک تابع داریم و قطعا از میون این روش ها فقط یکی در کمترین زمان اجرا میشه ، پس سرعت اجرای دستورات مختلف در کامیپالر های مختلف متفاوت خواهد بود .

  12. #9
    تازه وارد
    تاریخ عضویت
    Feb 2012
    نوشته ها
    4
    تشکر
    0
    تشکر شده 1 بار در 1 پست

    پیش فرض

    اقا درگیری اکثرا سر این هست که میشه با میکرو بیشتر از 1 مگاهرتز ساخت یا نه ؟

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

  1. تبدیل asm to bas بیا اسمبلی به بیسکم
    توسط kazemii در انجمن AVR
    پاسخ: 6
    آخرين نوشته: 06-10-2013, 00:59
  2. مقایسه شکل موج با avr
    توسط fazel7 در انجمن AVR
    پاسخ: 11
    آخرين نوشته: 11-09-2010, 00:54
  3. مقایسه نرم افزارهای طراحی pcb
    توسط MRSTAR در انجمن آموزش نرم افزارهای برق و الکترونیک
    پاسخ: 1
    آخرين نوشته: 06-05-2010, 00:33
  4. کول دیسک
    توسط omid_safari در انجمن AT91 series (ATMEL)
    پاسخ: 18
    آخرين نوشته: 30-04-2010, 01:33
  5. دانلود کامپایلر های arm و مقایسه انها
    توسط 1nafar در انجمن AT91 series (ATMEL)
    پاسخ: 7
    آخرين نوشته: 27-10-2009, 20:56

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

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