65 #ifndef NOSCFG_FEATURE_REGISTRY
66 #define NOSCFG_FEATURE_REGISTRY 0
69 #if POSCFG_TASKSTACKTYPE==0
70 #define NOS_NEEDTASKEXITHOOK
72 #if NOSCFG_FEATURE_REGISTRY!=0
73 #define NOS_NEEDTASKEXITHOOK
77 #ifdef NOS_NEEDTASKEXITHOOK
80 #ifdef POSCFG_TASKEXIT_HOOK
81 #undef POSCFG_TASKEXIT_HOOK
83 #define POSCFG_TASKEXIT_HOOK 1
86 #define NOS_TASKDATA void *nosstkroot;
101 #ifndef NOSCFG_FEATURE_MEMALLOC
102 #error NOSCFG_FEATURE_MEMALLOC not defined
104 #ifndef NOSCFG_FEATURE_CONIN
105 #error NOSCFG_FEATURE_CONIN not defined
107 #ifndef NOSCFG_FEATURE_CONOUT
108 #error NOSCFG_FEATURE_CONOUT not defined
110 #ifndef NOSCFG_CONOUT_HANDSHAKE
111 #error NOSCFG_CONOUT_HANDSHAKE not defined
113 #ifndef NOSCFG_CONOUT_FIFOSIZE
114 #error NOSCFG_CONOUT_FIFOSIZE not defined
116 #ifndef NOSCFG_FEATURE_PRINTF
117 #error NOSCFG_FEATURE_PRINTF not defined
119 #ifndef NOSCFG_FEATURE_SPRINTF
120 #error NOSCFG_FEATURE_SPRINTF not defined
122 #ifndef NOSCFG_FEATURE_TASKCREATE
123 #error NOSCFG_FEATURE_TASKCREATE not defined
125 #ifndef NOSCFG_DEFAULT_STACKSIZE
126 #error NOSCFG_DEFAULT_STACKSIZE not defined in the port configuration file
128 #ifndef NOSCFG_STACK_GROWS_UP
129 #error NOSCFG_STACK_GROWS_UP not defined in the port configuration file
131 #ifndef NOSCFG_MEM_MANAGE_MODE
132 #error NOSCFG_MEM_MANAGE_MODE not defined
134 #ifndef NOSCFG_FEATURE_MEMSET
135 #error NOSCFG_FEATURE_MEMSET not defined
137 #ifndef NOSCFG_FEATURE_MEMCOPY
138 #error NOSCFG_FEATURE_MEMCOPY not defined
140 #ifndef NOSCFG_STKMEM_RESERVE
141 #error NOSCFG_STKMEM_RESERVE not defined
143 #if NOSCFG_MEM_MANAGER_TYPE == 2
144 #ifndef NOSCFG_MEM_USER_MALLOC
145 #error NOSCFG_MEM_USER_MALLOC not defined
147 #ifndef NOSCFG_MEM_USER_FREE
148 #error NOSCFG_MEM_USER_FREE not defined
151 #ifndef NOSCFG_FEATURE_BOTTOMHALF
152 #error NOSCFG_FEATURE_BOTTOMHALF not defined
154 #if NOSCFG_FEATURE_BOTTOMHALF != 0
155 #ifndef NOS_MAX_BOTTOMHALFS
156 #error NOS_MAX_BOTTOMHALFS not defined
158 #if (NOS_MAX_BOTTOMHALFS == 0) || (NOS_MAX_BOTTOMHALFS > MVAR_BITS)
159 #error NOS_MAX_BOTTOMHALFS must be in the range 1 .. MVAR_BITS
162 #ifndef NOSCFG_FEATURE_CPUUSAGE
163 #error NOSCFG_FEATURE_CPUUSAGE not defined
166 #if NOSCFG_FEATURE_REGISTRY
167 #ifndef NOSCFG_FEATURE_REGQUERY
168 #error NOSCFG_FEATURE_REGQUERY
170 #ifndef NOSCFG_FEATURE_USERREG
171 #error NOSCFG_FEATURE_USERREG
173 #ifndef NOS_MAX_REGKEYLEN
174 #error NOS_MAX_REGKEYLEN
176 #if NOS_MAX_REGKEYLEN < 4
177 #error NOS_MAX_REGKEYLEN must be at least 4
179 #ifndef NOS_REGKEY_PREALLOC
180 #error NOS_REGKEY_PREALLOC
183 #ifdef NOSCFG_FEATURE_USERREG
184 #undef NOSCFG_FEATURE_USERREG
186 #define NOSCFG_FEATURE_USERREG 0
187 #ifdef NOSCFG_FEATURE_REGQUERY
188 #undef NOSCFG_FEATURE_REGQUERY
190 #define NOSCFG_FEATURE_REGQUERY 0
193 #ifndef NOSCFG_FEATURE_SEMAPHORES
194 #define NOSCFG_FEATURE_SEMAPHORES 0
197 #if NOSCFG_FEATURE_SEMAPHORES != 0 && POSCFG_FEATURE_SEMAPHORES == 0
198 #error NOSCFG_FEATURE_SEMAPHORES enabled, but pico]OS semaphores disabled
201 #ifndef NOSCFG_FEATURE_MUTEXES
202 #define NOSCFG_FEATURE_MUTEXES 0
204 #if NOSCFG_FEATURE_MUTEXES != 0 && POSCFG_FEATURE_MUTEXES == 0
205 #error NOSCFG_FEATURE_MUTEXES enabled, but pico]OS mutexes disabled
208 #ifndef NOSCFG_FEATURE_MSGBOXES
209 #define NOSCFG_FEATURE_MSGBOXES 0
211 #if NOSCFG_FEATURE_MSGBOXES != 0 && POSCFG_FEATURE_MSGBOXES == 0
212 #error NOSCFG_FEATURE_MSGBOXES enabled, but pico]OS message boxes disabled
215 #ifndef NOSCFG_FEATURE_FLAGS
216 #define NOSCFG_FEATURE_FLAGS 0
218 #if NOSCFG_FEATURE_FLAGS != 0 && POSCFG_FEATURE_FLAGS == 0
219 #error NOSCFG_FEATURE_FLAGS enabled, but pico]OS flag functions disabled
222 #ifndef NOSCFG_FEATURE_TIMER
223 #define NOSCFG_FEATURE_TIMER 0
225 #if NOSCFG_FEATURE_TIMER != 0 && POSCFG_FEATURE_TIMER == 0
226 #error NOSCFG_FEATURE_TIMER enabled, but pico]OS timer functions disabled
229 #ifndef NOSCFG_MEM_OVWR_STANDARD
230 #define NOSCFG_MEM_OVWR_STANDARD 1
232 #ifndef NOSCFG_FEATURE_REALLOC
233 #define NOSCFG_FEATURE_REALLOC 0
242 #if DOX!=0 || NOSCFG_FEATURE_BOTTOMHALF != 0
274 #define NANOEXT extern
277 #if DOX!=0 || NOSCFG_FEATURE_MEMALLOC != 0
305 #if DOX!=0 || NOSCFG_FEATURE_REALLOC != 0
327 #if NOSCFG_MEM_OVWR_STANDARD != 0
337 #define malloc nosMemAlloc
338 #define calloc (not_supported)
339 #define free nosMemFree
343 #if NOSCFG_MEM_MANAGER_TYPE == 0
344 #define NOS_MEM_ALLOC(x) malloc((size_t)(x))
345 #define NOS_MEM_FREE(x) free(x)
346 #elif NOSCFG_MEM_MANAGER_TYPE == 1
347 void* nos_malloc(
UINT_t size);
348 void nos_free(
void *mp);
349 #define NOS_MEM_ALLOC(x) nos_malloc(x)
350 #define NOS_MEM_FREE(x) nos_free(x)
351 #elif NOSCFG_MEM_MANAGER_TYPE == 2
352 #define NOS_MEM_ALLOC(x) NOSCFG_MEM_USER_MALLOC(x)
353 #define NOS_MEM_FREE(x) NOSCFG_MEM_USER_FREE(x)
359 #if DOX!=0 || NOSCFG_FEATURE_MEMSET != 0
374 #if NOSCFG_MEM_OVWR_STANDARD != 0
378 #define memset nosMemSet
383 #if DOX!=0 || NOSCFG_FEATURE_MEMCOPY != 0
398 #if NOSCFG_MEM_OVWR_STANDARD != 0
402 #define memcpy nosMemCopy
438 #define NANOEXT extern
441 #if DOX!=0 || NOSCFG_FEATURE_CONIN != 0
481 #if DOX!=0 || NOSCFG_FEATURE_CONOUT != 0
507 #if DOX!=0 || NOSCFG_CONOUT_HANDSHAKE != 0
533 #if DOX!=0 || NOSCFG_FEATURE_CONOUT != 0
554 NANOEXT
void POSCALL
nosPrint(
const char *s);
558 #if NOSCFG_FEATURE_CONOUT == 0
559 #if NOSCFG_FEATURE_PRINTF != 0
560 #undef NOSCFG_FEATURE_PRINTF
561 #define NOSCFG_FEATURE_PRINTF 0
565 #if NOSCFG_FEATURE_PRINTF != 0 || NOSCFG_FEATURE_SPRINTF != 0
566 typedef void* NOSARG_t;
570 #if DOX!=0 || ((NOSCFG_FEATURE_CONOUT != 0)&&(NOSCFG_FEATURE_PRINTF != 0))
572 NANOEXT
void POSCALL n_printFormattedN(
const char *fmt, NOSARG_t args);
590 NANOEXT
void POSCALL
nosPrintf1(
const char *fmt, arg a1);
593 #define nosPrintf1(fmt, a1) \
595 NOSARG_t args[1]; args[0] = (NOSARG_t)(a1); \
596 n_printFormattedN(fmt, args); \
599 #define nosPrintf2(fmt, a1, a2) \
601 NOSARG_t args[2]; args[0] = (NOSARG_t)(a1); \
602 args[1] = (NOSARG_t)(a2); \
603 n_printFormattedN(fmt, args); \
606 #define nosPrintf3(fmt, a1, a2, a3) \
608 NOSARG_t args[3]; args[0] = (NOSARG_t)(a1); \
609 args[1] = (NOSARG_t)(a2); args[2] = (NOSARG_t)(a3); \
610 n_printFormattedN(fmt, args); \
613 #define nosPrintf4(fmt, a1, a2, a3, a4) \
616 args[0] = (NOSARG_t)(a1); args[1] = (NOSARG_t)(a2); \
617 args[2] = (NOSARG_t)(a3); args[3] = (NOSARG_t)(a4); \
618 n_printFormattedN(fmt, args); \
621 #define nosPrintf5(fmt, a1, a2, a3, a4, a5) \
623 NOSARG_t args[5]; args[0] = (NOSARG_t)(a1); \
624 args[1] = (NOSARG_t)(a2); args[2] = (NOSARG_t)(a3); \
625 args[3] = (NOSARG_t)(a4); args[4] = (NOSARG_t)(a5); \
626 n_printFormattedN(fmt, args); \
629 #define nosPrintf6(fmt, a1, a2, a3, a4, a5, a6) \
632 args[0] = (NOSARG_t)(a1); args[1] = (NOSARG_t)(a2); \
633 args[2] = (NOSARG_t)(a3); args[3] = (NOSARG_t)(a4); \
634 args[4] = (NOSARG_t)(a5); args[5] = (NOSARG_t)(a6); \
635 n_printFormattedN(fmt, args); \
642 #if DOX!=0 || NOSCFG_FEATURE_SPRINTF != 0
659 NANOEXT
void POSCALL
nosSPrintf1(
char *buf,
const char *fmt, arg a1);
663 NANOEXT
void POSCALL n_sprintFormattedN(
char *buf,
const char *fmt,
666 #define nosSPrintf1(buf, fmt, a1) \
668 NOSARG_t args[1]; args[0] = (NOSARG_t)(a1); \
669 n_sprintFormattedN(buf, fmt, args); \
672 #define nosSPrintf2(buf, fmt, a1, a2) \
674 NOSARG_t args[2]; args[0] = (NOSARG_t)(a1); \
675 args[1] = (NOSARG_t)(a2); \
676 n_sprintFormattedN(buf, fmt, args); \
679 #define nosSPrintf3(buf, fmt, a1, a2, a3) \
681 NOSARG_t args[3]; args[0] = (NOSARG_t)(a1); \
682 args[1] = (NOSARG_t)(a2); args[2] = (NOSARG_t)(a3); \
683 n_sprintFormattedN(buf, fmt, args); \
686 #define nosSPrintf4(buf, fmt, a1, a2, a3, a4) \
689 args[0] = (NOSARG_t)(a1); args[1] = (NOSARG_t)(a2); \
690 args[2] = (NOSARG_t)(a3); args[3] = (NOSARG_t)(a4); \
691 n_sprintFormattedN(buf, fmt, args); \
694 #define nosSPrintf5(buf, fmt, a1, a2, a3, a4, a5) \
696 NOSARG_t args[5]; args[0] = (NOSARG_t)(a1); \
697 args[1] = (NOSARG_t)(a2); args[2] = (NOSARG_t)(a3); \
698 args[3] = (NOSARG_t)(a4); args[4] = (NOSARG_t)(a5); \
699 n_sprintFormattedN(buf, fmt, args); \
702 #define nosSPrintf6(buf, fmt, a1, a2, a3, a4, a5, a6) \
705 args[0] = (NOSARG_t)(a1); args[1] = (NOSARG_t)(a2); \
706 args[2] = (NOSARG_t)(a3); args[3] = (NOSARG_t)(a4); \
707 args[4] = (NOSARG_t)(a5); args[5] = (NOSARG_t)(a6); \
708 n_sprintFormattedN(buf, fmt, args); \
743 #define NANOEXT extern
746 #if DOX!=0 || NOSCFG_FEATURE_BOTTOMHALF != 0
778 #define nosBottomHalfUnregister(number) \
779 nosBottomHalfRegister(number, NULL, NULL)
828 #define NANOEXT extern
831 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
850 #if DOX!=0 || NOSCFG_FEATURE_SEMAPHORES != 0
853 #if DOX!=0 || NOSCFG_FEATURE_MUTEXES != 0
856 #if DOX!=0 || NOSCFG_FEATURE_FLAGS != 0
859 #if DOX!=0 || NOSCFG_FEATURE_TIMER != 0
862 #if DOX!=0 || NOSCFG_FEATURE_USERREG != 0
868 #define MIN_REGTYPE REGTYPE_TASK
869 #define MAX_REGTYPE (REGTYPE_SEARCHALL-1)
911 char *buffer,
VAR_t bufsize,
914 #if DOX!=0 || NOSCFG_FEATURE_USERREG != 0
932 NANOEXT
VAR_t POSCALL
nosRegSet(
const char *keyname, KEYVALUE_t keyvalue);
947 NANOEXT
VAR_t POSCALL
nosRegGet(
const char *keyname, KEYVALUE_t *keyvalue);
960 #if DOX!=0 || NOSCFG_FEATURE_REGQUERY != 0
1004 char* namebuf,
VAR_t bufsize);
1029 #if (DOX!=0) || (NOSCFG_FEATURE_CPUUSAGE != 0)
1057 #define NANOEXT extern
1080 #if (DOX!=0) || (NOSCFG_FEATURE_TASKCREATE != 0)
1111 #if (DOX!=0) || (POSCFG_FEATURE_YIELD != 0)
1125 #define nosTaskYield() posTaskYield()
1129 #if (DOX!=0) || (POSCFG_FEATURE_SLEEP != 0)
1149 #define nosTaskSleep(ticks) posTaskSleep(ticks)
1153 #if (DOX!=0) || (POSCFG_FEATURE_EXIT != 0)
1166 #define nosTaskExit() posTaskExit()
1170 #if (DOX!=0) || (POSCFG_FEATURE_GETTASK != 0)
1184 #define nosTaskGetCurrent() (NOSTASK_t)posTaskGetCurrent()
1188 #if (DOX!=0) || (POSCFG_FEATURE_TASKUNUSED != 0)
1207 #define nosTaskUnused(th) posTaskUnused((POSTASK_t)(th))
1211 #if (DOX!=0) || (POSCFG_FEATURE_SETPRIORITY != 0)
1231 #define nosTaskSetPriority(th, prio) posTaskSetPriority((POSTASK_t)(th),prio)
1235 #if (DOX!=0) || (POSCFG_FEATURE_GETPRIORITY != 0)
1250 #define nosTaskGetPriority(th) posTaskGetPriority((POSTASK_t)(th))
1254 #if (DOX!=0) || (POSCFG_FEATURE_INHIBITSCHED != 0)
1271 #define nosTaskSchedLock() posTaskSchedLock()
1288 #define nosTaskSchedUnlock() posTaskSchedUnlock()
1292 #if (DOX!=0) || (POSCFG_TASKCB_USERSPACE > 0)
1306 #define nosTaskGetUserspace() posTaskGetUserspace()
1310 #if (DOX!=0) || (POSCFG_FEATURE_IDLETASKHOOK != 0)
1336 #define nosInstallIdleTaskHook(ifunc) posInstallIdleTaskHook(ifunc)
1349 #if DOX!=0 || NOSCFG_FEATURE_SEMAPHORES != 0
1378 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
1382 #define nosSemaCreate(i, o, n) (NOSSEMA_t) posSemaCreate(i);
1385 #if DOX!=0 || POSCFG_FEATURE_SEMADESTROY != 0
1398 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
1401 #define nosSemaDestroy(sema) posSemaDestroy((POSSEMA_t)(sema))
1421 #define nosSemaSignal(sem) posSemaSignal((POSSEMA_t)(sem))
1441 #define nosSemaGet(sem) posSemaGet((POSSEMA_t)(sem))
1469 #if POSCFG_FEATURE_SEMAWAIT
1470 #define nosSemaWait(sem, to) posSemaWait((POSSEMA_t)(sem), to)
1483 #if DOX!=0 || NOSCFG_FEATURE_MUTEXES != 0
1509 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
1512 #define nosMutexCreate(opt, name) (NOSMUTEX_t) posMutexCreate()
1515 #if DOX!=0 || POSCFG_FEATURE_MUTEXDESTROY != 0
1528 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
1531 #define nosMutexDestroy(mutex) posMutexDestroy((POSMUTEX_t)(mutex))
1535 #if DOX!=0 || POSCFG_FEATURE_MUTEXTRYLOCK != 0
1556 #define nosMutexTryLock(mutex) posMutexTryLock((POSMUTEX_t)(mutex))
1577 #define nosMutexLock(mutex) posMutexLock((POSMUTEX_t)(mutex))
1595 #define nosMutexUnlock(mutex) posMutexUnlock((POSMUTEX_t)(mutex))
1609 #if DOX!=0 || NOSCFG_FEATURE_MSGBOXES != 0
1676 #define nosMessageGet() posMessageGet()
1679 #if DOX!=0 || POSCFG_FEATURE_MSGWAIT != 0
1707 #define nosMessageWait(to) posMessageWait(to)
1728 #define nosMessageAvailable() posMessageAvailable()
1741 #if DOX!=0 || NOSCFG_FEATURE_FLAGS != 0
1770 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
1773 #define nosFlagCreate(name) (NOSFLAG_t) posFlagCreate()
1776 #if DOX!=0 || POSCFG_FEATURE_FLAGDESTROY != 0
1789 #if (DOX!=0) || (NOSCFG_FEATURE_REGISTRY != 0)
1792 #define nosFlagDestroy(flg) posFlagDestroy((POSFLAG_t)(flg))
1813 #define nosFlagSet(flg, num) posFlagSet((POSFLAG_t)(flg), num)
1835 #define nosFlagGet(flg, mode) posFlagGet((POSFLAG_t)(flg), mode)
1838 #if DOX!=0 || POSCFG_FEATURE_FLAGWAIT != 0
1863 #define nosFlagWait(flg, to) posFlagWait((POSFLAG_t)(flg), to)
1867 #define NOSFLAG_MODE_GETSINGLE POSFLAG_MODE_GETSINGLE
1868 #define NOSFLAG_MODE_GETMASK POSFLAG_MODE_GETMASK
1884 #if DOX!=0 || NOSCFG_FEATURE_TIMER != 0
1911 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
1914 #define nosTimerCreate(name) (NOSTIMER_t) posTimerCreate()
1940 #define nosTimerSet(t, s, w, p) \
1941 posTimerSet((POSTIMER_t)(t), (POSSEMA_t)(s), w, p)
1960 #define nosTimerStart(tmr) posTimerStart((POSTIMER_t)(tmr))
1978 #define nosTimerStop(tmr) posTimerStop((POSTIMER_t)(tmr))
1981 #if DOX!=0 || POSCFG_FEATURE_TIMERDESTROY != 0
1994 #if DOX!=0 || NOSCFG_FEATURE_REGISTRY != 0
1997 #define nosTimerDestroy(tmr) posTimerDestroy((POSTIMER_t)(tmr))
2001 #if DOX!=0 || POSCFG_FEATURE_TIMERFIRED != 0
2019 #define nosTimerFired(tmr) posTimerFired((POSTIMER_t)(tmr))
2043 #define NANOEXT extern
2067 void *funcarg,
VAR_t priority,
2072 #define posInit _Please_use_nosInit_instead_of_posInit_