03

زمان بندی نرم افزار نهفته

در بسیاری از بخش های نرم افزار نهفته نیاز است که بخشی از کد به صورت دوره ای با دوره اجرای مشخص اجرا شود. مثال های زیر از جمله این موارد است :

  • چشمک زدن یک نمایشگر
  • اجرای دیبانس بر روی ورودی دیجیتال یک کلید فشاری
  • نمونه برداری از مبدل آنالوگ به دیجیتال و اجرای فیلتر بر روی آن
  • ذخیره کردن اطلاعات در حافظه
  • اجرای حلقه های کنترلی
  • اجرای منطق سطح بالای نرم افزار (مانند ماشین حالت)
  • ارسال دوره ای اطلاعات بر روی پورت سریال
  • چک کردن شرایط رخ دادن یک رویداد
  • . . .

این کاربردها را می توان به دو دسته تقسیم کرد :

  • دوره زمانی اجرا باید دقت بالایی داشته باشد یا با یک رویداد دیگر (داخلی یا بیرونی) همزمانی داشته باشد. مانند حلقه های کنترلی، فیلترهای دیجیتال و نمونه برداری از ورودی آنالوگ. در این کاربردها باید از ابزارهای زمان بندی دقیق مانند اینتراپت ها و کرنل (در صورتی که فرکانس اجرا خیلی بالا نباشد) استفاده کرد.
  • دوره زمانی اجرا دقت بالایی نیاز ندارد. مانند چشمک زدن یک نمایشگر، دیبانس و ارسال دوره ای اطلاعات بر روی پورت سریال. در این کاربردها لزوما نیاز به اینتراپت نیست. بلکه می توان در کنار بقیه کدها در اینتراپت ها و یا در حلقه های اولویت پایین مانند while در main و یا در تسک های اولویت پایین (در صورت استفاده از کرنل) کد را اجرا کرد.

در مورد دسته دوم (دوره زمانی با دقت پایین) که اتفاقا در بسیاری از کاربردها، تعداد آن بیشتر از دسته اول (دوره زمانی با دقت بالا) است، باید به وسیله ای بتوان این زمان بندی ها را اجرا کرد. در زیر به برخی از روش های مورد استفاده بدین منظور اشاره می شود :

از آنجایی که در این مطلب به دفعات از مفهوم عنصر اجرایی استفاده می شود، مفهوم آن در زیر نوشته شده است.

[! ] عنصر اجرایی “عنصر اجرایی” بخشی از نرم افزار است که قابلیت اجرا دارد. کدهای نوشته شده در نرم افزار تنها زمانی اجرا میشوند که در یکی از این عناصر به صورت مستقیم یا غیر مستقیم فراخوانی شوند. کلا سه نوع عنصر اجرایی در نرم افزار نهفته داریم :

  • نقطه ورود (Entry Point) : اولین جایی در کد است که توسط پردازشگر اجرا میشود. در زبان c این نقطه همان تابع main است.
  • اینتراپت
  • تسک (در صورت استفاده از کرنل)

[! ] طراحی لایه اجرا “طراحی لایه اجرایی” به مهنی تعیین تعداد، زمان بندی و اولویت این عناصر اجرایی در نرم افزار نهفته است.

استفاده از یک عنصر اجرایی برای هر زمان بندی

یکی از راه های مرسوم آن است که برای هر یک از این بخش های کد که باید به صورت دوره ای اجرا شوند، یک عنصر اجرایی (اینتراپت یا تسک) با دوره زمانی مورد نظر و با اولویت پایین ایجاد کرده و کد را داخل آن اجرا کرد.

نقاط قوت :

  • استقلال زمان بندی بخش های مختلف کد نقاط ضعف :
  • برای هر بخش از کد یک عنصر اجرایی لازم است که به معنی منابع بیشتر سخت افزاری (تایمر) یا نرم افزاری (تسک) مورد نیاز است.
  • نیاز به کرنل (در صورت استفاده از تسک)

استفاده از عنصر اجرایی مشترک

