os.h 111 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326
  1. /*
  2. ************************************************************************************************************************
  3. * uC/OS-III
  4. * The Real-Time Kernel
  5. *
  6. * (c) Copyright 2009-2011; Micrium, Inc.; Weston, FL
  7. * All rights reserved. Protected by international copyright laws.
  8. *
  9. * File : OS.H
  10. * By : JJL
  11. * Version : V3.02.00
  12. *
  13. * LICENSING TERMS:
  14. * ---------------
  15. * uC/OS-III is provided in source form for FREE short-term evaluation, for educational use or
  16. * for peaceful research. If you plan or intend to use uC/OS-III in a commercial application/
  17. * product then, you need to contact Micrium to properly license uC/OS-III for its use in your
  18. * application/product. We provide ALL the source code for your convenience and to help you
  19. * experience uC/OS-III. The fact that the source is provided does NOT mean that you can use
  20. * it commercially without paying a licensing fee.
  21. *
  22. * Knowledge of the source code may NOT be used to develop a similar product.
  23. *
  24. * Please help us continue to provide the embedded community with the finest software available.
  25. * Your honesty is greatly appreciated.
  26. *
  27. * You can contact us at www.micrium.com, or by phone at +1 (954) 217-2036.
  28. ************************************************************************************************************************
  29. * Note(s) : (1) Assumes the following versions (or more recent) of software modules are included in the project build:
  30. *
  31. * (a) uC/LIB V1.26
  32. * (b) uC/CPU V1.25
  33. ************************************************************************************************************************
  34. */
  35. #ifndef OS_H
  36. #define OS_H
  37. /*
  38. ************************************************************************************************************************
  39. * uC/OS-III VERSION NUMBER
  40. ************************************************************************************************************************
  41. */
  42. #define OS_VERSION 30200u /* Version of uC/OS-III (Vx.yy.zz mult. by 10000) */
  43. /*
  44. ************************************************************************************************************************
  45. * INCLUDE HEADER FILES
  46. ************************************************************************************************************************
  47. */
  48. #ifdef __cplusplus
  49. extern "C" {
  50. #endif
  51. #include <os_cfg.h>
  52. #include <cpu.h>
  53. #include <cpu_core.h>
  54. #include <lib_def.h>
  55. #include <os_type.h>
  56. #include <os_cpu.h>
  57. /*
  58. ************************************************************************************************************************
  59. * CRITICAL SECTION HANDLING
  60. ************************************************************************************************************************
  61. */
  62. #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u && defined(CPU_CFG_INT_DIS_MEAS_EN)
  63. #define OS_SCHED_LOCK_TIME_MEAS_START() OS_SchedLockTimeMeasStart()
  64. #else
  65. #define OS_SCHED_LOCK_TIME_MEAS_START()
  66. #endif
  67. #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u && defined(CPU_CFG_INT_DIS_MEAS_EN)
  68. #define OS_SCHED_LOCK_TIME_MEAS_STOP() OS_SchedLockTimeMeasStop()
  69. #else
  70. #define OS_SCHED_LOCK_TIME_MEAS_STOP()
  71. #endif
  72. #if OS_CFG_ISR_POST_DEFERRED_EN > 0u /* Deferred ISR Posts ------------------------------ */
  73. /* Lock the scheduler */
  74. #define OS_CRITICAL_ENTER() \
  75. do { \
  76. CPU_CRITICAL_ENTER(); \
  77. OSSchedLockNestingCtr++; \
  78. if (OSSchedLockNestingCtr == 1u) { \
  79. OS_SCHED_LOCK_TIME_MEAS_START(); \
  80. } \
  81. CPU_CRITICAL_EXIT(); \
  82. } while (0)
  83. /* Lock the scheduler but re-enable interrupts */
  84. #define OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT() \
  85. do { \
  86. OSSchedLockNestingCtr++; \
  87. \
  88. if (OSSchedLockNestingCtr == 1u) { \
  89. OS_SCHED_LOCK_TIME_MEAS_START(); \
  90. } \
  91. CPU_CRITICAL_EXIT(); \
  92. } while (0)
  93. /* Scheduling occurs only if an interrupt occurs */
  94. #define OS_CRITICAL_EXIT() \
  95. do { \
  96. CPU_CRITICAL_ENTER(); \
  97. OSSchedLockNestingCtr--; \
  98. if (OSSchedLockNestingCtr == (OS_NESTING_CTR)0) { \
  99. OS_SCHED_LOCK_TIME_MEAS_STOP(); \
  100. if (OSIntQNbrEntries > (OS_OBJ_QTY)0) { \
  101. CPU_CRITICAL_EXIT(); \
  102. OS_Sched0(); \
  103. } else { \
  104. CPU_CRITICAL_EXIT(); \
  105. } \
  106. } else { \
  107. CPU_CRITICAL_EXIT(); \
  108. } \
  109. } while (0)
  110. #define OS_CRITICAL_EXIT_NO_SCHED() \
  111. do { \
  112. CPU_CRITICAL_ENTER(); \
  113. OSSchedLockNestingCtr--; \
  114. if (OSSchedLockNestingCtr == (OS_NESTING_CTR)0) { \
  115. OS_SCHED_LOCK_TIME_MEAS_STOP(); \
  116. } \
  117. CPU_CRITICAL_EXIT(); \
  118. } while (0)
  119. #else /* Direct ISR Posts -------------------------------- */
  120. #define OS_CRITICAL_ENTER() CPU_CRITICAL_ENTER()
  121. #define OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT()
  122. #define OS_CRITICAL_EXIT() CPU_CRITICAL_EXIT()
  123. #define OS_CRITICAL_EXIT_NO_SCHED() CPU_CRITICAL_EXIT()
  124. #endif
  125. /*
  126. ************************************************************************************************************************
  127. * MISCELLANEOUS
  128. ************************************************************************************************************************
  129. */
  130. #ifdef OS_GLOBALS
  131. #define OS_EXT
  132. #else
  133. #define OS_EXT extern
  134. #endif
  135. #define OS_PRIO_TBL_SIZE (((OS_CFG_PRIO_MAX - 1u) / DEF_INT_CPU_NBR_BITS) + 1u)
  136. #define OS_MSG_EN (((OS_CFG_TASK_Q_EN > 0u) || (OS_CFG_Q_EN > 0u)) ? 1u : 0u)
  137. /*$PAGE*/
  138. /*
  139. ************************************************************************************************************************
  140. ************************************************************************************************************************
  141. * # D E F I N E S
  142. ************************************************************************************************************************
  143. ************************************************************************************************************************
  144. */
  145. /*
  146. ========================================================================================================================
  147. * TASK STATUS
  148. ========================================================================================================================
  149. */
  150. #define OS_STATE_OS_STOPPED (OS_STATE)(0u)
  151. #define OS_STATE_OS_RUNNING (OS_STATE)(1u)
  152. #define OS_STATE_NOT_RDY (CPU_BOOLEAN)(0u)
  153. #define OS_STATE_RDY (CPU_BOOLEAN)(1u)
  154. /* ------------------- TASK STATES ------------------ */
  155. #define OS_TASK_STATE_BIT_DLY (OS_STATE)(0x01u) /* /-------- SUSPENDED bit */
  156. /* | */
  157. #define OS_TASK_STATE_BIT_PEND (OS_STATE)(0x02u) /* | /----- PEND bit */
  158. /* | | */
  159. #define OS_TASK_STATE_BIT_SUSPENDED (OS_STATE)(0x04u) /* | | /--- Delayed/Timeout bit */
  160. /* | | | */
  161. /* V V V */
  162. #define OS_TASK_STATE_RDY (OS_STATE)( 0u) /* 0 0 0 Ready */
  163. #define OS_TASK_STATE_DLY (OS_STATE)( 1u) /* 0 0 1 Delayed or Timeout */
  164. #define OS_TASK_STATE_PEND (OS_STATE)( 2u) /* 0 1 0 Pend */
  165. #define OS_TASK_STATE_PEND_TIMEOUT (OS_STATE)( 3u) /* 0 1 1 Pend + Timeout */
  166. #define OS_TASK_STATE_SUSPENDED (OS_STATE)( 4u) /* 1 0 0 Suspended */
  167. #define OS_TASK_STATE_DLY_SUSPENDED (OS_STATE)( 5u) /* 1 0 1 Suspended + Delayed or Timeout */
  168. #define OS_TASK_STATE_PEND_SUSPENDED (OS_STATE)( 6u) /* 1 1 0 Suspended + Pend */
  169. #define OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED (OS_STATE)( 7u) /* 1 1 1 Suspended + Pend + Timeout */
  170. #define OS_TASK_STATE_DEL (OS_STATE)(255u)
  171. /* ----------------- PENDING ON ... ----------------- */
  172. #define OS_TASK_PEND_ON_NOTHING (OS_STATE)( 0u) /* Pending on nothing */
  173. #define OS_TASK_PEND_ON_FLAG (OS_STATE)( 1u) /* Pending on event flag group */
  174. #define OS_TASK_PEND_ON_TASK_Q (OS_STATE)( 2u) /* Pending on message to be sent to task */
  175. #define OS_TASK_PEND_ON_MULTI (OS_STATE)( 3u) /* Pending on multiple semaphores and/or queues */
  176. #define OS_TASK_PEND_ON_MUTEX (OS_STATE)( 4u) /* Pending on mutual exclusion semaphore */
  177. #define OS_TASK_PEND_ON_Q (OS_STATE)( 5u) /* Pending on queue */
  178. #define OS_TASK_PEND_ON_SEM (OS_STATE)( 6u) /* Pending on semaphore */
  179. #define OS_TASK_PEND_ON_TASK_SEM (OS_STATE)( 7u) /* Pending on signal to be sent to task */
  180. /*
  181. ------------------------------------------------------------------------------------------------------------------------
  182. * TASK PEND STATUS
  183. * (Status codes for OS_TCBs field .PendStatus)
  184. ------------------------------------------------------------------------------------------------------------------------
  185. */
  186. #define OS_STATUS_PEND_OK (OS_STATUS)( 0u) /* Pending status OK, !pending, or pending complete */
  187. #define OS_STATUS_PEND_ABORT (OS_STATUS)( 1u) /* Pending aborted */
  188. #define OS_STATUS_PEND_DEL (OS_STATUS)( 2u) /* Pending object deleted */
  189. #define OS_STATUS_PEND_TIMEOUT (OS_STATUS)( 3u) /* Pending timed out */
  190. /*
  191. ========================================================================================================================
  192. * OS OBJECT TYPES
  193. *
  194. * Note(s) : (1) OS_OBJ_TYPE_&&& #define values specifically chosen as ASCII representations of the kernel
  195. * object types. Memory displays of kernel objects will display the kernel object TYPEs with
  196. * their chosen ASCII names.
  197. ========================================================================================================================
  198. */
  199. #define OS_OBJ_TYPE_NONE (OS_OBJ_TYPE)CPU_TYPE_CREATE('N', 'O', 'N', 'E')
  200. #define OS_OBJ_TYPE_FLAG (OS_OBJ_TYPE)CPU_TYPE_CREATE('F', 'L', 'A', 'G')
  201. #define OS_OBJ_TYPE_MEM (OS_OBJ_TYPE)CPU_TYPE_CREATE('M', 'E', 'M', ' ')
  202. #define OS_OBJ_TYPE_MUTEX (OS_OBJ_TYPE)CPU_TYPE_CREATE('M', 'U', 'T', 'X')
  203. #define OS_OBJ_TYPE_Q (OS_OBJ_TYPE)CPU_TYPE_CREATE('Q', 'U', 'E', 'U')
  204. #define OS_OBJ_TYPE_SEM (OS_OBJ_TYPE)CPU_TYPE_CREATE('S', 'E', 'M', 'A')
  205. #define OS_OBJ_TYPE_TASK_MSG (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'M', 'S', 'G')
  206. #define OS_OBJ_TYPE_TASK_SIGNAL (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'S', 'I', 'G')
  207. #define OS_OBJ_TYPE_TICK (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'I', 'C', 'K')
  208. #define OS_OBJ_TYPE_TMR (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'M', 'R', ' ')
  209. /*
  210. ========================================================================================================================
  211. * Possible values for 'opt' argument
  212. ========================================================================================================================
  213. */
  214. #define OS_OPT_NONE (OS_OPT)(0x0000u)
  215. /*
  216. ------------------------------------------------------------------------------------------------------------------------
  217. * DELETE OPTIONS
  218. ------------------------------------------------------------------------------------------------------------------------
  219. */
  220. #define OS_OPT_DEL_NO_PEND (OS_OPT)(0x0000u)
  221. #define OS_OPT_DEL_ALWAYS (OS_OPT)(0x0001u)
  222. /*
  223. ------------------------------------------------------------------------------------------------------------------------
  224. * PEND OPTIONS
  225. ------------------------------------------------------------------------------------------------------------------------
  226. */
  227. #define OS_OPT_PEND_FLAG_MASK (OS_OPT)(0x000Fu)
  228. #define OS_OPT_PEND_FLAG_CLR_ALL (OS_OPT)(0x0001u) /* Wait for ALL the bits specified to be CLR */
  229. #define OS_OPT_PEND_FLAG_CLR_AND (OS_OPT)(0x0001u)
  230. #define OS_OPT_PEND_FLAG_CLR_ANY (OS_OPT)(0x0002u) /* Wait for ANY of the bits specified to be CLR */
  231. #define OS_OPT_PEND_FLAG_CLR_OR (OS_OPT)(0x0002u)
  232. #define OS_OPT_PEND_FLAG_SET_ALL (OS_OPT)(0x0004u) /* Wait for ALL the bits specified to be SET */
  233. #define OS_OPT_PEND_FLAG_SET_AND (OS_OPT)(0x0004u)
  234. #define OS_OPT_PEND_FLAG_SET_ANY (OS_OPT)(0x0008u) /* Wait for ANY of the bits specified to be SET */
  235. #define OS_OPT_PEND_FLAG_SET_OR (OS_OPT)(0x0008u)
  236. #define OS_OPT_PEND_FLAG_CONSUME (OS_OPT)(0x0100u) /* Consume the flags if condition(s) satisfied */
  237. #define OS_OPT_PEND_BLOCKING (OS_OPT)(0x0000u)
  238. #define OS_OPT_PEND_NON_BLOCKING (OS_OPT)(0x8000u)
  239. /*
  240. ------------------------------------------------------------------------------------------------------------------------
  241. * PEND ABORT OPTIONS
  242. ------------------------------------------------------------------------------------------------------------------------
  243. */
  244. #define OS_OPT_PEND_ABORT_1 (OS_OPT)(0x0000u) /* Pend abort a single waiting task */
  245. #define OS_OPT_PEND_ABORT_ALL (OS_OPT)(0x0100u) /* Pend abort ALL tasks waiting */
  246. /*
  247. ------------------------------------------------------------------------------------------------------------------------
  248. * POST OPTIONS
  249. ------------------------------------------------------------------------------------------------------------------------
  250. */
  251. #define OS_OPT_POST_NONE (OS_OPT)(0x0000u)
  252. #define OS_OPT_POST_FLAG_SET (OS_OPT)(0x0000u)
  253. #define OS_OPT_POST_FLAG_CLR (OS_OPT)(0x0001u)
  254. #define OS_OPT_POST_FIFO (OS_OPT)(0x0000u) /* Default is to post FIFO */
  255. #define OS_OPT_POST_LIFO (OS_OPT)(0x0010u) /* Post to highest priority task waiting */
  256. #define OS_OPT_POST_1 (OS_OPT)(0x0000u) /* Post message to highest priority task waiting */
  257. #define OS_OPT_POST_ALL (OS_OPT)(0x0200u) /* Broadcast message to ALL tasks waiting */
  258. #define OS_OPT_POST_NO_SCHED (OS_OPT)(0x8000u) /* Do not call the scheduler if this is selected */
  259. /*
  260. ------------------------------------------------------------------------------------------------------------------------
  261. * TASK OPTIONS
  262. ------------------------------------------------------------------------------------------------------------------------
  263. */
  264. #define OS_OPT_TASK_NONE (OS_OPT)(0x0000u) /* No option selected */
  265. #define OS_OPT_TASK_STK_CHK (OS_OPT)(0x0001u) /* Enable stack checking for the task */
  266. #define OS_OPT_TASK_STK_CLR (OS_OPT)(0x0002u) /* Clear the stack when the task is create */
  267. #define OS_OPT_TASK_SAVE_FP (OS_OPT)(0x0004u) /* Save the contents of any floating-point registers */
  268. /*
  269. ------------------------------------------------------------------------------------------------------------------------
  270. * TIME OPTIONS
  271. ------------------------------------------------------------------------------------------------------------------------
  272. */
  273. #define OS_OPT_TIME_DLY DEF_BIT_NONE
  274. #define OS_OPT_TIME_TIMEOUT ((OS_OPT)DEF_BIT_01)
  275. #define OS_OPT_TIME_MATCH ((OS_OPT)DEF_BIT_02)
  276. #define OS_OPT_TIME_PERIODIC ((OS_OPT)DEF_BIT_03)
  277. #define OS_OPT_TIME_HMSM_STRICT ((OS_OPT)DEF_BIT_NONE)
  278. #define OS_OPT_TIME_HMSM_NON_STRICT ((OS_OPT)DEF_BIT_04)
  279. #define OS_OPT_TIME_MASK ((OS_OPT)(OS_OPT_TIME_DLY | \
  280. OS_OPT_TIME_TIMEOUT | \
  281. OS_OPT_TIME_PERIODIC | \
  282. OS_OPT_TIME_MATCH))
  283. #define OS_OPT_TIME_OPTS_MASK (OS_OPT_TIME_DLY | \
  284. OS_OPT_TIME_TIMEOUT | \
  285. OS_OPT_TIME_PERIODIC | \
  286. OS_OPT_TIME_MATCH | \
  287. OS_OPT_TIME_HMSM_NON_STRICT)
  288. /*
  289. ------------------------------------------------------------------------------------------------------------------------
  290. * TIMER OPTIONS
  291. ------------------------------------------------------------------------------------------------------------------------
  292. */
  293. #define OS_OPT_TMR_NONE (OS_OPT)(0u) /* No option selected */
  294. #define OS_OPT_TMR_ONE_SHOT (OS_OPT)(1u) /* Timer will not auto restart when it expires */
  295. #define OS_OPT_TMR_PERIODIC (OS_OPT)(2u) /* Timer will auto restart when it expires */
  296. #define OS_OPT_TMR_CALLBACK (OS_OPT)(3u) /* OSTmrStop() option to call 'callback' w/ timer arg */
  297. #define OS_OPT_TMR_CALLBACK_ARG (OS_OPT)(4u) /* OSTmrStop() option to call 'callback' w/ new arg */
  298. /*
  299. ------------------------------------------------------------------------------------------------------------------------
  300. * TIMER STATES
  301. ------------------------------------------------------------------------------------------------------------------------
  302. */
  303. #define OS_TMR_STATE_UNUSED (OS_STATE)(0u)
  304. #define OS_TMR_STATE_STOPPED (OS_STATE)(1u)
  305. #define OS_TMR_STATE_RUNNING (OS_STATE)(2u)
  306. #define OS_TMR_STATE_COMPLETED (OS_STATE)(3u)
  307. /*
  308. ------------------------------------------------------------------------------------------------------------------------
  309. * PRIORITY
  310. ------------------------------------------------------------------------------------------------------------------------
  311. */
  312. /* Dflt prio to init task TCB */
  313. #define OS_PRIO_INIT (OS_PRIO)(OS_CFG_PRIO_MAX)
  314. /*
  315. ------------------------------------------------------------------------------------------------------------------------
  316. * TIMER TICK THRESHOLDS
  317. ------------------------------------------------------------------------------------------------------------------------
  318. */
  319. /* Threshold to init previous tick time */
  320. #define OS_TICK_TH_INIT (OS_TICK)(DEF_BIT ((sizeof(OS_TICK) * DEF_OCTET_NBR_BITS) - 1u))
  321. /* Threshold to check if tick time already ready */
  322. #define OS_TICK_TH_RDY (OS_TICK)(DEF_BIT_FIELD(((sizeof(OS_TICK) * DEF_OCTET_NBR_BITS) / 2u), \
  323. ((sizeof(OS_TICK) * DEF_OCTET_NBR_BITS) / 2u)))
  324. /*$PAGE*/
  325. /*
  326. ************************************************************************************************************************
  327. ************************************************************************************************************************
  328. * E N U M E R A T I O N S
  329. ************************************************************************************************************************
  330. ************************************************************************************************************************
  331. */
  332. /*
  333. ------------------------------------------------------------------------------------------------------------------------
  334. * ERROR CODES
  335. ------------------------------------------------------------------------------------------------------------------------
  336. */
  337. typedef enum os_err {
  338. OS_ERR_NONE = 0u,
  339. OS_ERR_A = 10000u,
  340. OS_ERR_ACCEPT_ISR = 10001u,
  341. OS_ERR_B = 11000u,
  342. OS_ERR_C = 12000u,
  343. OS_ERR_CREATE_ISR = 12001u,
  344. OS_ERR_D = 13000u,
  345. OS_ERR_DEL_ISR = 13001u,
  346. OS_ERR_E = 14000u,
  347. OS_ERR_F = 15000u,
  348. OS_ERR_FATAL_RETURN = 15001u,
  349. OS_ERR_FLAG_GRP_DEPLETED = 15101u,
  350. OS_ERR_FLAG_NOT_RDY = 15102u,
  351. OS_ERR_FLAG_PEND_OPT = 15103u,
  352. OS_ERR_FLUSH_ISR = 15104u,
  353. OS_ERR_G = 16000u,
  354. OS_ERR_H = 17000u,
  355. OS_ERR_I = 18000u,
  356. OS_ERR_ILLEGAL_CREATE_RUN_TIME = 18001u,
  357. OS_ERR_INT_Q = 18002u,
  358. OS_ERR_INT_Q_FULL = 18003u,
  359. OS_ERR_INT_Q_SIZE = 18004u,
  360. OS_ERR_J = 19000u,
  361. OS_ERR_K = 20000u,
  362. OS_ERR_L = 21000u,
  363. OS_ERR_LOCK_NESTING_OVF = 21001u,
  364. OS_ERR_M = 22000u,
  365. OS_ERR_MEM_CREATE_ISR = 22201u,
  366. OS_ERR_MEM_FULL = 22202u,
  367. OS_ERR_MEM_INVALID_P_ADDR = 22203u,
  368. OS_ERR_MEM_INVALID_BLKS = 22204u,
  369. OS_ERR_MEM_INVALID_PART = 22205u,
  370. OS_ERR_MEM_INVALID_P_BLK = 22206u,
  371. OS_ERR_MEM_INVALID_P_MEM = 22207u,
  372. OS_ERR_MEM_INVALID_P_DATA = 22208u,
  373. OS_ERR_MEM_INVALID_SIZE = 22209u,
  374. OS_ERR_MEM_NO_FREE_BLKS = 22210u,
  375. OS_ERR_MSG_POOL_EMPTY = 22301u,
  376. OS_ERR_MSG_POOL_NULL_PTR = 22302u,
  377. OS_ERR_MUTEX_NOT_OWNER = 22401u,
  378. OS_ERR_MUTEX_OWNER = 22402u,
  379. OS_ERR_MUTEX_NESTING = 22403u,
  380. OS_ERR_N = 23000u,
  381. OS_ERR_NAME = 23001u,
  382. OS_ERR_O = 24000u,
  383. OS_ERR_OBJ_CREATED = 24001u,
  384. OS_ERR_OBJ_DEL = 24002u,
  385. OS_ERR_OBJ_PTR_NULL = 24003u,
  386. OS_ERR_OBJ_TYPE = 24004u,
  387. OS_ERR_OPT_INVALID = 24101u,
  388. OS_ERR_OS_NOT_RUNNING = 24201u,
  389. OS_ERR_OS_RUNNING = 24202u,
  390. OS_ERR_P = 25000u,
  391. OS_ERR_PEND_ABORT = 25001u,
  392. OS_ERR_PEND_ABORT_ISR = 25002u,
  393. OS_ERR_PEND_ABORT_NONE = 25003u,
  394. OS_ERR_PEND_ABORT_SELF = 25004u,
  395. OS_ERR_PEND_DEL = 25005u,
  396. OS_ERR_PEND_ISR = 25006u,
  397. OS_ERR_PEND_LOCKED = 25007u,
  398. OS_ERR_PEND_WOULD_BLOCK = 25008u,
  399. OS_ERR_POST_NULL_PTR = 25101u,
  400. OS_ERR_POST_ISR = 25102u,
  401. OS_ERR_PRIO_EXIST = 25201u,
  402. OS_ERR_PRIO = 25202u,
  403. OS_ERR_PRIO_INVALID = 25203u,
  404. OS_ERR_PTR_INVALID = 25301u,
  405. OS_ERR_Q = 26000u,
  406. OS_ERR_Q_FULL = 26001u,
  407. OS_ERR_Q_EMPTY = 26002u,
  408. OS_ERR_Q_MAX = 26003u,
  409. OS_ERR_Q_SIZE = 26004u,
  410. OS_ERR_R = 27000u,
  411. OS_ERR_REG_ID_INVALID = 27001u,
  412. OS_ERR_ROUND_ROBIN_1 = 27002u,
  413. OS_ERR_ROUND_ROBIN_DISABLED = 27003u,
  414. OS_ERR_S = 28000u,
  415. OS_ERR_SCHED_INVALID_TIME_SLICE = 28001u,
  416. OS_ERR_SCHED_LOCK_ISR = 28002u,
  417. OS_ERR_SCHED_LOCKED = 28003u,
  418. OS_ERR_SCHED_NOT_LOCKED = 28004u,
  419. OS_ERR_SCHED_UNLOCK_ISR = 28005u,
  420. OS_ERR_SEM_OVF = 28101u,
  421. OS_ERR_SET_ISR = 28102u,
  422. OS_ERR_STAT_RESET_ISR = 28201u,
  423. OS_ERR_STATE_INVALID = 28202u,
  424. OS_ERR_STATUS_INVALID = 28203u,
  425. OS_ERR_STK_INVALID = 28204u,
  426. OS_ERR_STK_SIZE_INVALID = 28205u,
  427. OS_ERR_STK_LIMIT_INVALID = 28206u,
  428. OS_ERR_T = 29000u,
  429. OS_ERR_TASK_CHANGE_PRIO_ISR = 29001u,
  430. OS_ERR_TASK_CREATE_ISR = 29002u,
  431. OS_ERR_TASK_DEL = 29003u,
  432. OS_ERR_TASK_DEL_IDLE = 29004u,
  433. OS_ERR_TASK_DEL_INVALID = 29005u,
  434. OS_ERR_TASK_DEL_ISR = 29006u,
  435. OS_ERR_TASK_INVALID = 29007u,
  436. OS_ERR_TASK_NO_MORE_TCB = 29008u,
  437. OS_ERR_TASK_NOT_DLY = 29009u,
  438. OS_ERR_TASK_NOT_EXIST = 29010u,
  439. OS_ERR_TASK_NOT_SUSPENDED = 29011u,
  440. OS_ERR_TASK_OPT = 29012u,
  441. OS_ERR_TASK_RESUME_ISR = 29013u,
  442. OS_ERR_TASK_RESUME_PRIO = 29014u,
  443. OS_ERR_TASK_RESUME_SELF = 29015u,
  444. OS_ERR_TASK_STK_CHK_ISR = 29016u,
  445. OS_ERR_TASK_SUSPENDED = 29017u,
  446. OS_ERR_TASK_SUSPEND_IDLE = 29018u,
  447. OS_ERR_TASK_SUSPEND_INT_HANDLER = 29019u,
  448. OS_ERR_TASK_SUSPEND_ISR = 29020u,
  449. OS_ERR_TASK_SUSPEND_PRIO = 29021u,
  450. OS_ERR_TASK_WAITING = 29022u,
  451. OS_ERR_TCB_INVALID = 29101u,
  452. OS_ERR_TICK_WHEEL_SIZE = 29201u,
  453. OS_ERR_TIME_DLY_ISR = 29301u,
  454. OS_ERR_TIME_DLY_RESUME_ISR = 29302u,
  455. OS_ERR_TIME_GET_ISR = 29303u,
  456. OS_ERR_TIME_INVALID_HOURS = 29304u,
  457. OS_ERR_TIME_INVALID_MINUTES = 29305u,
  458. OS_ERR_TIME_INVALID_SECONDS = 29306u,
  459. OS_ERR_TIME_INVALID_MILLISECONDS = 29307u,
  460. OS_ERR_TIME_NOT_DLY = 29308u,
  461. OS_ERR_TIME_SET_ISR = 29309u,
  462. OS_ERR_TIME_ZERO_DLY = 29310u,
  463. OS_ERR_TIMEOUT = 29401u,
  464. OS_ERR_TMR_INACTIVE = 29501u,
  465. OS_ERR_TMR_INVALID_DEST = 29502u,
  466. OS_ERR_TMR_INVALID_DLY = 29503u,
  467. OS_ERR_TMR_INVALID_PERIOD = 29504u,
  468. OS_ERR_TMR_INVALID_STATE = 29505u,
  469. OS_ERR_TMR_INVALID = 29506u,
  470. OS_ERR_TMR_ISR = 29507u,
  471. OS_ERR_TMR_NO_CALLBACK = 29508u,
  472. OS_ERR_TMR_NON_AVAIL = 29509u,
  473. OS_ERR_TMR_STK_INVALID = 29510u,
  474. OS_ERR_TMR_STOPPED = 29511u,
  475. OS_ERR_U = 30000u,
  476. OS_ERR_V = 31000u,
  477. OS_ERR_W = 32000u,
  478. OS_ERR_X = 33000u,
  479. OS_ERR_Y = 34000u,
  480. OS_ERR_YIELD_ISR = 34001u,
  481. OS_ERR_Z = 35000u
  482. } OS_ERR;
  483. /*$PAGE*/
  484. /*
  485. ************************************************************************************************************************
  486. ************************************************************************************************************************
  487. * D A T A T Y P E S
  488. ************************************************************************************************************************
  489. ************************************************************************************************************************
  490. */
  491. typedef struct os_flag_grp OS_FLAG_GRP;
  492. typedef struct os_mem OS_MEM;
  493. typedef struct os_msg OS_MSG;
  494. typedef struct os_msg_pool OS_MSG_POOL;
  495. typedef struct os_msg_q OS_MSG_Q;
  496. typedef struct os_mutex OS_MUTEX;
  497. typedef struct os_int_q OS_INT_Q;
  498. typedef struct os_q OS_Q;
  499. typedef struct os_sem OS_SEM;
  500. typedef void (*OS_TASK_PTR)(void *p_arg);
  501. typedef struct os_tcb OS_TCB;
  502. typedef struct os_rdy_list OS_RDY_LIST;
  503. typedef struct os_tick_spoke OS_TICK_SPOKE;
  504. typedef void (*OS_TMR_CALLBACK_PTR)(void *p_tmr, void *p_arg);
  505. typedef struct os_tmr OS_TMR;
  506. typedef struct os_tmr_spoke OS_TMR_SPOKE;
  507. typedef struct os_pend_data OS_PEND_DATA;
  508. typedef struct os_pend_list OS_PEND_LIST;
  509. typedef struct os_pend_obj OS_PEND_OBJ;
  510. #if OS_CFG_APP_HOOKS_EN > 0u
  511. typedef void (*OS_APP_HOOK_VOID)(void);
  512. typedef void (*OS_APP_HOOK_TCB)(OS_TCB *p_tcb);
  513. #endif
  514. /*$PAGE*/
  515. /*
  516. ************************************************************************************************************************
  517. ************************************************************************************************************************
  518. * D A T A S T R U C T U R E S
  519. ************************************************************************************************************************
  520. ************************************************************************************************************************
  521. */
  522. /*
  523. ------------------------------------------------------------------------------------------------------------------------
  524. * ISR POST DATA
  525. ------------------------------------------------------------------------------------------------------------------------
  526. */
  527. #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
  528. struct os_int_q {
  529. OS_OBJ_TYPE Type; /* Type of object placed in the circular list */
  530. OS_INT_Q *NextPtr; /* Pointer to next OS_INT_Q in circular list */
  531. void *ObjPtr; /* Pointer to object placed in the queue */
  532. void *MsgPtr; /* Pointer to message if posting to a message queue */
  533. OS_MSG_SIZE MsgSize; /* Message Size if posting to a message queue */
  534. OS_FLAGS Flags; /* Value of flags if posting to an event flag group */
  535. OS_OPT Opt; /* Post Options */
  536. CPU_TS TS; /* Timestamp */
  537. };
  538. #endif
  539. /*
  540. ------------------------------------------------------------------------------------------------------------------------
  541. * READY LIST
  542. ------------------------------------------------------------------------------------------------------------------------
  543. */
  544. struct os_rdy_list {
  545. OS_TCB *HeadPtr; /* Pointer to task that will run at selected priority */
  546. OS_TCB *TailPtr; /* Pointer to last task at selected priority */
  547. OS_OBJ_QTY NbrEntries; /* Number of entries at selected priority */
  548. };
  549. /*
  550. ------------------------------------------------------------------------------------------------------------------------
  551. * PEND DATA, PEND LIST and PEND OBJ
  552. ------------------------------------------------------------------------------------------------------------------------
  553. */
  554. struct os_pend_data {
  555. OS_PEND_DATA *PrevPtr;
  556. OS_PEND_DATA *NextPtr;
  557. OS_TCB *TCBPtr;
  558. OS_PEND_OBJ *PendObjPtr;
  559. OS_PEND_OBJ *RdyObjPtr;
  560. void *RdyMsgPtr;
  561. OS_MSG_SIZE RdyMsgSize;
  562. CPU_TS RdyTS;
  563. };
  564. struct os_pend_list {
  565. OS_PEND_DATA *HeadPtr;
  566. OS_PEND_DATA *TailPtr;
  567. OS_OBJ_QTY NbrEntries;
  568. };
  569. struct os_pend_obj {
  570. OS_OBJ_TYPE Type;
  571. CPU_CHAR *NamePtr;
  572. OS_PEND_LIST PendList; /* List of tasks pending on object */
  573. #if OS_CFG_DBG_EN > 0u
  574. void *DbgPrevPtr;
  575. void *DbgNextPtr;
  576. CPU_CHAR *DbgNamePtr;
  577. #endif
  578. };
  579. /*
  580. ------------------------------------------------------------------------------------------------------------------------
  581. * EVENT FLAGS
  582. ------------------------------------------------------------------------------------------------------------------------
  583. */
  584. struct os_flag_grp { /* Event Flag Group */
  585. OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_FLAG */
  586. CPU_CHAR *NamePtr; /* Pointer to Event Flag Name (NUL terminated ASCII) */
  587. OS_PEND_LIST PendList; /* List of tasks waiting on event flag group */
  588. #if OS_CFG_DBG_EN > 0u
  589. OS_FLAG_GRP *DbgPrevPtr;
  590. OS_FLAG_GRP *DbgNextPtr;
  591. CPU_CHAR *DbgNamePtr;
  592. #endif
  593. OS_FLAGS Flags; /* 8, 16 or 32 bit flags */
  594. CPU_TS TS; /* Timestamp of when last post occurred */
  595. };
  596. /*$PAGE*/
  597. /*
  598. ------------------------------------------------------------------------------------------------------------------------
  599. * MEMORY PARTITIONS
  600. ------------------------------------------------------------------------------------------------------------------------
  601. */
  602. struct os_mem { /* MEMORY CONTROL BLOCK */
  603. OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_MEM */
  604. void *AddrPtr; /* Pointer to beginning of memory partition */
  605. CPU_CHAR *NamePtr;
  606. void *FreeListPtr; /* Pointer to list of free memory blocks */
  607. OS_MEM_SIZE BlkSize; /* Size (in bytes) of each block of memory */
  608. OS_MEM_QTY NbrMax; /* Total number of blocks in this partition */
  609. OS_MEM_QTY NbrFree; /* Number of memory blocks remaining in this partition */
  610. #if OS_CFG_DBG_EN > 0u
  611. OS_MEM *DbgPrevPtr;
  612. OS_MEM *DbgNextPtr;
  613. #endif
  614. };
  615. /*$PAGE*/
  616. /*
  617. ------------------------------------------------------------------------------------------------------------------------
  618. * MESSAGES
  619. ------------------------------------------------------------------------------------------------------------------------
  620. */
  621. struct os_msg { /* MESSAGE CONTROL BLOCK */
  622. OS_MSG *NextPtr; /* Pointer to next message */
  623. void *MsgPtr; /* Actual message */
  624. OS_MSG_SIZE MsgSize; /* Size of the message (in # bytes) */
  625. CPU_TS MsgTS; /* Time stamp of when message was sent */
  626. };
  627. struct os_msg_pool { /* OS_MSG POOL */
  628. OS_MSG *NextPtr; /* Pointer to next message */
  629. OS_MSG_QTY NbrFree; /* Number of messages available from this pool */
  630. OS_MSG_QTY NbrUsed; /* Number of messages used */
  631. };
  632. struct os_msg_q { /* OS_MSG_Q */
  633. OS_MSG *InPtr; /* Pointer to next OS_MSG to be inserted in the queue */
  634. OS_MSG *OutPtr; /* Pointer to next OS_MSG to be extracted from the queue */
  635. OS_MSG_QTY NbrEntriesSize; /* Maximum allowable number of entries in the queue */
  636. OS_MSG_QTY NbrEntries; /* Current number of entries in the queue */
  637. OS_MSG_QTY NbrEntriesMax; /* Peak number of entries in the queue */
  638. };
  639. /*$PAGE*/
  640. /*
  641. ------------------------------------------------------------------------------------------------------------------------
  642. * MUTUAL EXCLUSION SEMAPHORES
  643. ------------------------------------------------------------------------------------------------------------------------
  644. */
  645. struct os_mutex {
  646. OS_OBJ_TYPE Type; /* Mutual Exclusion Semaphore */
  647. CPU_CHAR *NamePtr; /* Should be set to OS_OBJ_TYPE_MUTEX */
  648. OS_PEND_LIST PendList; /* Pointer to Mutex Name (NUL terminated ASCII) */
  649. #if OS_CFG_DBG_EN > 0u
  650. OS_MUTEX *DbgPrevPtr;
  651. OS_MUTEX *DbgNextPtr;
  652. CPU_CHAR *DbgNamePtr;
  653. #endif
  654. OS_TCB *OwnerTCBPtr; /* List of tasks waiting on event flag group */
  655. OS_PRIO OwnerOriginalPrio;
  656. OS_NESTING_CTR OwnerNestingCtr; /* Mutex is available when the counter is 0 */
  657. CPU_TS TS;
  658. };
  659. /*$PAGE*/
  660. /*
  661. ------------------------------------------------------------------------------------------------------------------------
  662. * MESSAGE QUEUES
  663. ------------------------------------------------------------------------------------------------------------------------
  664. */
  665. struct os_q {
  666. OS_OBJ_TYPE Type; /* Message Queue */
  667. CPU_CHAR *NamePtr; /* Should be set to OS_OBJ_TYPE_Q */
  668. OS_PEND_LIST PendList; /* Pointer to Message Queue (NUL terminated ASCII) */
  669. #if OS_CFG_DBG_EN > 0u
  670. OS_Q *DbgPrevPtr;
  671. OS_Q *DbgNextPtr;
  672. CPU_CHAR *DbgNamePtr;
  673. #endif
  674. OS_MSG_Q MsgQ; /* List of tasks waiting on event flag group */
  675. };
  676. /*$PAGE*/
  677. /*
  678. ------------------------------------------------------------------------------------------------------------------------
  679. * SEMAPHORES
  680. ------------------------------------------------------------------------------------------------------------------------
  681. */
  682. struct os_sem {
  683. OS_OBJ_TYPE Type; /* Semaphore */
  684. CPU_CHAR *NamePtr; /* Should be set to OS_OBJ_TYPE_SEM */
  685. OS_PEND_LIST PendList; /* Pointer to Semaphore Name (NUL terminated ASCII) */
  686. #if OS_CFG_DBG_EN > 0u
  687. OS_SEM *DbgPrevPtr;
  688. OS_SEM *DbgNextPtr;
  689. CPU_CHAR *DbgNamePtr;
  690. #endif
  691. OS_SEM_CTR Ctr; /* List of tasks waiting on event flag group */
  692. CPU_TS TS;
  693. };
  694. /*$PAGE*/
  695. /*
  696. ------------------------------------------------------------------------------------------------------------------------
  697. * TASK CONTROL BLOCK
  698. ------------------------------------------------------------------------------------------------------------------------
  699. */
  700. struct os_tcb {
  701. CPU_STK *StkPtr; /* Pointer to current top of stack */
  702. void *ExtPtr; /* Pointer to user definable data for TCB extension */
  703. CPU_STK *StkLimitPtr; /* Pointer used to set stack 'watermark' limit */
  704. OS_TCB *NextPtr; /* Pointer to next TCB in the TCB list */
  705. OS_TCB *PrevPtr; /* Pointer to previous TCB in the TCB list */
  706. OS_TCB *TickNextPtr;
  707. OS_TCB *TickPrevPtr;
  708. OS_TICK_SPOKE *TickSpokePtr; /* Pointer to tick spoke if task is in the tick list */
  709. CPU_CHAR *NamePtr; /* Pointer to task name */
  710. CPU_STK *StkBasePtr; /* Pointer to base address of stack */
  711. OS_TASK_PTR TaskEntryAddr; /* Pointer to task entry point address */
  712. void *TaskEntryArg; /* Argument passed to task when it was created */
  713. OS_PEND_DATA *PendDataTblPtr; /* Pointer to list containing objects pended on */
  714. OS_STATE PendOn; /* Indicates what task is pending on */
  715. OS_STATUS PendStatus; /* Pend status */
  716. OS_STATE TaskState; /* See OS_TASK_STATE_xxx */
  717. OS_PRIO Prio; /* Task priority (0 == highest) */
  718. CPU_STK_SIZE StkSize; /* Size of task stack (in number of stack elements) */
  719. OS_OPT Opt; /* Task options as passed by OSTaskCreate() */
  720. OS_OBJ_QTY PendDataTblEntries; /* Size of array of objects to pend on */
  721. CPU_TS TS; /* Timestamp */
  722. OS_SEM_CTR SemCtr; /* Task specific semaphore counter */
  723. /* DELAY / TIMEOUT */
  724. OS_TICK TickCtrPrev; /* Previous time when task was ready */
  725. OS_TICK TickCtrMatch; /* Absolute time when task is going to be ready */
  726. OS_TICK TickRemain; /* Number of ticks remaining for a match (updated at ... */
  727. /* ... run-time by OS_StatTask() */
  728. OS_TICK TimeQuanta;
  729. OS_TICK TimeQuantaCtr;
  730. #if OS_MSG_EN > 0u
  731. void *MsgPtr; /* Message received */
  732. OS_MSG_SIZE MsgSize;
  733. #endif
  734. #if OS_CFG_TASK_Q_EN > 0u
  735. OS_MSG_Q MsgQ; /* Message queue associated with task */
  736. #if OS_CFG_TASK_PROFILE_EN > 0u
  737. CPU_TS MsgQPendTime; /* Time it took for signal to be received */
  738. CPU_TS MsgQPendTimeMax; /* Max amount of time it took for signal to be received */
  739. #endif
  740. #endif
  741. #if OS_CFG_TASK_REG_TBL_SIZE > 0u
  742. OS_REG RegTbl[OS_CFG_TASK_REG_TBL_SIZE]; /* Task specific registers */
  743. #endif
  744. #if OS_CFG_FLAG_EN > 0u
  745. OS_FLAGS FlagsPend; /* Event flag(s) to wait on */
  746. OS_FLAGS FlagsRdy; /* Event flags that made task ready to run */
  747. OS_OPT FlagsOpt; /* Options (See OS_OPT_FLAG_xxx) */
  748. #endif
  749. #if OS_CFG_TASK_SUSPEND_EN > 0u
  750. OS_NESTING_CTR SuspendCtr; /* Nesting counter for OSTaskSuspend() */
  751. #endif
  752. #if OS_CFG_TASK_PROFILE_EN > 0u
  753. OS_CPU_USAGE CPUUsage; /* CPU Usage of task (0-100%) */
  754. OS_CTX_SW_CTR CtxSwCtr; /* Number of time the task was switched in */
  755. CPU_TS CyclesDelta; /* value of OS_TS_GET() - .CyclesStart */
  756. CPU_TS CyclesStart; /* Snapshot of cycle counter at start of task resumption */
  757. OS_CYCLES CyclesTotal; /* Total number of # of cycles the task has been running */
  758. OS_CYCLES CyclesTotalPrev; /* Snapshot of previous # of cycles */
  759. CPU_TS SemPendTime; /* Time it took for signal to be received */
  760. CPU_TS SemPendTimeMax; /* Max amount of time it took for signal to be received */
  761. #endif
  762. #if OS_CFG_STAT_TASK_STK_CHK_EN > 0u
  763. CPU_STK_SIZE StkUsed; /* Number of stack elements used from the stack */
  764. CPU_STK_SIZE StkFree; /* Number of stack elements free on the stack */
  765. #endif
  766. #ifdef CPU_CFG_INT_DIS_MEAS_EN
  767. CPU_TS IntDisTimeMax; /* Maximum interrupt disable time */
  768. #endif
  769. #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u
  770. CPU_TS SchedLockTimeMax; /* Maximum scheduler lock time */
  771. #endif
  772. #if OS_CFG_DBG_EN > 0u
  773. OS_TCB *DbgPrevPtr;
  774. OS_TCB *DbgNextPtr;
  775. CPU_CHAR *DbgNamePtr;
  776. #endif
  777. };
  778. /*$PAGE*/
  779. /*
  780. ------------------------------------------------------------------------------------------------------------------------
  781. * TICK DATA TYPE
  782. ------------------------------------------------------------------------------------------------------------------------
  783. */
  784. struct os_tick_spoke {
  785. OS_TCB *FirstPtr; /* Pointer to list of tasks in tick spoke */
  786. OS_OBJ_QTY NbrEntries; /* Current number of entries in the tick spoke */
  787. OS_OBJ_QTY NbrEntriesMax; /* Peak number of entries in the tick spoke */
  788. };
  789. /*
  790. ------------------------------------------------------------------------------------------------------------------------
  791. * TIMER DATA TYPES
  792. ------------------------------------------------------------------------------------------------------------------------
  793. */
  794. struct os_tmr {
  795. OS_OBJ_TYPE Type;
  796. CPU_CHAR *NamePtr; /* Name to give the timer */
  797. OS_TMR_CALLBACK_PTR CallbackPtr; /* Function to call when timer expires */
  798. void *CallbackPtrArg; /* Argument to pass to function when timer expires */
  799. OS_TMR *NextPtr; /* Double link list pointers */
  800. OS_TMR *PrevPtr;
  801. OS_TICK Match; /* Timer expires when OSTmrTickCtr matches this value */
  802. OS_TICK Remain; /* Amount of time remaining before timer expires */
  803. OS_TICK Dly; /* Delay before start of repeat */
  804. OS_TICK Period; /* Period to repeat timer */
  805. OS_OPT Opt; /* Options (see OS_OPT_TMR_xxx) */
  806. OS_STATE State;
  807. #if OS_CFG_DBG_EN > 0u
  808. OS_TMR *DbgPrevPtr;
  809. OS_TMR *DbgNextPtr;
  810. #endif
  811. };
  812. struct os_tmr_spoke {
  813. OS_TMR *FirstPtr; /* Pointer to first timer in linked list */
  814. OS_OBJ_QTY NbrEntries;
  815. OS_OBJ_QTY NbrEntriesMax;
  816. };
  817. /*$PAGE*/
  818. /*
  819. ************************************************************************************************************************
  820. ************************************************************************************************************************
  821. * G L O B A L V A R I A B L E S
  822. ************************************************************************************************************************
  823. ************************************************************************************************************************
  824. */
  825. #if OS_CFG_APP_HOOKS_EN > 0u
  826. OS_EXT OS_APP_HOOK_TCB OS_AppTaskCreateHookPtr; /* Application hooks */
  827. OS_EXT OS_APP_HOOK_TCB OS_AppTaskDelHookPtr;
  828. OS_EXT OS_APP_HOOK_TCB OS_AppTaskReturnHookPtr;
  829. OS_EXT OS_APP_HOOK_VOID OS_AppIdleTaskHookPtr;
  830. OS_EXT OS_APP_HOOK_VOID OS_AppStatTaskHookPtr;
  831. OS_EXT OS_APP_HOOK_VOID OS_AppTaskSwHookPtr;
  832. OS_EXT OS_APP_HOOK_VOID OS_AppTimeTickHookPtr;
  833. #endif
  834. /* IDLE TASK ---------------------------------- */
  835. OS_EXT OS_IDLE_CTR OSIdleTaskCtr;
  836. OS_EXT OS_TCB OSIdleTaskTCB;
  837. /* MISCELLANEOUS ------------------------------ */
  838. OS_EXT OS_NESTING_CTR OSIntNestingCtr; /* Interrupt nesting level */
  839. #ifdef CPU_CFG_INT_DIS_MEAS_EN
  840. OS_EXT CPU_TS OSIntDisTimeMax; /* Overall interrupt disable time */
  841. #endif
  842. OS_EXT OS_STATE OSRunning; /* Flag indicating that kernel is running */
  843. /* ISR HANDLER TASK --------------------------- */
  844. #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
  845. OS_EXT OS_INT_Q *OSIntQInPtr;
  846. OS_EXT OS_INT_Q *OSIntQOutPtr;
  847. OS_EXT OS_OBJ_QTY OSIntQNbrEntries;
  848. OS_EXT OS_OBJ_QTY OSIntQMaxNbrEntries;
  849. OS_EXT OS_OBJ_QTY OSIntQOvfCtr;
  850. OS_EXT OS_TCB OSIntQTaskTCB;
  851. OS_EXT CPU_TS OSIntQTaskTimeMax;
  852. #endif
  853. /* FLAGS -------------------------------------- */
  854. #if OS_CFG_FLAG_EN > 0u
  855. #if OS_CFG_DBG_EN > 0u
  856. OS_EXT OS_FLAG_GRP *OSFlagDbgListPtr;
  857. #endif
  858. OS_EXT OS_OBJ_QTY OSFlagQty;
  859. #endif
  860. /* MEMORY MANAGEMENT -------------------------- */
  861. #if OS_CFG_MEM_EN > 0u
  862. #if OS_CFG_DBG_EN > 0u
  863. OS_EXT OS_MEM *OSMemDbgListPtr;
  864. #endif
  865. OS_EXT OS_OBJ_QTY OSMemQty; /* Number of memory partitions created */
  866. #endif
  867. /* OS_MSG POOL -------------------------------- */
  868. OS_EXT OS_MSG_POOL OSMsgPool; /* Pool of OS_MSG */
  869. /* MUTEX MANAGEMENT --------------------------- */
  870. #if OS_CFG_MUTEX_EN > 0u
  871. #if OS_CFG_DBG_EN > 0u
  872. OS_EXT OS_MUTEX *OSMutexDbgListPtr;
  873. #endif
  874. OS_EXT OS_OBJ_QTY OSMutexQty; /* Number of mutexes created */
  875. #endif
  876. /* PRIORITIES --------------------------------- */
  877. OS_EXT OS_PRIO OSPrioCur; /* Priority of current task */
  878. OS_EXT OS_PRIO OSPrioHighRdy; /* Priority of highest priority task */
  879. OS_EXT OS_PRIO OSPrioSaved; /* Saved priority level when Post Deferred */
  880. extern CPU_DATA OSPrioTbl[OS_PRIO_TBL_SIZE];
  881. /* QUEUES ------------------------------------- */
  882. #if OS_CFG_Q_EN > 0u
  883. #if OS_CFG_DBG_EN > 0u
  884. OS_EXT OS_Q *OSQDbgListPtr;
  885. #endif
  886. OS_EXT OS_OBJ_QTY OSQQty; /* Number of message queues created */
  887. #endif
  888. /* READY LIST --------------------------------- */
  889. OS_EXT OS_RDY_LIST OSRdyList[OS_CFG_PRIO_MAX]; /* Table of tasks ready to run */
  890. #ifdef OS_SAFETY_CRITICAL_IEC61508
  891. OS_EXT CPU_BOOLEAN OSSafetyCriticalStartFlag; /* Flag indicating that all init. done */
  892. #endif
  893. /* SCHEDULER ---------------------------------- */
  894. #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u
  895. OS_EXT CPU_TS_TMR OSSchedLockTimeBegin; /* Scheduler lock time measurement */
  896. OS_EXT CPU_TS_TMR OSSchedLockTimeMax;
  897. OS_EXT CPU_TS_TMR OSSchedLockTimeMaxCur;
  898. #endif
  899. OS_EXT OS_NESTING_CTR OSSchedLockNestingCtr; /* Lock nesting level */
  900. #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
  901. OS_EXT OS_TICK OSSchedRoundRobinDfltTimeQuanta;
  902. OS_EXT CPU_BOOLEAN OSSchedRoundRobinEn; /* Enable/Disable round-robin scheduling */
  903. #endif
  904. /* SEMAPHORES --------------------------------- */
  905. #if OS_CFG_SEM_EN > 0u
  906. #if OS_CFG_DBG_EN > 0u
  907. OS_EXT OS_SEM *OSSemDbgListPtr;
  908. #endif
  909. OS_EXT OS_OBJ_QTY OSSemQty; /* Number of semaphores created */
  910. #endif
  911. /* STATISTICS --------------------------------- */
  912. #if OS_CFG_STAT_TASK_EN > 0u
  913. OS_EXT OS_CPU_USAGE OSStatTaskCPUUsage; /* CPU Usage in % */
  914. OS_EXT OS_TICK OSStatTaskCtr;
  915. OS_EXT OS_TICK OSStatTaskCtrMax;
  916. OS_EXT OS_TICK OSStatTaskCtrRun;
  917. OS_EXT CPU_BOOLEAN OSStatTaskRdy;
  918. OS_EXT OS_TCB OSStatTaskTCB;
  919. OS_EXT CPU_TS OSStatTaskTimeMax;
  920. OS_EXT CPU_BOOLEAN OSStatResetFlag; /* Force the reset of the computed statistics */
  921. #endif
  922. /* TASKS -------------------------------------- */
  923. OS_EXT OS_CTX_SW_CTR OSTaskCtxSwCtr; /* Number of context switches */
  924. #if OS_CFG_DBG_EN > 0u
  925. OS_EXT OS_TCB *OSTaskDbgListPtr;
  926. #endif
  927. OS_EXT OS_OBJ_QTY OSTaskQty; /* Number of tasks created */
  928. /* TICK TASK ---------------------------------- */
  929. OS_EXT OS_TICK OSTickCtr; /* Counts the #ticks since startup or last set */
  930. OS_EXT OS_TCB OSTickTaskTCB;
  931. OS_EXT CPU_TS OSTickTaskTimeMax;
  932. #if OS_CFG_TMR_EN > 0u /* TIMERS ------------------------------------- */
  933. #if OS_CFG_DBG_EN > 0u
  934. OS_EXT OS_TMR *OSTmrDbgListPtr;
  935. #endif
  936. OS_EXT OS_OBJ_QTY OSTmrQty; /* Number of timers created */
  937. OS_EXT OS_TCB OSTmrTaskTCB; /* TCB of timer task */
  938. OS_EXT CPU_TS OSTmrTaskTimeMax;
  939. OS_EXT OS_TICK OSTmrTickCtr; /* Current time for the timers */
  940. OS_EXT OS_CTR OSTmrUpdateCnt; /* Counter for updating timers */
  941. OS_EXT OS_CTR OSTmrUpdateCtr;
  942. #endif
  943. /* TCBs --------------------------------------- */
  944. OS_EXT OS_TCB *OSTCBCurPtr; /* Pointer to currently running TCB */
  945. OS_EXT OS_TCB *OSTCBHighRdyPtr; /* Pointer to highest priority TCB */
  946. /*$PAGE*/
  947. /*
  948. ************************************************************************************************************************
  949. ************************************************************************************************************************
  950. * E X T E R N A L S
  951. ************************************************************************************************************************
  952. ************************************************************************************************************************
  953. */
  954. extern CPU_STK * const OSCfg_IdleTaskStkBasePtr;
  955. extern CPU_STK_SIZE const OSCfg_IdleTaskStkLimit;
  956. extern CPU_STK_SIZE const OSCfg_IdleTaskStkSize;
  957. extern CPU_INT32U const OSCfg_IdleTaskStkSizeRAM;
  958. extern OS_INT_Q * const OSCfg_IntQBasePtr;
  959. extern OS_OBJ_QTY const OSCfg_IntQSize;
  960. extern CPU_INT32U const OSCfg_IntQSizeRAM;
  961. extern CPU_STK * const OSCfg_IntQTaskStkBasePtr;
  962. extern CPU_STK_SIZE const OSCfg_IntQTaskStkLimit;
  963. extern CPU_STK_SIZE const OSCfg_IntQTaskStkSize;
  964. extern CPU_INT32U const OSCfg_IntQTaskStkSizeRAM;
  965. extern CPU_STK * const OSCfg_ISRStkBasePtr;
  966. extern CPU_STK_SIZE const OSCfg_ISRStkSize;
  967. extern CPU_INT32U const OSCfg_ISRStkSizeRAM;
  968. extern OS_MSG_SIZE const OSCfg_MsgPoolSize;
  969. extern CPU_INT32U const OSCfg_MsgPoolSizeRAM;
  970. extern OS_MSG * const OSCfg_MsgPoolBasePtr;
  971. extern OS_PRIO const OSCfg_StatTaskPrio;
  972. extern OS_RATE_HZ const OSCfg_StatTaskRate_Hz;
  973. extern CPU_STK * const OSCfg_StatTaskStkBasePtr;
  974. extern CPU_STK_SIZE const OSCfg_StatTaskStkLimit;
  975. extern CPU_STK_SIZE const OSCfg_StatTaskStkSize;
  976. extern CPU_INT32U const OSCfg_StatTaskStkSizeRAM;
  977. extern CPU_STK_SIZE const OSCfg_StkSizeMin;
  978. extern OS_RATE_HZ const OSCfg_TickRate_Hz;
  979. extern OS_PRIO const OSCfg_TickTaskPrio;
  980. extern CPU_STK * const OSCfg_TickTaskStkBasePtr;
  981. extern CPU_STK_SIZE const OSCfg_TickTaskStkLimit;
  982. extern CPU_STK_SIZE const OSCfg_TickTaskStkSize;
  983. extern CPU_INT32U const OSCfg_TickTaskStkSizeRAM;
  984. extern OS_OBJ_QTY const OSCfg_TickWheelSize;
  985. extern CPU_INT32U const OSCfg_TickWheelSizeRAM;
  986. extern OS_PRIO const OSCfg_TmrTaskPrio;
  987. extern OS_RATE_HZ const OSCfg_TmrTaskRate_Hz;
  988. extern CPU_STK * const OSCfg_TmrTaskStkBasePtr;
  989. extern CPU_STK_SIZE const OSCfg_TmrTaskStkLimit;
  990. extern CPU_STK_SIZE const OSCfg_TmrTaskStkSize;
  991. extern CPU_INT32U const OSCfg_TmrTaskStkSizeRAM;
  992. extern OS_OBJ_QTY const OSCfg_TmrWheelSize;
  993. extern CPU_INT32U const OSCfg_TmrSizeRAM;
  994. extern CPU_STK OSCfg_IdleTaskStk[];
  995. #if (OS_CFG_ISR_POST_DEFERRED_EN > 0u)
  996. extern CPU_STK OSCfg_IntQTaskStk[];
  997. extern OS_INT_Q OSCfg_IntQ[];
  998. #endif
  999. extern CPU_STK OSCfg_ISRStk[];
  1000. #if (OS_MSG_EN > 0u)
  1001. extern OS_MSG OSCfg_MsgPool[];
  1002. #endif
  1003. #if (OS_CFG_STAT_TASK_EN > 0u)
  1004. extern CPU_STK OSCfg_StatTaskStk[];
  1005. #endif
  1006. extern CPU_STK OSCfg_TickTaskStk[];
  1007. extern OS_TICK_SPOKE OSCfg_TickWheel[];
  1008. #if (OS_CFG_TMR_EN > 0u)
  1009. extern CPU_STK OSCfg_TmrTaskStk[];
  1010. extern OS_TMR_SPOKE OSCfg_TmrWheel[];
  1011. #endif
  1012. /*
  1013. ************************************************************************************************************************
  1014. ************************************************************************************************************************
  1015. * F U N C T I O N P R O T O T Y P E S
  1016. ************************************************************************************************************************
  1017. ************************************************************************************************************************
  1018. */
  1019. /* ================================================================================================================== */
  1020. /* EVENT FLAGS */
  1021. /* ================================================================================================================== */
  1022. #if OS_CFG_FLAG_EN > 0u
  1023. void OSFlagCreate (OS_FLAG_GRP *p_grp,
  1024. CPU_CHAR *p_name,
  1025. OS_FLAGS flags,
  1026. OS_ERR *p_err);
  1027. #if OS_CFG_FLAG_DEL_EN > 0u
  1028. OS_OBJ_QTY OSFlagDel (OS_FLAG_GRP *p_grp,
  1029. OS_OPT opt,
  1030. OS_ERR *p_err);
  1031. #endif
  1032. OS_FLAGS OSFlagPend (OS_FLAG_GRP *p_grp,
  1033. OS_FLAGS flags,
  1034. OS_TICK timeout,
  1035. OS_OPT opt,
  1036. CPU_TS *p_ts,
  1037. OS_ERR *p_err);
  1038. #if OS_CFG_FLAG_PEND_ABORT_EN > 0u
  1039. OS_OBJ_QTY OSFlagPendAbort (OS_FLAG_GRP *p_grp,
  1040. OS_OPT opt,
  1041. OS_ERR *p_err);
  1042. #endif
  1043. OS_FLAGS OSFlagPendGetFlagsRdy (OS_ERR *p_err);
  1044. OS_FLAGS OSFlagPost (OS_FLAG_GRP *p_grp,
  1045. OS_FLAGS flags,
  1046. OS_OPT opt,
  1047. OS_ERR *p_err);
  1048. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1049. void OS_FlagClr (OS_FLAG_GRP *p_grp);
  1050. void OS_FlagBlock (OS_PEND_DATA *p_pend_data,
  1051. OS_FLAG_GRP *p_grp,
  1052. OS_FLAGS flags,
  1053. OS_OPT opt,
  1054. OS_TICK timeout);
  1055. #if OS_CFG_DBG_EN > 0u
  1056. void OS_FlagDbgListAdd (OS_FLAG_GRP *p_grp);
  1057. void OS_FlagDbgListRemove (OS_FLAG_GRP *p_grp);
  1058. #endif
  1059. void OS_FlagInit (OS_ERR *p_err);
  1060. OS_FLAGS OS_FlagPost (OS_FLAG_GRP *p_grp,
  1061. OS_FLAGS flags,
  1062. OS_OPT opt,
  1063. CPU_TS ts,
  1064. OS_ERR *p_err);
  1065. void OS_FlagTaskRdy (OS_TCB *p_tcb,
  1066. OS_FLAGS flags_rdy,
  1067. CPU_TS ts);
  1068. #endif
  1069. /*$PAGE*/
  1070. /* ================================================================================================================== */
  1071. /* FIXED SIZE MEMORY BLOCK MANAGEMENT */
  1072. /* ================================================================================================================== */
  1073. #if OS_CFG_MEM_EN > 0u
  1074. void OSMemCreate (OS_MEM *p_mem,
  1075. CPU_CHAR *p_name,
  1076. void *p_addr,
  1077. OS_MEM_QTY n_blks,
  1078. OS_MEM_SIZE blk_size,
  1079. OS_ERR *p_err);
  1080. void *OSMemGet (OS_MEM *p_mem,
  1081. OS_ERR *p_err);
  1082. void OSMemPut (OS_MEM *p_mem,
  1083. void *p_blk,
  1084. OS_ERR *p_err);
  1085. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1086. #if OS_CFG_DBG_EN > 0u
  1087. void OS_MemDbgListAdd (OS_MEM *p_mem);
  1088. #endif
  1089. void OS_MemInit (OS_ERR *p_err);
  1090. #endif
  1091. /*$PAGE*/
  1092. /* ================================================================================================================== */
  1093. /* MUTUAL EXCLUSION SEMAPHORES */
  1094. /* ================================================================================================================== */
  1095. #if OS_CFG_MUTEX_EN > 0u
  1096. void OSMutexCreate (OS_MUTEX *p_mutex,
  1097. CPU_CHAR *p_name,
  1098. OS_ERR *p_err);
  1099. #if OS_CFG_MUTEX_DEL_EN > 0u
  1100. OS_OBJ_QTY OSMutexDel (OS_MUTEX *p_mutex,
  1101. OS_OPT opt,
  1102. OS_ERR *p_err);
  1103. #endif
  1104. void OSMutexPend (OS_MUTEX *p_mutex,
  1105. OS_TICK timeout,
  1106. OS_OPT opt,
  1107. CPU_TS *p_ts,
  1108. OS_ERR *p_err);
  1109. #if OS_CFG_MUTEX_PEND_ABORT_EN > 0u
  1110. OS_OBJ_QTY OSMutexPendAbort (OS_MUTEX *p_mutex,
  1111. OS_OPT opt,
  1112. OS_ERR *p_err);
  1113. #endif
  1114. void OSMutexPost (OS_MUTEX *p_mutex,
  1115. OS_OPT opt,
  1116. OS_ERR *p_err);
  1117. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1118. void OS_MutexClr (OS_MUTEX *p_mutex);
  1119. #if OS_CFG_DBG_EN > 0u
  1120. void OS_MutexDbgListAdd (OS_MUTEX *p_mutex);
  1121. void OS_MutexDbgListRemove (OS_MUTEX *p_mutex);
  1122. #endif
  1123. void OS_MutexInit (OS_ERR *p_err);
  1124. #endif
  1125. /*$PAGE*/
  1126. /* ================================================================================================================== */
  1127. /* MESSAGE QUEUES */
  1128. /* ================================================================================================================== */
  1129. #if OS_CFG_PEND_MULTI_EN > 0u
  1130. OS_OBJ_QTY OSPendMulti (OS_PEND_DATA *p_pend_data_tbl,
  1131. OS_OBJ_QTY tbl_size,
  1132. OS_TICK timeout,
  1133. OS_OPT opt,
  1134. OS_ERR *p_err);
  1135. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1136. OS_OBJ_QTY OS_PendMultiGetRdy (OS_PEND_DATA *p_pend_data_tbl,
  1137. OS_OBJ_QTY tbl_size);
  1138. CPU_BOOLEAN OS_PendMultiValidate (OS_PEND_DATA *p_pend_data_tbl,
  1139. OS_OBJ_QTY tbl_size);
  1140. void OS_PendMultiWait (OS_PEND_DATA *p_pend_data_tbl,
  1141. OS_OBJ_QTY tbl_size,
  1142. OS_TICK timeout);
  1143. #endif
  1144. /* ================================================================================================================== */
  1145. /* MESSAGE QUEUES */
  1146. /* ================================================================================================================== */
  1147. #if OS_CFG_Q_EN > 0u
  1148. void OSQCreate (OS_Q *p_q,
  1149. CPU_CHAR *p_name,
  1150. OS_MSG_QTY max_qty,
  1151. OS_ERR *p_err);
  1152. #if OS_CFG_Q_DEL_EN > 0u
  1153. OS_OBJ_QTY OSQDel (OS_Q *p_q,
  1154. OS_OPT opt,
  1155. OS_ERR *p_err);
  1156. #endif
  1157. #if OS_CFG_Q_FLUSH_EN > 0u
  1158. OS_MSG_QTY OSQFlush (OS_Q *p_q,
  1159. OS_ERR *p_err);
  1160. #endif
  1161. void *OSQPend (OS_Q *p_q,
  1162. OS_TICK timeout,
  1163. OS_OPT opt,
  1164. OS_MSG_SIZE *p_msg_size,
  1165. CPU_TS *p_ts,
  1166. OS_ERR *p_err);
  1167. #if OS_CFG_Q_PEND_ABORT_EN > 0u
  1168. OS_OBJ_QTY OSQPendAbort (OS_Q *p_q,
  1169. OS_OPT opt,
  1170. OS_ERR *p_err);
  1171. #endif
  1172. void OSQPost (OS_Q *p_q,
  1173. void *p_void,
  1174. OS_MSG_SIZE msg_size,
  1175. OS_OPT opt,
  1176. OS_ERR *p_err);
  1177. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1178. void OS_QClr (OS_Q *p_q);
  1179. #if OS_CFG_DBG_EN > 0u
  1180. void OS_QDbgListAdd (OS_Q *p_q);
  1181. void OS_QDbgListRemove (OS_Q *p_q);
  1182. #endif
  1183. void OS_QInit (OS_ERR *p_err);
  1184. void OS_QPost (OS_Q *p_q,
  1185. void *p_void,
  1186. OS_MSG_SIZE msg_size,
  1187. OS_OPT opt,
  1188. CPU_TS ts,
  1189. OS_ERR *p_err);
  1190. #endif
  1191. /*$PAGE*/
  1192. /* ================================================================================================================== */
  1193. /* SEMAPHORES */
  1194. /* ================================================================================================================== */
  1195. #if OS_CFG_SEM_EN > 0u
  1196. void OSSemCreate (OS_SEM *p_sem,
  1197. CPU_CHAR *p_name,
  1198. OS_SEM_CTR cnt,
  1199. OS_ERR *p_err);
  1200. OS_OBJ_QTY OSSemDel (OS_SEM *p_sem,
  1201. OS_OPT opt,
  1202. OS_ERR *p_err);
  1203. OS_SEM_CTR OSSemPend (OS_SEM *p_sem,
  1204. OS_TICK timeout,
  1205. OS_OPT opt,
  1206. CPU_TS *p_ts,
  1207. OS_ERR *p_err);
  1208. #if OS_CFG_SEM_PEND_ABORT_EN > 0u
  1209. OS_OBJ_QTY OSSemPendAbort (OS_SEM *p_sem,
  1210. OS_OPT opt,
  1211. OS_ERR *p_err);
  1212. #endif
  1213. OS_SEM_CTR OSSemPost (OS_SEM *p_sem,
  1214. OS_OPT opt,
  1215. OS_ERR *p_err);
  1216. #if OS_CFG_SEM_SET_EN > 0u
  1217. void OSSemSet (OS_SEM *p_sem,
  1218. OS_SEM_CTR cnt,
  1219. OS_ERR *p_err);
  1220. #endif
  1221. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1222. void OS_SemClr (OS_SEM *p_sem);
  1223. #if OS_CFG_DBG_EN > 0u
  1224. void OS_SemDbgListAdd (OS_SEM *p_sem);
  1225. void OS_SemDbgListRemove (OS_SEM *p_sem);
  1226. #endif
  1227. void OS_SemInit (OS_ERR *p_err);
  1228. OS_SEM_CTR OS_SemPost (OS_SEM *p_sem,
  1229. OS_OPT opt,
  1230. CPU_TS ts,
  1231. OS_ERR *p_err);
  1232. #endif
  1233. /*$PAGE*/
  1234. /* ================================================================================================================== */
  1235. /* TASK MANAGEMENT */
  1236. /* ================================================================================================================== */
  1237. #if OS_CFG_TASK_CHANGE_PRIO_EN > 0u
  1238. void OSTaskChangePrio (OS_TCB *p_tcb,
  1239. OS_PRIO prio_new,
  1240. OS_ERR *p_err);
  1241. #endif
  1242. void OSTaskCreate (OS_TCB *p_tcb,
  1243. CPU_CHAR *p_name,
  1244. OS_TASK_PTR p_task,
  1245. void *p_arg,
  1246. OS_PRIO prio,
  1247. CPU_STK *p_stk_base,
  1248. CPU_STK_SIZE stk_limit,
  1249. CPU_STK_SIZE stk_size,
  1250. OS_MSG_QTY q_size,
  1251. OS_TICK time_quanta,
  1252. void *p_ext,
  1253. OS_OPT opt,
  1254. OS_ERR *p_err);
  1255. #if OS_CFG_TASK_DEL_EN > 0u
  1256. void OSTaskDel (OS_TCB *p_tcb,
  1257. OS_ERR *p_err);
  1258. #endif
  1259. #if OS_CFG_TASK_Q_EN > 0u
  1260. OS_MSG_QTY OSTaskQFlush (OS_TCB *p_tcb,
  1261. OS_ERR *p_err);
  1262. void *OSTaskQPend (OS_TICK timeout,
  1263. OS_OPT opt,
  1264. OS_MSG_SIZE *p_msg_size,
  1265. CPU_TS *p_ts,
  1266. OS_ERR *p_err);
  1267. CPU_BOOLEAN OSTaskQPendAbort (OS_TCB *p_tcb,
  1268. OS_OPT opt,
  1269. OS_ERR *p_err);
  1270. void OSTaskQPost (OS_TCB *p_tcb,
  1271. void *p_void,
  1272. OS_MSG_SIZE msg_size,
  1273. OS_OPT opt,
  1274. OS_ERR *p_err);
  1275. #endif
  1276. #if OS_CFG_TASK_SUSPEND_EN > 0u
  1277. void OSTaskResume (OS_TCB *p_tcb,
  1278. OS_ERR *p_err);
  1279. void OSTaskSuspend (OS_TCB *p_tcb,
  1280. OS_ERR *p_err);
  1281. #endif
  1282. #if OS_CFG_TASK_REG_TBL_SIZE > 0u
  1283. OS_REG OSTaskRegGet (OS_TCB *p_tcb,
  1284. OS_REG_ID id,
  1285. OS_ERR *p_err);
  1286. void OSTaskRegSet (OS_TCB *p_tcb,
  1287. OS_REG_ID id,
  1288. OS_REG value,
  1289. OS_ERR *p_err);
  1290. #endif
  1291. OS_SEM_CTR OSTaskSemPend (OS_TICK timeout,
  1292. OS_OPT opt,
  1293. CPU_TS *p_ts,
  1294. OS_ERR *p_err);
  1295. #if (OS_CFG_TASK_SEM_PEND_ABORT_EN > 0u)
  1296. CPU_BOOLEAN OSTaskSemPendAbort (OS_TCB *p_tcb,
  1297. OS_OPT opt,
  1298. OS_ERR *p_err);
  1299. #endif
  1300. OS_SEM_CTR OSTaskSemPost (OS_TCB *p_tcb,
  1301. OS_OPT opt,
  1302. OS_ERR *p_err);
  1303. OS_SEM_CTR OSTaskSemSet (OS_TCB *p_tcb,
  1304. OS_SEM_CTR cnt,
  1305. OS_ERR *p_err);
  1306. #if OS_CFG_STAT_TASK_STK_CHK_EN > 0u
  1307. void OSTaskStkChk (OS_TCB *p_tcb,
  1308. CPU_STK_SIZE *p_free,
  1309. CPU_STK_SIZE *p_used,
  1310. OS_ERR *p_err);
  1311. #endif
  1312. #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
  1313. void OSTaskTimeQuantaSet (OS_TCB *p_tcb,
  1314. OS_TICK time_quanta,
  1315. OS_ERR *p_err);
  1316. #endif
  1317. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1318. void OS_TaskBlock (OS_TCB *p_tcb,
  1319. OS_TICK timeout);
  1320. #if OS_CFG_DBG_EN > 0u
  1321. void OS_TaskDbgListAdd (OS_TCB *p_tcb);
  1322. void OS_TaskDbgListRemove (OS_TCB *p_tcb);
  1323. #endif
  1324. void OS_TaskInit (OS_ERR *p_err);
  1325. void OS_TaskInitTCB (OS_TCB *p_tcb);
  1326. void OS_TaskQPost (OS_TCB *p_tcb,
  1327. void *p_void,
  1328. OS_MSG_SIZE msg_size,
  1329. OS_OPT opt,
  1330. CPU_TS ts,
  1331. OS_ERR *p_err);
  1332. void OS_TaskRdy (OS_TCB *p_tcb);
  1333. void OS_TaskReturn (void);
  1334. OS_SEM_CTR OS_TaskSemPost (OS_TCB *p_tcb,
  1335. OS_OPT opt,
  1336. CPU_TS ts,
  1337. OS_ERR *p_err);
  1338. /*$PAGE*/
  1339. /* ================================================================================================================== */
  1340. /* TIME MANAGEMENT */
  1341. /* ================================================================================================================== */
  1342. void OSTimeDly (OS_TICK dly,
  1343. OS_OPT opt,
  1344. OS_ERR *p_err);
  1345. #if OS_CFG_TIME_DLY_HMSM_EN > 0u
  1346. void OSTimeDlyHMSM (CPU_INT16U hours,
  1347. CPU_INT16U minutes,
  1348. CPU_INT16U seconds,
  1349. CPU_INT32U milli,
  1350. OS_OPT opt,
  1351. OS_ERR *p_err);
  1352. #endif
  1353. #if OS_CFG_TIME_DLY_RESUME_EN > 0u
  1354. void OSTimeDlyResume (OS_TCB *p_tcb,
  1355. OS_ERR *p_err);
  1356. #endif
  1357. OS_TICK OSTimeGet (OS_ERR *p_err);
  1358. void OSTimeSet (OS_TICK ticks,
  1359. OS_ERR *p_err);
  1360. void OSTimeTick (void);
  1361. /*$PAGE*/
  1362. /* ================================================================================================================== */
  1363. /* TIMER MANAGEMENT */
  1364. /* ================================================================================================================== */
  1365. #if OS_CFG_TMR_EN > 0u
  1366. void OSTmrCreate (OS_TMR *p_tmr,
  1367. CPU_CHAR *p_name,
  1368. OS_TICK dly,
  1369. OS_TICK period,
  1370. OS_OPT opt,
  1371. OS_TMR_CALLBACK_PTR p_callback,
  1372. void *p_callback_arg,
  1373. OS_ERR *p_err);
  1374. CPU_BOOLEAN OSTmrDel (OS_TMR *p_tmr,
  1375. OS_ERR *p_err);
  1376. OS_TICK OSTmrRemainGet (OS_TMR *p_tmr,
  1377. OS_ERR *p_err);
  1378. CPU_BOOLEAN OSTmrStart (OS_TMR *p_tmr,
  1379. OS_ERR *p_err);
  1380. OS_STATE OSTmrStateGet (OS_TMR *p_tmr,
  1381. OS_ERR *p_err);
  1382. CPU_BOOLEAN OSTmrStop (OS_TMR *p_tmr,
  1383. OS_OPT opt,
  1384. void *p_callback_arg,
  1385. OS_ERR *p_err);
  1386. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1387. void OS_TmrClr (OS_TMR *p_tmr);
  1388. #if OS_CFG_DBG_EN > 0u
  1389. void OS_TmrDbgListAdd (OS_TMR *p_tmr);
  1390. void OS_TmrDbgListRemove (OS_TMR *p_tmr);
  1391. #endif
  1392. void OS_TmrInit (OS_ERR *p_err);
  1393. void OS_TmrLink (OS_TMR *p_tmr,
  1394. OS_OPT opt);
  1395. void OS_TmrResetPeak (void);
  1396. void OS_TmrUnlink (OS_TMR *p_tmr);
  1397. void OS_TmrTask (void *p_arg);
  1398. #endif
  1399. /*$PAGE*/
  1400. /* ================================================================================================================== */
  1401. /* MISCELLANEOUS */
  1402. /* ================================================================================================================== */
  1403. void OSInit (OS_ERR *p_err);
  1404. void OSIntEnter (void);
  1405. void OSIntExit (void);
  1406. void OSMsgPoolExtend (OS_MSG *p_msg,
  1407. OS_MSG_QTY size,
  1408. OS_ERR *p_err);
  1409. #ifdef OS_SAFETY_CRITICAL_IEC61508
  1410. void OSSafetyCriticalStart (void);
  1411. #endif
  1412. #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
  1413. void OSSchedRoundRobinCfg (CPU_BOOLEAN en,
  1414. OS_TICK dflt_time_quanta,
  1415. OS_ERR *p_err);
  1416. void OSSchedRoundRobinYield (OS_ERR *p_err);
  1417. #endif
  1418. void OSSched (void);
  1419. void OSSchedLock (OS_ERR *p_err);
  1420. void OSSchedUnlock (OS_ERR *p_err);
  1421. void OSStart (OS_ERR *p_err);
  1422. #if OS_CFG_STAT_TASK_EN > 0u
  1423. void OSStatReset (OS_ERR *p_err);
  1424. void OSStatTaskCPUUsageInit (OS_ERR *p_err);
  1425. #endif
  1426. CPU_INT16U OSVersion (OS_ERR *p_err);
  1427. /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
  1428. void OS_IdleTask (void *p_arg);
  1429. void OS_IdleTaskInit (OS_ERR *p_err);
  1430. #if OS_CFG_STAT_TASK_EN > 0u
  1431. void OS_StatTask (void *p_arg);
  1432. #endif
  1433. void OS_StatTaskInit (OS_ERR *p_err);
  1434. void OS_TickTask (void *p_arg);
  1435. void OS_TickTaskInit (OS_ERR *p_err);
  1436. /*$PAGE*/
  1437. /*
  1438. ************************************************************************************************************************
  1439. ************************************************************************************************************************
  1440. * T A R G E T S P E C I F I C F U N C T I O N S
  1441. ************************************************************************************************************************
  1442. ************************************************************************************************************************
  1443. */
  1444. void OSInitHook (void);
  1445. void OSTaskCreateHook (OS_TCB *p_tcb);
  1446. void OSTaskDelHook (OS_TCB *p_tcb);
  1447. void OSIdleTaskHook (void);
  1448. void OSTaskReturnHook (OS_TCB *p_tcb);
  1449. void OSStatTaskHook (void);
  1450. CPU_STK *OSTaskStkInit (OS_TASK_PTR p_task,
  1451. void *p_arg,
  1452. CPU_STK *p_stk_base,
  1453. CPU_STK *p_stk_limit,
  1454. CPU_STK_SIZE stk_size,
  1455. OS_OPT opt);
  1456. void OSTaskSwHook (void);
  1457. void OSTimeTickHook (void);
  1458. /*$PAGE*/
  1459. /*
  1460. ************************************************************************************************************************
  1461. ************************************************************************************************************************
  1462. * u C / O S - I I I I N T E R N A L F U N C T I O N P R O T O T Y P E S
  1463. ************************************************************************************************************************
  1464. ************************************************************************************************************************
  1465. */
  1466. void OSCfg_Init (void);
  1467. #if OS_CFG_DBG_EN > 0u
  1468. void OS_Dbg_Init (void);
  1469. #endif
  1470. #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
  1471. void OS_IntQTaskInit (OS_ERR *p_err);
  1472. void OS_IntQPost (OS_OBJ_TYPE type,
  1473. void *p_obj,
  1474. void *p_void,
  1475. OS_MSG_SIZE msg_size,
  1476. OS_FLAGS flags,
  1477. OS_OPT opt,
  1478. CPU_TS ts,
  1479. OS_ERR *p_err);
  1480. void OS_IntQRePost (void);
  1481. void OS_IntQTask (void *p_arg);
  1482. #endif
  1483. /* ----------------------------------------------- MESSAGE MANAGEMENT ----------------------------------------------- */
  1484. void OS_MsgPoolCreate (OS_MSG *p_msg,
  1485. OS_MSG_QTY size);
  1486. void OS_MsgPoolInit (OS_ERR *p_err);
  1487. void OS_MsgQEntriesPeakReset (OS_MSG_Q *p_msg_q);
  1488. OS_MSG_QTY OS_MsgQFreeAll (OS_MSG_Q *p_msg_q);
  1489. void *OS_MsgQGet (OS_MSG_Q *p_msg_q,
  1490. OS_MSG_SIZE *p_msg_size,
  1491. CPU_TS *p_ts,
  1492. OS_ERR *p_err);
  1493. void OS_MsgQInit (OS_MSG_Q *p_msg_q,
  1494. OS_MSG_QTY size);
  1495. void OS_MsgQPut (OS_MSG_Q *p_msg_q,
  1496. void *p_void,
  1497. OS_MSG_SIZE msg_size,
  1498. OS_OPT opt,
  1499. CPU_TS ts,
  1500. OS_ERR *p_err);
  1501. /* ---------------------------------------------- PEND/POST MANAGEMENT ---------------------------------------------- */
  1502. void OS_Pend (OS_PEND_DATA *p_pend_data,
  1503. OS_PEND_OBJ *p_obj,
  1504. OS_STATE pending_on,
  1505. OS_TICK timeout);
  1506. void OS_PendAbort (OS_PEND_OBJ *p_obj,
  1507. OS_TCB *p_tcb,
  1508. CPU_TS ts);
  1509. void OS_PendAbort1 (OS_PEND_OBJ *p_obj,
  1510. OS_TCB *p_tcb,
  1511. CPU_TS ts);
  1512. void OS_PendObjDel (OS_PEND_OBJ *p_obj,
  1513. OS_TCB *p_tcb,
  1514. CPU_TS ts);
  1515. void OS_PendObjDel1 (OS_PEND_OBJ *p_obj,
  1516. OS_TCB *p_tcb,
  1517. CPU_TS ts);
  1518. void OS_Post (OS_PEND_OBJ *p_obj,
  1519. OS_TCB *p_tcb,
  1520. void *p_void,
  1521. OS_MSG_SIZE msg_size,
  1522. CPU_TS ts);
  1523. void OS_Post1 (OS_PEND_OBJ *p_obj,
  1524. OS_TCB *p_tcb,
  1525. void *p_void,
  1526. OS_MSG_SIZE msg_size,
  1527. CPU_TS ts);
  1528. /* ----------------------------------------------- PRIORITY MANAGEMENT ---------------------------------------------- */
  1529. void OS_PrioInit (void);
  1530. void OS_PrioInsert (OS_PRIO prio);
  1531. void OS_PrioRemove (OS_PRIO prio);
  1532. OS_PRIO OS_PrioGetHighest (void);
  1533. /* --------------------------------------------------- SCHEDULING --------------------------------------------------- */
  1534. #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
  1535. void OS_Sched0 (void);
  1536. #endif
  1537. #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u
  1538. void OS_SchedLockTimeMeasStart (void);
  1539. void OS_SchedLockTimeMeasStop (void);
  1540. #endif
  1541. #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
  1542. void OS_SchedRoundRobin (OS_RDY_LIST *p_rdy_list);
  1543. #endif
  1544. /* --------------------------------------------- READY LIST MANAGEMENT ---------------------------------------------- */
  1545. void OS_RdyListInit (void);
  1546. void OS_RdyListInsert (OS_TCB *p_tcb);
  1547. void OS_RdyListInsertHead (OS_TCB *p_tcb);
  1548. void OS_RdyListInsertTail (OS_TCB *p_tcb);
  1549. void OS_RdyListMoveHeadToTail (OS_RDY_LIST *p_rdy_list);
  1550. void OS_RdyListRemove (OS_TCB *p_tcb);
  1551. /* ---------------------------------------------- PEND LIST MANAGEMENT ---------------------------------------------- */
  1552. void OS_PendDataInit (OS_TCB *p_tcb,
  1553. OS_PEND_DATA *p_pend_data_tbl,
  1554. OS_OBJ_QTY tbl_size);
  1555. #if OS_CFG_DBG_EN > 0u
  1556. void OS_PendDbgNameAdd (OS_PEND_OBJ *p_obj,
  1557. OS_TCB *p_tcb);
  1558. void OS_PendDbgNameRemove (OS_PEND_OBJ *p_obj,
  1559. OS_TCB *p_tcb);
  1560. #endif
  1561. OS_PEND_LIST *OS_PendListGetPtr (OS_PEND_OBJ *p_obj);
  1562. void OS_PendListInit (OS_PEND_LIST *p_pend_list);
  1563. void OS_PendListInsertHead (OS_PEND_LIST *p_pend_list,
  1564. OS_PEND_DATA *p_pend_data);
  1565. void OS_PendListInsertPrio (OS_PEND_LIST *p_pend_list,
  1566. OS_PEND_DATA *p_pend_data);
  1567. void OS_PendListChangePrio (OS_TCB *p_tcb,
  1568. OS_PRIO prio_new);
  1569. void OS_PendListRemove (OS_TCB *p_tcb);
  1570. void OS_PendListRemove1 (OS_PEND_LIST *p_pend_list,
  1571. OS_PEND_DATA *p_pend_data);
  1572. /* ---------------------------------------------- TICK LIST MANAGEMENT ---------------------------------------------- */
  1573. void OS_TickListInit (void);
  1574. void OS_TickListInsert (OS_TCB *p_tcb,
  1575. OS_TICK time,
  1576. OS_OPT opt,
  1577. OS_ERR *p_err);
  1578. void OS_TickListRemove (OS_TCB *p_tcb);
  1579. void OS_TickListResetPeak (void);
  1580. void OS_TickListUpdate (void);
  1581. /*$PAGE*/
  1582. /*
  1583. ************************************************************************************************************************
  1584. * LOOK FOR MISSING #define CONSTANTS
  1585. *
  1586. * This section is used to generate ERROR messages at compile time if certain #define constants are
  1587. * MISSING in OS_CFG.H. This allows you to quickly determine the source of the error.
  1588. *
  1589. * You SHOULD NOT change this section UNLESS you would like to add more comments as to the source of the
  1590. * compile time error.
  1591. ************************************************************************************************************************
  1592. */
  1593. /*
  1594. ************************************************************************************************************************
  1595. * MISCELLANEOUS
  1596. ************************************************************************************************************************
  1597. */
  1598. #ifndef OS_CFG_APP_HOOKS_EN
  1599. #error "OS_CFG.H, Missing OS_CFG_APP_HOOKS_EN: Enable (1) or Disable (0) application specific hook functions"
  1600. #endif
  1601. #ifndef OS_CFG_ARG_CHK_EN
  1602. #error "OS_CFG.H, Missing OS_CFG_ARG_CHK_EN: Enable (1) or Disable (0) argument checking"
  1603. #endif
  1604. #ifndef OS_CFG_DBG_EN
  1605. #error "OS_CFG.H, Missing OS_CFG_DBG_EN: Allows you to include variables for debugging or not"
  1606. #endif
  1607. #ifndef OS_CFG_CALLED_FROM_ISR_CHK_EN
  1608. #error "OS_CFG.H, Missing OS_CFG_CALLED_FROM_ISR_CHK_EN: Enable (1) or Disable (0) checking whether in an ISR in kernel services"
  1609. #endif
  1610. #ifndef OS_CFG_OBJ_TYPE_CHK_EN
  1611. #error "OS_CFG.H, Missing OS_CFG_OBJ_TYPE_CHK_EN: Enable (1) or Disable (0) checking for proper object types in kernel services"
  1612. #endif
  1613. #ifndef OS_CFG_PEND_MULTI_EN
  1614. #error "OS_CFG.H, Missing OS_CFG_PEND_MULTI_EN: Enable (1) or Disable (0) multi-pend feature"
  1615. #endif
  1616. #if OS_CFG_PRIO_MAX < 8u
  1617. #error "OS_CFG.H, OS_CFG_PRIO_MAX must be >= 8"
  1618. #endif
  1619. #ifndef OS_CFG_SCHED_LOCK_TIME_MEAS_EN
  1620. #error "OS_CFG.H, Missing OS_CFG_SCHED_LOCK_TIME_MEAS_EN: Include code to measure scheduler lock time"
  1621. #else
  1622. #if (OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u) && \
  1623. (OS_CFG_TS_EN < 1u)
  1624. #error "OS_CFG.H, OS_CFG_TS_EN must be Enabled (1) to measure scheduler lock time"
  1625. #endif
  1626. #endif
  1627. #ifndef OS_CFG_SCHED_ROUND_ROBIN_EN
  1628. #error "OS_CFG.H, Missing OS_CFG_SCHED_ROUND_ROBIN_EN: Include code for Round Robin Scheduling"
  1629. #endif
  1630. #ifndef OS_CFG_STK_SIZE_MIN
  1631. #error "OS_CFG.H, Missing OS_CFG_STK_SIZE_MIN: Determines the minimum size for a task stack"
  1632. #endif
  1633. #ifndef OS_CFG_TS_EN
  1634. #error "OS_CFG.H, Missing OS_CFG_TS_EN: Determines whether time stamping is enabled"
  1635. #else
  1636. #if (OS_CFG_TS_EN > 0u) && \
  1637. (CPU_CFG_TS_EN == DEF_DISABLED)
  1638. #error "CPU_CFG.H, CPU_CFG_TS_32_EN must be Enabled (1) to use time stamp feature"
  1639. #endif
  1640. #endif
  1641. /*
  1642. ************************************************************************************************************************
  1643. * EVENT FLAGS
  1644. ************************************************************************************************************************
  1645. */
  1646. #ifndef OS_CFG_FLAG_EN
  1647. #error "OS_CFG.H, Missing OS_CFG_FLAG_EN: Enable (1) or Disable (0) code generation for Event Flags"
  1648. #else
  1649. #ifndef OS_CFG_FLAG_DEL_EN
  1650. #error "OS_CFG.H, Missing OS_CFG_FLAG_DEL_EN: Include code for OSFlagDel()"
  1651. #endif
  1652. #ifndef OS_CFG_FLAG_MODE_CLR_EN
  1653. #error "OS_CFG.H, Missing OS_CFG_FLAG_MODE_CLR_EN: Include code for Wait on Clear EVENT FLAGS"
  1654. #endif
  1655. #ifndef OS_CFG_FLAG_PEND_ABORT_EN
  1656. #error "OS_CFG.H, Missing OS_CFG_FLAG_PEND_ABORT_EN: Include code for aborting pends from another task"
  1657. #endif
  1658. #endif
  1659. /*
  1660. ************************************************************************************************************************
  1661. * MEMORY MANAGEMENT
  1662. ************************************************************************************************************************
  1663. */
  1664. #ifndef OS_CFG_MEM_EN
  1665. #error "OS_CFG.H, Missing OS_CFG_MEM_EN: Enable (1) or Disable (0) code generation for MEMORY MANAGER"
  1666. #endif
  1667. /*
  1668. ************************************************************************************************************************
  1669. * MUTUAL EXCLUSION SEMAPHORES
  1670. ************************************************************************************************************************
  1671. */
  1672. #ifndef OS_CFG_MUTEX_EN
  1673. #error "OS_CFG.H, Missing OS_CFG_MUTEX_EN: Enable (1) or Disable (0) code generation for MUTEX"
  1674. #else
  1675. #ifndef OS_CFG_MUTEX_DEL_EN
  1676. #error "OS_CFG.H, Missing OS_CFG_MUTEX_DEL_EN: Include code for OSMutexDel()"
  1677. #endif
  1678. #ifndef OS_CFG_MUTEX_PEND_ABORT_EN
  1679. #error "OS_CFG.H, Missing OS_CFG_MUTEX_PEND_ABORT_EN: Include code for OSMutexPendAbort()"
  1680. #endif
  1681. #endif
  1682. /*
  1683. ************************************************************************************************************************
  1684. * MESSAGE QUEUES
  1685. ************************************************************************************************************************
  1686. */
  1687. #ifndef OS_CFG_Q_EN
  1688. #error "OS_CFG.H, Missing OS_CFG_Q_EN: Enable (1) or Disable (0) code generation for QUEUES"
  1689. #else
  1690. #ifndef OS_CFG_Q_DEL_EN
  1691. #error "OS_CFG.H, Missing OS_CFG_Q_DEL_EN: Include code for OSQDel()"
  1692. #endif
  1693. #ifndef OS_CFG_Q_FLUSH_EN
  1694. #error "OS_CFG.H, Missing OS_CFG_Q_FLUSH_EN: Include code for OSQFlush()"
  1695. #endif
  1696. #ifndef OS_CFG_Q_PEND_ABORT_EN
  1697. #error "OS_CFG.H, Missing OS_CFG_Q_PEND_ABORT_EN: Include code for OSQPendAbort()"
  1698. #endif
  1699. #endif
  1700. /*
  1701. ************************************************************************************************************************
  1702. * SEMAPHORES
  1703. ************************************************************************************************************************
  1704. */
  1705. #ifndef OS_CFG_SEM_EN
  1706. #error "OS_CFG.H, Missing OS_CFG_SEM_EN: Enable (1) or Disable (0) code generation for SEMAPHORES"
  1707. #else
  1708. #ifndef OS_CFG_SEM_DEL_EN
  1709. #error "OS_CFG.H, Missing OS_CFG_SEM_DEL_EN: Include code for OSSemDel()"
  1710. #endif
  1711. #ifndef OS_CFG_SEM_PEND_ABORT_EN
  1712. #error "OS_CFG.H, Missing OS_CFG_SEM_PEND_ABORT_EN: Include code for OSSemPendAbort()"
  1713. #endif
  1714. #ifndef OS_CFG_SEM_SET_EN
  1715. #error "OS_CFG.H, Missing OS_CFG_SEM_SET_EN: Include code for OSSemSet()"
  1716. #endif
  1717. #endif
  1718. /*
  1719. ************************************************************************************************************************
  1720. * TASK MANAGEMENT
  1721. ************************************************************************************************************************
  1722. */
  1723. #ifndef OS_CFG_STAT_TASK_EN
  1724. #error "OS_CFG.H, Missing OS_CFG_STAT_TASK_EN: Enable (1) or Disable(0) the statistics task"
  1725. #endif
  1726. #ifndef OS_CFG_STAT_TASK_STK_CHK_EN
  1727. #error "OS_CFG.H, Missing OS_CFG_STAT_TASK_STK_CHK_EN: Check task stacks from statistics task"
  1728. #endif
  1729. #ifndef OS_CFG_TASK_CHANGE_PRIO_EN
  1730. #error "OS_CFG.H, Missing OS_CFG_TASK_CHANGE_PRIO_EN: Include code for OSTaskChangePrio()"
  1731. #endif
  1732. #ifndef OS_CFG_TASK_DEL_EN
  1733. #error "OS_CFG.H, Missing OS_CFG_TASK_DEL_EN: Include code for OSTaskDel()"
  1734. #endif
  1735. #ifndef OS_CFG_TASK_Q_EN
  1736. #error "OS_CFG.H, Missing OS_CFG_TASK_Q_EN: Include code for OSTaskQxxx()"
  1737. #endif
  1738. #ifndef OS_CFG_TASK_Q_PEND_ABORT_EN
  1739. #error "OS_CFG.H, Missing OS_CFG_TASK_Q_PEND_ABORT_EN: Include code for OSTaskQPendAbort()"
  1740. #endif
  1741. #ifndef OS_CFG_TASK_PROFILE_EN
  1742. #error "OS_CFG.H, Missing OS_CFG_TASK_PROFILE_EN: Include code for task profiling"
  1743. #endif
  1744. #ifndef OS_CFG_TASK_REG_TBL_SIZE
  1745. #error "OS_CFG.H, Missing OS_CFG_TASK_REG_TBL_SIZE: Include support for task specific registers"
  1746. #endif
  1747. #ifndef OS_CFG_TASK_SEM_PEND_ABORT_EN
  1748. #error "OS_CFG.H, Missing OS_CFG_TASK_SEM_PEND_ABORT_EN: Include code for OSTaskSemPendAbort()"
  1749. #endif
  1750. #ifndef OS_CFG_TASK_SUSPEND_EN
  1751. #error "OS_CFG.H, Missing OS_CFG_TASK_SUSPEND_EN: Include code for OSTaskSuspend() and OSTaskResume()"
  1752. #endif
  1753. /*
  1754. ************************************************************************************************************************
  1755. * TIME MANAGEMENT
  1756. ************************************************************************************************************************
  1757. */
  1758. #ifndef OS_CFG_TIME_DLY_HMSM_EN
  1759. #error "OS_CFG.H, Missing OS_CFG_TIME_DLY_HMSM_EN: Include code for OSTimeDlyHMSM()"
  1760. #endif
  1761. #ifndef OS_CFG_TIME_DLY_RESUME_EN
  1762. #error "OS_CFG.H, Missing OS_CFG_TIME_DLY_RESUME_EN: Include code for OSTimeDlyResume()"
  1763. #endif
  1764. /*
  1765. ************************************************************************************************************************
  1766. * TIMER MANAGEMENT
  1767. ************************************************************************************************************************
  1768. */
  1769. #ifndef OS_CFG_TMR_EN
  1770. #error "OS_CFG.H, Missing OS_CFG_TMR_EN: When (1) enables code generation for Timer Management"
  1771. #else
  1772. #ifndef OS_CFG_TMR_DEL_EN
  1773. #error "OS_CFG.H, Missing OS_CFG_TMR_DEL_EN: Enables (1) or Disables (0) code for OSTmrDel()"
  1774. #endif
  1775. #endif
  1776. /*
  1777. ************************************************************************************************************************
  1778. * LIBRARY CONFIGURATION ERRORS
  1779. ************************************************************************************************************************
  1780. */
  1781. /* See 'os.h Note #1a'. */
  1782. #if LIB_VERSION < 126u
  1783. #error "lib_def.h, LIB_VERSION SHOULD be >= V1.26"
  1784. #endif
  1785. /* See 'os.h Note #1b'. */
  1786. #if CPU_CORE_VERSION < 125u
  1787. #error "cpu_core.h, CPU_CORE_VERSION SHOULD be >= V1.25"
  1788. #endif
  1789. /*
  1790. ************************************************************************************************************************
  1791. * uC/OS-III MODULE END
  1792. ************************************************************************************************************************
  1793. */
  1794. #ifdef __cplusplus
  1795. }
  1796. #endif
  1797. #endif