ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
313787 Топик полностью
MegaJohn (11.03.2012 10:43 - 11:06, просмотров: 179) ответил MegaJohn на вот так вот[+]
это я заболел нонче, и хочется все RTOS подвести под один знаменатель. Пока удалось совместить TN-kernel и Win-thread. Для AVR и других слабых архитектур с отсутвием команд блочного чтения-записи ( на стековые операции ) вот на примере protohtreads и вывел свою вариацию. На данный момент в моей nanoOS! раздражает RTOS_OP_FIRST, RTOS_OP, RTOS_OP_LAST. В protothreads разражает отличительные особенности синтаксиса от вытесняющих РТОС. Но вернусь к обобщению операционок. Вот так пока получилось[+] #ifndef RTOS_CMN_H #define RTOS_CMN_H #include "globals.h" #ifdef __nOS__ #define RTOS_INCLUDE <rtos\nOS\scheduler.h> #define RTOS_TASK Cnos_task #define RTOS_OP_FIRST default: #define RTOS_OP_LAST case __LINE__: task_set_state( 0 ); return; #define RTOS_OP case __LINE__: #define RTOS_SLEEP(time) sleep( time / SYSTICK_MS ); task_set_state( __LINE__ + 2 ); return #define RTOS_TASK_CREATE(name,func,priority,stack_head,stack_size,param,attr) task_add(&name,func,param) #define RTOS_TASK_LOOP switch( task_get_state() ) #endif #ifdef TNKERNEL #define RTOS_INCLUDE <rtos/TN_Kernel/tn.h> #define RTOS_TASK TN_TCB #define RTOS_SLEEP(time) tn_task_sleep(time) #define RTOS_TASK_CREATE(name,func,priority,stack_head,stack_size,param,attr) tn_task_create(&name,func,priority,stack_head,stack_size,param,attr) #define RTOS_TASK_RETPARAM void #define RTOS_TASK_RETVAL return #define RTOS_TASK_DELETE(name) tn_task_delete(&name) #define RTOS_TASK_EN #define RTOS_TASK_LOOP while( true ) #define RTOS_TASK_EN_VAR #define RTOS_MUTEX TN_MUTEX #define RTOS_MUTEX_IS_TOUT bla #define RTOS_MUTEX_IS_OK bla #define RTOS_MUTEX_CREATE_OK(name,retval) (retval == TERR_NO_ERR) #define RTOS_MUTEX_CREATE(name,result) result=tn_mutex_create(&name,TN_MUTEX_ATTR_INHERIT,NULL) #define RTOS_MUTEX_LOCK(name,tout) tn_mutex_lock(&name,tout) #define RTOS_MUTEX_LOCK_INFINITE(name) tn_mutex_lock(&name,TN_WAIT_INFINITE) #define RTOS_MUTEX_UNLOCK(name) tn_mutex_unlock(&name) #define RTOS_MUTEX_DELETE(name) tn_mutex_delete(&name) #endif #ifdef __IBMPC__ // beginthreadex & endthreadex examples: http://msdn.micros …/library/kdzttdcb.aspx #define RTOS_INCLUDE <process.h> #define RTOS_TASK HANDLE #define RTOS_SLEEP(time) Sleep(time) #define RTOS_TASK_CREATE(name,func,priority,stack_head,stack_size,param,attr) name=(HANDLE)_beginthreadex(0,stack_size,func,param,0,NULL) #define RTOS_TASK_RETPARAM unsigned __stdcall #define RTOS_TASK_RETVAL {_endthreadex(0); return 0;} #define RTOS_TASK_DELETE(name) terminate = true; WaitForSingleObject(name,1000); CloseHandle(name); #define RTOS_TASK_EN terminate = false #define RTOS_TASK_LOOP while( !terminate ) #define RTOS_TASK_EN_VAR bool terminate; #define RTOS_MUTEX HANDLE #define RTOS_MUTEX_IS_TOUT WAIT_TIMEOUT #define RTOS_MUTEX_IS_OK WAIT_OBJECT_0 #define RTOS_MUTEX_CREATE_OK(name,retval) (name != 0) #define RTOS_MUTEX_CREATE(name,result) name=CreateMutex(NULL,false,NULL) #define RTOS_MUTEX_LOCK(name,tout) WaitForSingleObject(name,tout) #define RTOS_MUTEX_LOCK_INFINITE(name) WaitForSingleObject(name,INFINITE) #define RTOS_MUTEX_UNLOCK(name) ReleaseMutex(name) #define RTOS_MUTEX_DELETE(name) CloseHandle(name) #endif #endif