در این روش، یک عنصر اجرایی با دوره اجرای برابر با “بزرگترین مقسوم علیه مشترک تمام دوره های زمانی مورد نیاز” باید ایجاد شود. سپس با استفاده از یک متغیر به عنوان شمارنده برای هر بخش از کد، زمان بندی مورد نیاز برای هر بخش ایجاد شود. به عنوان مثال فرض کنید سه تابع وجود دارد که به ترتیب باید هر 20 میلی ثانیه یکبار، هر 30 میلی ثانیه یکبار و هر 40 میلی ثانیه یکبار اجرا شوند. در این صورت باید یک المان اجرایی با دوره زمانی 10 میلی ثانیه تعریف کرد و با استفاده از یک متغیر برای هر یک از کدهای بالا، به ترتیب پس از 2 بار، سه بار یا چهار بار ورود به المان اجرایی، یکبار باید تابع مربوطه فراخوانی شود.

				
					
int Func1_Counter = 0;
int Func2_Counter = 0;
int Func3_Counter = 0;

//This RunTime(Interrupt or Task) run every 10ms
void RunTime()
{
	Func1_Counter++;
	if(Func1_Counter >= 2)
	{
		Func1_Counter = 0;
		Func1();
	}
	
	Func2_Counter++;
	if(Func2_Counter >= 3)
	{
		Func2_Counter = 0;
		Func2();
	}

	Func3_Counter++;
	if(Func3_Counter >= 4)
	{
		Func3_Counter = 0;
		Func3();
	}
}
				
			

نقاط قوت :

  • استفاده از تنها یک عنصر اجرایی نقاط ضعف :
  • تاثیر بقیه بخش های نرم افزار در دقت اجرای این بخش. از آنجایی که عنصر اجرایی مورد استفاده در این روش اولویت پایینی دارد، در صورتی که تغییری در بخش های دیگر نرم افزار انجام شود، روی زمان بندی اجرای عنصر اجرایی و به تبع آن روی زمان اجرای ت وابع تاثیر می گذارد.
  • در صورتی که زمان بندی عنصر اجرایی تغییر داده شود، در تمام کدهای شمارنده ها باید تغییر داده شود تا متناسب با زمان بندی جدید درست عمل کنند.

استفاده از حلقه while یا تسک اولویت پایین

این روش شبیه استفاده از یک عنصر اجرایی مشترک است، با این تفاوت که این عناصر اجرایی، زمان بندی اجرایی مشخصی نداشته و هر موقع که پردازشگر مشغول بخش دیگری از نرم افزار نباشد، این بخش ها را اجرا می کند. برای ایجاد زمان بندی های مورد نیاز در این روش، باید یک دوره اجرای حلقه با وجود تمام بخش های دیگر نرم افزار اندازه گیری شده و با استفاده از آن و استفاده از متغیر به عنوان شمارنده، زمان بندی های مورد نظر را اجرا کرد. نقاط قوت :

  • بسیار ساده نقاط ضعف :
  • عدم دقت و تکرارپذیری در زمان بندی
  • تغییر تمام زمان بندی ها با تغییر در هر بخش از کدهای نرم افزار
  • پیچیدگی و ناپایدار تنظیم زمان بندی های بخش های مختلف کد

استفاده از یک یا چند عنصر اجرایی به همراه ابزارهای اندازه گیری زمان

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

[! ] اندازه گیری زمان در نرم افزار نهفته از آنجایی که در نرم افزار نهفته، اجرای بخش های مختلف کد در زمان بندی های مشخص اهمیت بسیاری دارد، یکی از پایه ای ترین ابزارهای مورد نیاز در این زمینه، ابزارهای اندازه گیری زمان در نرم افزار نهفته است. در این مورد در مطلب ؟؟؟؟ توضیحات کافی داده شده است.

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

				
					
sChrono Func1_Chrono;
sChrono Func2_Chrono;
sChrono Func3_Chrono;

...
fChrono_StartTimeout(&Func1_Chrono, 20);
fChrono_StartTimeout(&Func2_Chrono, 30);
fChrono_StartTimeout(&Func3_Chrono, 40);
...

