это я заболел нонче, и хочется все 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