اطلاعیه

Collapse
No announcement yet.

زمان اجرا و عدم درست بودن زمان در ARM یا IAR

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

    زمان اجرا و عدم درست بودن زمان در ARM یا IAR

    آقایون سلام
    من کتاب میکروکنترولر ای ار ام از انتشارات نص رو گرفتم اقا فقط یه مشکل این برنامه رو ببینید

    #include <Atmel/ioat91sam7s64.h>
    #include "lcd.h"
    void delay (void);
    void main ()
    {
    //--------------------start up--------------------------
    AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15)
    AT91C_BASE_RSTC->RSTC_RMR=0xA5000001;
    //--------------------speed up--------------------------
    AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
    AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
    AT91C_BASE_PMC->PMC_MCKR = 0x3;
    AT91C_BASE_PMC->PMC_SCER = 0x1;
    //-----------------------------------------------------
    AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2
    //------------------------------------------------------
    AT91C_BASE_PIOA->PIO_PER=(1<<0|1<<1);

    AT91C_BASE_PIOA->PIO_OSR=(0<<1);
    //AT91C_BASE_PIOA->PIO_ODR=(1<<1);
    //AT91C_BASE_PIOA->PIO_IFER=(1<<1);

    AT91C_BASE_PIOA->PIO_OER=(1<<0);
    AT91C_BASE_PIOA->PIO_SODR=(1<<0);

    //lcd_pininit(0,1,2,3,4,5,6,7,8,9);
    //lcd_init();
    //lcd_gotoxy(0,0);
    //lcd_putsf("ARM"
    while(1)
    {
    AT91C_BASE_PIOA->PIO_SODR=(1<<0);
    delay();
    AT91C_BASE_PIOA->PIO_CODR=(1<<0);
    delay();

    }
    }
    void delay (void)
    {
    unsigned int i;

    for (i=0;i<1000000;i++);

    }

    کامل درست کار می کنه فقط یه مشکل داره اونم تابع تاخیر هست
    متغییر i
    1000000 تکرار می شه و اگر بخوایم خوب هم فکر کنیم و هر بار حلقه هم یک میکرو ثانیه طول می کشه.حالا آقا محاسبات شروع می شه

    فرکانس روی پایه میکرو 18.432 مگاهرتز هست و با تنظیم پی ال ال به 48 مگاهرتز فرکانس تراشه می رسه
    یعنی هر دستور ماشین رو داخل
    1/48000000=20 نانو
    باید اجرا بشه اما من با دستور بالا خروجی میکرو که به یه ال ای دی وصل بود رو تونستم با چشم ببینم طوری که انگار تقریبا 800 میلی ثانیه بین چمشک زدنانش فاصله بود این چه جوری؟
    یعنی بخوایم بگیم اینجوری دستور بالای من که باید 20 میلی ثانیه بین خاموش رونش باشه تبدیل شده به بالای 500 میلی ثانیه که قابل دیدن هست!!!!

    آقا جالبش اینکه داخل کتاب نوشته یه تاخیر کم :و تاخیر رو اینجوری نوشتن

    for(i=0;i<1000000;i++)
    for(j=0;j<1000000;j++);



    بخوایم خوب هم ببینیم زمان تاخیر می شه 10 به توان 12 حالا اینو در عدد 1/48000000 ضرب کنیم می شه
    20833.3
    ثانیه
    یعنی 347 ساعت !!!!!!!!! بله یه تاخیر کم :eek:
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    #2
    پاسخ : زمان اجرا و عدم درست بودن زمان در ARM یا IAR

    سلام
    دوست عزیز این تاخیر ها در کامپایلر IAR اصلا رو حساب و کتاب نمی باشد و با توجه به بهینه سازی و کد خروجی و... کامپایلر یک کدی اسمبلی را برای این تولید می کند که هرچه برنامه شما زیاد یا کم شود این مدت تاخیر تغییر می کند. برای تاخیر دقیق حتما باید از تایمرها استفاده کنید و اون مثالی هم که داخل کتاب هست با نسخه IAR که داخل CD کتاب هست درست کار می کند و یک تاخیر کمی ایجاد می کند در حد 800 میلی ثانیه. برای این تیپ تاخیرها بهتر است تایپیک زیر را یک مطالعه بکنید.
    http://www.eca.ir/forum2/index.php?topic=47811.0

    دیدگاه

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