پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M
.....
با یک سری ملاحظات میشه این کد رو برای سیستم شبیه سازی کننده بازنویسی کرد. البته نه همش رو. بلکه روال های سطح پایه رو.
مثلا:
تابع os_sem_init رو در نظر بگیرین. یک مثال از شرکت ARM:
#include <rtl.h>
OS_SEM semaphore1;
void task1 (void) __task {
.
.
os_sem_init (semaphore1, 0);
os_sem_send (semaphore1);
.
.
}
اولا در هدر مربوطه OS_SEM باید معادل با HANDLE تعریف بشه.
os_sem_init میتونه یک تابع باشه. اما چون نام سمافور به عنوان پارامتر پاس شده OS_SEM رو باید بفرم HANDLE[1] تعریف کرد. بعد میشه روال های مربوطه رو اینجوری نوشت (در سورس جایگزین rtx):
void os_sem_init (
OS_ID semaphore, /* The semaphore object to initialize */
U16 token_count ) /* Initial number of tokens */
{
if(semaphore)
*semaphore = CreateSemaphore(NULL, token_count, 65535L, NULL);
}
OS_RESULT os_sem_send(OS_ID semaphore)
{
if( semaphore )
ReleaseSemaphore( *semaphore, ...);
return OS_R_OK;
}
OS_RESULT os_sem_wait(OS_ID semaphore, U16 timeout)
{
if(!semaphore) return OS_R_OK;
if(WaitForSingleObject(*semaphore, (timeout == 0xFFFFU) ? INFINITE : timeout))==WAIT_OBJECT_0)
return OS_R_OK;
return OS_R_TMO;
}
بنظر میاد مجبور باشیم اغلب سورس های RTX رو دوباره بازنویسی کنیم. ولی خیلی از سورس ها احتیاجی به بازنویسی ندارن.
....
.....
با یک سری ملاحظات میشه این کد رو برای سیستم شبیه سازی کننده بازنویسی کرد. البته نه همش رو. بلکه روال های سطح پایه رو.
مثلا:
تابع os_sem_init رو در نظر بگیرین. یک مثال از شرکت ARM:
#include <rtl.h>
OS_SEM semaphore1;
void task1 (void) __task {
.
.
os_sem_init (semaphore1, 0);
os_sem_send (semaphore1);
.
.
}
اولا در هدر مربوطه OS_SEM باید معادل با HANDLE تعریف بشه.
os_sem_init میتونه یک تابع باشه. اما چون نام سمافور به عنوان پارامتر پاس شده OS_SEM رو باید بفرم HANDLE[1] تعریف کرد. بعد میشه روال های مربوطه رو اینجوری نوشت (در سورس جایگزین rtx):
void os_sem_init (
OS_ID semaphore, /* The semaphore object to initialize */
U16 token_count ) /* Initial number of tokens */
{
if(semaphore)
*semaphore = CreateSemaphore(NULL, token_count, 65535L, NULL);
}
OS_RESULT os_sem_send(OS_ID semaphore)
{
if( semaphore )
ReleaseSemaphore( *semaphore, ...);
return OS_R_OK;
}
OS_RESULT os_sem_wait(OS_ID semaphore, U16 timeout)
{
if(!semaphore) return OS_R_OK;
if(WaitForSingleObject(*semaphore, (timeout == 0xFFFFU) ? INFINITE : timeout))==WAIT_OBJECT_0)
return OS_R_OK;
return OS_R_TMO;
}
بنظر میاد مجبور باشیم اغلب سورس های RTX رو دوباره بازنویسی کنیم. ولی خیلی از سورس ها احتیاجی به بازنویسی ندارن.
....
دیدگاه