27 #ifndef __VERSIONCONFIG__
28 #define __VERSIONCONFIG__
30 #define ccNOos_MajorVer 0
31 #define ccNOos_MinorVer 0
32 #define ccNOos_BuildNumber 0
34 #define ccNOos_DevString dev
35 #define ccNOos_VerDate 08JAN2021
41 #define CTASTR2(pre,post) pre ## post
42 #define CTASTR(pre,post) CTASTR2(pre,post)
43 #define STATIC_ASSERT(cond,msg) \
44 typedef struct { int CTASTR(static_assertion_failed_,msg) : !!(cond); } \
45 CTASTR(static_assertion_failed_,__COUNTER__)
50 #define xstr(s) str(s)
56 #ifdef ccNOos_ReleaseBuild
57 #define ccNOos_VersionNumber ccNOos_MajorVer.ccNOos_MinorVer.ccNOos_BuildNumber
59 #ifndef ccNOos_ReleaseBuild
60 #define ccNOos_VersionNumber ccNOos_MajorVer.ccNOos_MinorVer.ccNOos_BuildNumber-ccNOos_DevString
66 #define ccNOosVersionsTemplate \
67 const char* ccNOosccNOos_VerString()\
69 return xstr(ccNOos_VersionNumber);\
71 const char* ccNOosccNOos_VerDateString()\
73 return xstr(ccNOos_VerDate);\
78 #define charBuffMax 128
87 #define RETURN_SUCCESS (0)
92 #define RETURN_ERROR (-1)
97 #define PLATFORM_NAME PSoC4
98 #define MAIN_C_NOos_Wsystick
101 #ifdef PLATFORM_QTCreatorC
102 #define PLATFORM_NAME QTCreatorC
103 #define MAIN_C_NOos_NOsystick
106 #ifdef PLATFORM_WIN32
107 #define PLATFORM_NAME Win32
108 #define MAIN_CPP_NOos_NOsystick
111 #ifdef PLATFORM_ARDUINO
112 #define PLATFORM_NAME Arduino
113 #define MAIN_CPP_NOos_NOsystick_Arduino
117 #define PLATFORM_NAME ccOS
120 #ifdef PLATFORM_CUSTOM
121 #define PLATFORM_NAME Custom
122 #define PLATFORM_MAIN_CUSTOM
124 #ifndef PLATFORM_NAME
125 #error PLATFORM_NAME must be defined, see examples
131 #ifdef INTSIZE_STD // only used if compiling for ccOS layer
133 typedef uint8_t UI_8;
134 typedef uint16_t UI_16;
135 typedef uint32_t UI_32;
136 typedef uint64_t UI_64;
138 typedef int16_t I_16;
139 typedef int32_t I_32;
140 typedef int64_t I_64;
141 #define INTSIZE_FIXED
142 #define __USINGCONSOLEMENU
143 #define __USINGFLOATPRINTF
146 typedef unsigned int UI_8;
147 typedef unsigned long UI_16;
148 typedef unsigned long long UI_32;
150 #define INTSIZE_FIXED
153 typedef unsigned char UI_8;
154 typedef unsigned int UI_16;
155 typedef unsigned long UI_32;
156 typedef unsigned long long UI_64;
160 typedef long long I_64;
161 #define INTSIZE_FIXED
164 typedef unsigned char UI_8;
165 typedef unsigned short UI_16;
166 typedef unsigned int UI_32;
167 typedef unsigned long UI_64;
172 #define INTSIZE_FIXED
174 #ifndef INTSIZE_FIXED
175 #error INTSIZEx must be defined as INTSIZE8, INTSIZE16, or INTSIZE32 bits in type
190 #define ui8FALSE (0u)
195 #ifdef REDEFINE_NULLPTR
196 #warning redefining nullptr !!!
206 #ifdef MAIN_C_NOos_Wsystick
207 #define PLATFORM_MAIN
209 #ifdef MAIN_CPP_NOos_NOsystick
210 #define PLATFORM_MAIN
212 #ifdef MAIN_CPP_NOos_NOsystick_Arduino
213 #define PLATFORM_MAIN
215 #ifdef MAIN_C_NOos_NOsystick
216 #define PLATFORM_MAIN
219 #define PLATFORM_MAIN
221 #ifdef PLATFORM_MAIN_CUSTOM
222 #define PLATFORM_MAIN
224 #ifndef PLATFORM_MAIN
225 #error PLATFORM_MAIN must be defined, see examples
235 #define __MODstructTYPEname(mNAME) mNAME##Struct
236 #define MODstructTYPEname(mNAME) __MODstructTYPEname(mNAME)
239 #define __MODdataINST(mNAME) mNAME##Data
240 #define MODdataINST(mNAME) __MODdataINST(mNAME)
243 #define __MODdataPTR(mNAME) mNAME##DataPtrIn
244 #define MODdataPTR(mNAME) __MODdataPTR(mNAME)
247 #define __MODsetup(mNAME) setup_##mNAME
248 #define MODsetup(mNAME) __MODsetup(mNAME)
251 #define __MODloop(mNAME) loop_##mNAME
252 #define MODloop(mNAME) __MODloop(mNAME)
255 #define __MODsystick(mNAME) systick_##mNAME
256 #define MODsystick(mNAME) __MODsystick(mNAME)
259 #define __MODprintMENU(mNAME) printM_##mNAME
260 #define MODprintMENU(mNAME) __MODprintMENU(mNAME)
263 #define __MODparseINPUT(mNAME) parseI_##mNAME
264 #define MODparseINPUT(mNAME) __MODparseINPUT(mNAME)
267 #define __MODstructCREATE(mNAME) Create##mNAME##Struct
268 #define MODstructCREATE(mNAME) __MODstructCREATE(mNAME)
276 #define __MODdeclareSTRUCT(mNAME) struct __MODstructTYPEname(mNAME)
277 #define MODdeclareSTRUCT(mNAME) __MODdeclareSTRUCT(mNAME)
280 #define COMPMODFIRST struct computeModuleStruct compMod
283 #define __MODdeclarePTRIN(mNAME) struct __MODstructTYPEname(mNAME)* __MODdataPTR(mNAME)
284 #define MODdeclarePTRIN(mNAME) __MODdeclarePTRIN(mNAME)
287 #define __MODdeclareDATA(mNAME) struct __MODstructTYPEname(mNAME) __MODdataINST(mNAME)
288 #define MODdeclareDATA(mNAME) __MODdeclareDATA(mNAME)
291 #define __MODdeclareCREATE(mNAME) __MODdeclareSTRUCT(mNAME) __MODstructCREATE(mNAME)
292 #define MODdeclareCREATE(mNAME) __MODdeclareCREATE(mNAME)
295 #define __MODdeclareSETUP(mNAME) int __MODsetup(mNAME) ( struct computeModuleStruct* compModPtrIn )
296 #define MODdeclareSETUP(mNAME) __MODdeclareSETUP(mNAME)
299 #define __MODdeclareLOOP(mNAME) int __MODloop(mNAME) ( struct computeModuleStruct* compModPtrIn )
300 #define MODdeclareLOOP(mNAME) __MODdeclareLOOP(mNAME)
303 #define __MODdeclarePRINTm(mNAME) void __MODprintMENU(mNAME) ( struct computeModuleStruct* compModPtrIn, struct uiStruct* uiStructPtrIn )
304 #define MODdeclarePRINTm(mNAME) __MODdeclarePRINTm(mNAME)
307 #define __MODdeclarePARSEi(mNAME) void __MODparseINPUT(mNAME) ( struct computeModuleStruct* compModPtrIn, struct uiStruct* uiStructPtrIn )
308 #define MODdeclarePARSEi(mNAME) __MODdeclarePARSEi(mNAME)
311 #define __MODdeclareSYSTICK(mNAME) void __MODsystick(mNAME) ( struct computeModuleStruct* compModPtrIn )
312 #define MODdeclareSYSTICK(mNAME) __MODdeclareSYSTICK(mNAME)
319 #define __MODDATAPTR_RETURN(mNAME) \
320 __MODdeclarePTRIN(mNAME) = ( ( __MODdeclareSTRUCT(mNAME)* )(compModPtrIn));\
321 if (__MODdataPTR(mNAME) == nullptr)\
323 #define MODDATAPTR_RETURN(mNAME) __MODDATAPTR_RETURN(mNAME)
327 #define __MODDATAPTR_ERROR_RETURN(mNAME) \
328 __MODdeclarePTRIN(mNAME) = ( ( __MODdeclareSTRUCT(mNAME)* )(compModPtrIn));\
329 if (__MODdataPTR(mNAME) == nullptr)\
331 #define MODDATAPTR_ERROR_RETURN(mNAME) __MODDATAPTR_ERROR_RETURN(mNAME)
334 #define __IF_MODULE_ERROR(mNAME) if(__MODdataPTR(mNAME)->compMod.exceptionFlags != 0u)
335 #define IF_MODULE_ERROR( mNAME ) __IF_MODULE_ERROR( mNAME )
338 #define __CLEAR_MODULE_ERRORS(mNAME) __MODdataPTR(mNAME)->compMod.exceptionFlags = 0u
339 #define CLEAR_MODULE_ERRORS(mNAME) __CLEAR_MODULE_ERRORS(mNAME)
342 #define __C_NOos_MAINnSYSTICK_TEMPLATE ccNOosVersionsTemplate \
345 applicationConfig();\
346 return ExecuteMain(&exeSystem, &exeEntryPoints);\
348 void SysTickISRCallback(void);\
349 void SysTickISRCallback(void)\
351 ExecuteSysTick(&exeSystem, &exeEntryPoints);\
353 #define C_NOos_MAINnSYSTICK_TEMPLATE __C_NOos_MAINnSYSTICK_TEMPLATE
356 #define __C_OS_MAIN_TEMPLATE ccNOosVersionsTemplate \
357 int main(int argc, char** argv)\
359 clock_t tlast = clock();\
360 clock_t tnow, tdelta;\
361 UI_32* uSecTicksPtr = &exeSystem.uSecTicks;\
362 UI_32* hourTicksPtr = &exeSystem.hourTicks;\
363 applicationConfig();\
364 ExecuteSetup(&exeSystem, &exeEntryPoints);\
369 tdelta = tnow - tlast;\
371 tdelta = tnow + (LONG_MAX - tlast);\
373 (*uSecTicksPtr) += tdelta * uSEC_PER_CLOCK;\
374 if ((*uSecTicksPtr) >= TIME_uS_PER_HR)\
376 (*uSecTicksPtr) = 0u;\
379 ExecuteLoop(&exeSystem, &exeEntryPoints);\
381 return RETURN_ERROR;\
383 #define C_OS_MAIN_TEMPLATE __C_OS_MAIN_TEMPLATE
390 #define __PLATFORM_APP_NAME(PLATNAME) PLATNAME##_Application
391 #define PLATFORM_APP_NAME(PLATNAME) __PLATFORM_APP_NAME(PLATNAME)
394 #define __MODCLASS_NAME(MODNAME) MODNAME##_class
395 #define MODCLASS_NAME(MODNAME) __MODCLASS_NAME(MODNAME)
398 #define __MODCLASS_SETUP_INLINE(mNAME) int mod_setup(){return __MODsetup(mNAME)((struct computeModuleStruct*)(&__MODdataINST(mNAME)));}
399 #define MODCLASS_SETUP_INLINE(mNAME) __MODCLASS_SETUP_INLINE(mNAME)
402 #define __MODCLASS_LOOP_INLINE(mNAME) int mod_loop(){return __MODloop(mNAME)((struct computeModuleStruct*)(&__MODdataINST(mNAME)));}
403 #define MODCLASS_LOOP_INLINE(mNAME) __MODCLASS_LOOP_INLINE(mNAME)
406 #define __MODCLASS_SYSTICK_INLINE(mNAME) void mod_systick(){return __MODsystick(mNAME)((struct computeModuleStruct*)(&__MODdataINST(mNAME)));}
407 #define MODCLASS_SYSTICK_INLINE(mNAME) __MODCLASS_SYSTICK_INLINE(mNAME)
410 #define __MODCLASS_ExcpHndlr_INLINE(mNAME) int mod_excphandler(){return __MODsetup(mNAME)((struct computeModuleStruct*)(&__MODdataINST(mNAME)));}
411 #define MODCLASS_ExcpHndlr_INLINE(mNAME) __MODCLASS_ExcpHndlr_INLINE(mNAME)
414 #define __MODULE_CONSTRUCT_DEFINE(mNAME) MODCLASS_NAME(mNAME)::MODCLASS_CONSTRUCTOR_PROTO(mNAME): computeModuleClass( & __MODdataINST(mNAME).compMod)
415 #define MODULE_CONSTRUCT_DEFINE(mNAME) __MODULE_CONSTRUCT_DEFINE(mNAME)
418 #define __PLATFORM_APP_CPPTEMPLATE(PLATNAME) __PLATFORM_APP_NAME(PLATNAME) theApplicationExample;
419 #define PLATFORM_APP_CPPTEMPLATE(PLATNAME) __PLATFORM_APP_CPPTEMPLATE(PLATNAME)
422 #define __CPP_OS_MAIN_TEMPLATE ccNOosVersionsTemplate \
423 int main(int argc, char** argv)\
425 clock_t tlast = clock();\
426 clock_t tnow, tdelta;\
427 UI_32* uSecTicksPtr = &exeSystem.getExeDataPtr()->uSecTicks;\
428 UI_32* hourTicksPtr = &exeSystem.getExeDataPtr()->hourTicks;\
429 exeSystem.ExecuteSetup();\
434 tdelta = tnow - tlast;\
436 tdelta = tnow + (LONG_MAX - tlast);\
438 (*uSecTicksPtr) += tdelta * uSEC_PER_CLOCK;\
439 if ((*uSecTicksPtr) >= TIME_uS_PER_HR)\
441 (*uSecTicksPtr) = 0u;\
444 exeSystem.ExecuteLoop();\
446 return RETURN_ERROR;\
448 #define CPP_OS_MAIN_TEMPLATE __CPP_OS_MAIN_TEMPLATE
450 #define __CPP_MAIN_TEMPLATE_ARDUINO ccNOosVersionsTemplate \
451 unsigned long tlast;\
452 unsigned long tnow, tdelta;\
453 uint32_t* uSecTicksPtr;\
454 uint32_t* hourTicksPtr;\
458 uSecTicksPtr = &exeSystem.getExeDataPtr()->uSecTicks;\
459 hourTicksPtr = &exeSystem.getExeDataPtr()->hourTicks;\
460 exeSystem.ExecuteSetup();\
467 tdelta = tnow - tlast;\
469 tdelta = tnow + (0xffffffff - tlast);\
472 (*uSecTicksPtr) += tdelta * uSEC_PER_CLOCK;\
473 if ((*uSecTicksPtr) >= TIME_uS_PER_HR)\
475 (*uSecTicksPtr) = 0u;\
479 exeSystem.ExecuteLoop();\
482 #define CPP_MAIN_TEMPLATE_ARDUINO __CPP_MAIN_TEMPLATE_ARDUINO
484 #endif // !__cplusplus
485 #endif // !__VERSIONCONFIG__