//Interrupt, Task or EntryPoint(main->while)
void RunTime()
{
	if(fChrono_IsTimeoutMs(&Func1_Chrono))
	{
		fChrono_StartTimeout(&Func1_Chrono, 20);
		Func1();
	}
	
	if(fChrono_IsTimeoutMs(&Func2_Chrono))
	{
		fChrono_StartTimeout(&Func2_Chrono, 30);
		Func2();
	}

	if(fChrono_IsTimeoutMs(&Func3_Chrono))
	{
		fChrono_StartTimeout(&Func3_Chrono, 40);
		Func3();
	}
}
				
			

نقاط قوت :

  • زمان بندی کدها ارتباطی با زمان بندی عنصر اجرایی مورد استفاده ندارد.
  • حجم پردازش پردازشگر تاثیری بر روی دقت اندازه گیری زمان ندارد. نقاط ضعف :
  • نیاز به تیک جهت اندازه گیری زمان
  • دقت اجرای زمان بندی ها بستگی به اختلاف مقیاس زمان بندی های مورد نیاز و زمان اجرای عنصر اجرایی مادر دارد.

جمع بندی

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

ماژول runtime_scaler

ماژول runtime_scaler، از تعدادی ماکرو تشکیل شده که با استفاده از ماژول کرونو، ابزارهایی را برای اجرای بخش هایی از کد با زمان بندی های متفاوت فراهم می کند. این ماژول علاوه بر استفاده از تمام مزایای ذکر شده در این سند، ماکروهایی را ایجاد کرده است که به زیبایی و خوانایی کد کمک شایانی می کند. در زیر، کد نوشته شده در مثال آخر با این ماکروها بازنویسی شده است:

				
					//Interrupt, Task or EntryPoint(main->while)
void RunTime()
{
	RUN_EVERY_MS_(Func1, 20)
	{
		Func1();

		RUN_END_;
	}

	RUN_EVERY_MS_(Func2, 30)
	{
		Func2();

		RUN_END_();
	}

	RUN_EVERY_MS_(Func3, 40)
	{
		Func3();

		RUN_END_();
	}
}
				
			
03

اندازه گیری زمان در نرم افزار نهفته

مقدمه

از آنجایی که یکی از بارزترین ویژگی های نرم افزار نهفته، اجرای کد در زمان بندی های مشخص است، اندازه گیری زمان در نرم افزار نهفته اهمیت ویژه ای دارد. نرم افزار نهفته معمولا برای کنترل، مشاهده کردن و یا جمع آوری و ذخیره اطلاعات سیستم ها به کار می رود. در تمام این کاربردها، زمان بندی دقیق اجرای نرم افزار، یکی از موارد مهم مورد نظر توسعه دهنده است و این یکی از تفاوت های مهم بین نرم افزار نهفته و نرم افزارهای غیر نهفته (کامپیوتری) است. در نرم افزارهای کامپیوتری معمولا پارامترهایی مانند متوسط سرعت اجرای برنامه، متوسط خروجی اطلاعات و پارامترهایی از این دست اهمیت دارند. در حالی که در نرم افزارهای نهفته، اجرای هر بخشی از کد در زمان بندی مشخص حائز اهمیت است. به عبارت دیگر، بخش مهمی از نرم افزارهای نهفته لازم است که به صورت “زمان حقیقی” اجرا شوند.

[! ] زمان حقیقی “زمان حقیقی” بودن نرم افزار به معنی سرعت بالای اجرا یا سرعت بالای عکس العمل به رویدادها نیست. بلکه بدین معنی است که عکس العمل به هر رویداد، باید تا مدت زمان مشخصی (deadtime) به اتمام برسد.

به دلیل اهمیت زمان بندی در نرم افزار نهفته، اندازه گیری زمان نیز اهمیت ویژه ای پیدا می کند. در نرم افزار نهفته به دو دلیل به اندازه گیری زمان نیاز است.

  • نظارت
  • کنترل

اندازه گیری زمان برای نظارت

