PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ایجاد تاخیر در کامپایلر keil



hamed.b3269
14-06-2014, 19:32
سلام.
من دارم با میکروکنترلر LPC1768 و کامپایلر keil کار میکنم و میخوام که در برنامه تاخیر ایجاد کنم. در کامپایلر keil کتابخانه ای به نام delay برای این کار وجود نداره پس باید چه جوری تاخیر رو ایجاد کنم. توی انجمن که جستجو کردم بعضی ها گفته بودن که باید با ایجاد یک حلقه در برنامه این تاخیر رو ایجاد کنی و به عبارتی دیگر باید خود برنامه نویس با نوشتن یک تابع این کار رو انجام بده. میخواستم ببینم که کتابخانه استانداردی برای این کار وجود نداره یا روش دیگه ای نیست که توسط اون بتونیم در برنامه تاخیر ایجاد کنیم.
خیلی ممنون.

hossein1387
15-06-2014, 09:20
سلام

مشخص اصلا درست نگشتی! برای ایجاد تاخیر معمولا از تایمر استفاده میشه. البته میتونی میکرو رو توی یک حلقه منتظر بزاری ولی به نظر من اصلا کار اصولی نیست. پیشنهاد میکنم از تایمر Systick استفاده کنی. یک تابع بنویس که Systick رو روی فرکانس مورد نظر تنظیم کنه. با استفاده از Systick handler و یک تابع ساده میتونی تاخیر مورد نظر رو ایجاد کنی. برای مثال این شکل کلی تابع main.c میشه:


//--------------------------------------------------------------------------------
// File name: main.c
//----------------------------------------------------------------------------
#include "LPC17XX.h"
#include "delay.h"

void main(){
pll_init(); // Configuration function for PLL
SysTick_Config(SystemCoreClock/1000000); /* Generate interrupt each 1uS */
while(1){
// do sth
delay();
// do sth
}

return 0;
}


حالا توی فایل delay.c باید systick handler و تابع delay رو تعریف کنی. مثلا اینطوری:




//--------------------------------------------------------------------------------
// File name: delay.c
//----------------------------------------------------------------------------
#include "delay.h"

/*----------------------------------------------------------------------------
SysTick_Handler
*----------------------------------------------------------------------------*/
void SysTick_Handler(void) {
msTicks++; /* increment counter necessary in Delay() */
}

/*------------------------------------------------------------------------------
delays number of tick Systicks (happens every 1 ms)
*------------------------------------------------------------------------------*/
void Delay (uint32 dlyTicks) {
uint32 curTicks;

curTicks = msTicks;
while ((msTicks - curTicks) < dlyTicks);
}




حواست باشه که یک جایی توی فایل delay.h متغییر msTicks رو به صورت volatile static uint32 msTicks تعریف کنی.

hd_uni_pro
18-06-2014, 12:31
تعریف یک متغیر به شکل volatile چه کار میکنه و اصلا volatile یعنی چی ؟

Aghaeifar
18-06-2014, 14:03
تعریف یک متغیر به شکل volatile چه کار میکنه و اصلا volatile یعنی چی ؟
یک جستجوی ساده در گوگل :
Volatile variable - Wikipedia, the free encyclopedia (You can see links before reply)

جلوگیری از Optimize کرده یک متغیر توسط کامپایلر توسط این کلمه کلیدی مشخص میشه