یکی از کاربردهای اندازه گیری زمان، نظارت است. از آنجایی که در اکثر سیستم های نهفته، صحت عملکرد سیستم در گرو اجرای نرم افزار بر اساس زمان بندی های مشخص است، نمیتوان صرفا به طراحی های انجام شده در حوزه معماری نرم افزار، طراحی لایه اجرا، تنظیمات کرنل (در صورت استفاده)، تایمرها و اینتراپت ها اعتماد کرد. بنابراین لازم است که یک بخش نظارتی از کد، زمان بندی های نرم افزار اصلی را پایش کرده و در صورتی که در محدوده قابل قبول نبود، هشدارهای لازم را صادر کرده و یا عملکرد نرم افزار را متوقف کند. در زیر تعدادی از مثال های کاربرد اندازه گیری زمان به منظور نظارت را ذکر می شود :

  • اندازه گیری حجم پردازش پردازشگر و همچنین اندازه گیری حجم پردازشی بخش های مختلف کد
  • اندازه گیری زمان اجرای بخشی از کد
  • اندازه گیری فرکانس اجرای حلقه های کنترلی
  • اندازه گیری فاصله زمانی وقوع رویداد تا عکس العمل نرم افزار

اندازه گیری زمان برای کنترل

در موارد بسیاری، اندازه گیری زمان، جهت نظارت بر صحت عملکرد بخش اصلی نرم افزار نیست. بلکه جهت اجرای آن است. مثلا برای تولید تاخیر در اجرای بخشی از کد یا تشخیص وقوع timeout در پروتکل های ارتباطی، باید سنجشی از زمان سپری شده در هر لحظه داشت. در ادامه مثال هایی از این دست ذکر شده است.

  • ایجاد تاخیر به مقدار مشخص در حین اجرای بخشی از کد
  • چشمک زدن یک نمایشگر با فرکانسی مشخص
  • ایجاد یک دیبانس نرم افزاری بر روی ورودی یک پین دیجیتال که به یک کلید فشاری متصل است
  • اجرای بخشی از کد در بازه های زمانی مشخص مانند حلقه های کنترلی
  • اجرای بخشی از کد پس از سپری شدن زمان مشخصی از لحظه وقوع یک رویداد
  • تشخیص گذشتن مدت زمانی مشخص از لحظه وقوع یک رویداد (مانند timeout در تمام پروتکل های ارتباطی)

نیازمندی های اندازه گیری زمان

با توجه به مباحث و مثال های بیان شده، نیازمندی های حوزه زمان در نرم افزار نهفته به شرح زیر است :

  • ایجاد تاخیر در اجرای بخشی از کد به صورت Blocking و Non-Blocking
  • اندازه گیری زمان سپری شده از لحظه ای خاص
  • اندازه گیری زمان باقیمانده تا لحظه ای خاص
  • تشخیص رسیدن به مدت زمانی مشخص از لحظه ای خاص
  • اندازه گیری دوره زمانی اجرای بخشی از نرم افزار
  • اندازه گیری زمان بین دو رویداد
  • اندازه گیری زمان اجرای بخشی از کد

روش های اندازه گیری زمان

پس از صحبت در مورد ضرورت اندازه گیری زمان در نرم افزارهای نهفته، در این بخش به انواع روش ها و ابزارهای اندازه گیری زمان پرداخته می شود.

حلقه خالی

یکی از ابتدایی ترین و دم دستی ترین ابزارها برای اندازه گیری زمان، حلقه خالی است. در این روش از یک حلقه for به تعداد مشخص استفاده می شود.

				
					for(int i=0; i<1000; i++){}
				
			

از این روش تنها در ایجاد تاخیر در اجرای بخشی از کد، آنهم به صورت Blocking می توان استفاده کرد.

نقاط قوت :

  • بسیار ساده
  • عدم نیاز به هیچ کتابخانه یا سخت افزار

نقاط ضعف :

  • تنها برای ایجاد تاخیر به صورت Blocking قابل استفاده است.
  • دقت پایین
  • نیاز به کالیبراسیون
  • مقدار تاخیر با تغییر کلاک پردازشگر، نوع کامپایلر و حتی سطح بهینه سازی کامپایلر تغییر می کند.

استفاده از پین پردازشگر

یکی دیگر از روش های اندازه گیری زمان، استفاده از پین پردازشگر است. بدین صورت که در بخش هایی از کد این پین صفر یا یک می شود و با استفاده از یک ابزار اندازه گیری خارجی مانند اسکوپ یا لاجیک آنالایزر، می توان اندازه پالس ایجاد شده را اندازه گیری کرد.

نقاط قوت :

  • بسیار ساده
  • اندازه گیری دقیق زمان

نقاط ضعف :

  • نیاز به یک پین سخت افزاری به ازای هر اندازه گیری همزمان
  • تنها کاربرد نظارتی آن در سطح کاربر بیرونی است. (یعنی یک انسان یا ابزار بیرونی باید پهنای پالس را اندازه بگیرد) و امکان استفاده به عنوان نظارت داخلی توسط خود نرم افزار را ندارد.
  • امکان استفاده در کاربردهای کنترلی را ندارد و تنها می توان برای اندازه گیری زمان بین دو رویداد و اندازه گیری دوره اجرای بخشی از کد استفاده کرد.

تایمرهای سخت افزاری

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

نقاط قوت :

  • اندازه گیری دقیق زمان

نقاط ضعف :

  • نیاز به یک تایمر به ازای هر اندازه گیری همزمان (پردازشگرها تعداد محدودی تایمر دارند که برای کابردهای دیگری مانند ایجاد سیگنال PWM، ایجاد اینتراپت های دوره ای و . . . استفاده می شوند.)

تیک

استفاده از تیک یکی دیگر از روش های مرسوم در اندازه گیری زمان است. این روش شباهت زیادی به استفاده از RTC جهت اندازه گیری های زمان در مقیاس دقیقه و ساعت و روز دارد. در این روش از یک شمارنده استفاده می شود که از زمان شروع به کار پردازشگر، مقدار آن صفر شده و بر اساس یک واحد زمانی مشخص (مثلا میکروثانیه یا میلی ثانیه) ، مقدار آن با گذشت زمان افزایش می یابد. بعد از رسیدن این شمارنده به حداکثر مقدار ممکن، مقدار آن صفر شده و این روند دائم ادامه پیدا می کند. با استفاده از این واحد زمانی، می توان تمام نیازمندی های نرم افزار نهفته در حوزه اندازه گیری زمان را تامین کرد. نکته مهم اینکه، در این روش، کد نوشته شده باید گذر مقدار شمارنده از صفر را تشخیص داده و پردازش های لازم را در این لحظه انجام دهد تا دچار خطا نشود. در ادامه چند مثال از استفاده از این تابع ذکر شده است.

  • ایجاد تاخیر : می توان تابعی نوشت که در شروع، تیک همان لحظه را ذخیره کند. سپس منتظر بماند تا مقدار تیک به مقدار تیک لحظه شروع به علاوه مقدار تاخیر برسد. سپس از تابع خارج شود
				
					void Delay(int delay)
{
	int nowTick = GetTick();
	while((nowTick + delay) > GetTick()){}
}
				
			
  • اندازه گیری زمان اجرای بخشی از کد : باید در ابتدا و انتهای کد، مقدار تیک را خوانده و با محاسبه اختلاف این دو، زمان اجرای کد را محاسبه کرد.
				
					int startTick = GetTick();

//Code that runTime is needed

int endTick = GetTick();
int runTime = endTick - startTick;

				
			

به همین ترتیب می توان تمام روش های مختلف زمان بندی و اندازه گیری زمان را با استفاده از تیک پیاده سازی کرد.

نقاط قوت :

  • تامین تمام نیازمندی های مورد نیاز در حوزه اندازه گیری زمان
  • عدم وجود محدودیت در تعداد اندازه گیری های همزمان
  • امکان تنظیم دقت اندازه گیری با تعیین واحد زمانی تیک

نقاط ضعف :

  • اندازه گیری زمان در این روش محدود به حداکثر زمانی است که مقدار متغیر یک بار سرریز می شود. به عنوان مثال اگر از یک شمارنده 32 بیتی استفاده شود و زمان هر تیک یک میکروثانیه باشد، این زمان حدود 71 ثانیه و در صورت استفاده از تیک یک دهم میکروثانیه، این زمان حدود 7 ثانیه می شود. از آنجایی که در اکثریت قریب به اتفاق موارد، اندازه گیری زمانی نرم افزار در حد میکروثانیه و میلی ثانیه است، این محدودیت مشکل خاصی ایجاد نمی کند. برای اندازه گیری زمان های بیشتر معمولا دقت بالایی (در حد میکروثانیه) مدنظر نیست و از RTC استفاده می شود.

تیک را میتوان به دو صورت ایجاد کرد :

  • نرم افزاری
  • سخت افزاری

تیک نرم افزاری

در این روش، در یک اینتراپت دوره ای با دوره مثلا یک میلی ثانیه مقدار متغیر یک عدد افزایش می یابد. بدین صورت یک شمارنده ساخته شده که مقدار آن نشان دهنده زمان سپری شده بر حسب میلی ثانیه است.

نقاط قوت :

  • عدم نیاز به تایمر سخت افزاری

نقاط ضعف :

  • مصرف زمان پردازشگر برای ایجاد شمارنده (باعث تغییر در زمان بندی بقیه بخش های نرم افزار می شود)
  • اینتراپت ایجاد تیک باید دارای بالاترین اولویت باشد تا مقدار تیک صحیح باشد.
  • وجود مناطق بحرانی باعث بر هم خوردن مقدار تیک می شود.
  • مقدار تیک تنها در حد میلی ثانیه قابل استفاده خواهد بود. زیرا در صورت نیاز به تیک دقیق تر، باید فرکانس اینتراپت افزایش یابد و در این صورت عملا بخش زیادی از زمان پردازشگر صرف ایجاد تیک خواهد شد.

[! ] نکته مهم یکی از نقاط ضعف اصلی تیک نرم افزاری آن است که در صورت عدم رعایت الزامات اولویت ها، ممکن است منجر به قفل شدن نرم افزار شود. اولویت اینتراپتی که تیک نرم افزاری را ایجاد می کند باید بالاتر از همه باشد. و در نواحی بحرانی هم به هیچ وجه نباید از توابعی که منتظر رسیدن تیک تیک نرم افزاری به مقدار خاصی می ماند استفاده شود. چون ناحیه بحرانی عملکرد تیک را متوقف کرده و دیگر مقدار تیک افزایش نمی یابد. در صورتی که در ناحیه بحرانی منتظر افزایش تیک و رسیدن آن به مقدار مشخصی باشد، نرم افزار قفل می شود.

تیک سخت افزاری

این روش در واقع ترکیبی از روش تیک و تایمر سخت افزاری است. با این تفاوت که در اینجا کلا یک تایمر سخت افزاری مورد نیاز خواهد بود و به تعداد نامحدود اندازه گیری همزمان با آن می توان انجام داد. در این روش، یکی از تایمرهای پردازشگر تنظیم می شود که به صورت یک شمارنده ساده عمل کند و هر بار با خواندن مقدار شمارنده این تایمر، زمان سپری شده را سنجش کرد. در صورت استفاده از SoC های دارای FPGA می توان این شمارنده را به صورت خیلی ساده در بخش FPGA آن پیاده سازی کرد. در این روش هیچ سربار نرم افزاری برای تولید تیک وجود نخواهد داشت و دقت آن نیز به هیچ وجه از دست نخواهد رفت.

نقاط قوت :

  • عدم سرباز پردازشی برای پردازشگر
  • دقت بالا در اندازه گیری زمان

نقاط ضعف :

  • نیاز به یک تایمر سخت افزاری

جمع بندی

با توجه به اهمیت زمان بندی در نرم افزار نهفته، ابزاری جهت اندازه گیری زمان جزو اولین و مهمترین نیازهای یک برنامه نویس نهفته است. این ابزار هم در بعد کنترلی (مانند تاخیر) کاربرد دارد و هم در بعد نظارتی (مانند اندازه گیری فرکانس اجرای بخشی از کد یا زمان مصرف شده برای اجرای بخشی از کد)

بدین منظور روش های مختلف نرم افزاری و سخت افزاری و ترکیبی از این دو وجود دارد که هر کدام نقاط قوت و ضعفی دارند. در میان روش های ذکر شده، کاملترین و دقیقترین روش برای اندازه گیری زمان، تیک سخت افزاری است. این روش به قدری بهینه و مرسوم است که حتی برخی از سازندگان پردازشگرها، تایمر ساده ای بدون هیچ قابلت جانبی در میکروکنترلر تعبیه می کنند که تنها عمل شمارش را انجام می دهد و در مستندات تایمر مربوطه هم ذکر شده که کاربرد این تایمر، اندازه گیری زمان توسط کد کاربر است.

ماژول کرونو

ماژول کرونو، یک کتابخانه جامع است که بر اساس روش تیک توسعه داده شده است. این ماژول به تیک کاربر متصل شده و تمام اندازه گیری ذکر شده را انجام می دهد. از آنجایی که این ماژول به تیک کاربر متصل می شود، قابل استفاده هم به صورت تیک سخت افزاری و هم به صورت تیک نرم افزاری است. کاربر می تواند با نوشتن توابع و ماکروهایی با استفاده از API های این ماژول، ابزارهای پیشرفته تری در حوزه زمان بندی و اندازه گیری زمان برای خود ایجاد کند.

مطالب مرتبط

ماژول کرونو

blog

نوشته بلاگ نمونه ۴

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

 از آنجایی که طراحان عموما نویسنده متن نیستند و وظیفه رعایت حق تکثیر متون را ندارند و در همان حال کار آنها به نوعی وابسته به متن می‌باشد آنها با استفاده از محتویات ساختگی، صفحه گرافیکی خود را صفحه‌آرایی می‌کنند تا مرحله طراحی و صفحه‌بندی را به پایان برند.

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

طراح گرافیک از این متن به عنوان عنصری از ترکیب بندی برای پر کردن صفحه و ارایه اولیه شکل ظاهری و کلی طرح سفارش گرفته شده استفاده می نماید، تا از نظر گرافیکی نشانگر چگونگی نوع و اندازه فونت و ظاهر متن باشد. معمولا طراحان گرافیک برای صفحه‌آرایی، نخست از متن‌های آزمایشی و بی‌معنی استفاده می‌کنند تا صرفا به مشتری یا صاحب کار خود نشان دهند که صفحه طراحی یا صفحه بندی شده بعد از اینکه متن در آن قرار گیرد چگونه به نظر می‌رسد و قلم‌ها و اندازه‌بندی‌ها چگونه در نظر گرفته شده‌است. از آنجایی که طراحان عموما نویسنده متن نیستند و وظیفه رعایت حق تکثیر متون را ندارند و در همان حال کار آنها به نوعی وابسته به متن می‌باشد آنها با استفاده از محتویات ساختگی، صفحه گرافیکی خود را صفحه‌آرایی می‌کنند تا مرحله طراحی و صفحه‌بندی را به پایان برند.

blog

نوشته بلاگ نمونه ۳

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

 از آنجایی که طراحان عموما نویسنده متن نیستند و وظیفه رعایت حق تکثیر متون را ندارند و در همان حال کار آنها به نوعی وابسته به متن می‌باشد آنها با استفاده از محتویات ساختگی، صفحه گرافیکی خود را صفحه‌آرایی می‌کنند تا مرحله طراحی و صفحه‌بندی را به پایان برند.

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

طراح گرافیک از این متن به عنوان عنصری از ترکیب بندی برای پر کردن صفحه و ارایه اولیه شکل ظاهری و کلی طرح سفارش گرفته شده استفاده می نماید، تا از نظر گرافیکی نشانگر چگونگی نوع و اندازه فونت و ظاهر متن باشد. معمولا طراحان گرافیک برای صفحه‌آرایی، نخست از متن‌های آزمایشی و بی‌معنی استفاده می‌کنند تا صرفا به مشتری یا صاحب کار خود نشان دهند که صفحه طراحی یا صفحه بندی شده بعد از اینکه متن در آن قرار گیرد چگونه به نظر می‌رسد و قلم‌ها و اندازه‌بندی‌ها چگونه در نظر گرفته شده‌است. از آنجایی که طراحان عموما نویسنده متن نیستند و وظیفه رعایت حق تکثیر متون را ندارند و در همان حال کار آنها به نوعی وابسته به متن می‌باشد آنها با استفاده از محتویات ساختگی، صفحه گرافیکی خود را صفحه‌آرایی می‌کنند تا مرحله طراحی و صفحه‌بندی را به پایان برند.