From 9f95ff5b6ba01db09552b84a0ab79607060a2666 Mon Sep 17 00:00:00 2001 From: Ali Labbene Date: Wed, 11 Dec 2019 08:59:21 +0100 Subject: Official ARM version: v5.4.0 Add CMSIS V5.4.0, please refer to index.html available under \docs folder. Note: content of \CMSIS\Core\Include has been copied under \Include to keep the same structure used in existing projects, and thus avoid projects mass update Note: the following components have been removed from ARM original delivery (as not used in ST packages) - CMSIS_EW2018.pdf - .gitattributes - .gitignore - \Device - \CMSIS - \CoreValidation - \DAP - \Documentation - \DoxyGen - \Driver - \Pack - \RTOS\CMSIS_RTOS_Tutorial.pdf - \RTOS\RTX - \RTOS\Template - \RTOS2\RTX - \Utilities - All ARM/GCC projects files are deleted from \DSP, \RTOS and \RTOS2 Change-Id: Ia026c3f0f0d016627a4fb5a9032852c33d24b4d3 --- docs/RTOS/html/API_Structure.png | Bin 0 -> 9200 bytes docs/RTOS/html/CMSIS_Logo_Final.png | Bin 0 -> 12402 bytes docs/RTOS/html/CMSIS_RTOS_Files.png | Bin 0 -> 15706 bytes docs/RTOS/html/CMSIS_RTOS_Tutorial.pdf | Bin 0 -> 2022914 bytes docs/RTOS/html/MailQueue.png | Bin 0 -> 14737 bytes docs/RTOS/html/MessageQueue.png | Bin 0 -> 11898 bytes docs/RTOS/html/Mutex.png | Bin 0 -> 8034 bytes docs/RTOS/html/RTX_Structure.png | Bin 0 -> 12738 bytes docs/RTOS/html/RTX__Conf__CM_8c.html | 499 +++++++ docs/RTOS/html/Semaphore.png | Bin 0 -> 16954 bytes docs/RTOS/html/ThreadStatus.png | Bin 0 -> 20521 bytes docs/RTOS/html/Timer.png | Bin 0 -> 13428 bytes docs/RTOS/html/TimerValues.png | Bin 0 -> 4226 bytes docs/RTOS/html/add_item.png | Bin 0 -> 71569 bytes docs/RTOS/html/annotated.html | 150 +++ docs/RTOS/html/annotated.js | 14 + docs/RTOS/html/bc_s.png | Bin 0 -> 676 bytes docs/RTOS/html/bdwn.png | Bin 0 -> 147 bytes docs/RTOS/html/classes.html | 144 +++ docs/RTOS/html/closed.png | Bin 0 -> 132 bytes docs/RTOS/html/cmsis.css | 1282 ++++++++++++++++++ docs/RTOS/html/cmsis__os_8h.html | 895 +++++++++++++ docs/RTOS/html/cmsis__os_8h_structosMailQDef__t.js | 6 + .../html/cmsis__os_8h_structosMessageQDef__t.js | 6 + docs/RTOS/html/cmsis__os_8h_structosMutexDef__t.js | 4 + docs/RTOS/html/cmsis__os_8h_structosPoolDef__t.js | 6 + .../html/cmsis__os_8h_structosSemaphoreDef__t.js | 4 + .../RTOS/html/cmsis__os_8h_structosThreadDef__t.js | 7 + docs/RTOS/html/cmsis__os_8h_structosTimerDef__t.js | 4 + docs/RTOS/html/cmsis__os_8txt.html | 175 +++ docs/RTOS/html/cmsis__os__rtx__extensions_8h.html | 147 +++ docs/RTOS/html/config_wizard.png | Bin 0 -> 25580 bytes docs/RTOS/html/configure.html | 146 +++ docs/RTOS/html/configure.js | 21 + docs/RTOS/html/creating_RTX_LIB.html | 142 ++ .../html/dir_67baed4ff719a838d401a6dc7774cf41.html | 137 ++ .../html/dir_899ec648bfef5b77e4c17b1ad40af9f5.html | 135 ++ .../html/dir_8ecbca576638d6cf096e42200a0f53dc.html | 135 ++ .../html/dir_9afdeffb8e409a4e0df5c5bf9ab1a7d2.html | 135 ++ .../html/dir_b0448b4e45a55bca3a46fdbabd848ed7.html | 135 ++ .../html/dir_c0ad159d7acfc6a66622c7bec0ee8a21.html | 135 ++ docs/RTOS/html/dirstructfiles.html | 496 +++++++ docs/RTOS/html/doxygen.css | 1366 ++++++++++++++++++++ docs/RTOS/html/doxygen.png | Bin 0 -> 3779 bytes docs/RTOS/html/dynsections.js | 97 ++ docs/RTOS/html/exampleRTX_Tutorial.html | 131 ++ docs/RTOS/html/files.html | 135 ++ docs/RTOS/html/ftv2blank.png | Bin 0 -> 86 bytes docs/RTOS/html/ftv2cl.png | Bin 0 -> 453 bytes docs/RTOS/html/ftv2doc.png | Bin 0 -> 746 bytes docs/RTOS/html/ftv2folderclosed.png | Bin 0 -> 616 bytes docs/RTOS/html/ftv2folderopen.png | Bin 0 -> 597 bytes docs/RTOS/html/ftv2lastnode.png | Bin 0 -> 86 bytes docs/RTOS/html/ftv2link.png | Bin 0 -> 746 bytes docs/RTOS/html/ftv2mlastnode.png | Bin 0 -> 246 bytes docs/RTOS/html/ftv2mnode.png | Bin 0 -> 246 bytes docs/RTOS/html/ftv2mo.png | Bin 0 -> 403 bytes docs/RTOS/html/ftv2node.png | Bin 0 -> 86 bytes docs/RTOS/html/ftv2ns.png | Bin 0 -> 388 bytes docs/RTOS/html/ftv2plastnode.png | Bin 0 -> 229 bytes docs/RTOS/html/ftv2pnode.png | Bin 0 -> 229 bytes docs/RTOS/html/ftv2splitbar.png | Bin 0 -> 314 bytes docs/RTOS/html/ftv2vertline.png | Bin 0 -> 86 bytes docs/RTOS/html/functionOverview.html | 237 ++++ docs/RTOS/html/functions.html | 184 +++ docs/RTOS/html/functions_vars.html | 184 +++ docs/RTOS/html/genRTOSIF.html | 175 +++ docs/RTOS/html/globals.html | 563 ++++++++ docs/RTOS/html/globals_defs.html | 296 +++++ docs/RTOS/html/globals_enum.html | 147 +++ docs/RTOS/html/globals_eval.html | 211 +++ docs/RTOS/html/globals_func.html | 297 +++++ docs/RTOS/html/globals_type.html | 163 +++ docs/RTOS/html/group__CMSIS__RTOS.html | 160 +++ docs/RTOS/html/group__CMSIS__RTOS.js | 10 + .../RTOS/html/group__CMSIS__RTOS__Definitions.html | 257 ++++ docs/RTOS/html/group__CMSIS__RTOS__Definitions.js | 18 + ...roup__CMSIS__RTOS__Definitions_structosEvent.js | 6 + ...__CMSIS__RTOS__Definitions_unionosEvent_8def.js | 5 + ...CMSIS__RTOS__Definitions_unionosEvent_8value.js | 6 + .../RTOS/html/group__CMSIS__RTOS__InterThread.html | 171 +++ docs/RTOS/html/group__CMSIS__RTOS__InterThread.js | 9 + docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.html | 469 +++++++ docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.js | 14 + docs/RTOS/html/group__CMSIS__RTOS__Mail.html | 634 +++++++++ docs/RTOS/html/group__CMSIS__RTOS__Mail.js | 12 + docs/RTOS/html/group__CMSIS__RTOS__Message.html | 489 +++++++ docs/RTOS/html/group__CMSIS__RTOS__Message.js | 9 + docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.html | 444 +++++++ docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.js | 9 + docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.html | 495 +++++++ docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.js | 10 + .../html/group__CMSIS__RTOS__SemaphoreMgmt.html | 463 +++++++ .../RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.js | 10 + docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.html | 376 ++++++ docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.js | 7 + docs/RTOS/html/group__CMSIS__RTOS__Status.html | 234 ++++ docs/RTOS/html/group__CMSIS__RTOS__Status.js | 20 + docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.html | 647 +++++++++ docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.js | 21 + docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.html | 534 ++++++++ docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.js | 13 + docs/RTOS/html/group__CMSIS__RTOS__Wait.html | 293 +++++ docs/RTOS/html/group__CMSIS__RTOS__Wait.js | 6 + docs/RTOS/html/group__RTX__Global__Functions.html | 468 +++++++ docs/RTOS/html/group__RTX__Global__Functions.js | 11 + docs/RTOS/html/index.html | 154 +++ docs/RTOS/html/jquery.js | 72 ++ docs/RTOS/html/lowPower.html | 204 +++ docs/RTOS/html/manage_rte_output.png | Bin 0 -> 117551 bytes docs/RTOS/html/misraCompliance.html | 173 +++ docs/RTOS/html/modules.html | 147 +++ docs/RTOS/html/modules.js | 5 + docs/RTOS/html/nav_f.png | Bin 0 -> 153 bytes docs/RTOS/html/nav_g.png | Bin 0 -> 95 bytes docs/RTOS/html/nav_h.png | Bin 0 -> 98 bytes docs/RTOS/html/navtree.css | 143 ++ docs/RTOS/html/navtree.js | 551 ++++++++ docs/RTOS/html/navtreeindex0.js | 208 +++ docs/RTOS/html/open.png | Bin 0 -> 123 bytes docs/RTOS/html/own_lib_projwin.png | Bin 0 -> 17182 bytes docs/RTOS/html/pages.html | 132 ++ docs/RTOS/html/printComponentTabs.js | 39 + docs/RTOS/html/project_window.png | Bin 0 -> 9643 bytes docs/RTOS/html/resize.js | 97 ++ docs/RTOS/html/rtosValidation.html | 171 +++ docs/RTOS/html/rtos_revisionHistory.html | 227 ++++ docs/RTOS/html/rtxImplementation.html | 163 +++ docs/RTOS/html/rtxImplementation.js | 26 + docs/RTOS/html/search/all_0.html | 26 + docs/RTOS/html/search/all_0.js | 4 + docs/RTOS/html/search/all_1.html | 26 + docs/RTOS/html/search/all_1.js | 10 + docs/RTOS/html/search/all_2.html | 26 + docs/RTOS/html/search/all_2.js | 6 + docs/RTOS/html/search/all_3.html | 26 + docs/RTOS/html/search/all_3.js | 4 + docs/RTOS/html/search/all_4.html | 26 + docs/RTOS/html/search/all_4.js | 6 + docs/RTOS/html/search/all_5.html | 26 + docs/RTOS/html/search/all_5.js | 6 + docs/RTOS/html/search/all_6.html | 26 + docs/RTOS/html/search/all_6.js | 4 + docs/RTOS/html/search/all_7.html | 26 + docs/RTOS/html/search/all_7.js | 8 + docs/RTOS/html/search/all_8.html | 26 + docs/RTOS/html/search/all_8.js | 150 +++ docs/RTOS/html/search/all_9.html | 26 + docs/RTOS/html/search/all_9.js | 7 + docs/RTOS/html/search/all_a.html | 26 + docs/RTOS/html/search/all_a.js | 4 + docs/RTOS/html/search/all_b.html | 26 + docs/RTOS/html/search/all_b.js | 10 + docs/RTOS/html/search/all_c.html | 26 + docs/RTOS/html/search/all_c.js | 11 + docs/RTOS/html/search/all_d.html | 26 + docs/RTOS/html/search/all_d.js | 9 + docs/RTOS/html/search/all_e.html | 26 + docs/RTOS/html/search/all_e.js | 4 + docs/RTOS/html/search/all_f.html | 26 + docs/RTOS/html/search/all_f.js | 4 + docs/RTOS/html/search/classes_0.html | 26 + docs/RTOS/html/search/classes_0.js | 14 + docs/RTOS/html/search/close.png | Bin 0 -> 273 bytes docs/RTOS/html/search/defines_0.html | 26 + docs/RTOS/html/search/defines_0.js | 27 + docs/RTOS/html/search/enums_0.html | 26 + docs/RTOS/html/search/enums_0.js | 6 + docs/RTOS/html/search/enumvalues_0.html | 26 + docs/RTOS/html/search/enumvalues_0.js | 28 + docs/RTOS/html/search/files_0.html | 26 + docs/RTOS/html/search/files_0.js | 6 + docs/RTOS/html/search/files_1.html | 26 + docs/RTOS/html/search/files_1.js | 4 + docs/RTOS/html/search/functions_0.html | 26 + docs/RTOS/html/search/functions_0.js | 51 + docs/RTOS/html/search/functions_1.html | 26 + docs/RTOS/html/search/functions_1.js | 4 + docs/RTOS/html/search/groups_0.html | 26 + docs/RTOS/html/search/groups_0.js | 4 + docs/RTOS/html/search/groups_1.html | 26 + docs/RTOS/html/search/groups_1.js | 5 + docs/RTOS/html/search/groups_2.html | 26 + docs/RTOS/html/search/groups_2.js | 4 + docs/RTOS/html/search/groups_3.html | 26 + docs/RTOS/html/search/groups_3.js | 4 + docs/RTOS/html/search/groups_4.html | 26 + docs/RTOS/html/search/groups_4.js | 7 + docs/RTOS/html/search/groups_5.html | 26 + docs/RTOS/html/search/groups_5.js | 4 + docs/RTOS/html/search/groups_6.html | 26 + docs/RTOS/html/search/groups_6.js | 6 + docs/RTOS/html/search/groups_7.html | 26 + docs/RTOS/html/search/groups_7.js | 5 + docs/RTOS/html/search/mag_sel.png | Bin 0 -> 563 bytes docs/RTOS/html/search/nomatches.html | 12 + docs/RTOS/html/search/pages_0.html | 26 + docs/RTOS/html/search/pages_0.js | 4 + docs/RTOS/html/search/pages_1.html | 26 + docs/RTOS/html/search/pages_1.js | 6 + docs/RTOS/html/search/pages_2.html | 26 + docs/RTOS/html/search/pages_2.js | 4 + docs/RTOS/html/search/pages_3.html | 26 + docs/RTOS/html/search/pages_3.js | 4 + docs/RTOS/html/search/pages_4.html | 26 + docs/RTOS/html/search/pages_4.js | 4 + docs/RTOS/html/search/pages_5.html | 26 + docs/RTOS/html/search/pages_5.js | 4 + docs/RTOS/html/search/pages_6.html | 26 + docs/RTOS/html/search/pages_6.js | 8 + docs/RTOS/html/search/pages_7.html | 26 + docs/RTOS/html/search/pages_7.js | 5 + docs/RTOS/html/search/pages_8.html | 26 + docs/RTOS/html/search/pages_8.js | 6 + docs/RTOS/html/search/pages_9.html | 26 + docs/RTOS/html/search/pages_9.js | 4 + docs/RTOS/html/search/search.css | 271 ++++ docs/RTOS/html/search/search.js | 813 ++++++++++++ docs/RTOS/html/search/search_l.png | Bin 0 -> 604 bytes docs/RTOS/html/search/search_m.png | Bin 0 -> 158 bytes docs/RTOS/html/search/search_r.png | Bin 0 -> 612 bytes docs/RTOS/html/search/typedefs_0.html | 26 + docs/RTOS/html/search/typedefs_0.js | 12 + docs/RTOS/html/search/variables_0.html | 26 + docs/RTOS/html/search/variables_0.js | 5 + docs/RTOS/html/search/variables_1.html | 26 + docs/RTOS/html/search/variables_1.js | 5 + docs/RTOS/html/search/variables_2.html | 26 + docs/RTOS/html/search/variables_2.js | 7 + docs/RTOS/html/search/variables_3.html | 26 + docs/RTOS/html/search/variables_3.js | 4 + docs/RTOS/html/search/variables_4.html | 26 + docs/RTOS/html/search/variables_4.js | 5 + docs/RTOS/html/search/variables_5.html | 26 + docs/RTOS/html/search/variables_5.js | 4 + docs/RTOS/html/search/variables_6.html | 26 + docs/RTOS/html/search/variables_6.js | 4 + docs/RTOS/html/search/variables_7.html | 26 + docs/RTOS/html/search/variables_7.js | 5 + docs/RTOS/html/simple_signal.png | Bin 0 -> 10667 bytes docs/RTOS/html/stack_usage_watermark.png | Bin 0 -> 28581 bytes docs/RTOS/html/structosMailQDef__t.html | 193 +++ docs/RTOS/html/structosMailQDef__t.js | 6 + docs/RTOS/html/structosMessageQDef__t.html | 193 +++ docs/RTOS/html/structosMessageQDef__t.js | 6 + docs/RTOS/html/structosMutexDef__t.html | 163 +++ docs/RTOS/html/structosMutexDef__t.js | 4 + docs/RTOS/html/structosPoolDef__t.html | 193 +++ docs/RTOS/html/structosPoolDef__t.js | 6 + docs/RTOS/html/structosSemaphoreDef__t.html | 163 +++ docs/RTOS/html/structosSemaphoreDef__t.js | 4 + docs/RTOS/html/structosThreadDef__t.html | 208 +++ docs/RTOS/html/structosThreadDef__t.js | 7 + docs/RTOS/html/structosTimerDef__t.html | 163 +++ docs/RTOS/html/structosTimerDef__t.js | 4 + docs/RTOS/html/svcFunctions.html | 167 +++ docs/RTOS/html/sync_off.png | Bin 0 -> 853 bytes docs/RTOS/html/sync_on.png | Bin 0 -> 845 bytes docs/RTOS/html/systemConfig.html | 194 +++ docs/RTOS/html/tab_a.png | Bin 0 -> 142 bytes docs/RTOS/html/tab_b.png | Bin 0 -> 169 bytes docs/RTOS/html/tab_h.png | Bin 0 -> 177 bytes docs/RTOS/html/tab_s.png | Bin 0 -> 184 bytes docs/RTOS/html/tab_topnav.png | Bin 0 -> 232 bytes docs/RTOS/html/tabs.css | 71 + docs/RTOS/html/technicalData.html | 211 +++ docs/RTOS/html/theory.html | 194 +++ docs/RTOS/html/threadConfig.html | 192 +++ docs/RTOS/html/timerTick.html | 225 ++++ docs/RTOS/html/using.html | 203 +++ docs/RTOS/html/usingOS.html | 902 +++++++++++++ 271 files changed, 24608 insertions(+) create mode 100644 docs/RTOS/html/API_Structure.png create mode 100644 docs/RTOS/html/CMSIS_Logo_Final.png create mode 100644 docs/RTOS/html/CMSIS_RTOS_Files.png create mode 100644 docs/RTOS/html/CMSIS_RTOS_Tutorial.pdf create mode 100644 docs/RTOS/html/MailQueue.png create mode 100644 docs/RTOS/html/MessageQueue.png create mode 100644 docs/RTOS/html/Mutex.png create mode 100644 docs/RTOS/html/RTX_Structure.png create mode 100644 docs/RTOS/html/RTX__Conf__CM_8c.html create mode 100644 docs/RTOS/html/Semaphore.png create mode 100644 docs/RTOS/html/ThreadStatus.png create mode 100644 docs/RTOS/html/Timer.png create mode 100644 docs/RTOS/html/TimerValues.png create mode 100644 docs/RTOS/html/add_item.png create mode 100644 docs/RTOS/html/annotated.html create mode 100644 docs/RTOS/html/annotated.js create mode 100644 docs/RTOS/html/bc_s.png create mode 100644 docs/RTOS/html/bdwn.png create mode 100644 docs/RTOS/html/classes.html create mode 100644 docs/RTOS/html/closed.png create mode 100644 docs/RTOS/html/cmsis.css create mode 100644 docs/RTOS/html/cmsis__os_8h.html create mode 100644 docs/RTOS/html/cmsis__os_8h_structosMailQDef__t.js create mode 100644 docs/RTOS/html/cmsis__os_8h_structosMessageQDef__t.js create mode 100644 docs/RTOS/html/cmsis__os_8h_structosMutexDef__t.js create mode 100644 docs/RTOS/html/cmsis__os_8h_structosPoolDef__t.js create mode 100644 docs/RTOS/html/cmsis__os_8h_structosSemaphoreDef__t.js create mode 100644 docs/RTOS/html/cmsis__os_8h_structosThreadDef__t.js create mode 100644 docs/RTOS/html/cmsis__os_8h_structosTimerDef__t.js create mode 100644 docs/RTOS/html/cmsis__os_8txt.html create mode 100644 docs/RTOS/html/cmsis__os__rtx__extensions_8h.html create mode 100644 docs/RTOS/html/config_wizard.png create mode 100644 docs/RTOS/html/configure.html create mode 100644 docs/RTOS/html/configure.js create mode 100644 docs/RTOS/html/creating_RTX_LIB.html create mode 100644 docs/RTOS/html/dir_67baed4ff719a838d401a6dc7774cf41.html create mode 100644 docs/RTOS/html/dir_899ec648bfef5b77e4c17b1ad40af9f5.html create mode 100644 docs/RTOS/html/dir_8ecbca576638d6cf096e42200a0f53dc.html create mode 100644 docs/RTOS/html/dir_9afdeffb8e409a4e0df5c5bf9ab1a7d2.html create mode 100644 docs/RTOS/html/dir_b0448b4e45a55bca3a46fdbabd848ed7.html create mode 100644 docs/RTOS/html/dir_c0ad159d7acfc6a66622c7bec0ee8a21.html create mode 100644 docs/RTOS/html/dirstructfiles.html create mode 100644 docs/RTOS/html/doxygen.css create mode 100644 docs/RTOS/html/doxygen.png create mode 100644 docs/RTOS/html/dynsections.js create mode 100644 docs/RTOS/html/exampleRTX_Tutorial.html create mode 100644 docs/RTOS/html/files.html create mode 100644 docs/RTOS/html/ftv2blank.png create mode 100644 docs/RTOS/html/ftv2cl.png create mode 100644 docs/RTOS/html/ftv2doc.png create mode 100644 docs/RTOS/html/ftv2folderclosed.png create mode 100644 docs/RTOS/html/ftv2folderopen.png create mode 100644 docs/RTOS/html/ftv2lastnode.png create mode 100644 docs/RTOS/html/ftv2link.png create mode 100644 docs/RTOS/html/ftv2mlastnode.png create mode 100644 docs/RTOS/html/ftv2mnode.png create mode 100644 docs/RTOS/html/ftv2mo.png create mode 100644 docs/RTOS/html/ftv2node.png create mode 100644 docs/RTOS/html/ftv2ns.png create mode 100644 docs/RTOS/html/ftv2plastnode.png create mode 100644 docs/RTOS/html/ftv2pnode.png create mode 100644 docs/RTOS/html/ftv2splitbar.png create mode 100644 docs/RTOS/html/ftv2vertline.png create mode 100644 docs/RTOS/html/functionOverview.html create mode 100644 docs/RTOS/html/functions.html create mode 100644 docs/RTOS/html/functions_vars.html create mode 100644 docs/RTOS/html/genRTOSIF.html create mode 100644 docs/RTOS/html/globals.html create mode 100644 docs/RTOS/html/globals_defs.html create mode 100644 docs/RTOS/html/globals_enum.html create mode 100644 docs/RTOS/html/globals_eval.html create mode 100644 docs/RTOS/html/globals_func.html create mode 100644 docs/RTOS/html/globals_type.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Definitions.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Definitions.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Definitions_structosEvent.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8def.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8value.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__InterThread.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__InterThread.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Mail.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Mail.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Message.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Message.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Status.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Status.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.js create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Wait.html create mode 100644 docs/RTOS/html/group__CMSIS__RTOS__Wait.js create mode 100644 docs/RTOS/html/group__RTX__Global__Functions.html create mode 100644 docs/RTOS/html/group__RTX__Global__Functions.js create mode 100644 docs/RTOS/html/index.html create mode 100644 docs/RTOS/html/jquery.js create mode 100644 docs/RTOS/html/lowPower.html create mode 100644 docs/RTOS/html/manage_rte_output.png create mode 100644 docs/RTOS/html/misraCompliance.html create mode 100644 docs/RTOS/html/modules.html create mode 100644 docs/RTOS/html/modules.js create mode 100644 docs/RTOS/html/nav_f.png create mode 100644 docs/RTOS/html/nav_g.png create mode 100644 docs/RTOS/html/nav_h.png create mode 100644 docs/RTOS/html/navtree.css create mode 100644 docs/RTOS/html/navtree.js create mode 100644 docs/RTOS/html/navtreeindex0.js create mode 100644 docs/RTOS/html/open.png create mode 100644 docs/RTOS/html/own_lib_projwin.png create mode 100644 docs/RTOS/html/pages.html create mode 100644 docs/RTOS/html/printComponentTabs.js create mode 100644 docs/RTOS/html/project_window.png create mode 100644 docs/RTOS/html/resize.js create mode 100644 docs/RTOS/html/rtosValidation.html create mode 100644 docs/RTOS/html/rtos_revisionHistory.html create mode 100644 docs/RTOS/html/rtxImplementation.html create mode 100644 docs/RTOS/html/rtxImplementation.js create mode 100644 docs/RTOS/html/search/all_0.html create mode 100644 docs/RTOS/html/search/all_0.js create mode 100644 docs/RTOS/html/search/all_1.html create mode 100644 docs/RTOS/html/search/all_1.js create mode 100644 docs/RTOS/html/search/all_2.html create mode 100644 docs/RTOS/html/search/all_2.js create mode 100644 docs/RTOS/html/search/all_3.html create mode 100644 docs/RTOS/html/search/all_3.js create mode 100644 docs/RTOS/html/search/all_4.html create mode 100644 docs/RTOS/html/search/all_4.js create mode 100644 docs/RTOS/html/search/all_5.html create mode 100644 docs/RTOS/html/search/all_5.js create mode 100644 docs/RTOS/html/search/all_6.html create mode 100644 docs/RTOS/html/search/all_6.js create mode 100644 docs/RTOS/html/search/all_7.html create mode 100644 docs/RTOS/html/search/all_7.js create mode 100644 docs/RTOS/html/search/all_8.html create mode 100644 docs/RTOS/html/search/all_8.js create mode 100644 docs/RTOS/html/search/all_9.html create mode 100644 docs/RTOS/html/search/all_9.js create mode 100644 docs/RTOS/html/search/all_a.html create mode 100644 docs/RTOS/html/search/all_a.js create mode 100644 docs/RTOS/html/search/all_b.html create mode 100644 docs/RTOS/html/search/all_b.js create mode 100644 docs/RTOS/html/search/all_c.html create mode 100644 docs/RTOS/html/search/all_c.js create mode 100644 docs/RTOS/html/search/all_d.html create mode 100644 docs/RTOS/html/search/all_d.js create mode 100644 docs/RTOS/html/search/all_e.html create mode 100644 docs/RTOS/html/search/all_e.js create mode 100644 docs/RTOS/html/search/all_f.html create mode 100644 docs/RTOS/html/search/all_f.js create mode 100644 docs/RTOS/html/search/classes_0.html create mode 100644 docs/RTOS/html/search/classes_0.js create mode 100644 docs/RTOS/html/search/close.png create mode 100644 docs/RTOS/html/search/defines_0.html create mode 100644 docs/RTOS/html/search/defines_0.js create mode 100644 docs/RTOS/html/search/enums_0.html create mode 100644 docs/RTOS/html/search/enums_0.js create mode 100644 docs/RTOS/html/search/enumvalues_0.html create mode 100644 docs/RTOS/html/search/enumvalues_0.js create mode 100644 docs/RTOS/html/search/files_0.html create mode 100644 docs/RTOS/html/search/files_0.js create mode 100644 docs/RTOS/html/search/files_1.html create mode 100644 docs/RTOS/html/search/files_1.js create mode 100644 docs/RTOS/html/search/functions_0.html create mode 100644 docs/RTOS/html/search/functions_0.js create mode 100644 docs/RTOS/html/search/functions_1.html create mode 100644 docs/RTOS/html/search/functions_1.js create mode 100644 docs/RTOS/html/search/groups_0.html create mode 100644 docs/RTOS/html/search/groups_0.js create mode 100644 docs/RTOS/html/search/groups_1.html create mode 100644 docs/RTOS/html/search/groups_1.js create mode 100644 docs/RTOS/html/search/groups_2.html create mode 100644 docs/RTOS/html/search/groups_2.js create mode 100644 docs/RTOS/html/search/groups_3.html create mode 100644 docs/RTOS/html/search/groups_3.js create mode 100644 docs/RTOS/html/search/groups_4.html create mode 100644 docs/RTOS/html/search/groups_4.js create mode 100644 docs/RTOS/html/search/groups_5.html create mode 100644 docs/RTOS/html/search/groups_5.js create mode 100644 docs/RTOS/html/search/groups_6.html create mode 100644 docs/RTOS/html/search/groups_6.js create mode 100644 docs/RTOS/html/search/groups_7.html create mode 100644 docs/RTOS/html/search/groups_7.js create mode 100644 docs/RTOS/html/search/mag_sel.png create mode 100644 docs/RTOS/html/search/nomatches.html create mode 100644 docs/RTOS/html/search/pages_0.html create mode 100644 docs/RTOS/html/search/pages_0.js create mode 100644 docs/RTOS/html/search/pages_1.html create mode 100644 docs/RTOS/html/search/pages_1.js create mode 100644 docs/RTOS/html/search/pages_2.html create mode 100644 docs/RTOS/html/search/pages_2.js create mode 100644 docs/RTOS/html/search/pages_3.html create mode 100644 docs/RTOS/html/search/pages_3.js create mode 100644 docs/RTOS/html/search/pages_4.html create mode 100644 docs/RTOS/html/search/pages_4.js create mode 100644 docs/RTOS/html/search/pages_5.html create mode 100644 docs/RTOS/html/search/pages_5.js create mode 100644 docs/RTOS/html/search/pages_6.html create mode 100644 docs/RTOS/html/search/pages_6.js create mode 100644 docs/RTOS/html/search/pages_7.html create mode 100644 docs/RTOS/html/search/pages_7.js create mode 100644 docs/RTOS/html/search/pages_8.html create mode 100644 docs/RTOS/html/search/pages_8.js create mode 100644 docs/RTOS/html/search/pages_9.html create mode 100644 docs/RTOS/html/search/pages_9.js create mode 100644 docs/RTOS/html/search/search.css create mode 100644 docs/RTOS/html/search/search.js create mode 100644 docs/RTOS/html/search/search_l.png create mode 100644 docs/RTOS/html/search/search_m.png create mode 100644 docs/RTOS/html/search/search_r.png create mode 100644 docs/RTOS/html/search/typedefs_0.html create mode 100644 docs/RTOS/html/search/typedefs_0.js create mode 100644 docs/RTOS/html/search/variables_0.html create mode 100644 docs/RTOS/html/search/variables_0.js create mode 100644 docs/RTOS/html/search/variables_1.html create mode 100644 docs/RTOS/html/search/variables_1.js create mode 100644 docs/RTOS/html/search/variables_2.html create mode 100644 docs/RTOS/html/search/variables_2.js create mode 100644 docs/RTOS/html/search/variables_3.html create mode 100644 docs/RTOS/html/search/variables_3.js create mode 100644 docs/RTOS/html/search/variables_4.html create mode 100644 docs/RTOS/html/search/variables_4.js create mode 100644 docs/RTOS/html/search/variables_5.html create mode 100644 docs/RTOS/html/search/variables_5.js create mode 100644 docs/RTOS/html/search/variables_6.html create mode 100644 docs/RTOS/html/search/variables_6.js create mode 100644 docs/RTOS/html/search/variables_7.html create mode 100644 docs/RTOS/html/search/variables_7.js create mode 100644 docs/RTOS/html/simple_signal.png create mode 100644 docs/RTOS/html/stack_usage_watermark.png create mode 100644 docs/RTOS/html/structosMailQDef__t.html create mode 100644 docs/RTOS/html/structosMailQDef__t.js create mode 100644 docs/RTOS/html/structosMessageQDef__t.html create mode 100644 docs/RTOS/html/structosMessageQDef__t.js create mode 100644 docs/RTOS/html/structosMutexDef__t.html create mode 100644 docs/RTOS/html/structosMutexDef__t.js create mode 100644 docs/RTOS/html/structosPoolDef__t.html create mode 100644 docs/RTOS/html/structosPoolDef__t.js create mode 100644 docs/RTOS/html/structosSemaphoreDef__t.html create mode 100644 docs/RTOS/html/structosSemaphoreDef__t.js create mode 100644 docs/RTOS/html/structosThreadDef__t.html create mode 100644 docs/RTOS/html/structosThreadDef__t.js create mode 100644 docs/RTOS/html/structosTimerDef__t.html create mode 100644 docs/RTOS/html/structosTimerDef__t.js create mode 100644 docs/RTOS/html/svcFunctions.html create mode 100644 docs/RTOS/html/sync_off.png create mode 100644 docs/RTOS/html/sync_on.png create mode 100644 docs/RTOS/html/systemConfig.html create mode 100644 docs/RTOS/html/tab_a.png create mode 100644 docs/RTOS/html/tab_b.png create mode 100644 docs/RTOS/html/tab_h.png create mode 100644 docs/RTOS/html/tab_s.png create mode 100644 docs/RTOS/html/tab_topnav.png create mode 100644 docs/RTOS/html/tabs.css create mode 100644 docs/RTOS/html/technicalData.html create mode 100644 docs/RTOS/html/theory.html create mode 100644 docs/RTOS/html/threadConfig.html create mode 100644 docs/RTOS/html/timerTick.html create mode 100644 docs/RTOS/html/using.html create mode 100644 docs/RTOS/html/usingOS.html (limited to 'docs/RTOS/html') diff --git a/docs/RTOS/html/API_Structure.png b/docs/RTOS/html/API_Structure.png new file mode 100644 index 0000000..832753b Binary files /dev/null and b/docs/RTOS/html/API_Structure.png differ diff --git a/docs/RTOS/html/CMSIS_Logo_Final.png b/docs/RTOS/html/CMSIS_Logo_Final.png new file mode 100644 index 0000000..2056b7e Binary files /dev/null and b/docs/RTOS/html/CMSIS_Logo_Final.png differ diff --git a/docs/RTOS/html/CMSIS_RTOS_Files.png b/docs/RTOS/html/CMSIS_RTOS_Files.png new file mode 100644 index 0000000..136bc6d Binary files /dev/null and b/docs/RTOS/html/CMSIS_RTOS_Files.png differ diff --git a/docs/RTOS/html/CMSIS_RTOS_Tutorial.pdf b/docs/RTOS/html/CMSIS_RTOS_Tutorial.pdf new file mode 100644 index 0000000..0530643 Binary files /dev/null and b/docs/RTOS/html/CMSIS_RTOS_Tutorial.pdf differ diff --git a/docs/RTOS/html/MailQueue.png b/docs/RTOS/html/MailQueue.png new file mode 100644 index 0000000..9e75ff4 Binary files /dev/null and b/docs/RTOS/html/MailQueue.png differ diff --git a/docs/RTOS/html/MessageQueue.png b/docs/RTOS/html/MessageQueue.png new file mode 100644 index 0000000..712eeac Binary files /dev/null and b/docs/RTOS/html/MessageQueue.png differ diff --git a/docs/RTOS/html/Mutex.png b/docs/RTOS/html/Mutex.png new file mode 100644 index 0000000..7eec93b Binary files /dev/null and b/docs/RTOS/html/Mutex.png differ diff --git a/docs/RTOS/html/RTX_Structure.png b/docs/RTOS/html/RTX_Structure.png new file mode 100644 index 0000000..c873cc7 Binary files /dev/null and b/docs/RTOS/html/RTX_Structure.png differ diff --git a/docs/RTOS/html/RTX__Conf__CM_8c.html b/docs/RTOS/html/RTX__Conf__CM_8c.html new file mode 100644 index 0000000..5481dd1 --- /dev/null +++ b/docs/RTOS/html/RTX__Conf__CM_8c.html @@ -0,0 +1,499 @@ + + + + + +RTX_Conf_CM.c File Reference +CMSIS-RTOS: RTX_Conf_CM.c File Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
RTX_Conf_CM.c File Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define OS_TASKCNT   6
 
#define OS_STKSIZE   50
 
#define OS_MAINSTKSIZE   50
 
#define OS_PRIVCNT   0
 
#define OS_PRIVSTKSIZE   0
 
#define OS_STKCHECK   1
 
#define OS_STKINIT   0
 
#define OS_RUNPRIV   1
 
#define OS_CLOCK   12000000
 
#define OS_TICK   1000
 
#define OS_ROBIN   1
 
#define OS_ROBINTOUT   5
 
#define OS_TIMERS   1
 
#define OS_TIMERPRIO   5
 
#define OS_TIMERSTKSZ   50
 
#define OS_TIMERCBQS   4
 
#define OS_FIFOSZ   16
 
#define OS_MUTEXCNT   8
 
#define OS_TRV   ((uint32_t)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1)
 
#define OS_ERROR_STACK_OVF   1
 
#define OS_ERROR_FIFO_OVF   2
 
#define OS_ERROR_MBX_OVF   3
 
#define OS_ERROR_TIMER_OVF   4
 
+ + + + + + + + + + + + + + + + + + + + + +

+Functions

void os_idle_demon (void)
 The idle demon is running when no other thread is ready to run. More...
 
int os_tick_init (void)
 Initializes an alternative hardware timer as RTX kernel timer. More...
 
uint32_t os_tick_val (void)
 Get alternative hardware timer's current value (0 .. OS_TRV) More...
 
uint32_t os_tick_ovf (void)
 Get alternative hardware timer's overflow flag. More...
 
void os_tick_irqack (void)
 Acknowledge alternative hardware timer interrupt. More...
 
osThreadId svcThreadGetId (void)
 
void os_error (uint32_t error_code)
 Called when a runtime error is detected. More...
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define OS_CLOCK   12000000
+
+ +
+
+ +
+
+ + + + +
#define OS_ERROR_FIFO_OVF   2
+
+ +
+
+ +
+
+ + + + +
#define OS_ERROR_MBX_OVF   3
+
+ +
+
+ +
+
+ + + + +
#define OS_ERROR_STACK_OVF   1
+
+ +
+
+ +
+
+ + + + +
#define OS_ERROR_TIMER_OVF   4
+
+ +
+
+ +
+
+ + + + +
#define OS_FIFOSZ   16
+
+ +
+
+ +
+
+ + + + +
#define OS_MAINSTKSIZE   50
+
+ +
+
+ +
+
+ + + + +
#define OS_MUTEXCNT   8
+
+ +
+
+ +
+
+ + + + +
#define OS_PRIVCNT   0
+
+ +
+
+ +
+
+ + + + +
#define OS_PRIVSTKSIZE   0
+
+ +
+
+ +
+
+ + + + +
#define OS_ROBIN   1
+
+ +
+
+ +
+
+ + + + +
#define OS_ROBINTOUT   5
+
+ +
+
+ +
+
+ + + + +
#define OS_RUNPRIV   1
+
+ +
+
+ +
+
+ + + + +
#define OS_STKCHECK   1
+
+ +
+
+ +
+
+ + + + +
#define OS_STKINIT   0
+
+ +
+
+ +
+
+ + + + +
#define OS_STKSIZE   50
+
+ +
+
+ +
+
+ + + + +
#define OS_TASKCNT   6
+
+ +
+
+ +
+
+ + + + +
#define OS_TICK   1000
+
+ +
+
+ +
+
+ + + + +
#define OS_TIMERCBQS   4
+
+ +
+
+ +
+
+ + + + +
#define OS_TIMERPRIO   5
+
+ +
+
+ +
+
+ + + + +
#define OS_TIMERS   1
+
+ +
+
+ +
+
+ + + + +
#define OS_TIMERSTKSZ   50
+
+ +
+
+ +
+
+ + + + +
#define OS_TRV   ((uint32_t)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1)
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
osThreadId svcThreadGetId (void )
+
+ +
+
+
+
+ + + + diff --git a/docs/RTOS/html/Semaphore.png b/docs/RTOS/html/Semaphore.png new file mode 100644 index 0000000..f1939c0 Binary files /dev/null and b/docs/RTOS/html/Semaphore.png differ diff --git a/docs/RTOS/html/ThreadStatus.png b/docs/RTOS/html/ThreadStatus.png new file mode 100644 index 0000000..45a0564 Binary files /dev/null and b/docs/RTOS/html/ThreadStatus.png differ diff --git a/docs/RTOS/html/Timer.png b/docs/RTOS/html/Timer.png new file mode 100644 index 0000000..63c666b Binary files /dev/null and b/docs/RTOS/html/Timer.png differ diff --git a/docs/RTOS/html/TimerValues.png b/docs/RTOS/html/TimerValues.png new file mode 100644 index 0000000..08add5d Binary files /dev/null and b/docs/RTOS/html/TimerValues.png differ diff --git a/docs/RTOS/html/add_item.png b/docs/RTOS/html/add_item.png new file mode 100644 index 0000000..20e6946 Binary files /dev/null and b/docs/RTOS/html/add_item.png differ diff --git a/docs/RTOS/html/annotated.html b/docs/RTOS/html/annotated.html new file mode 100644 index 0000000..7b447e9 --- /dev/null +++ b/docs/RTOS/html/annotated.html @@ -0,0 +1,150 @@ + + + + + +Data Structures +CMSIS-RTOS: Data Structures + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + + + + + + + + + + +
oCos_mailQ
oCosEventEvent structure contains detailed information about an event
oCosEvent.def
oCosEvent.value
oCosMailQDef_tDefinition structure for mail queue
oCosMessageQDef_tDefinition structure for message queue
oCosMutexDef_tMutex Definition structure contains setup information for a mutex
oCosPoolDef_tDefinition structure for memory block allocation
oCosSemaphoreDef_tSemaphore Definition structure contains setup information for a semaphore
oCosThreadDef_tThread Definition structure contains startup information of a thread
\CosTimerDef_tTimer Definition structure contains timer parameters
+
+
+
+ + + + diff --git a/docs/RTOS/html/annotated.js b/docs/RTOS/html/annotated.js new file mode 100644 index 0000000..72eeb65 --- /dev/null +++ b/docs/RTOS/html/annotated.js @@ -0,0 +1,14 @@ +var annotated = +[ + [ "os_mailQ", "group__CMSIS__RTOS__Definitions.html#structos__mailQ", null ], + [ "osEvent", "group__CMSIS__RTOS__Definitions.html#structosEvent", "group__CMSIS__RTOS__Definitions_structosEvent" ], + [ "osEvent.def", "group__CMSIS__RTOS__Definitions.html#unionosEvent_8def", "group__CMSIS__RTOS__Definitions_unionosEvent_8def" ], + [ "osEvent.value", "group__CMSIS__RTOS__Definitions.html#unionosEvent_8value", "group__CMSIS__RTOS__Definitions_unionosEvent_8value" ], + [ "osMailQDef_t", "cmsis__os_8h.html#structosMailQDef__t", "cmsis__os_8h_structosMailQDef__t" ], + [ "osMessageQDef_t", "cmsis__os_8h.html#structosMessageQDef__t", "cmsis__os_8h_structosMessageQDef__t" ], + [ "osMutexDef_t", "cmsis__os_8h.html#structosMutexDef__t", "cmsis__os_8h_structosMutexDef__t" ], + [ "osPoolDef_t", "cmsis__os_8h.html#structosPoolDef__t", "cmsis__os_8h_structosPoolDef__t" ], + [ "osSemaphoreDef_t", "cmsis__os_8h.html#structosSemaphoreDef__t", "cmsis__os_8h_structosSemaphoreDef__t" ], + [ "osThreadDef_t", "cmsis__os_8h.html#structosThreadDef__t", "cmsis__os_8h_structosThreadDef__t" ], + [ "osTimerDef_t", "cmsis__os_8h.html#structosTimerDef__t", "cmsis__os_8h_structosTimerDef__t" ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/bc_s.png b/docs/RTOS/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/RTOS/html/bc_s.png differ diff --git a/docs/RTOS/html/bdwn.png b/docs/RTOS/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/docs/RTOS/html/bdwn.png differ diff --git a/docs/RTOS/html/classes.html b/docs/RTOS/html/classes.html new file mode 100644 index 0000000..991a434 --- /dev/null +++ b/docs/RTOS/html/classes.html @@ -0,0 +1,144 @@ + + + + + +Data Structure Index +CMSIS-RTOS: Data Structure Index + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Data Structure Index
+
+
+ + + + + + +
  o  
+
osEvent   osMailQDef_t   osPoolDef_t   osTimerDef_t   
osEvent.def   osMessageQDef_t   osSemaphoreDef_t   
os_mailQ   osEvent.value   osMutexDef_t   osThreadDef_t   
+ +
+
+ + + + diff --git a/docs/RTOS/html/closed.png b/docs/RTOS/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/RTOS/html/closed.png differ diff --git a/docs/RTOS/html/cmsis.css b/docs/RTOS/html/cmsis.css new file mode 100644 index 0000000..bba1010 --- /dev/null +++ b/docs/RTOS/html/cmsis.css @@ -0,0 +1,1282 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 13px; + line-height: 1.3; +} + +/* CMSIS styles */ + +.style1 { + text-align: center; +} +.style2 { + color: #0000FF; + font-weight: normal; +} +.style3 { + text-align: left; +} +.style4 { + color: #008000; +} +.style5 { + color: #0000FF; +} +.style6 { + color: #000000; + font-style:italic; +} +.mand { + color: #0000FF; +} +.opt { + color: #008000; +} +.cond { + color: #990000; +} + +.choice +{ + background-color:#F7F9D0; +} +.seq +{ + background-color:#C9DECB; +} +.group1 +{ + background-color:#F8F1F1; +} +.group2 +{ + background-color:#DCEDEA; +} + + +ul ul { + list-style-type: disc; +} + +ul ul ul { + list-style-type: disc; +} + +ul.hierarchy { + color: green; +} + +em { + color: #000000; + font-style:italic; +} + + + +/* CMSIS Tables */ +table.cmtab1 { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; + text-align: justify; + width:70%; +} + +th.cmtab1 { + background: #EBEFF6; + font-weight: bold; + height: 28px; +} + +td.cmtab1 { + padding:1px; + text-align: left; +} + +table.cmtable { + border-collapse:collapse; + text-align: justify; +} + +table.cmtable td, table.cmtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.cmtable th { + background-color: #EBEFF6; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + +td.MonoTxt { + font-family:"Arial monospaced for SAP"; +} + +td.XML-Token +{ + azimuth: 180; + font-style:italic; + color:Maroon; + z-index:20; + +} + +span.XML-Token +{ + azimuth: 180; + font-style:italic; + color:Maroon; + z-index:20; + +} + +span.h2 +{ + font-size: 120%; + font-weight: bold; +} + +div.new +{ + background-color:#ccffcc; /* light green */ +} + +div.mod +{ + background-color:#ffe6cc; /* light amber */ +} + +div.del +{ + background-color:#ffcccc; /* light red */ +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A2B4D8; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3A568E; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4464A5; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9AAED5; + color: #ffffff; + border: 1px double #849CCC; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px; + margin: 4px; + background-color: #FBFCFD; + border: 1px solid #C3CFE6; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; +} + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C3CFE6; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C3CFE6; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EDF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9AAED5; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A2B4D8; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4769AD; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C3CFE6; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4464A5; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4464A5; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A2B4D8; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A7B8DA; + border-left: 1px solid #A7B8DA; + border-right: 1px solid #A7B8DA; + padding: 6px 0px 6px 0px; + color: #233456; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E7F3; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A7B8DA; + border-left: 1px solid #A7B8DA; + border-right: 1px solid #A7B8DA; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #708CC4; + border-top:1px solid #5072B7; + border-left:1px solid #5072B7; + border-right:1px solid #C3CFE6; + border-bottom:1px solid #C3CFE6; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3A568E; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #293C63; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2B4069; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #EBEFF6; + color: #000000; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid #A7B8DA; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A7B8DA; + border-bottom: 1px solid #A7B8DA; + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A7B8DA; + width: 100%; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E7F3; + font-size: 90%; + color: #233456; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A7B8DA; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#889FCE; + border:solid 1px #C1CDE5; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#344D7E; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6583BF; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#344D7E; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + margin-left: 5px; + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C3CFE6; +} + +div.headertitle +{ + padding: 5px 5px 5px 7px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5072B7; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #8EA4D0; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#314877; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D7DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4464A5; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/docs/RTOS/html/cmsis__os_8h.html b/docs/RTOS/html/cmsis__os_8h.html new file mode 100644 index 0000000..2641239 --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h.html @@ -0,0 +1,895 @@ + + + + + +cmsis_os.h File Reference +CMSIS-RTOS: cmsis_os.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
cmsis_os.h File Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  osThreadDef_t
 Thread Definition structure contains startup information of a thread. More...
 
struct  osTimerDef_t
 Timer Definition structure contains timer parameters. More...
 
struct  osMutexDef_t
 Mutex Definition structure contains setup information for a mutex. More...
 
struct  osSemaphoreDef_t
 Semaphore Definition structure contains setup information for a semaphore. More...
 
struct  osPoolDef_t
 Definition structure for memory block allocation. More...
 
struct  osMessageQDef_t
 Definition structure for message queue. More...
 
struct  osMailQDef_t
 Definition structure for mail queue. More...
 
struct  osEvent
 Event structure contains detailed information about an event. More...
 
union  osEvent.value
 
union  osEvent.def
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define osCMSIS   0x10002
 API version (main [31:16] .sub [15:0]) More...
 
#define osCMSIS_KERNEL   0x10000
 RTOS identification and version (main [31:16] .sub [15:0]) More...
 
#define osKernelSystemId   "KERNEL V1.00"
 RTOS identification string. More...
 
#define osFeature_MainThread   1
 main thread 1=main can be thread, 0=not available More...
 
#define osFeature_Pool   1
 Memory Pools: 1=available, 0=not available. More...
 
#define osFeature_MailQ   1
 Mail Queues: 1=available, 0=not available. More...
 
#define osFeature_MessageQ   1
 Message Queues: 1=available, 0=not available. More...
 
#define osFeature_Signals   8
 maximum number of Signal Flags available per thread More...
 
#define osFeature_Semaphore   30
 maximum count for osSemaphoreCreate function More...
 
#define osFeature_Wait   1
 osWait function: 1=available, 0=not available More...
 
#define osFeature_SysTick   1
 osKernelSysTick functions: 1=available, 0=not available More...
 
#define osWaitForever   0xFFFFFFFF
 Timeout value. More...
 
#define osKernelSysTickFrequency   100000000
 The RTOS kernel system timer frequency in Hz. More...
 
#define osKernelSysTickMicroSec(microsec)   (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000)
 Convert a microseconds value to a RTOS kernel system timer value. More...
 
#define osThreadDef(name, priority, instances, stacksz)
 Create a Thread Definition with function, priority, and stack requirements. More...
 
#define osThread(name)   &os_thread_def_##name
 Access a Thread definition. More...
 
#define osTimerDef(name, function)
 Define a Timer object. More...
 
#define osTimer(name)   &os_timer_def_##name
 Access a Timer definition. More...
 
#define osMutexDef(name)   const osMutexDef_t os_mutex_def_##name = { 0 }
 Define a Mutex. More...
 
#define osMutex(name)   &os_mutex_def_##name
 Access a Mutex definition. More...
 
#define osSemaphoreDef(name)   const osSemaphoreDef_t os_semaphore_def_##name = { 0 }
 Define a Semaphore object. More...
 
#define osSemaphore(name)   &os_semaphore_def_##name
 Access a Semaphore definition. More...
 
#define osPoolDef(name, no, type)
 Define a Memory Pool. More...
 
#define osPool(name)   &os_pool_def_##name
 Access a Memory Pool definition. More...
 
#define osMessageQDef(name, queue_sz, type)
 Create a Message Queue Definition. More...
 
#define osMessageQ(name)   &os_messageQ_def_##name
 Access a Message Queue Definition. More...
 
#define osMailQDef(name, queue_sz, type)
 Create a Mail Queue Definition. More...
 
#define osMailQ(name)   &os_mailQ_def_##name
 Access a Mail Queue Definition. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef void(* os_pthread )(void const *argument)
 Entry point of a thread. More...
 
typedef void(* os_ptimer )(void const *argument)
 Entry point of a timer call back function. More...
 
typedef struct os_thread_cb * osThreadId
 Thread ID identifies the thread (pointer to a thread control block). More...
 
typedef struct os_timer_cb * osTimerId
 Timer ID identifies the timer (pointer to a timer control block). More...
 
typedef struct os_mutex_cb * osMutexId
 Mutex ID identifies the mutex (pointer to a mutex control block). More...
 
typedef struct os_semaphore_cb * osSemaphoreId
 Semaphore ID identifies the semaphore (pointer to a semaphore control block). More...
 
typedef struct os_pool_cb * osPoolId
 Pool ID identifies the memory pool (pointer to a memory pool control block). More...
 
typedef struct os_messageQ_cb * osMessageQId
 Message ID identifies the message queue (pointer to a message queue control block). More...
 
typedef struct os_mailQ_cb * osMailQId
 Mail ID identifies the mail queue (pointer to a mail queue control block). More...
 
+ + + + + + + + + + +

+Enumerations

enum  osPriority {
+  osPriorityIdle = -3, +
+  osPriorityLow = -2, +
+  osPriorityBelowNormal = -1, +
+  osPriorityNormal = 0, +
+  osPriorityAboveNormal = +1, +
+  osPriorityHigh = +2, +
+  osPriorityRealtime = +3, +
+  osPriorityError = 0x84 +
+ }
 Priority used for thread control. More...
 
enum  osStatus {
+  osOK = 0, +
+  osEventSignal = 0x08, +
+  osEventMessage = 0x10, +
+  osEventMail = 0x20, +
+  osEventTimeout = 0x40, +
+  osErrorParameter = 0x80, +
+  osErrorResource = 0x81, +
+  osErrorTimeoutResource = 0xC1, +
+  osErrorISR = 0x82, +
+  osErrorISRRecursive = 0x83, +
+  osErrorPriority = 0x84, +
+  osErrorNoMemory = 0x85, +
+  osErrorValue = 0x86, +
+  osErrorOS = 0xFF, +
+  os_status_reserved = 0x7FFFFFFF +
+ }
 Status code values returned by CMSIS-RTOS functions. More...
 
enum  os_timer_type {
+  osTimerOnce = 0, +
+  osTimerPeriodic = 1 +
+ }
 Timer type value for the timer definition. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

osStatus osKernelInitialize (void)
 Initialize the RTOS Kernel for creating objects. More...
 
osStatus osKernelStart (void)
 Start the RTOS Kernel. More...
 
int32_t osKernelRunning (void)
 Check if the RTOS kernel is already started. More...
 
uint32_t osKernelSysTick (void)
 Get the RTOS kernel system timer counter. More...
 
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument)
 Create a thread and add it to Active Threads and set it to state READY. More...
 
osThreadId osThreadGetId (void)
 Return the thread ID of the current running thread. More...
 
osStatus osThreadTerminate (osThreadId thread_id)
 Terminate execution of a thread and remove it from Active Threads. More...
 
osStatus osThreadYield (void)
 Pass control to next thread that is in state READY. More...
 
osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority)
 Change priority of an active thread. More...
 
osPriority osThreadGetPriority (osThreadId thread_id)
 Get current priority of an active thread. More...
 
osStatus osDelay (uint32_t millisec)
 Wait for Timeout (Time Delay). More...
 
osEvent osWait (uint32_t millisec)
 Wait for Signal, Message, Mail, or Timeout. More...
 
osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument)
 Create a timer. More...
 
osStatus osTimerStart (osTimerId timer_id, uint32_t millisec)
 Start or restart a timer. More...
 
osStatus osTimerStop (osTimerId timer_id)
 Stop the timer. More...
 
osStatus osTimerDelete (osTimerId timer_id)
 Delete a timer that was created by osTimerCreate. More...
 
int32_t osSignalSet (osThreadId thread_id, int32_t signals)
 Set the specified Signal Flags of an active thread. More...
 
int32_t osSignalClear (osThreadId thread_id, int32_t signals)
 Clear the specified Signal Flags of an active thread. More...
 
osEvent osSignalWait (int32_t signals, uint32_t millisec)
 Wait for one or more Signal Flags to become signaled for the current RUNNING thread. More...
 
osMutexId osMutexCreate (const osMutexDef_t *mutex_def)
 Create and Initialize a Mutex object. More...
 
osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec)
 Wait until a Mutex becomes available. More...
 
osStatus osMutexRelease (osMutexId mutex_id)
 Release a Mutex that was obtained by osMutexWait. More...
 
osStatus osMutexDelete (osMutexId mutex_id)
 Delete a Mutex that was created by osMutexCreate. More...
 
osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count)
 Create and Initialize a Semaphore object used for managing resources. More...
 
int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec)
 Wait until a Semaphore token becomes available. More...
 
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
 Release a Semaphore token. More...
 
osStatus osSemaphoreDelete (osSemaphoreId semaphore_id)
 Delete a Semaphore that was created by osSemaphoreCreate. More...
 
osPoolId osPoolCreate (const osPoolDef_t *pool_def)
 Create and Initialize a memory pool. More...
 
void * osPoolAlloc (osPoolId pool_id)
 Allocate a memory block from a memory pool. More...
 
void * osPoolCAlloc (osPoolId pool_id)
 Allocate a memory block from a memory pool and set memory block to zero. More...
 
osStatus osPoolFree (osPoolId pool_id, void *block)
 Return an allocated memory block back to a specific memory pool. More...
 
osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id)
 Create and Initialize a Message Queue. More...
 
osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec)
 Put a Message to a Queue. More...
 
osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec)
 Get a Message or Wait for a Message from a Queue. More...
 
osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id)
 Create and Initialize mail queue. More...
 
void * osMailAlloc (osMailQId queue_id, uint32_t millisec)
 Allocate a memory block from a mail. More...
 
void * osMailCAlloc (osMailQId queue_id, uint32_t millisec)
 Allocate a memory block from a mail and set memory block to zero. More...
 
osStatus osMailPut (osMailQId queue_id, void *mail)
 Put a mail to a queue. More...
 
osEvent osMailGet (osMailQId queue_id, uint32_t millisec)
 Get a mail from a queue. More...
 
osStatus osMailFree (osMailQId queue_id, void *mail)
 Free a memory block from a mail. More...
 
+

Data Structure Documentation

+ +
+
+ + + + +
struct osThreadDef_t
+
+
Note
CAN BE CHANGED: os_thread_def is implementation specific in every CMSIS-RTOS.
+
+ + + + + + + + + + + + + +
Data Fields
+uint32_t +instances +maximum number of instances of that thread function
+os_pthread +pthread +start address of thread function
+uint32_t +stacksize +stack size requirements in bytes; 0 is default stack size
+osPriority +tpriority +initial thread priority
+ +
+
+ +
+
+ + + + +
struct osTimerDef_t
+
+
Note
CAN BE CHANGED: os_timer_def is implementation specific in every CMSIS-RTOS.
+
+ + + + +
Data Fields
+os_ptimer +ptimer +start address of a timer function
+ +
+
+ +
+
+ + + + +
struct osMutexDef_t
+
+
Note
CAN BE CHANGED: os_mutex_def is implementation specific in every CMSIS-RTOS.
+
+ + + + +
Data Fields
+uint32_t +dummy +dummy value.
+ +
+
+ +
+
+ + + + +
struct osSemaphoreDef_t
+
+
Note
CAN BE CHANGED: os_semaphore_def is implementation specific in every CMSIS-RTOS.
+
+ + + + +
Data Fields
+uint32_t +dummy +dummy value.
+ +
+
+ +
+
+ + + + +
struct osPoolDef_t
+
+
Note
CAN BE CHANGED: os_pool_def is implementation specific in every CMSIS-RTOS.
+
+ + + + + + + + + + +
Data Fields
+uint32_t +item_sz +size of an item
+void * +pool +pointer to memory for pool
+uint32_t +pool_sz +number of items (elements) in the pool
+ +
+
+ +
+
+ + + + +
struct osMessageQDef_t
+
+
Note
CAN BE CHANGED: os_messageQ_def is implementation specific in every CMSIS-RTOS.
+
+ + + + + + + + + + +
Data Fields
+uint32_t +item_sz +size of an item
+void * +pool +memory array for messages
+uint32_t +queue_sz +number of elements in the queue
+ +
+
+ +
+
+ + + + +
struct osMailQDef_t
+
+
Note
CAN BE CHANGED: os_mailQ_def is implementation specific in every CMSIS-RTOS.
+
+ + + + + + + + + + +
Data Fields
+uint32_t +item_sz +size of an item
+void * +pool +memory array for mail
+uint32_t +queue_sz +number of elements in the queue
+ +
+
+

Macro Definition Documentation

+ +
+
+ + + + +
#define osWaitForever   0xFFFFFFFF
+
+
Note
MUST REMAIN UNCHANGED: osWaitForever shall be consistent in every CMSIS-RTOS. wait forever timeout value
+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef void(* os_pthread)(void const *argument)
+
+
Note
MUST REMAIN UNCHANGED: os_pthread shall be consistent in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef void(* os_ptimer)(void const *argument)
+
+
Note
MUST REMAIN UNCHANGED: os_ptimer shall be consistent in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef struct os_mailQ_cb* osMailQId
+
+
Note
CAN BE CHANGED: os_mailQ_cb is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef struct os_messageQ_cb* osMessageQId
+
+
Note
CAN BE CHANGED: os_messageQ_cb is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef struct os_mutex_cb* osMutexId
+
+
Note
CAN BE CHANGED: os_mutex_cb is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef struct os_pool_cb* osPoolId
+
+
Note
CAN BE CHANGED: os_pool_cb is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef struct os_semaphore_cb* osSemaphoreId
+
+
Note
CAN BE CHANGED: os_semaphore_cb is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef struct os_thread_cb* osThreadId
+
+
Note
CAN BE CHANGED: os_thread_cb is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
typedef struct os_timer_cb* osTimerId
+
+
Note
CAN BE CHANGED: os_timer_cb is implementation specific in every CMSIS-RTOS.
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum os_timer_type
+
+
Note
MUST REMAIN UNCHANGED: os_timer_type shall be consistent in every CMSIS-RTOS.
+ + + +
Enumerator
osTimerOnce  +

one-shot timer

+
osTimerPeriodic  +

repeating timer

+
+ +
+
+ +
+
+ + + + +
enum osStatus
+
+
Note
MUST REMAIN UNCHANGED: osStatus shall be consistent in every CMSIS-RTOS.
+ + + + + + + + + + + + + + + + +
Enumerator
osOK  +

function completed; no error or event occurred.

+
osEventSignal  +

function completed; signal event occurred.

+
osEventMessage  +

function completed; message event occurred.

+
osEventMail  +

function completed; mail event occurred.

+
osEventTimeout  +

function completed; timeout occurred.

+
osErrorParameter  +

parameter error: a mandatory parameter was missing or specified an incorrect object.

+
osErrorResource  +

resource not available: a specified resource was not available.

+
osErrorTimeoutResource  +

resource not available within given time: a specified resource was not available within the timeout period.

+
osErrorISR  +

not allowed in ISR context: the function cannot be called from interrupt service routines.

+
osErrorISRRecursive  +

function called multiple times from ISR with same object.

+
osErrorPriority  +

system cannot determine priority or thread has illegal priority.

+
osErrorNoMemory  +

system is out of memory: it was impossible to allocate or reserve memory for the operation.

+
osErrorValue  +

value of a parameter is out of range.

+
osErrorOS  +

unspecified RTOS error: run-time error but no other error message fits.

+
os_status_reserved  +

prevent from enum down-size compiler optimization.

+
+ +
+
+
+
+ + + + diff --git a/docs/RTOS/html/cmsis__os_8h_structosMailQDef__t.js b/docs/RTOS/html/cmsis__os_8h_structosMailQDef__t.js new file mode 100644 index 0000000..d77435a --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h_structosMailQDef__t.js @@ -0,0 +1,6 @@ +var cmsis__os_8h_structosMailQDef__t = +[ + [ "item_sz", "cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f", null ], + [ "pool", "cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c", null ], + [ "queue_sz", "cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/cmsis__os_8h_structosMessageQDef__t.js b/docs/RTOS/html/cmsis__os_8h_structosMessageQDef__t.js new file mode 100644 index 0000000..e94515e --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h_structosMessageQDef__t.js @@ -0,0 +1,6 @@ +var cmsis__os_8h_structosMessageQDef__t = +[ + [ "item_sz", "cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f", null ], + [ "pool", "cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c", null ], + [ "queue_sz", "cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/cmsis__os_8h_structosMutexDef__t.js b/docs/RTOS/html/cmsis__os_8h_structosMutexDef__t.js new file mode 100644 index 0000000..29828d5 --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h_structosMutexDef__t.js @@ -0,0 +1,4 @@ +var cmsis__os_8h_structosMutexDef__t = +[ + [ "dummy", "cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/cmsis__os_8h_structosPoolDef__t.js b/docs/RTOS/html/cmsis__os_8h_structosPoolDef__t.js new file mode 100644 index 0000000..db1c662 --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h_structosPoolDef__t.js @@ -0,0 +1,6 @@ +var cmsis__os_8h_structosPoolDef__t = +[ + [ "item_sz", "cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f", null ], + [ "pool", "cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c", null ], + [ "pool_sz", "cmsis__os_8h.html#ac112e786b2a234e0e45cb5bdbee53763", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/cmsis__os_8h_structosSemaphoreDef__t.js b/docs/RTOS/html/cmsis__os_8h_structosSemaphoreDef__t.js new file mode 100644 index 0000000..4ef52a4 --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h_structosSemaphoreDef__t.js @@ -0,0 +1,4 @@ +var cmsis__os_8h_structosSemaphoreDef__t = +[ + [ "dummy", "cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/cmsis__os_8h_structosThreadDef__t.js b/docs/RTOS/html/cmsis__os_8h_structosThreadDef__t.js new file mode 100644 index 0000000..806d0d7 --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h_structosThreadDef__t.js @@ -0,0 +1,7 @@ +var cmsis__os_8h_structosThreadDef__t = +[ + [ "instances", "cmsis__os_8h.html#aa4c4115851a098c0b87358ab6c025603", null ], + [ "pthread", "cmsis__os_8h.html#ad3c9624ee214329fb34e71f544a6933e", null ], + [ "stacksize", "cmsis__os_8h.html#a950b7f81ad4711959517296e63bc79d1", null ], + [ "tpriority", "cmsis__os_8h.html#a15da8f23c6fe684b70a73646ada685e7", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/cmsis__os_8h_structosTimerDef__t.js b/docs/RTOS/html/cmsis__os_8h_structosTimerDef__t.js new file mode 100644 index 0000000..01d9dc2 --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8h_structosTimerDef__t.js @@ -0,0 +1,4 @@ +var cmsis__os_8h_structosTimerDef__t = +[ + [ "ptimer", "cmsis__os_8h.html#a15773df83aba93f8e61f3737af5fae47", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/cmsis__os_8txt.html b/docs/RTOS/html/cmsis__os_8txt.html new file mode 100644 index 0000000..f8c28d5 --- /dev/null +++ b/docs/RTOS/html/cmsis__os_8txt.html @@ -0,0 +1,175 @@ + + + + + +cmsis_os.txt File Reference +CMSIS-RTOS: cmsis_os.txt File Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
cmsis_os.txt File Reference
+
+
+ + + + + + +

+Enumerations

enum  os_timer_type {
+  osTimerOnce = 0, +
+  osTimerPeriodic = 1 +
+ }
 
enum  osStatus {
+  osOK = 0, +
+  osEventSignal = 0x08, +
+  osEventMessage = 0x10, +
+  osEventMail = 0x20, +
+  osEventTimeout = 0x40, +
+  osErrorParameter = 0x80, +
+  osErrorResource = 0x81, +
+  osErrorTimeoutResource = 0xC1, +
+  osErrorISR = 0x82, +
+  osErrorISRRecursive = 0x83, +
+  osErrorPriority = 0x84, +
+  osErrorNoMemory = 0x85, +
+  osErrorValue = 0x86, +
+  osErrorOS = 0xFF, +
+  os_status_reserved = 0x7FFFFFFF +
+ }
 
+
+
+ + + + diff --git a/docs/RTOS/html/cmsis__os__rtx__extensions_8h.html b/docs/RTOS/html/cmsis__os__rtx__extensions_8h.html new file mode 100644 index 0000000..bdf1824 --- /dev/null +++ b/docs/RTOS/html/cmsis__os__rtx__extensions_8h.html @@ -0,0 +1,147 @@ + + + + + +cmsis_os_rtx_extensions.h File Reference +CMSIS-RTOS: cmsis_os_rtx_extensions.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
cmsis_os_rtx_extensions.h File Reference
+
+
+ + + + + + + + + + + + + + +

+Functions

uint32_t os_suspend (void)
 Suspend the RTX task scheduler. More...
 
void os_resume (uint32_t sleep_time)
 Resume the RTX task scheduler. More...
 
__NO_RETURN void os_idle_demon (void)
 OS idle demon (running when no other thread is ready to run). More...
 
__NO_RETURN void os_error (uint32_t error_code)
 OS error callback (called when a runtime error is detected). More...
 
+
+
+ + + + diff --git a/docs/RTOS/html/config_wizard.png b/docs/RTOS/html/config_wizard.png new file mode 100644 index 0000000..10c7e1d Binary files /dev/null and b/docs/RTOS/html/config_wizard.png differ diff --git a/docs/RTOS/html/configure.html b/docs/RTOS/html/configure.html new file mode 100644 index 0000000..2e2d556 --- /dev/null +++ b/docs/RTOS/html/configure.html @@ -0,0 +1,146 @@ + + + + + +Configure RTX +CMSIS-RTOS: Configure RTX + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Configure RTX
+
+
+

The file RTX_Conf_CM.c is used to define the configuration parameters of CMSIS-RTOS RTX. This file must be part of every project that is using the CMSIS-RTOS RTX kernel.

+

The configuration file uses Configuration Wizard Annotations. Refer to Pack - Configuration Wizard Annotations for details. Depending on the development tool that is used, this might lead to a more user friendly graphical representation of the settings. The following is a screenshot of the same configuration file using µVision's Configuration Wizard view:

+
+config_wizard.png +
+RTX_Conf_CM.c in Configuration Wizard View
+

The configuration options are explained on these pages:

+ +

Other configuration options not covered by the Configuration Wizard are explained here:

+ +
+
+ + + + diff --git a/docs/RTOS/html/configure.js b/docs/RTOS/html/configure.js new file mode 100644 index 0000000..6b347d7 --- /dev/null +++ b/docs/RTOS/html/configure.js @@ -0,0 +1,21 @@ +var configure = +[ + [ "Thread Configuration", "threadConfig.html", [ + [ "Configuration of Thread count and Stack Space", "threadConfig.html#stackConfig", null ], + [ "Stack Overflow Checking", "threadConfig.html#stackCheck", null ], + [ "Stack Usage Watermark", "threadConfig.html#stackUsage", null ], + [ "Processor Mode for Thread Execution", "threadConfig.html#processorMode", null ] + ] ], + [ "RTX Kernel Tick Timer Configuration", "timerTick.html", [ + [ "Usage of an Alternate Timer as RTX Kernel Timer", "timerTick.html#AltTimer", null ] + ] ], + [ "System Configuration", "systemConfig.html", [ + [ "Settings for Round-Robin Thread Switching", "systemConfig.html#RoundRobin", null ], + [ "User Timer Management", "systemConfig.html#UserTimer", null ], + [ "ISR FIFO Queue size", "systemConfig.html#ISRFIFO", null ] + ] ], + [ "Configuration for Low-Power Modes", "lowPower.html", [ + [ "Tick-less operation", "lowPower.html#TickLess", null ] + ] ], + [ "SVC Functions", "svcFunctions.html", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/creating_RTX_LIB.html b/docs/RTOS/html/creating_RTX_LIB.html new file mode 100644 index 0000000..c54c90e --- /dev/null +++ b/docs/RTOS/html/creating_RTX_LIB.html @@ -0,0 +1,142 @@ + + + + + +Building the RTX Library +CMSIS-RTOS: Building the RTX Library + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Building the RTX Library
+
+
+

The CMSIS Pack contains a µVision project for building the set of CMSIS-RTOS RTX libraries. This project can also be used as a reference for building the CMSIS-RTOS RTX libraries using a tool-chain of your choice.

+
    +
  1. Open the project RTX_Lib_CM.uvproj from the pack folder CMSIS/RTOS/RTX/SRC/ARM/ in uVision.
  2. +
  3. Select the project target that matches your device's processor core.
    + The project provides target configuration for all supported Cortex-M targets supported by RTX.
    + Note: The targets CMF4_LE (Little Endian) and CMF4_BE (Big Endian) shall be used for Cortex-M4 as well as Cortex-M7 based devices with FPU.
  4. +
  5. You can find out about the required preprocessor defines in the dialogs Options for Target - C/C++ and Options for Target - Asm.
  6. +
  7. From the Project window you find the list of source files required for a complete library build.
  8. +
+
+own_lib_projwin.png +
+Project with files for Cortex-M4 cores
+
+
+ + + + diff --git a/docs/RTOS/html/dir_67baed4ff719a838d401a6dc7774cf41.html b/docs/RTOS/html/dir_67baed4ff719a838d401a6dc7774cf41.html new file mode 100644 index 0000000..a604885 --- /dev/null +++ b/docs/RTOS/html/dir_67baed4ff719a838d401a6dc7774cf41.html @@ -0,0 +1,137 @@ + + + + + +RTOS Directory Reference +CMSIS-RTOS: RTOS Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
RTOS Directory Reference
+
+
+ + + + + + +

+Directories

directory  RTX
 
directory  Template
 
+
+
+ + + + diff --git a/docs/RTOS/html/dir_899ec648bfef5b77e4c17b1ad40af9f5.html b/docs/RTOS/html/dir_899ec648bfef5b77e4c17b1ad40af9f5.html new file mode 100644 index 0000000..e877b29 --- /dev/null +++ b/docs/RTOS/html/dir_899ec648bfef5b77e4c17b1ad40af9f5.html @@ -0,0 +1,135 @@ + + + + + +Templates Directory Reference +CMSIS-RTOS: Templates Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Templates Directory Reference
+
+
+ + + + +

+Files

file  RTX_Conf_CM.c
 
+
+
+ + + + diff --git a/docs/RTOS/html/dir_8ecbca576638d6cf096e42200a0f53dc.html b/docs/RTOS/html/dir_8ecbca576638d6cf096e42200a0f53dc.html new file mode 100644 index 0000000..42263ce --- /dev/null +++ b/docs/RTOS/html/dir_8ecbca576638d6cf096e42200a0f53dc.html @@ -0,0 +1,135 @@ + + + + + +RTX Directory Reference +CMSIS-RTOS: RTX Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
RTX Directory Reference
+
+
+ + + + +

+Directories

directory  Templates
 
+
+
+ + + + diff --git a/docs/RTOS/html/dir_9afdeffb8e409a4e0df5c5bf9ab1a7d2.html b/docs/RTOS/html/dir_9afdeffb8e409a4e0df5c5bf9ab1a7d2.html new file mode 100644 index 0000000..1019110 --- /dev/null +++ b/docs/RTOS/html/dir_9afdeffb8e409a4e0df5c5bf9ab1a7d2.html @@ -0,0 +1,135 @@ + + + + + +Template Directory Reference +CMSIS-RTOS: Template Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Template Directory Reference
+
+
+ + + + +

+Files

file  cmsis_os.h
 
+
+
+ + + + diff --git a/docs/RTOS/html/dir_b0448b4e45a55bca3a46fdbabd848ed7.html b/docs/RTOS/html/dir_b0448b4e45a55bca3a46fdbabd848ed7.html new file mode 100644 index 0000000..aaf24e7 --- /dev/null +++ b/docs/RTOS/html/dir_b0448b4e45a55bca3a46fdbabd848ed7.html @@ -0,0 +1,135 @@ + + + + + +src Directory Reference +CMSIS-RTOS: src Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
src Directory Reference
+
+
+ + + + +

+Directories

directory  RTX
 
+
+
+ + + + diff --git a/docs/RTOS/html/dir_c0ad159d7acfc6a66622c7bec0ee8a21.html b/docs/RTOS/html/dir_c0ad159d7acfc6a66622c7bec0ee8a21.html new file mode 100644 index 0000000..85b3ec5 --- /dev/null +++ b/docs/RTOS/html/dir_c0ad159d7acfc6a66622c7bec0ee8a21.html @@ -0,0 +1,135 @@ + + + + + +RTX Directory Reference +CMSIS-RTOS: RTX Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
RTX Directory Reference
+
+
+ + + + +

+Files

file  cmsis_os_rtx_extensions.h
 
+
+
+ + + + diff --git a/docs/RTOS/html/dirstructfiles.html b/docs/RTOS/html/dirstructfiles.html new file mode 100644 index 0000000..fd51c8c --- /dev/null +++ b/docs/RTOS/html/dirstructfiles.html @@ -0,0 +1,496 @@ + + + + + +Directory Structure and File Overview +CMSIS-RTOS: Directory Structure and File Overview + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Directory Structure and File Overview
+
+
+

The following section provides an overview of the directory structure and the files that are relevant for the user's for CMSIS-RTOS RTX.

+

+CMSIS-RTOS RTX Directory Structure

+

The CMSIS-RTOS RTX is delivered in source code and several examples are provided.

+ + + + + + + + + + + + + +
Directory Content
INC The include files for CMSIS-RTOS RTX. cmsis_os.h is the central include file for user applications.
LIB CMSIS-RTOS RTX library files for ARMCC, GCC, and IAR Compiler.
SRC Source code of CMSIS-RTOS RTX library along with project files for ARMCC, GCC, and IAR Compiler.
Templates CMSIS-RTOS RTX configuration file (RTX_Conf_CM.c).
UserCode Templates Template files for creating application projects with CMSIS-RTOS RTX.
+

+CMSIS-RTOS RTX Library Files

+

The CMSIS-RTOS RTX Library is available pre-compiled for ARMCC, GCC, and IAR C/C++ Compilers and supports all Cortex-M processor variants in every configuration.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Library File Processor Configuration
LIB/ARM/RTX_CM0.lib CMSIS-RTOS RTX Library for ARMCC Compiler, Cortex-M0 and M1, little-endian.
LIB/ARM/RTX_CM0_B.lib CMSIS-RTOS RTX Library for ARMCC Compiler, Cortex-M0 and M1, big-endian.
LIB/ARM/RTX_CM3.lib CMSIS-RTOS RTX Library for ARMCC Compiler, Cortex-M3, M4, and M7 without FPU, little-endian.
LIB/ARM/RTX_CM3_B.lib CMSIS-RTOS RTX Library for ARMCC Compiler, Cortex-M3, M4, and M7 without FPU, big-endian.
LIB/ARM/RTX_CM4.lib CMSIS-RTOS RTX Library for ARMCC Compiler, Cortex-M4 and M7 with FPU, little-endian.
LIB/ARM/RTX_CM4_B.lib CMSIS-RTOS RTX Library for ARMCC Compiler, Cortex-M4 and M7 with FPU, big-endian.
LIB/GCC/libRTX_CM0.a CMSIS-RTOS RTX Library for GCC Compiler, Cortex-M0 and M1, little-endian.
LIB/GCC/libRTX_CM0_B.a CMSIS-RTOS RTX Library for GCC Compiler, Cortex-M0 and M1, big-endian.
LIB/GCC/libRTX_CM3.a CMSIS-RTOS RTX Library for GCC Compiler, Cortex-M3, M4, and M7 without FPU, little-endian.
LIB/GCC/libRTX_CM3_B.a CMSIS-RTOS RTX Library for GCC Compiler, Cortex-M3, M4, and M7 without FPU, big-endian.
LIB/GCC/libRTX_CM4.a CMSIS-RTOS RTX Library for GCC Compiler, Cortex-M4 and M7 with FPU, little-endian.
LIB/GCC/libRTX_CM4_B.a CMSIS-RTOS RTX Library for GCC Compiler, Cortex-M4 and M7 with FPU, big-endian.
LIB/IAR/RTX_CM0.lib CMSIS-RTOS RTX Library for IAR Compiler, Cortex-M0 and M1, little-endian.
LIB/IAR/RTX_CM0_B.lib CMSIS-RTOS RTX Library for IAR Compiler, Cortex-M0 and M1, big-endian.
LIB/IAR/RTX_CM3.lib CMSIS-RTOS RTX Library for IAR Compiler, Cortex-M3, M4, and M7 without FPU, little-endian.
LIB/IAR/RTX_CM3_B.lib CMSIS-RTOS RTX Library for IAR Compiler, Cortex-M3, M4, and M7 without FPU, big-endian.
LIB/IAR/RTX_CM4.lib CMSIS-RTOS RTX Library for IAR Compiler, Cortex-M4 and M7 with FPU, little-endian.
LIB/IAR/RTX_CM4_B.lib CMSIS-RTOS RTX Library for IAR Compiler, Cortex-M4 and M7 with FPU, big-endian.
+

+Configuration File RTX_Conf_CM.c

+
/*----------------------------------------------------------------------------
+
* CMSIS-RTOS - RTX
+
*----------------------------------------------------------------------------
+
* Name: RTX_Conf_CM.C
+
* Purpose: Configuration of CMSIS RTX Kernel for Cortex-M
+
* Rev.: V4.70.1
+
*----------------------------------------------------------------------------
+
*
+
* Copyright (c) 1999-2009 KEIL, 2009-2016 ARM Germany GmbH. All rights reserved.
+
*
+
* SPDX-License-Identifier: Apache-2.0
+
*
+
* Licensed under the Apache License, Version 2.0 (the License); you may
+
* not use this file except in compliance with the License.
+
* You may obtain a copy of the License at
+
*
+
* www.apache.org/licenses/LICENSE-2.0
+
*
+
* Unless required by applicable law or agreed to in writing, software
+
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
* See the License for the specific language governing permissions and
+
* limitations under the License.
+
*---------------------------------------------------------------------------*/
+
+
#include "cmsis_os.h"
+
+
+
/*----------------------------------------------------------------------------
+
* RTX User configuration part BEGIN
+
*---------------------------------------------------------------------------*/
+
+
//-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
+
//
+
// <h>Thread Configuration
+
// =======================
+
//
+
// <o>Number of concurrent running user threads <1-250>
+
// <i> Defines max. number of user threads that will run at the same time.
+
// <i> Default: 6
+
#ifndef OS_TASKCNT
+
#define OS_TASKCNT 6
+
#endif
+
+
// <o>Default Thread stack size [bytes] <64-4096:8><#/4>
+
// <i> Defines default stack size for threads with osThreadDef stacksz = 0
+
// <i> Default: 200
+
#ifndef OS_STKSIZE
+
#define OS_STKSIZE 50 // this stack size value is in words
+
#endif
+
+
// <o>Main Thread stack size [bytes] <64-32768:8><#/4>
+
// <i> Defines stack size for main thread.
+
// <i> Default: 200
+
#ifndef OS_MAINSTKSIZE
+
#define OS_MAINSTKSIZE 50 // this stack size value is in words
+
#endif
+
+
// <o>Number of threads with user-provided stack size <0-250>
+
// <i> Defines the number of threads with user-provided stack size.
+
// <i> Default: 0
+
#ifndef OS_PRIVCNT
+
#define OS_PRIVCNT 0
+
#endif
+
+
// <o>Total stack size [bytes] for threads with user-provided stack size <0-1048576:8><#/4>
+
// <i> Defines the combined stack size for threads with user-provided stack size.
+
// <i> Default: 0
+
#ifndef OS_PRIVSTKSIZE
+
#define OS_PRIVSTKSIZE 0 // this stack size value is in words
+
#endif
+
+
// <q>Stack overflow checking
+
// <i> Enable stack overflow checks at thread switch.
+
// <i> Enabling this option increases slightly the execution time of a thread switch.
+
#ifndef OS_STKCHECK
+
#define OS_STKCHECK 1
+
#endif
+
+
// <q>Stack usage watermark
+
// <i> Initialize thread stack with watermark pattern for analyzing stack usage (current/maximum) in System and Thread Viewer.
+
// <i> Enabling this option increases significantly the execution time of osThreadCreate.
+
#ifndef OS_STKINIT
+
#define OS_STKINIT 0
+
#endif
+
+
// <o>Processor mode for thread execution
+
// <0=> Unprivileged mode
+
// <1=> Privileged mode
+
// <i> Default: Privileged mode
+
#ifndef OS_RUNPRIV
+
#define OS_RUNPRIV 1
+
#endif
+
+
// </h>
+
+
// <h>RTX Kernel Timer Tick Configuration
+
// ======================================
+
// <q> Use Cortex-M SysTick timer as RTX Kernel Timer
+
// <i> Cortex-M processors provide in most cases a SysTick timer that can be used as
+
// <i> as time-base for RTX.
+
#ifndef OS_SYSTICK
+
#define OS_SYSTICK 1
+
#endif
+
//
+
// <o>RTOS Kernel Timer input clock frequency [Hz] <1-1000000000>
+
// <i> Defines the input frequency of the RTOS Kernel Timer.
+
// <i> When the Cortex-M SysTick timer is used, the input clock
+
// <i> is on most systems identical with the core clock.
+
#ifndef OS_CLOCK
+
#define OS_CLOCK 12000000
+
#endif
+
+
// <o>RTX Timer tick interval value [us] <1-1000000>
+
// <i> The RTX Timer tick interval value is used to calculate timeout values.
+
// <i> When the Cortex-M SysTick timer is enabled, the value also configures the SysTick timer.
+
// <i> Default: 1000 (1ms)
+
#ifndef OS_TICK
+
#define OS_TICK 1000
+
#endif
+
+
// </h>
+
+
// <h>System Configuration
+
// =======================
+
//
+
// <e>Round-Robin Thread switching
+
// ===============================
+
//
+
// <i> Enables Round-Robin Thread switching.
+
#ifndef OS_ROBIN
+
#define OS_ROBIN 1
+
#endif
+
+
// <o>Round-Robin Timeout [ticks] <1-1000>
+
// <i> Defines how long a thread will execute before a thread switch.
+
// <i> Default: 5
+
#ifndef OS_ROBINTOUT
+
#define OS_ROBINTOUT 5
+
#endif
+
+
// </e>
+
+
// <e>User Timers
+
// ==============
+
// <i> Enables user Timers
+
#ifndef OS_TIMERS
+
#define OS_TIMERS 1
+
#endif
+
+
// <o>Timer Thread Priority
+
// <1=> Low
+
// <2=> Below Normal <3=> Normal <4=> Above Normal
+
// <5=> High
+
// <6=> Realtime (highest)
+
// <i> Defines priority for Timer Thread
+
// <i> Default: High
+
#ifndef OS_TIMERPRIO
+
#define OS_TIMERPRIO 5
+
#endif
+
+
// <o>Timer Thread stack size [bytes] <64-4096:8><#/4>
+
// <i> Defines stack size for Timer thread.
+
// <i> Default: 200
+
#ifndef OS_TIMERSTKSZ
+
#define OS_TIMERSTKSZ 50 // this stack size value is in words
+
#endif
+
+
// <o>Timer Callback Queue size <1-32>
+
// <i> Number of concurrent active timer callback functions.
+
// <i> Default: 4
+
#ifndef OS_TIMERCBQS
+
#define OS_TIMERCBQS 4
+
#endif
+
+
// </e>
+
+
// <o>ISR FIFO Queue size<4=> 4 entries <8=> 8 entries
+
// <12=> 12 entries <16=> 16 entries
+
// <24=> 24 entries <32=> 32 entries
+
// <48=> 48 entries <64=> 64 entries
+
// <96=> 96 entries
+
// <i> ISR functions store requests to this buffer,
+
// <i> when they are called from the interrupt handler.
+
// <i> Default: 16 entries
+
#ifndef OS_FIFOSZ
+
#define OS_FIFOSZ 16
+
#endif
+
+
// </h>
+
+
//------------- <<< end of configuration section >>> -----------------------
+
+
// Standard library system mutexes
+
// ===============================
+
// Define max. number system mutexes that are used to protect
+
// the arm standard runtime library. For microlib they are not used.
+
#ifndef OS_MUTEXCNT
+
#define OS_MUTEXCNT 8
+
#endif
+
+
/*----------------------------------------------------------------------------
+
* RTX User configuration part END
+
*---------------------------------------------------------------------------*/
+
+
#define OS_TRV ((uint32_t)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1)
+
+
+
/*----------------------------------------------------------------------------
+
* Global Functions
+
*---------------------------------------------------------------------------*/
+
+
/*--------------------------- os_idle_demon ---------------------------------*/
+
+
/// \brief The idle demon is running when no other thread is ready to run
+
void os_idle_demon (void) {
+
+
for (;;) {
+
/* HERE: include optional user code to be executed when no thread runs.*/
+
}
+
}
+
+
#if (OS_SYSTICK == 0) // Functions for alternative timer as RTX kernel timer
+
+
/*--------------------------- os_tick_init ----------------------------------*/
+
+
/// \brief Initializes an alternative hardware timer as RTX kernel timer
+
/// \return IRQ number of the alternative hardware timer
+
int os_tick_init (void) {
+
return (-1); /* Return IRQ number of timer (0..239) */
+
}
+
+
/*--------------------------- os_tick_val -----------------------------------*/
+
+
/// \brief Get alternative hardware timer's current value (0 .. OS_TRV)
+
/// \return Current value of the alternative hardware timer
+
uint32_t os_tick_val (void) {
+
return (0);
+
}
+
+
/*--------------------------- os_tick_ovf -----------------------------------*/
+
+
/// \brief Get alternative hardware timer's overflow flag
+
/// \return Overflow flag\n
+
/// - 1 : overflow
+
/// - 0 : no overflow
+
uint32_t os_tick_ovf (void) {
+
return (0);
+
}
+
+
/*--------------------------- os_tick_irqack --------------------------------*/
+
+
/// \brief Acknowledge alternative hardware timer interrupt
+
void os_tick_irqack (void) {
+
/* ... */
+
}
+
+
#endif // (OS_SYSTICK == 0)
+
+
/*--------------------------- os_error --------------------------------------*/
+
+
/* OS Error Codes */
+
#define OS_ERROR_STACK_OVF 1
+
#define OS_ERROR_FIFO_OVF 2
+
#define OS_ERROR_MBX_OVF 3
+
#define OS_ERROR_TIMER_OVF 4
+
+
extern osThreadId svcThreadGetId (void);
+
+
/// \brief Called when a runtime error is detected
+
/// \param[in] error_code actual error code that has been detected
+
void os_error (uint32_t error_code) {
+
+
/* HERE: include optional code to be executed on runtime error. */
+
switch (error_code) {
+ +
/* Stack overflow detected for the currently running task. */
+
/* Thread can be identified by calling svcThreadGetId(). */
+
break;
+ +
/* ISR FIFO Queue buffer overflow detected. */
+
break;
+ +
/* Mailbox overflow detected. */
+
break;
+ +
/* User Timer Callback Queue overflow detected. */
+
break;
+
default:
+
break;
+
}
+
for (;;);
+
}
+
+
+
/*----------------------------------------------------------------------------
+
* RTX Configuration Functions
+
*---------------------------------------------------------------------------*/
+
+
#include "RTX_CM_lib.h"
+
+
/*----------------------------------------------------------------------------
+
* end of file
+
*---------------------------------------------------------------------------*/
+
+
+ + + + diff --git a/docs/RTOS/html/doxygen.css b/docs/RTOS/html/doxygen.css new file mode 100644 index 0000000..f0f36f8 --- /dev/null +++ b/docs/RTOS/html/doxygen.css @@ -0,0 +1,1366 @@ +/* The standard CSS for doxygen 1.8.6 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/docs/RTOS/html/doxygen.png b/docs/RTOS/html/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/docs/RTOS/html/doxygen.png differ diff --git a/docs/RTOS/html/dynsections.js b/docs/RTOS/html/dynsections.js new file mode 100644 index 0000000..ed092c7 --- /dev/null +++ b/docs/RTOS/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + +RTX Tutorial +CMSIS-RTOS: RTX Tutorial + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
RTX Tutorial
+
+
+

The tutorial is an excerpt of Trevor Martin's book The Designer's Guide to the Cortex-M Processor Family. It is accompanied by a Pack file that contains the example projects that are discussed in the tutorial.

+

The tutorial is available as a Software Pack from http://www.keil.com/dd2/pack. On the page, browse to Hitex and select the Pack described as "An Introduction to using CMSIS RTOS for Cortex-M Microcontrollers". Download and install the Pack which contains all example projects referenced in the CMSIS_RTOS_Tutorial.pdf.

+
+
+ + + + diff --git a/docs/RTOS/html/files.html b/docs/RTOS/html/files.html new file mode 100644 index 0000000..106fef9 --- /dev/null +++ b/docs/RTOS/html/files.html @@ -0,0 +1,135 @@ + + + + + +File List +CMSIS-RTOS: File List + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
+
+ + + + diff --git a/docs/RTOS/html/ftv2blank.png b/docs/RTOS/html/ftv2blank.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/docs/RTOS/html/ftv2blank.png differ diff --git a/docs/RTOS/html/ftv2cl.png b/docs/RTOS/html/ftv2cl.png new file mode 100644 index 0000000..132f657 Binary files /dev/null and b/docs/RTOS/html/ftv2cl.png differ diff --git a/docs/RTOS/html/ftv2doc.png b/docs/RTOS/html/ftv2doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/docs/RTOS/html/ftv2doc.png differ diff --git a/docs/RTOS/html/ftv2folderclosed.png b/docs/RTOS/html/ftv2folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/docs/RTOS/html/ftv2folderclosed.png differ diff --git a/docs/RTOS/html/ftv2folderopen.png b/docs/RTOS/html/ftv2folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/docs/RTOS/html/ftv2folderopen.png differ diff --git a/docs/RTOS/html/ftv2lastnode.png b/docs/RTOS/html/ftv2lastnode.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/docs/RTOS/html/ftv2lastnode.png differ diff --git a/docs/RTOS/html/ftv2link.png b/docs/RTOS/html/ftv2link.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/docs/RTOS/html/ftv2link.png differ diff --git a/docs/RTOS/html/ftv2mlastnode.png b/docs/RTOS/html/ftv2mlastnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/docs/RTOS/html/ftv2mlastnode.png differ diff --git a/docs/RTOS/html/ftv2mnode.png b/docs/RTOS/html/ftv2mnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/docs/RTOS/html/ftv2mnode.png differ diff --git a/docs/RTOS/html/ftv2mo.png b/docs/RTOS/html/ftv2mo.png new file mode 100644 index 0000000..4bfb80f Binary files /dev/null and b/docs/RTOS/html/ftv2mo.png differ diff --git a/docs/RTOS/html/ftv2node.png b/docs/RTOS/html/ftv2node.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/docs/RTOS/html/ftv2node.png differ diff --git a/docs/RTOS/html/ftv2ns.png b/docs/RTOS/html/ftv2ns.png new file mode 100644 index 0000000..72e3d71 Binary files /dev/null and b/docs/RTOS/html/ftv2ns.png differ diff --git a/docs/RTOS/html/ftv2plastnode.png b/docs/RTOS/html/ftv2plastnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/docs/RTOS/html/ftv2plastnode.png differ diff --git a/docs/RTOS/html/ftv2pnode.png b/docs/RTOS/html/ftv2pnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/docs/RTOS/html/ftv2pnode.png differ diff --git a/docs/RTOS/html/ftv2splitbar.png b/docs/RTOS/html/ftv2splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/docs/RTOS/html/ftv2splitbar.png differ diff --git a/docs/RTOS/html/ftv2vertline.png b/docs/RTOS/html/ftv2vertline.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/docs/RTOS/html/ftv2vertline.png differ diff --git a/docs/RTOS/html/functionOverview.html b/docs/RTOS/html/functionOverview.html new file mode 100644 index 0000000..fb4f485 --- /dev/null +++ b/docs/RTOS/html/functionOverview.html @@ -0,0 +1,237 @@ + + + + + +Function Overview +CMSIS-RTOS: Function Overview + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Function Overview
+
+
+

The following list provides a brief overview of all CMSIS-RTOS functions. Functions marked with $ are optional. A specific CMSIS-RTOS implementation may not provide all functions, but this is clearly indicated with osFeatureXXXX defines.

+
Note
Functions that are not supported by the RTX Implementation, are marked with a (*).
+ +

+Timout Value

+

The timeout value specifies the number of timer ticks until a timeout or time delay elapses. The value is an upper bound and depends on the actual time elapsed since the last timer tick.

+

For a value of 1 the system waits until the next timer tick occurs. That means that the actual timeout value can be one timer tick less than the specified timeout value.

+
+TimerValues.png +
+Timer Values
+

+Calls from Interrupt Service Routines

+

The following CMSIS-RTOS functions can be called from threads and Interrupt Service Routines (ISR):

+ +

Functions that cannot be called from an ISR are verifying the interrupt status and return, in case they are called from an ISR context, the status code osErrorISR. In some implementations, this condition might be caught using the HARD FAULT vector.

+

Some CMSIS-RTOS implementations support CMSIS-RTOS function calls from multiple ISRs at the same time. If this is impossible, the CMSIS-RTOS rejects calls by nested ISR functions with the status code osErrorISRRecursive.

+
+
+ + + + diff --git a/docs/RTOS/html/functions.html b/docs/RTOS/html/functions.html new file mode 100644 index 0000000..d802f01 --- /dev/null +++ b/docs/RTOS/html/functions.html @@ -0,0 +1,184 @@ + + + + + +Data Fields +CMSIS-RTOS: Data Fields + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all struct and union fields with links to the structures/unions they belong to:
+
+
+ + + + diff --git a/docs/RTOS/html/functions_vars.html b/docs/RTOS/html/functions_vars.html new file mode 100644 index 0000000..3bc4a26 --- /dev/null +++ b/docs/RTOS/html/functions_vars.html @@ -0,0 +1,184 @@ + + + + + +Data Fields - Variables +CMSIS-RTOS: Data Fields - Variables + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
+ + + + diff --git a/docs/RTOS/html/genRTOSIF.html b/docs/RTOS/html/genRTOSIF.html new file mode 100644 index 0000000..be4fa94 --- /dev/null +++ b/docs/RTOS/html/genRTOSIF.html @@ -0,0 +1,175 @@ + + + + + +Generic RTOS Interface +CMSIS-RTOS: Generic RTOS Interface + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Generic RTOS Interface
+
+
+

The CMSIS-RTOS API is a generic RTOS interface for Arm® Cortex®-M processor-based devices. CMSIS-RTOS provides a standardized API for software components that require RTOS functionality and gives therefore serious benefits to the users and the software industry.

+
    +
  • CMSIS-RTOS provides basic features that are required in many applications or technologies such as UML or Java (JVM).
  • +
  • The unified feature set of the CMSIS-RTOS API simplifies sharing of software components and reduces learning efforts.
  • +
  • Middleware components that use the CMSIS-RTOS API are RTOS agnostic. CMSIS-RTOS compliant middleware is easier to adapt.
  • +
  • Standard project templates (such as motor control) of the CMSIS-RTOS API may be shipped with freely available CMSIS-RTOS implementations.
  • +
+
Note
The CMSIS-RTOS API defines a minimum feature set. Implementations with extended features may be provided by RTOS vendors.
+
+API_Structure.png +
+CMSIS-RTOS API Structure
+

A typical CMSIS-RTOS API implementation interfaces to an existing real-time Kernel. The CMSIS-RTOS API provides the following attributes and functionalities:

+
    +
  • Function names, identifiers, and parameters are descriptive and easy to understand. The functions are powerful and flexible which reduces the number of functions exposed to the user.
  • +
  • Thread Management allows you to define, create, and control threads.
  • +
  • Interrupt Service Routines (ISR) can call some CMSIS-RTOS functions. When a CMSIS-RTOS function cannot be called from ISR context, it rejects the invocation.
  • +
  • Three different thread event types support communication between multiple threads and/or ISR:
      +
    • Signal: is a flag that may be used to indicate specific conditions to a thread. Signals can be modified in an ISR or set from other threads.
    • +
    • Message: is a 32-bit value that can be sent to a thread or an ISR. Messages are buffered in a queue. The message type and queue size is defined in a descriptor.
    • +
    • Mail: is a fixed-size memory block that can be sent to a thread or an ISR. Mails are buffered in a queue and memory allocation is provided. The mail type and queue size is defined in a descriptor.
    • +
    +
  • +
  • Mutexes and Semaphores are incorporated.
  • +
  • CPU time can be schedule with the following functionalities:
      +
    • A timeout parameter is incorporated in many CMSIS-RTOS functions to avoid system lockup. When a timeout is specified, the system waits until a resource is available or an event occurs. While waiting, other threads are scheduled.
    • +
    • The osDelay function puts a thread into the state WAITING for a specified period of time.
    • +
    • The generic osWait function waits for events that are assigned to a thread.
    • +
    • The osThreadYield provides co-operative thread switching and passes execution to another thread of the same priority.
    • +
    +
  • +
+

The CMSIS-RTOS API is designed to optionally incorporate multi-processor systems and/or access protection via the Cortex-M Memory Protection Unit (MPU).

+

In some RTOS implementations threads may execute on different processors and Mail and Message queues can therefore reside in shared memory resources.

+

The CMSIS-RTOS API encourages the software industry to evolve existing RTOS implementations. Kernel objects are defined and accessed using macros. This allows differentiation. RTOS implementations can be different and optimized in various aspects towards the Cortex-M processors. Optional features may be for example

+
    +
  • Generic wait function; i.e. with support of time intervals.
  • +
  • Support of the Cortex-M Memory Protection Unit (MPU).
  • +
  • Zero-copy mail queue.
  • +
  • Support of multi-processor systems.
  • +
  • Support of a DMA controller.
  • +
  • Deterministic context switching.
  • +
  • Round-robin context switching.
  • +
  • Deadlock avoidance, for example with priority inversion.
  • +
  • Zero interrupt latency by using the Cortex-M3/M4 instructions LDREX and STREX.
  • +
+
+
+ + + + diff --git a/docs/RTOS/html/globals.html b/docs/RTOS/html/globals.html new file mode 100644 index 0000000..d272808 --- /dev/null +++ b/docs/RTOS/html/globals.html @@ -0,0 +1,563 @@ + + + + + +Globals +CMSIS-RTOS: Globals + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- o -

+ + +

- s -

+
+
+ + + + diff --git a/docs/RTOS/html/globals_defs.html b/docs/RTOS/html/globals_defs.html new file mode 100644 index 0000000..495788a --- /dev/null +++ b/docs/RTOS/html/globals_defs.html @@ -0,0 +1,296 @@ + + + + + +Globals +CMSIS-RTOS: Globals + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+  + +

- o -

+
+
+ + + + diff --git a/docs/RTOS/html/globals_enum.html b/docs/RTOS/html/globals_enum.html new file mode 100644 index 0000000..d124fa3 --- /dev/null +++ b/docs/RTOS/html/globals_enum.html @@ -0,0 +1,147 @@ + + + + + +Globals +CMSIS-RTOS: Globals + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/RTOS/html/globals_eval.html b/docs/RTOS/html/globals_eval.html new file mode 100644 index 0000000..2db2328 --- /dev/null +++ b/docs/RTOS/html/globals_eval.html @@ -0,0 +1,211 @@ + + + + + +Globals +CMSIS-RTOS: Globals + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
+ + + + diff --git a/docs/RTOS/html/globals_func.html b/docs/RTOS/html/globals_func.html new file mode 100644 index 0000000..65a88be --- /dev/null +++ b/docs/RTOS/html/globals_func.html @@ -0,0 +1,297 @@ + + + + + +Globals +CMSIS-RTOS: Globals + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+  + +

- o -

+ + +

- s -

+
+
+ + + + diff --git a/docs/RTOS/html/globals_type.html b/docs/RTOS/html/globals_type.html new file mode 100644 index 0000000..b724ae8 --- /dev/null +++ b/docs/RTOS/html/globals_type.html @@ -0,0 +1,163 @@ + + + + + +Globals +CMSIS-RTOS: Globals + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS.html b/docs/RTOS/html/group__CMSIS__RTOS.html new file mode 100644 index 0000000..0e9a6f4 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS.html @@ -0,0 +1,160 @@ + + + + + +CMSIS-RTOS API +CMSIS-RTOS: CMSIS-RTOS API + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
CMSIS-RTOS API
+
+
+ +

This section describes the CMSIS-RTOS API. +More...

+ + + + + + + + + + + + + + + + + + + + + + + +

+Content

 Kernel Information and Control
 Provide version/system information and start the RTOS Kernel.
 
 Thread Management
 Define, create, and control thread functions.
 
 Generic Wait Functions
 Wait for a time period or unspecified events.
 
 Timer Management
 Create and control timer and timer callback functions.
 
 Inter-Thread Communication and Resource Sharing
 Functions for inter-thread communication.
 
 Generic Data Types and Definitions
 Data Type Definitions used by the CMSIS-RTOS API functions.
 
 Status and Error Codes
 Status and Error Codes returned by CMSIS-RTOS API functions.
 
+

Description

+

The CMSIS-RTOS is a generic API layer that interfaces to an existing RTOS kernel.

+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS.js b/docs/RTOS/html/group__CMSIS__RTOS.js new file mode 100644 index 0000000..20c889a --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS.js @@ -0,0 +1,10 @@ +var group__CMSIS__RTOS = +[ + [ "Kernel Information and Control", "group__CMSIS__RTOS__KernelCtrl.html", "group__CMSIS__RTOS__KernelCtrl" ], + [ "Thread Management", "group__CMSIS__RTOS__ThreadMgmt.html", "group__CMSIS__RTOS__ThreadMgmt" ], + [ "Generic Wait Functions", "group__CMSIS__RTOS__Wait.html", "group__CMSIS__RTOS__Wait" ], + [ "Timer Management", "group__CMSIS__RTOS__TimerMgmt.html", "group__CMSIS__RTOS__TimerMgmt" ], + [ "Inter-Thread Communication and Resource Sharing", "group__CMSIS__RTOS__InterThread.html", "group__CMSIS__RTOS__InterThread" ], + [ "Generic Data Types and Definitions", "group__CMSIS__RTOS__Definitions.html", "group__CMSIS__RTOS__Definitions" ], + [ "Status and Error Codes", "group__CMSIS__RTOS__Status.html", "group__CMSIS__RTOS__Status" ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Definitions.html b/docs/RTOS/html/group__CMSIS__RTOS__Definitions.html new file mode 100644 index 0000000..c5281f9 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Definitions.html @@ -0,0 +1,257 @@ + + + + + +Generic Data Types and Definitions +CMSIS-RTOS: Generic Data Types and Definitions + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Generic Data Types and Definitions
+
+
+ +

Data Type Definitions used by the CMSIS-RTOS API functions. +More...

+ + + + + + + + + + + +

+Data Structures

struct  osEvent
 Event structure contains detailed information about an event. More...
 
union  osEvent.value
 
union  osEvent.def
 
struct  os_mailQ
 
+

Description

+

The Data Type section lists all data types that are used to exchange information with CMSIS-RTOS functions.

+

Data Structure Documentation

+ +
+
+ + + + +
struct osEvent
+
+
Note
MUST REMAIN UNCHANGED: os_event shall be consistent in every CMSIS-RTOS. However the struct may be extended at the end.
+

The osEvent structure describes the events returned by CMSIS-RTOS functions.

+
+ + + + + + + + + + +
Data Fields
+union osEvent +def +event definition
+osStatus +status +status code: event or error information
+union osEvent +value +event value
+ +
+
+ +
+
+ + + + +
union osEvent.value
+
+
+ + + + + + + + + + +
Data Fields
+void * +p +message or mail as void pointer
+int32_t +signals +signal flags
+uint32_t +v +message as 32-bit value
+ +
+
+ +
+
+ + + + +
union osEvent.def
+
+
+ + + + + + + +
Data Fields
+osMailQId +mail_id +mail id obtained by osMailCreate
+osMessageQId +message_id +message id obtained by osMessageCreate
+ +
+
+ +
+
+ + + + +
struct os_mailQ
+
+

The osEvent structure describes the events returned by CMSIS-RTOS functions.

+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Definitions.js b/docs/RTOS/html/group__CMSIS__RTOS__Definitions.js new file mode 100644 index 0000000..6054858 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Definitions.js @@ -0,0 +1,18 @@ +var group__CMSIS__RTOS__Definitions = +[ + [ "osEvent", "group__CMSIS__RTOS__Definitions.html#structosEvent", [ + [ "def", "group__CMSIS__RTOS__Definitions.html#a596b6d55c3321db19239256bbe403df6", null ], + [ "status", "group__CMSIS__RTOS__Definitions.html#ad477a289f1f03ac45407b64268d707d3", null ], + [ "value", "group__CMSIS__RTOS__Definitions.html#a0b9f8fd3645f01d8cb09cae82add2d7f", null ] + ] ], + [ "osEvent.value", "group__CMSIS__RTOS__Definitions.html#unionosEvent_8value", [ + [ "p", "group__CMSIS__RTOS__Definitions.html#a83878c91171338902e0fe0fb97a8c47a", null ], + [ "signals", "group__CMSIS__RTOS__Definitions.html#aa8420f8bebd6d9578b405b6bbaa813d9", null ], + [ "v", "group__CMSIS__RTOS__Definitions.html#a9e3669d19b675bd57058fd4664205d2a", null ] + ] ], + [ "osEvent.def", "group__CMSIS__RTOS__Definitions.html#unionosEvent_8def", [ + [ "mail_id", "group__CMSIS__RTOS__Definitions.html#a57aa2b69577037fb2428bc48a9fb1038", null ], + [ "message_id", "group__CMSIS__RTOS__Definitions.html#a4ccaa172acbdcbf38fa0ea0ef0229c49", null ] + ] ], + [ "os_mailQ", "group__CMSIS__RTOS__Definitions.html#structos__mailQ", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Definitions_structosEvent.js b/docs/RTOS/html/group__CMSIS__RTOS__Definitions_structosEvent.js new file mode 100644 index 0000000..1b6fd67 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Definitions_structosEvent.js @@ -0,0 +1,6 @@ +var group__CMSIS__RTOS__Definitions_structosEvent = +[ + [ "def", "group__CMSIS__RTOS__Definitions.html#a596b6d55c3321db19239256bbe403df6", null ], + [ "status", "group__CMSIS__RTOS__Definitions.html#ad477a289f1f03ac45407b64268d707d3", null ], + [ "value", "group__CMSIS__RTOS__Definitions.html#a0b9f8fd3645f01d8cb09cae82add2d7f", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8def.js b/docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8def.js new file mode 100644 index 0000000..9ba3703 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8def.js @@ -0,0 +1,5 @@ +var group__CMSIS__RTOS__Definitions_unionosEvent_8def = +[ + [ "mail_id", "group__CMSIS__RTOS__Definitions.html#a57aa2b69577037fb2428bc48a9fb1038", null ], + [ "message_id", "group__CMSIS__RTOS__Definitions.html#a4ccaa172acbdcbf38fa0ea0ef0229c49", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8value.js b/docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8value.js new file mode 100644 index 0000000..e49a04d --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Definitions_unionosEvent_8value.js @@ -0,0 +1,6 @@ +var group__CMSIS__RTOS__Definitions_unionosEvent_8value = +[ + [ "p", "group__CMSIS__RTOS__Definitions.html#a83878c91171338902e0fe0fb97a8c47a", null ], + [ "signals", "group__CMSIS__RTOS__Definitions.html#aa8420f8bebd6d9578b405b6bbaa813d9", null ], + [ "v", "group__CMSIS__RTOS__Definitions.html#a9e3669d19b675bd57058fd4664205d2a", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__InterThread.html b/docs/RTOS/html/group__CMSIS__RTOS__InterThread.html new file mode 100644 index 0000000..a7c21d1 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__InterThread.html @@ -0,0 +1,171 @@ + + + + + +Inter-Thread Communication and Resource Sharing +CMSIS-RTOS: Inter-Thread Communication and Resource Sharing + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Inter-Thread Communication and Resource Sharing
+
+
+ +

Functions for inter-thread communication. +More...

+ + + + + + + + + + + + + + + + + + + + +

+Content

 Signal Events
 Synchronize threads using signals.
 
 Message Queue
 Exchange messages between threads in a FIFO-like operation.
 
 Memory Pool
 Manage thread-safe fixed-size blocks of dynamic memory.
 
 Mail Queue
 Exchange data between threads using a queue of memory blocks.
 
 Mutexes
 Synchronize resource access using Mutual Exclusion (Mutex).
 
 Semaphores
 Access shared resources simultaneously from different threads.
 
+

Description

+

In most applications, threads need to communicate with each other or access shared resources together. There are many ways to exchange data between threads, for example using shared data, polling loops and message passing.

+

Many resources in a microcontroller can be considered as serially-reusable. This means that they can be used repeatedly by different threads, but only by one thread at a time (for example communication peripherals such as UARTs, memory, and files that need to be modified).

+

The CMSIS-RTOS API provides different means to pass messages between threads to make inter-thread communication more efficient. Also, resource sharing is inherently supported. The following methods are available to the user:

+

Inter-Thread Communication

+ +

Resource Sharing

+ +
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__InterThread.js b/docs/RTOS/html/group__CMSIS__RTOS__InterThread.js new file mode 100644 index 0000000..47b9895 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__InterThread.js @@ -0,0 +1,9 @@ +var group__CMSIS__RTOS__InterThread = +[ + [ "Signal Events", "group__CMSIS__RTOS__SignalMgmt.html", "group__CMSIS__RTOS__SignalMgmt" ], + [ "Message Queue", "group__CMSIS__RTOS__Message.html", "group__CMSIS__RTOS__Message" ], + [ "Memory Pool", "group__CMSIS__RTOS__PoolMgmt.html", "group__CMSIS__RTOS__PoolMgmt" ], + [ "Mail Queue", "group__CMSIS__RTOS__Mail.html", "group__CMSIS__RTOS__Mail" ], + [ "Mutexes", "group__CMSIS__RTOS__MutexMgmt.html", "group__CMSIS__RTOS__MutexMgmt" ], + [ "Semaphores", "group__CMSIS__RTOS__SemaphoreMgmt.html", "group__CMSIS__RTOS__SemaphoreMgmt" ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.html b/docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.html new file mode 100644 index 0000000..482b0b4 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.html @@ -0,0 +1,469 @@ + + + + + +Kernel Information and Control +CMSIS-RTOS: Kernel Information and Control + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Kernel Information and Control
+
+
+ +

Provide version/system information and start the RTOS Kernel. +More...

+ + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define osFeature_MainThread   1
 main thread 1=main can be thread, 0=not available More...
 
#define osFeature_SysTick   1
 osKernelSysTick functions: 1=available, 0=not available More...
 
#define osCMSIS   0x10002
 API version (main [31:16] .sub [15:0]) More...
 
#define osCMSIS_KERNEL   0x10000
 RTOS identification and version (main [31:16] .sub [15:0]) More...
 
#define osKernelSystemId   "KERNEL V1.00"
 RTOS identification string. More...
 
#define osKernelSysTickFrequency   100000000
 The RTOS kernel system timer frequency in Hz. More...
 
#define osKernelSysTickMicroSec(microsec)   (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000)
 Convert a microseconds value to a RTOS kernel system timer value. More...
 
+ + + + + + + + + + + + + +

+Functions

osStatus osKernelInitialize (void)
 Initialize the RTOS Kernel for creating objects. More...
 
osStatus osKernelStart (void)
 Start the RTOS Kernel. More...
 
int32_t osKernelRunning (void)
 Check if the RTOS kernel is already started. More...
 
uint32_t osKernelSysTick (void)
 Get the RTOS kernel system timer counter. More...
 
+

Description

+

The Kernel Information and Control function group allows to:

+
    +
  • obtain information about the system and the underlying kernel.
  • +
  • obtain version information about the CMSIS-RTOS API.
  • +
  • initialize of the RTOS kernel for creating objects.
  • +
  • start the RTOS kernel and thread switching.
  • +
  • check the execution status of the RTOS kernel.
  • +
+

The function main is a special thread function that may be started at system initialization. In this case it has the initial priority osPriorityNormal.

+

When reaching main, it is necessary to:

+
    +
  1. Call osKernelInitialize() to initialize the CMSIS-RTOS Kernel
  2. +
  3. Setup device peripherals and create other RTOS objects using the os*Create functions.
  4. +
  5. Start the Kernel and begin thread switching by calling osKernelStart().
  6. +
+

Code Example

+
int main (void) {
+
osKernelInitialize (); // initialize CMSIS-RTOS
+
+
// initialize peripherals here
+
+
// create 'thread' functions that start executing,
+
// example: tid_name = osThreadCreate (osThread(name), NULL);
+
+
osKernelStart (); // start thread execution
+
}
+

Macro Definition Documentation

+ +
+
+ + + + +
#define osCMSIS   0x10002
+
+

Version information of the CMSIS-RTOS API whereby major version is in bits [31:16] and sub version in bits [15:0]. The value 0x10000 represents version 1.00.

+
Note
MUST REMAIN UNCHANGED: osCMSIS identifies the CMSIS-RTOS API version.
+ +
+
+ +
+
+ + + + +
#define osCMSIS_KERNEL   0x10000
+
+

Identifies the underlying RTOS kernel and version number. The actual name of that define depends on the RTOS Kernel used in the implementation. For example, osCMSIS_FreeRTOS identifies the FreeRTOS kernel and the value indicates the version number of that kernel whereby the major version is in bits [31:16] and sub version in bits [15:0]. The value 0x10000 represents version 1.00.

+
Note
CAN BE CHANGED: osCMSIS_KERNEL identifies the underlying RTOS kernel and version number.
+ +
+
+ +
+
+ + + + +
#define osFeature_MainThread   1
+
+

A CMSIS-RTOS implementation may support to start thread execution with the function 'main'.

+ +

CMSIS-RTOS RTX Setting: osFeature_MainThread is 1

+
Note
MUST REMAIN UNCHANGED: osFeature_xxx shall be consistent in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
#define osFeature_SysTick   1
+
+

A CMSIS-RTOS implementation may provide access to the RTOS kernel system timer.

+ +

CMSIS-RTOS RTX Setting: osFeature_SysTick is 1

+ +
+
+ +
+
+ + + + +
#define osKernelSystemId   "KERNEL V1.00"
+
+

Defines a string that identifies the underlying RTOS Kernel and provides version information. The length of that string is limited to 21 bytes. A valid identification string is for example, "FreeRTOS V1.00".

+
Note
MUST REMAIN UNCHANGED: osKernelSystemId shall be consistent in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + +
#define osKernelSysTickFrequency   100000000
+
+

Specifies the frequency of the Kernel SysTick timer in Hz. The value is typically use to scale a time value and is for example used in osKernelSysTickMicroSec.

+
See Also
osKernelSysTick
+
Note
Reflects the system timer setting and is typically defined in a configuration file.
+ +
+
+ +
+
+ + + + + + + + +
#define osKernelSysTickMicroSec( microsec)   (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000)
+
+

Allows you to scale a microsecond value to the frequency of the Kernel SysTick timer. This macro is typically used to check for short timeouts in polling loops.

+
See Also
osKernelSysTick
+
Parameters
+ + +
microsectime value in microseconds.
+
+
+
Returns
time value normalized to the osKernelSysTickFrequency
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
osStatus osKernelInitialize (void )
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osKernelInitialize shall be consistent in every CMSIS-RTOS.
+

Initialize of the RTOS Kernel to allow peripheral setup and creation of other RTOS objects with the functions:

+ +

The RTOS kernel does not start thread switching until the function osKernelStart is called.

+
Note
In case that the RTOS Kernel starts thread execution with the function main the function osKernelInitialize stops thread switching. This allows you to setup the system to a defined state before thread switching is resumed with osKernelStart.
+

Code Example

+
#include "cmsis_os.h"
+
+
int main (void) {
+
if (!osKernelRunning ()) { // if kernel is not running, initialize the kernel
+
if (osKernelInitialize () != osOK) { // check osStatus for other possible valid values
+
// exit with an error message
+
}
+
}
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + +
int32_t osKernelRunning (void )
+
+
Note
MUST REMAIN UNCHANGED: osKernelRunning shall be consistent in every CMSIS-RTOS.
+
Returns
0 RTOS is not started, 1 RTOS is started.
+

Identifies if the RTOS kernel is started. For systems with the option to start the main function as a thread this allows you to identify that the RTOS kernel is already running.

+
Note
Interrupt Service Routines can call this function.
+

Code Example

+
#include "cmsis_os.h"
+
+
int main (void) { // program execution starts here
+
if (osKernelRunning ()) {
+
: // main is already a thread function
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osKernelStart (void )
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osKernelStart shall be consistent in every CMSIS-RTOS.
+

Start the RTOS Kernel and begin thread switching.

+
Note
When the CMSIS-RTOS starts thread execution with the function main this function resumes thread switching. The main thread will continue executing after osKernelStart.
+

Status and Error Codes
+

+
    +
  • osOK: the RTOS kernel has been successfully started.
  • +
  • osErrorISR: osKernelStart cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
int main (void) {
+
if (osKernelInitialize () != osOK) { // check osStatus for other possible valid values
+
// exit with an error message
+
}
+
+
if (!osKernelRunning ()) { // is the kernel running ?
+
if (osKernelStart () != osOK) { // start the kernel
+
// kernel could not be started
+
}
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
uint32_t osKernelSysTick (void )
+
+
Note
MUST REMAIN UNCHANGED: osKernelSysTick shall be consistent in every CMSIS-RTOS.
+
Returns
RTOS kernel system timer as 32-bit value
+

Get the value of the Kernel SysTick timer for time comparison. The value is a rolling 32-bit counter that is typically composed of the kernel system interrupt timer value and an counter that counts these interrupts.

+

This function allows the implementation of timeout checks. These are for example required when checking for a busy status in a device or peripheral initialization routine.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void SetupDevice (void) {
+
uint32_t tick;
+
+
tick = osKernelSysTick(); // get start value of the Kernel system tick
+
Device.Setup (); // initialize a device or peripheral
+
do { // poll device busy status for 100 microseconds
+
if (!Device.Busy) break; // check if device is correctly initialized
+
} while ((osKernelSysTick() - tick) < osKernelSysTickMicroSec(100));
+
if (Device.Busy) {
+
; // in case device still busy, signal error
+
}
+
// start interacting with device
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.js b/docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.js new file mode 100644 index 0000000..4780206 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__KernelCtrl.js @@ -0,0 +1,14 @@ +var group__CMSIS__RTOS__KernelCtrl = +[ + [ "osCMSIS", "group__CMSIS__RTOS__KernelCtrl.html#ga702196bacccbb978620c736b209387f1", null ], + [ "osCMSIS_KERNEL", "group__CMSIS__RTOS__KernelCtrl.html#gab78dce646fabec479c5f34bc5175b7de", null ], + [ "osFeature_MainThread", "group__CMSIS__RTOS__KernelCtrl.html#ga22f7d235bc9f783933bd5a981fd79696", null ], + [ "osFeature_SysTick", "group__CMSIS__RTOS__KernelCtrl.html#gae554ec16c23c5b7d65affade2a351891", null ], + [ "osKernelSystemId", "group__CMSIS__RTOS__KernelCtrl.html#ga47cf03658f01cdffca688e9096b58289", null ], + [ "osKernelSysTickFrequency", "group__CMSIS__RTOS__KernelCtrl.html#ga9e0954d52722673e2031233a2ab99960", null ], + [ "osKernelSysTickMicroSec", "group__CMSIS__RTOS__KernelCtrl.html#gae12c190af42d7310d8006d64f4ed5a88", null ], + [ "osKernelInitialize", "group__CMSIS__RTOS__KernelCtrl.html#ga53d078a801022e202e8115c083ece68e", null ], + [ "osKernelRunning", "group__CMSIS__RTOS__KernelCtrl.html#ga3b571de44cd3094c643247a7397f86b5", null ], + [ "osKernelStart", "group__CMSIS__RTOS__KernelCtrl.html#gaab668ffd2ea76bb0a77ab0ab385eaef2", null ], + [ "osKernelSysTick", "group__CMSIS__RTOS__KernelCtrl.html#gad0262e4688e95d1e9038afd9bcc16001", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Mail.html b/docs/RTOS/html/group__CMSIS__RTOS__Mail.html new file mode 100644 index 0000000..e744ff6 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Mail.html @@ -0,0 +1,634 @@ + + + + + +Mail Queue +CMSIS-RTOS: Mail Queue + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+ +

Exchange data between threads using a queue of memory blocks. +More...

+ + + + + + + + + + + +

+Macros

#define osFeature_MailQ   1
 Mail Queues: 1=available, 0=not available. More...
 
#define osMailQDef(name, queue_sz, type)
 Create a Mail Queue Definition. More...
 
#define osMailQ(name)   &os_mailQ_def_##name
 Access a Mail Queue Definition. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id)
 Create and Initialize mail queue. More...
 
void * osMailAlloc (osMailQId queue_id, uint32_t millisec)
 Allocate a memory block from a mail. More...
 
void * osMailCAlloc (osMailQId queue_id, uint32_t millisec)
 Allocate a memory block from a mail and set memory block to zero. More...
 
osStatus osMailPut (osMailQId queue_id, void *mail)
 Put a mail to a queue. More...
 
osEvent osMailGet (osMailQId queue_id, uint32_t millisec)
 Get a mail from a queue. More...
 
osStatus osMailFree (osMailQId queue_id, void *mail)
 Free a memory block from a mail. More...
 
+

Description

+

A mail queue resembles a Message Queue, but the data that is being transferred consists of memory blocks that need to be allocated (before putting data in) and freed (after taking data out). The mail queue uses a Memory Pool to create formatted memory blocks and passes pointers to these blocks in a message queue. This allows the data to stay in an allocated memory block while only a pointer is moved between the separate threads. This is an advantage over messages that can transfer only a 32-bit value or a pointer. Using the mail queue functions, you can control, send, receive, or wait for mail.

+
+MailQueue.png +
+CMSIS-RTOS Mail Queue
+

Working with Mail Queues

+

Follow these steps to create and use a mail queue:

+
    +
  1. Declare a data structure that combines a number of elements:
    typedef struct {
    +
    uint32_t length;
    +
    uint32_t width;
    +
    uint32_t height;
    +
    uint32_t weight;
    +
    } properties_t;
    +
  2. +
  3. Declare a mail queue made up of these objects:
    osMailQDef (object_pool_q, 10, properties_t); // Declare mail queue
    +
    osMailQId (object_pool_q_id); // Mail queue ID
    +
  4. +
  5. Then, create the mail pool in a thread:
    object_pool_q_id = osMailCreate(osMailQ(object_pool_q), NULL);
    +
  6. +
  7. Allocate the mail queue within a thread and fill it with data:
    properties_t *object_data;
    +
    object_data = (properties_t *) osMailAlloc(object_pool_q_id, osWaitForever);
    +
    +
    object_data->length = 100;
    +
    object_data->width = 10;
    +
    object_data->height = 23;
    +
    object_data->weight = 1000;
    +
  8. +
  9. Pass the pointer to the mail queue to another thread:
    osMailPut(object_pool_q_id, object_data);
    +
  10. +
  11. Access the data in another thread:
    osEvent event = osMailGet(properties_q_id, osWaitForever);
    +
    properties_t *received = (properties_t *)event.value.p; // ".p" indicates that the message is a pointer
    +
    my_length(received->length);
    +
  12. +
  13. Once the data has been used, the memory block must be freed so that the memory pool can be reused
    osMailFree(object_pool_q_id, received);
    +
  14. +
+

Macro Definition Documentation

+ +
+
+ + + + +
#define osFeature_MailQ   1
+
+

A CMSIS-RTOS implementation may support mail queues.

+ +

CMSIS-RTOS RTX Setting: osFeature_MailQ is 1

+ +
+
+ +
+
+ + + + + + + + +
#define osMailQ( name)   &os_mailQ_def_##name
+
+

Access to the mail queue definition for the function osMailCreate.

+
Parameters
+ + +
namename of the queue
+
+
+
Note
CAN BE CHANGED: The parameter to osMailQ shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define osMailQDef( name,
 queue_sz,
 type 
)
+
+

Define the attributes of a mail queue that can by the function osMailCreate using osMailQ.

+
Note
The parameter thread registers the receiving thread for a mail and is needed for the general osWait function to deliver the mail.
+
Parameters
+ + + + +
namename of the queue
queue_szmaximum number of messages in queue
typedata type of a single message element
+
+
+
Note
CAN BE CHANGED: The parameter to osMailQDef shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void * osMailAlloc (osMailQId queue_id,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]queue_idmail queue ID obtained with osMailCreate.
[in]millisecTimout Value or 0 in case of no time-out
+
+
+
Returns
pointer to memory block that can be filled with mail or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osMailAlloc shall be consistent in every CMSIS-RTOS.
+

Allocate a memory block from the mail queue that is filled with the mail information.

+

The argument queue_id specifies a mail queue identifier that is obtain with osMailCreate.

+

The argument millisec specifies how long the system waits for a mail slot to become available. While the system waits the thread calling this function is put into the state WAITING. The millisec timeout can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until a mail slot can be allocated.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+
Note
The parameter millisec must be 0 for using this function in an ISR.
+
+Interrupt Service Routines can call this function.
+

A NULL pointer is returned when no memory slot can be obtained or queue specifies an illegal parameter.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void * osMailCAlloc (osMailQId queue_id,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]queue_idmail queue ID obtained with osMailCreate.
[in]millisecTimout Value or 0 in case of no time-out
+
+
+
Returns
pointer to memory block that can be filled with mail or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osMailCAlloc shall be consistent in every CMSIS-RTOS.
+

Allocate a memory block from the mail queue that is filled with the mail information. The memory block returned is cleared.

+

The argument queue_id specifies a mail queue identifier that is obtain with osMailCreate.

+

The argument millisec specifies how long the system waits for a mail slot to become available. While the system waits the thread that is calling this function is put into the state WAITING. The millisec timeout can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until a mail slot can be allocated.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+
Note
The parameter millisec must be 0 for using this function in an ISR.
+
+Interrupt Service Routines can call this function.
+

A NULL pointer is returned when no memory block can be obtained or queue specifies an illegal parameter.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osMailQId osMailCreate (const osMailQDef_tqueue_def,
osThreadId thread_id 
)
+
+
Parameters
+ + + +
[in]queue_defreference to the mail queue definition obtain with osMailQ
[in]thread_idthread ID (obtained by osThreadCreate or osThreadGetId) or NULL.
+
+
+
Returns
mail queue ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osMailCreate shall be consistent in every CMSIS-RTOS.
+

Initialize and create a mail queue.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
osThreadId tid_thread1; // ID for thread 1
+
osThreadId tid_thread2; // ID for thread 2
+
+
typedef struct { // Mail object structure
+
float voltage; // AD result of measured voltage
+
float current; // AD result of measured current
+
int counter; // A counter value
+
} T_MEAS;
+
+
osMailQDef(mail, 16, T_MEAS); // Define mail queue
+
osMailQId mail;
+
+
void send_thread (void const *argument); // forward reference
+
void recv_thread (void const *argument);
+
+
osThreadDef(send_thread, osPriorityNormal, 1, 0); // thread definitions
+
osThreadDef(recv_thread, osPriorityNormal, 1, 2000);
+
+
//
+
// Thread 1: Send thread
+
//
+
void send_thread (void const *argument) {
+
T_MEAS *mptr;
+
+
mptr = osMailAlloc(mail, osWaitForever); // Allocate memory
+
mptr->voltage = 223.72; // Set the mail content
+
mptr->current = 17.54;
+
mptr->counter = 120786;
+
osMailPut(mail, mptr); // Send Mail
+
osDelay(100);
+
+
mptr = osMailAlloc(mail, osWaitForever); // Allocate memory
+
mptr->voltage = 227.23; // Prepare 2nd mail
+
mptr->current = 12.41;
+
mptr->counter = 170823;
+
osMailPut(mail, mptr); // Send Mail
+
osThreadYield(); // Cooperative multitasking
+
// We are done here, exit this thread
+
}
+
+
//
+
// Thread 2: Receive thread
+
//
+
void recv_thread (void const *argument) {
+
T_MEAS *rptr;
+
osEvent evt;
+
+
for (;;) {
+
evt = osMailGet(mail, osWaitForever); // wait for mail
+
if (evt.status == osEventMail) {
+
rptr = evt.value.p;
+
printf ("\nVoltage: %.2f V\n", rptr->voltage);
+
printf ("Current: %.2f A\n", rptr->current);
+
printf ("Number of cycles: %d\n", rptr->counter);
+
osMailFree(mail, rptr); // free memory allocated for mail
+
}
+
}
+
}
+
+
void StartApplication (void) {
+
mail = osMailCreate(osMailQ(mail), NULL); // create mail queue
+
+
tid_thread1 = osThreadCreate(osThread(send_thread), NULL);
+
tid_thread2 = osThreadCreate(osThread(recv_thread), NULL);
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osStatus osMailFree (osMailQId queue_id,
void * mail 
)
+
+
Parameters
+ + + +
[in]queue_idmail queue ID obtained with osMailCreate.
[in]mailpointer to the memory block that was obtained with osMailGet.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osMailFree shall be consistent in every CMSIS-RTOS.
+

Free the memory block specified by mail and return it to the mail queue.

+
Note
Interrupt Service Routines can call this function.
+

Status and Error Codes
+

+
    +
  • osOK: the mail block is released.
  • +
  • osErrorValue: mail block does not belong to the mail queue pool.
  • +
  • osErrorParameter: the value to the parameter queue_id is incorrect.
  • +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osEvent osMailGet (osMailQId queue_id,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]queue_idmail queue ID obtained with osMailCreate.
[in]millisecTimout Value or 0 in case of no time-out
+
+
+
Returns
event that contains mail information or error code.
+
Note
MUST REMAIN UNCHANGED: osMailGet shall be consistent in every CMSIS-RTOS.
+

Suspend the execution of the current RUNNING thread until a mail arrives. When a mail is already in the queue, the function returns instantly with the mail information.

+

The argument millisec specifies how long the system waits for a mail to arrive. While the system waits the thread that is calling this function is put into the state WAITING. The millisec timeout can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until a mail arrives.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+
Note
The parameter millisec must be 0 for using this function in an ISR.
+
+Interrupt Service Routines can call this function.
+

Status and Error Codes
+

+
    +
  • osOK: no mail is available in the queue and no timeout was specified
  • +
  • osEventTimeout: no mail has arrived during the given timeout period.
  • +
  • osEventMail: mail received, value.p contains the pointer to mail content.
  • +
  • osErrorParameter: a parameter is invalid or outside of a permitted range.
  • +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osStatus osMailPut (osMailQId queue_id,
void * mail 
)
+
+
Parameters
+ + + +
[in]queue_idmail queue ID obtained with osMailCreate.
[in]mailmemory block previously allocated with osMailAlloc or osMailCAlloc.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osMailPut shall be consistent in every CMSIS-RTOS.
+

Put the memory block specified with mail into the mail queue specified by queue.

+

Status and Error Codes
+

+
    +
  • osOK: the message is put into the queue.
  • +
  • osErrorValue: mail was previously not allocated as memory slot.
  • +
  • osErrorParameter: a parameter is invalid or outside of a permitted range.
  • +
+
Note
Interrupt Service Routines can call this function.
+ +
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Mail.js b/docs/RTOS/html/group__CMSIS__RTOS__Mail.js new file mode 100644 index 0000000..a29f50e --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Mail.js @@ -0,0 +1,12 @@ +var group__CMSIS__RTOS__Mail = +[ + [ "osFeature_MailQ", "group__CMSIS__RTOS__Mail.html#gaceb2e0071ce160d153047f2eac1aca8e", null ], + [ "osMailQ", "group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2", null ], + [ "osMailQDef", "group__CMSIS__RTOS__Mail.html#ga58d712b16c0c6668059f509386d1e55b", null ], + [ "osMailAlloc", "group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194", null ], + [ "osMailCAlloc", "group__CMSIS__RTOS__Mail.html#ga8fde74f6fe5b9e88f75cc5eb8f2124fd", null ], + [ "osMailCreate", "group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174", null ], + [ "osMailFree", "group__CMSIS__RTOS__Mail.html#ga27c1060cf21393f96b4fd1ed1c0167cc", null ], + [ "osMailGet", "group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd", null ], + [ "osMailPut", "group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Message.html b/docs/RTOS/html/group__CMSIS__RTOS__Message.html new file mode 100644 index 0000000..083aeae --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Message.html @@ -0,0 +1,489 @@ + + + + + +Message Queue +CMSIS-RTOS: Message Queue + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+ +

Exchange messages between threads in a FIFO-like operation. +More...

+ + + + + + + + + + + +

+Macros

#define osFeature_MessageQ   1
 Message Queues: 1=available, 0=not available. More...
 
#define osMessageQDef(name, queue_sz, type)
 Create a Message Queue Definition. More...
 
#define osMessageQ(name)   &os_messageQ_def_##name
 Access a Message Queue Definition. More...
 
+ + + + + + + + + + +

+Functions

osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id)
 Create and Initialize a Message Queue. More...
 
osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec)
 Put a Message to a Queue. More...
 
osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec)
 Get a Message or Wait for a Message from a Queue. More...
 
+

Description

+

Message passing is another basic communication model between threads. In the message passing model, one thread sends data explicitly, while another thread receives it. The operation is more like some kind of I/O rather than a direct access to information to be shared. In CMSIS-RTOS, this mechanism is called s message queue. The data is passed from one thread to another in a FIFO-like operation. Using message queue functions, you can control, send, receive, or wait for messages. The data to be passed can be of integer or pointer type:

+
+MessageQueue.png +
+CMSIS-RTOS Message Queue
+

Compared to a Memory Pool, message queues are less efficient in general, but solve a broader range of problems. Sometimes, threads do not have a common address space or the use of shared memory raises problems, such as mutual exclusion.

+

Working with Message Queues

+

Follow these steps to create and use a message queue:

+
    +
  1. Setup the message queue:
    osMessageQDef(message_q, 5, uint32_t); // Declare a message queue
    +
    osMessageQId (message_q_id); // Declare an ID for the message queue
    +
  2. +
  3. Then, create the message queue in a thread:
    message_q_id = osMessageCreate(osMessageQ(message_q), NULL);
    +
  4. +
  5. Fill the message queue with data:
    uint32_t data = 512;
    +
    +
    osMailPut(message_q_id, data, osWaitForever);
    +
  6. +
  7. From the receiving thread access the data using:
    osEvent event = osMessageGet(message_q_id, osWaitForever);
    +
  8. +
+

Macro Definition Documentation

+ +
+
+ + + + +
#define osFeature_MessageQ   1
+
+

A CMSIS-RTOS implementation may support message queues.

+ +

CMSIS-RTOS RTX Setting: osFeature_MessageQ is 1

+ +
+
+ +
+
+ + + + + + + + +
#define osMessageQ( name)   &os_messageQ_def_##name
+
+

Access to the message queue definition for the function osMessageCreate.

+
Parameters
+ + +
namename of the queue
+
+
+
Note
CAN BE CHANGED: The parameter to osMessageQ shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define osMessageQDef( name,
 queue_sz,
 type 
)
+
+

Define the attributes of a message queue created by the function osMessageCreate using osMessageQ.

+
Parameters
+ + + + +
namename of the queue.
queue_szmaximum number of messages in the queue.
typedata type of a single message element (for debugger).
+
+
+
Note
CAN BE CHANGED: The parameter to osMessageQDef shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
osMessageQId osMessageCreate (const osMessageQDef_tqueue_def,
osThreadId thread_id 
)
+
+
Parameters
+ + + +
[in]queue_defqueue definition referenced with osMessageQ.
[in]thread_idthread ID (obtained by osThreadCreate or osThreadGetId) or NULL.
+
+
+
Returns
message queue ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osMessageCreate shall be consistent in every CMSIS-RTOS.
+

Create and initialize a message queue. The parameter thread_id registers the receiving thread for a message and is needed for the general osWait function to deliver the message.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
osThreadId tid_thread1; // ID for thread 1
+
osThreadId tid_thread2; // for thread 2
+
+
typedef struct { // Message object structure
+
float voltage; // AD result of measured voltage
+
float current; // AD result of measured current
+
int counter; // A counter value
+
} T_MEAS;
+
+
osPoolDef(mpool, 16, T_MEAS); // Define memory pool
+
osPoolId mpool;
+
osMessageQDef(MsgBox, 16, &T_MEAS); // Define message queue
+
osMessageQId MsgBox;
+
+
void send_thread (void const *argument); // forward reference
+
void recv_thread (void const *argument); // forward reference
+
// Thread definitions
+
osThreadDef(send_thread, osPriorityNormal, 1, 0);
+
osThreadDef(recv_thread, osPriorityNormal, 1, 2000);
+
+
//
+
// Thread 1: Send thread
+
//
+
void send_thread (void const *argument) {
+
T_MEAS *mptr;
+
+
mptr = osPoolAlloc(mpool); // Allocate memory for the message
+
mptr->voltage = 223.72; // Set the message content
+
mptr->current = 17.54;
+
mptr->counter = 120786;
+
osMessagePut(MsgBox, (uint32_t)mptr, osWaitForever); // Send Message
+
osDelay(100);
+
+
mptr = osPoolAlloc(mpool); // Allocate memory for the message
+
mptr->voltage = 227.23; // Prepare a 2nd message
+
mptr->current = 12.41;
+
mptr->counter = 170823;
+
osMessagePut(MsgBox, (uint32_t)mptr, osWaitForever); // Send Message
+
osThreadYield(); // Cooperative multitasking
+
// We are done here, exit this thread
+
}
+
+
//
+
// Thread 2: Receive thread
+
//
+
void recv_thread (void const *argument) {
+
T_MEAS *rptr;
+
osEvent evt;
+
+
for (;;) {
+
evt = osMessageGet(MsgBox, osWaitForever); // wait for message
+
if (evt.status == osEventMessage) {
+
rptr = evt.value.p;
+
printf ("\nVoltage: %.2f V\n", rptr->voltage);
+
printf ("Current: %.2f A\n", rptr->current);
+
printf ("Number of cycles: %d\n", rptr->counter);
+
osPoolFree(mpool, rptr); // free memory allocated for message
+
}
+
}
+
}
+
+
void StartApplication (void) {
+
mpool = osPoolCreate(osPool(mpool)); // create memory pool
+
MsgBox = osMessageCreate(osMessageQ(MsgBox), NULL); // create msg queue
+
+
tid_thread1 = osThreadCreate(osThread(send_thread), NULL);
+
tid_thread2 = osThreadCreate(osThread(recv_thread), NULL);
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osEvent osMessageGet (osMessageQId queue_id,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]queue_idmessage queue ID obtained with osMessageCreate.
[in]millisecTimout Value or 0 in case of no time-out.
+
+
+
Returns
event information that includes status code.
+
Note
MUST REMAIN UNCHANGED: osMessageGet shall be consistent in every CMSIS-RTOS.
+

Suspend the execution of the current RUNNING thread until a message arrives. When a message is already in the queue, the function returns instantly with the message information.

+

The argument millisec specifies how long the system waits for a message to become available. While the system waits the thread that is calling this function is put into the state WAITING. The millisec timeout value can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until a message arrives.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+
Note
The parameter millisec must be 0 for using this function in an ISR.
+
+Interrupt Service Routines can call this function.
+

Status and Error Codes
+

+
    +
  • osOK: no message is available in the queue and no timeout was specified.
  • +
  • osEventTimeout: no message has arrived during the given timeout period.
  • +
  • osEventMessage: message received, value.p contains the pointer to message.
  • +
  • osErrorParameter: a parameter is invalid or outside of a permitted range.
  • +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
osStatus osMessagePut (osMessageQId queue_id,
uint32_t info,
uint32_t millisec 
)
+
+
Parameters
+ + + + +
[in]queue_idmessage queue ID obtained with osMessageCreate.
[in]infomessage information.
[in]millisecTimout Value or 0 in case of no time-out.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osMessagePut shall be consistent in every CMSIS-RTOS.
+

Put the message info in a message queue specified by queue_id.

+

When the message queue is full, the system retries for a specified time with millisec. While the system retries the thread that is calling this function is put into the state WAITING. The millisec timeout can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until a message queue slot becomes available.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+
Note
The parameter millisec must be 0 for using this function in an ISR.
+
+Interrupt Service Routines can call this function.
+

Status and Error Codes
+

+
    +
  • osOK: the message is put into the queue.
  • +
  • osErrorResource: no memory in the queue was available.
  • +
  • osErrorTimeoutResource: no memory in the queue was available during the given time limit.
  • +
  • osErrorParameter: a parameter is invalid or outside of a permitted range.
  • +
+ +
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Message.js b/docs/RTOS/html/group__CMSIS__RTOS__Message.js new file mode 100644 index 0000000..9806a11 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Message.js @@ -0,0 +1,9 @@ +var group__CMSIS__RTOS__Message = +[ + [ "osFeature_MessageQ", "group__CMSIS__RTOS__Message.html#ga479a6561f859e3d4818e25708593d203", null ], + [ "osMessageQ", "group__CMSIS__RTOS__Message.html#ga2d446a0b4bb90bf05d6f92eedeaabc97", null ], + [ "osMessageQDef", "group__CMSIS__RTOS__Message.html#gac9a6a6276c12609793e7701afcc82326", null ], + [ "osMessageCreate", "group__CMSIS__RTOS__Message.html#gaf3b9345cf426304d46565152bc26fb78", null ], + [ "osMessageGet", "group__CMSIS__RTOS__Message.html#ga6c6892b8f2296cca6becd57ca2d7e1ae", null ], + [ "osMessagePut", "group__CMSIS__RTOS__Message.html#gac0dcf462fc92de8ffaba6cc004514a6d", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.html b/docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.html new file mode 100644 index 0000000..ad64a6a --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.html @@ -0,0 +1,444 @@ + + + + + +Mutexes +CMSIS-RTOS: Mutexes + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+ +

Synchronize resource access using Mutual Exclusion (Mutex). +More...

+ + + + + + + + +

+Macros

#define osMutexDef(name)   const osMutexDef_t os_mutex_def_##name = { 0 }
 Define a Mutex. More...
 
#define osMutex(name)   &os_mutex_def_##name
 Access a Mutex definition. More...
 
+ + + + + + + + + + + + + +

+Functions

osMutexId osMutexCreate (const osMutexDef_t *mutex_def)
 Create and Initialize a Mutex object. More...
 
osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec)
 Wait until a Mutex becomes available. More...
 
osStatus osMutexRelease (osMutexId mutex_id)
 Release a Mutex that was obtained by osMutexWait. More...
 
osStatus osMutexDelete (osMutexId mutex_id)
 Delete a Mutex that was created by osMutexCreate. More...
 
+

Description

+

Mutual exclusion (widely known as Mutex) is used in various operating systems for resource management. Many resources in a microcontroller device can be used repeatedly, but only by one thread at a time (for example communication channels, memory, and files). Mutexes are used to protect access to a shared resource. A mutex is created and then passed between the threads (they can acquire and release the mutex).

+
+Mutex.png +
+CMSIS-RTOS Mutex
+

A mutex is a special version of a semaphore. Like the semaphore, it is a container for tokens. But instead of being able to have multiple tokens, a mutex can only carry one (representing the resource). Thus, a mutex token is binary and bounded. The advantage of a mutex is that it introduces thread ownership. When a thread acquires a mutex and becomes its owner, subsequent mutex acquires from that thread will succeed immediately without any latency. Thus, mutex acquires/releases can be nested.

+
Note
    +
  • Mutex management functions cannot be called from interrupt service routines (ISR), unlike a binary semaphore that can be released from an ISR.
  • +
  • CMSIS-RTOS uses reentrant/recursive mutexes only.
  • +
+
+

Working with Mutexes

+

To use mutexes, you need to follow these steps for creating and using them:

+
    +
  1. Declare the mutex container and initialize the mutex:
    osMutexDef (uart_mutex); // Declare mutex
    +
    osMutexId (uart_mutex_id); // Mutex ID
    +
  2. +
  3. Create the mutex in a thread:
    uart_mutex_id = osMutexCreate(osMutex(uart_mutex));
    +
  4. +
  5. Acquire the mutex when peripheral access is required:
    osMutexWait(uart_mutex_id, osWaitForever);
    +
  6. +
  7. When finished with the peripheral access, release the mutex:
    osMutexRelease(uart_mutex_id);
    +
  8. +
+

Macro Definition Documentation

+ +
+
+ + + + + + + + +
#define osMutex( name)   &os_mutex_def_##name
+
+

Access to mutex object for the functions osMutexCreate.

+
Parameters
+ + +
namename of the mutex object.
+
+
+
Note
CAN BE CHANGED: The parameter to osMutex shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + + + + + +
#define osMutexDef( name)   const osMutexDef_t os_mutex_def_##name = { 0 }
+
+

Define a mutex object that is referenced by osMutex.

+
Parameters
+ + +
namename of the mutex object.
+
+
+
Note
CAN BE CHANGED: The parameter to osMutexDef shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
osMutexId osMutexCreate (const osMutexDef_tmutex_def)
+
+
Parameters
+ + +
[in]mutex_defmutex definition referenced with osMutex.
+
+
+
Returns
mutex ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osMutexCreate shall be consistent in every CMSIS-RTOS.
+

Create and initialize a Mutex object.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
osMutexDef (MutexIsr); // Mutex name definition
+
+
void CreateMutex (void) {
+
osMutexId mutex_id;
+
+
mutex_id = osMutexCreate (osMutex (MutexIsr));
+
if (mutex_id != NULL) {
+
// Mutex object created
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osMutexDelete (osMutexId mutex_id)
+
+
Parameters
+ + +
[in]mutex_idmutex ID obtained by osMutexCreate.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osMutexDelete shall be consistent in every CMSIS-RTOS.
+

Delete a Mutex object. The function releases internal memory obtained for Mutex handling. After this call the mutex_id is no longer valid and cannot be used. The Mutex may be created again using the function osMutexCreate.

+

Status and Error Codes
+

+
    +
  • osOK: the mutex object has been deleted.
  • +
  • osErrorISR: osMutexDelete cannot be called from interrupt service routines.
  • +
  • osErrorResource: all tokens have already been released.
  • +
  • osErrorParameter: the parameter mutex_id is incorrect.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
osMutexDef (MutexIsr); // Mutex name definition
+
osMutexId mutex_id; // Mutex id populated by the function CreateMutex()
+
osMutexId CreateMutex (void); // function prototype that creates the Mutex
+
+
void DeleteMutex (osMutexId mutex_id) {
+
osStatus status;
+
+
if (mutex_id != NULL) {
+
status = osMutexDelete(mutex_id);
+
if (status != osOK) {
+
// handle failure code
+
}
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osMutexRelease (osMutexId mutex_id)
+
+
Parameters
+ + +
[in]mutex_idmutex ID obtained by osMutexCreate.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osMutexRelease shall be consistent in every CMSIS-RTOS.
+

Release a Mutex that was obtained with osMutexWait. Other threads that currently wait for the same mutex will be now put into the state READY.

+

Status and Error Codes
+

+
    +
  • osOK: the mutex has been correctly released.
  • +
  • osErrorResource: the mutex was not obtained before.
  • +
  • osErrorParameter: the parameter mutex_id is incorrect.
  • +
  • osErrorISR: osMutexRelease cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
osMutexDef (MutexIsr); // Mutex name definition
+
osMutexId mutex_id; // Mutex id populated by the function CreateMutex()
+
osMutexId CreateMutex (void); // function prototype that creates the Mutex
+
+
void ReleaseMutex (osMutexId mutex_id) {
+
osStatus status;
+
+
if (mutex_id != NULL) {
+
status = osMutexRelease(mutex_id);
+
if (status != osOK) {
+
// handle failure code
+
}
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osStatus osMutexWait (osMutexId mutex_id,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]mutex_idmutex ID obtained by osMutexCreate.
[in]millisecTimout Value or 0 in case of no time-out.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osMutexWait shall be consistent in every CMSIS-RTOS.
+

Wait until a Mutex becomes available. If no other thread has obtained the Mutex, the function instantly returns and blocks the mutex object.

+

The argument millisec specifies how long the system waits for a mutex. While the system waits the thread that is calling this function is put into the state WAITING. The millisec timeout can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until the mutex becomes available.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+

Status and Error Codes
+

+
    +
  • osOK: the mutex has been obtained.
  • +
  • osErrorTimeoutResource: the mutex could not be obtained in the given time.
  • +
  • osErrorResource: the mutex could not be obtained when no timeout was specified.
  • +
  • osErrorParameter: the parameter mutex_id is incorrect.
  • +
  • osErrorISR: osMutexWait cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
osMutexDef (MutexIsr);
+
+
void WaitMutex (void) {
+
osMutexId mutex_id;
+
osStatus status;
+
+
mutex_id = osMutexCreate (osMutex (MutexIsr));
+
if (mutex_id != NULL) {
+
status = osMutexWait (mutex_id, 0);
+
if (status != osOK) {
+
// handle failure code
+
}
+
}
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.js b/docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.js new file mode 100644 index 0000000..cc1212e --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__MutexMgmt.js @@ -0,0 +1,9 @@ +var group__CMSIS__RTOS__MutexMgmt = +[ + [ "osMutex", "group__CMSIS__RTOS__MutexMgmt.html#ga1122a86faa64b4a0880c76cf68d0c934", null ], + [ "osMutexDef", "group__CMSIS__RTOS__MutexMgmt.html#ga9b522438489d7c402c95332b58bc94f3", null ], + [ "osMutexCreate", "group__CMSIS__RTOS__MutexMgmt.html#ga5c9de56e717016e39e788064e9a291cc", null ], + [ "osMutexDelete", "group__CMSIS__RTOS__MutexMgmt.html#gac27e24135185d51d18f3dabc20910219", null ], + [ "osMutexRelease", "group__CMSIS__RTOS__MutexMgmt.html#ga006e4744d741e8e132c3d5bbc295afe1", null ], + [ "osMutexWait", "group__CMSIS__RTOS__MutexMgmt.html#ga5e1752b73f573ee015dbd9ef1edaba13", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.html b/docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.html new file mode 100644 index 0000000..91e0af7 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.html @@ -0,0 +1,495 @@ + + + + + +Memory Pool +CMSIS-RTOS: Memory Pool + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+ +

Manage thread-safe fixed-size blocks of dynamic memory. +More...

+ + + + + + + + + + + +

+Macros

#define osFeature_Pool   1
 Memory Pools: 1=available, 0=not available. More...
 
#define osPoolDef(name, no, type)
 Define a Memory Pool. More...
 
#define osPool(name)   &os_pool_def_##name
 Access a Memory Pool definition. More...
 
+ + + + + + + + + + + + + +

+Functions

osPoolId osPoolCreate (const osPoolDef_t *pool_def)
 Create and Initialize a memory pool. More...
 
void * osPoolAlloc (osPoolId pool_id)
 Allocate a memory block from a memory pool. More...
 
void * osPoolCAlloc (osPoolId pool_id)
 Allocate a memory block from a memory pool and set memory block to zero. More...
 
osStatus osPoolFree (osPoolId pool_id, void *block)
 Return an allocated memory block back to a specific memory pool. More...
 
+

Description

+

Memory pools are fixed-size blocks of memory that are thread-safe. They operate much faster than the dynamically allocated heap and do not suffer from fragmentation. Being thread-safe, they can be accessed from threads and ISRs alike.

+

Shared memory is one of the basic models to exchange information between threads. Using memory pools for exchanging data, you can share more complex objects between threads if compared to a Message Queue. Memory pool management functions are used to define and manage such fixed-sized memory pools.

+

Working with Memory Pools

+

Follow these steps to create and use a memory pool:

+
    +
  1. Declare a data structure that combines a number of elements:
    typedef struct {
    +
    uint32_t length;
    +
    uint32_t width;
    +
    uint32_t height;
    +
    uint32_t weight;
    +
    } properties_t;
    +
  2. +
  3. Declare a memory pool of these objects as a block of memory:
    osPoolDef (object_pool, 10, properties_t); // Declare memory pool
    +
    osPoolId (object_pool_id); // Memory pool ID
    +
  4. +
  5. Then, create the memory pool in a thread:
    object_pool_id = osPoolCreate(osPool(object_pool));
    +
  6. +
  7. Allocate the pool within a thread and fill it with data:
    properties_t *object_data;
    +
    object_data = (properties_t *) osPoolAlloc(object_pool_id);
    +
    +
    object_data->length = 100;
    +
    object_data->width = 10;
    +
    object_data->height = 23;
    +
    object_data->weight = 1000;
    +
  8. +
+

Macro Definition Documentation

+ +
+
+ + + + +
#define osFeature_Pool   1
+
+

A CMSIS-RTOS implementation may support fixed-size memory pools.

+ +

CMSIS-RTOS RTX Setting: osFeature_Pool is 1

+ +
+
+ +
+
+ + + + + + + + +
#define osPool( name)   &os_pool_def_##name
+
+

Access a memory pool for the functions osPoolCreate.

+
Parameters
+ + +
namename of the memory pool
+
+
+
Note
CAN BE CHANGED: The parameter to osPool shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define osPoolDef( name,
 no,
 type 
)
+
+

Define a memory pool that is referenced by osPool.

+
Parameters
+ + + + +
namename of the memory pool.
nomaximum number of blocks (objects) in the memory pool.
typedata type of a single block (object).
+
+
+
Note
CAN BE CHANGED: The parameter to osPoolDef shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
void * osPoolAlloc (osPoolId pool_id)
+
+
Parameters
+ + +
[in]pool_idmemory pool ID obtain referenced with osPoolCreate.
+
+
+
Returns
address of the allocated memory block or NULL in case of no memory available.
+
Note
MUST REMAIN UNCHANGED: osPoolAlloc shall be consistent in every CMSIS-RTOS.
+

Allocate a memory block from the memory pool.

+
Note
Interrupt Service Routines can call this function.
+

Code Example

+
#include "cmsis_os.h"
+
+
typedef struct {
+
uint8_t Buf[32];
+
uint8_t Idx;
+
} MEM_BLOCK;
+
+
osPoolDef (MemPool, 8, MEM_BLOCK);
+
+
void AlocMemoryPoolBlock (void) {
+
osPoolId MemPool_Id;
+
MEM_BLOCK *addr;
+
+
MemPool_Id = osPoolCreate (osPool (MemPool));
+
if (MemPool_Id != NULL) {
+
:
+
// allocate a memory block
+
addr = (MEM_BLOCK *)osPoolAlloc (MemPool_Id);
+
+
if (addr != NULL) {
+
// memory block was allocated
+
:
+
}
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
void * osPoolCAlloc (osPoolId pool_id)
+
+
Parameters
+ + +
[in]pool_idmemory pool ID obtain referenced with osPoolCreate.
+
+
+
Returns
address of the allocated memory block or NULL in case of no memory available.
+
Note
MUST REMAIN UNCHANGED: osPoolCAlloc shall be consistent in every CMSIS-RTOS.
+

Allocate a memory block from the memory pool. The block is initialized to zero.

+
Note
Interrupt Service Routines can call this function.
+

Code Example

+
#include "cmsis_os.h"
+
+
typedef struct {
+
uint8_t Buf[32];
+
uint8_t Idx;
+
} MEM_BLOCK;
+
+
osPoolDef (MemPool, 8, MEM_BLOCK);
+
+
void CAlocMemoryPoolBlock (void) {
+
osPoolId MemPool_Id;
+
MEM_BLOCK *addr;
+
+
MemPool_Id = osPoolCreate (osPool (MemPool));
+
if (MemPool_Id != NULL) {
+
:
+
// allocate a memory block
+
addr = (MEM_BLOCK *)osPoolCAlloc (MemPool_Id);
+
+
if (addr != NULL) {
+
// memory block was allocated
+
:
+
}
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
osPoolId osPoolCreate (const osPoolDef_tpool_def)
+
+
Parameters
+ + +
[in]pool_defmemory pool definition referenced with osPool.
+
+
+
Returns
memory pool ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osPoolCreate shall be consistent in every CMSIS-RTOS.
+

Create and initialize a memory pool.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
typedef struct {
+
uint8_t Buf[32];
+
uint8_t Idx;
+
} MEM_BLOCK;
+
+
osPoolDef (MemPool, 8, MEM_BLOCK);
+
+
void CreateMemoryPool (void) {
+
osPoolId MemPool_Id;
+
+
MemPool_Id = osPoolCreate (osPool (MemPool));
+
if (MemPool_Id != NULL) {
+
// memory pool created
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osStatus osPoolFree (osPoolId pool_id,
void * block 
)
+
+
Parameters
+ + + +
[in]pool_idmemory pool ID obtain referenced with osPoolCreate.
[in]blockaddress of the allocated memory block that is returned to the memory pool.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osPoolFree shall be consistent in every CMSIS-RTOS.
+

Return a memory block to a memory pool.

+

Status and Error Codes
+

+
    +
  • osOK: the memory block is released.
  • +
  • osErrorValue: block does not belong to the memory pool.
  • +
  • osErrorParameter: a parameter is invalid or outside of a permitted range.
  • +
+
Note
Interrupt Service Routines can call this function.
+

Code Example

+
#include "cmsis_os.h"
+
+
typedef struct {
+
uint8_t Buf[32];
+
uint8_t Idx;
+
} MEM_BLOCK;
+
+
osPoolDef (MemPool, 8, MEM_BLOCK);
+
+
void CAlocMemoryPoolBlock (void) {
+
osPoolId MemPool_Id;
+
MEM_BLOCK *addr;
+
osStatus status;
+
+
MemPool_Id = osPoolCreate (osPool (MemPool));
+
if (MemPool_Id != NULL) {
+
addr = (MEM_BLOCK *)osPoolCAlloc (MemPool_Id);
+
if (addr != NULL) {
+
:
+
// return a memory block back to pool
+
status = osPoolFree (MemPool_Id, addr);
+
if (status==osOK) {
+
// handle status code
+
}
+
}
+
}
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.js b/docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.js new file mode 100644 index 0000000..60460d4 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__PoolMgmt.js @@ -0,0 +1,10 @@ +var group__CMSIS__RTOS__PoolMgmt = +[ + [ "osFeature_Pool", "group__CMSIS__RTOS__PoolMgmt.html#gadd84b683001de327894851b428587caa", null ], + [ "osPool", "group__CMSIS__RTOS__PoolMgmt.html#ga5f0b204a82327533d420210125c90697", null ], + [ "osPoolDef", "group__CMSIS__RTOS__PoolMgmt.html#ga87b471d4fe2d5dbd0040708edd52771b", null ], + [ "osPoolAlloc", "group__CMSIS__RTOS__PoolMgmt.html#gaa0b2994f1a866c19e0d11e6e0d44f543", null ], + [ "osPoolCAlloc", "group__CMSIS__RTOS__PoolMgmt.html#ga9f129fcad4730fbd1048ad4fa262f36a", null ], + [ "osPoolCreate", "group__CMSIS__RTOS__PoolMgmt.html#ga34af5c4f4ab38f4138ea7f1f9ece3a1a", null ], + [ "osPoolFree", "group__CMSIS__RTOS__PoolMgmt.html#ga4a861e9c469c9d0daf5721bf174f8e54", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.html b/docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.html new file mode 100644 index 0000000..7977dcd --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.html @@ -0,0 +1,463 @@ + + + + + +Semaphores +CMSIS-RTOS: Semaphores + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+ +

Access shared resources simultaneously from different threads. +More...

+ + + + + + + + + + + +

+Macros

#define osFeature_Semaphore   30
 maximum count for osSemaphoreCreate function More...
 
#define osSemaphoreDef(name)   const osSemaphoreDef_t os_semaphore_def_##name = { 0 }
 Define a Semaphore object. More...
 
#define osSemaphore(name)   &os_semaphore_def_##name
 Access a Semaphore definition. More...
 
+ + + + + + + + + + + + + +

+Functions

osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count)
 Create and Initialize a Semaphore object used for managing resources. More...
 
int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec)
 Wait until a Semaphore token becomes available. More...
 
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
 Release a Semaphore token. More...
 
osStatus osSemaphoreDelete (osSemaphoreId semaphore_id)
 Delete a Semaphore that was created by osSemaphoreCreate. More...
 
+

Description

+

Semaphores are used to manage and protect access to shared resources. Semaphores are very similar to Mutexes. Whereas a Mutex permits just one thread to access a shared resource at a time, a semaphore can be used to permit a fixed number of threads to access a pool of shared resources. Using semaphores, access to a group of identical peripherals can be managed (for example multiple DMA channels).

+
+Semaphore.png +
+CMSIS-RTOS Semaphore
+

A semaphore object should be initialized to the maximum number of available tokens. This number of available resources is specified as parameter of the osSemaphoreCreate function. Each time a semaphore token is obtained with osSemaphoreWait, the semaphore count is decremented. When the semaphore count is 0, no semaphore token can be obtained. The thread that tries to obtain the semaphore token needs to wait until the next token is free. Semaphores are released with osSemaphoreRelease incrementing the semaphore count.

+
Note
Semaphore tokens can be acquired from threads and released from threads and ISRs.
+

Working with Semaphores

+

Follow these steps to create and use a semaphore:

+
    +
  1. Declare the semaphore container and initialize the semaphore:
    osSemaphoreDef (my_semaphore); // Declare semaphore
    +
    osSemaphoreId (my_semaphore_id); // Semaphore ID
    +
  2. +
  3. Initialize the semaphore container with a number of tokens within a thread:
    my_semaphore_id = osSemaphoreCreate(osSemaphore(my_semaphore), 4); // Create semaphore with 4 tokens
    +
    Important: semaphore tokens can be created and destroyed as threads run. This means that can initialize a semaphore with zero tokens and then use one thread to add/create tokens to the semaphore while a second thread removes them. In this way you can distinguish between producer and consumer threads.
  4. +
  5. Acquire a token from the semaphore container:
    osSemaphoreWait(my_semaphore_id, osWaitForever);
    +
  6. +
  7. When finished using the semaphore resource, send the token back to the semaphore container:
    osSemaphoreRelease(my_semaphore_id);
    +
  8. +
+

Semaphore Use Cases

+

Due to their flexibility, semaphores cover a wide range of synchronizing applications. At the same time, they are perhaps the most challenging RTOS object to understand. The following explains a use case for semaphores, taken from the book The Little Book Of Semaphores by Allen B. Downey which is available for free download.

+

Non-binary Semaphore (Multiplex)

+

A multiplex limits the number of threads that can access a critical section of code. For example, this could be a function accessing DMA resources which can only support a limited number of calls.

+

To allow multiple threads to run the function, initialize a semaphore to the maximum number of threads that can be allowed. The number of tokens in the semaphore represents the number of additional threads that may enter. If this number is zero, then the next thread trying to access the function will have to wait until one of the other threads exits and releases its token. When all threads have exited the token number is back to n. Ths following example shows the code for one of the threads that might access the resource:

+
osSemaphoreDef(multiplex);
+
osSemaphoreId (multiplex_id);
+
+
void thread_n (void)
+
{
+
multiplex_id = osSemaphoreCreate(osSemaphore(multiplex), 3);
+
while(1)
+
{
+ +
// do something
+
osSemaphoreRelease(multiplex_id);
+
}
+
}
+

Macro Definition Documentation

+ +
+
+ + + + +
#define osFeature_Semaphore   30
+
+

A CMSIS-RTOS implementation may support semaphores. The value osFeature_Semaphore indicates the maximum index count for a semaphore.

+

CMSIS-RTOS RTX Setting: osFeature_Semaphore is 65535

+ +
+
+ +
+
+ + + + + + + + +
#define osSemaphore( name)   &os_semaphore_def_##name
+
+

Access to semaphore object for the functions osSemaphoreCreate.

+
Parameters
+ + +
namename of the semaphore object.
+
+
+
Note
CAN BE CHANGED: The parameter to osSemaphore shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + + + + + +
#define osSemaphoreDef( name)   const osSemaphoreDef_t os_semaphore_def_##name = { 0 }
+
+

Define a semaphore object that is referenced by osSemaphore.

+
Parameters
+ + +
namename of the semaphore object.
+
+
+
Note
CAN BE CHANGED: The parameter to osSemaphoreDef shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_tsemaphore_def,
int32_t count 
)
+
+
Parameters
+ + + +
[in]semaphore_defsemaphore definition referenced with osSemaphore.
[in]countnumber of available resources.
+
+
+
Returns
semaphore ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osSemaphoreCreate shall be consistent in every CMSIS-RTOS.
+

Create and initialize a Semaphore object that is used to manage access to shared resources. The parameter count specifies the number of available resources. The count value 1 creates a binary semaphore.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
osThreadId tid_thread1; // ID for thread 1
+
osThreadId tid_thread2; // ID for thread 2
+
+
osSemaphoreId semaphore; // Semaphore ID
+
osSemaphoreDef(semaphore); // Semaphore definition
+
+
//
+
// Thread 1 - High Priority - Active every 3ms
+
//
+
void thread1 (void const *argument) {
+
int32_t value;
+
+
while (1) {
+
osDelay(3); // Pass control to other tasks for 3ms
+
val = osSemaphoreWait (semaphore, 1); // Wait 1ms for the free semaphore
+
if (val > 0) {
+
// If there was no time-out the semaphore was acquired
+
: // OK, the interface is free now, use it.
+
osSemaphoreRelease (semaphore); // Return a token back to a semaphore
+
}
+
}
+
}
+
+
//
+
// Thread 2 - Normal Priority - looks for a free semaphore and uses
+
// the resource whenever it is available
+
//
+
void thread2 (void const *argument) {
+
while (1) {
+
osSemaphoreWait (semaphore, osWaitForever); // Wait indefinitely for a free semaphore
+
// OK, the interface is free now, use it.
+
:
+
osSemaphoreRelease (semaphore); // Return a token back to a semaphore.
+
}
+
}
+
+
// Thread definitions
+
osThreadDef(thread1, osPriorityHigh, 1, 0);
+
osThreadDef(thread2, osPriorityNormal, 1, 0);
+
+
void StartApplication (void) {
+
semaphore = osSemaphoreCreate(osSemaphore(semaphore), 1);
+
+
tid_thread1 = osThreadCreate(osThread(thread1), NULL);
+
tid_thread2 = osThreadCreate(osThread(thread2), NULL);
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osSemaphoreDelete (osSemaphoreId semaphore_id)
+
+
Parameters
+ + +
[in]semaphore_idsemaphore object referenced with osSemaphoreCreate.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osSemaphoreDelete shall be consistent in every CMSIS-RTOS.
+

Delete a Semaphore object. The function releases internal memory obtained for Semaphore handling. After this call the semaphore_id is no longer valid and cannot be used. The Semaphore may be created again using the function osSemaphoreCreate.

+

Status and Error Codes
+

+
    +
  • osOK: the semaphore object has been deleted.
  • +
  • osErrorISR: osSemaphoreDelete cannot be called from interrupt service routines.
  • +
  • osErrorResource: the semaphore object could not be deleted.
  • +
  • osErrorParameter: the parameter semaphore_id is incorrect.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+ +
+
+ +
+
+ + + + + + + + +
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
+
+
Parameters
+ + +
[in]semaphore_idsemaphore object referenced with osSemaphoreCreate.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osSemaphoreRelease shall be consistent in every CMSIS-RTOS.
+

Release a Semaphore token. This increments the count of available semaphore tokens.

+
Note
Interrupt Service Routines can call this function.
+

Status and Error Codes
+

+
    +
  • osOK: the semaphore has been released.
  • +
  • osErrorResource: all tokens have already been released.
  • +
  • osErrorParameter: the parameter semaphore_id is incorrect.
  • +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int32_t osSemaphoreWait (osSemaphoreId semaphore_id,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]semaphore_idsemaphore object referenced with osSemaphoreCreate.
[in]millisecTimout Value or 0 in case of no time-out.
+
+
+
Returns
number of available tokens, or -1 in case of incorrect parameters.
+
Note
MUST REMAIN UNCHANGED: osSemaphoreWait shall be consistent in every CMSIS-RTOS.
+

Wait until a Semaphore token becomes available. When no Semaphore token is available, the function waits for the time specified with the parameter millisec.

+

The argument millisec specifies how long the system waits for a Semaphore token to become available. While the system waits the thread that is calling this function is put into the state WAITING. The millisec timeout can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until the Semaphore token becomes available.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+

The return value indicates the number of available tokens (the semaphore count value). If 0 is returned, then no semaphore was available.

+
Note
Cannot be called from Interrupt Service Routines.
+ +
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.js b/docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.js new file mode 100644 index 0000000..463e14f --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__SemaphoreMgmt.js @@ -0,0 +1,10 @@ +var group__CMSIS__RTOS__SemaphoreMgmt = +[ + [ "osFeature_Semaphore", "group__CMSIS__RTOS__SemaphoreMgmt.html#ga7da4c7bfb340779c9fc7b321f5ab3e3a", null ], + [ "osSemaphore", "group__CMSIS__RTOS__SemaphoreMgmt.html#ga03761ee8d2c3cd4544e18364ab301dac", null ], + [ "osSemaphoreDef", "group__CMSIS__RTOS__SemaphoreMgmt.html#ga9e66fe361749071e5ab87826c43c2f1b", null ], + [ "osSemaphoreCreate", "group__CMSIS__RTOS__SemaphoreMgmt.html#ga97381e8e55cd47cec390bf57c96d6edb", null ], + [ "osSemaphoreDelete", "group__CMSIS__RTOS__SemaphoreMgmt.html#gabae2801ac2c096f6e8c69a264908f595", null ], + [ "osSemaphoreRelease", "group__CMSIS__RTOS__SemaphoreMgmt.html#gab108914997c49e14d8ff1ae0d1988ca0", null ], + [ "osSemaphoreWait", "group__CMSIS__RTOS__SemaphoreMgmt.html#gacc15b0fc8ce1167fe43da33042e62098", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.html b/docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.html new file mode 100644 index 0000000..e8797f4 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.html @@ -0,0 +1,376 @@ + + + + + +Signal Events +CMSIS-RTOS: Signal Events + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+ +

Synchronize threads using signals. +More...

+ + + + + +

+Macros

#define osFeature_Signals   8
 maximum number of Signal Flags available per thread More...
 
+ + + + + + + + + + +

+Functions

int32_t osSignalSet (osThreadId thread_id, int32_t signals)
 Set the specified Signal Flags of an active thread. More...
 
int32_t osSignalClear (osThreadId thread_id, int32_t signals)
 Clear the specified Signal Flags of an active thread. More...
 
osEvent osSignalWait (int32_t signals, uint32_t millisec)
 Wait for one or more Signal Flags to become signaled for the current RUNNING thread. More...
 
+

Description

+

Signals are used to trigger execution states between threads. The signal management functions in CMSIS-RTOS allow you to control or wait for signal flags. Each thread has up to 31 assigned signal flags. The maximum number of signal flags is defined in the cmsis_os.h file (#define osFeature_Signals).

+

A thread

+
    +
  • can wait for signals to be set (using osSignalWait). Using this function, it enters the WAITING state. The osSignalWait parameter signals defines the signals that are required to put the thread back into READY state.
  • +
  • may set one or more flags in any other given thread (using osSignalSet).
  • +
  • may clear its own signals or the signals of other threads (using osSignalClear).
  • +
+

When a thread wakes up and resumes execution, its signal flags are automatically cleared.

+

Working with Signals

+

Here is a simple example that shows how two thread can communicate with each others using signals:

+
+simple_signal.png +
+Simple signal event communication
+

The following steps are required to use signals:

+
    +
  1. In the thread (for example thread ID tid_thread1) that is supposed to wait for a signal, call the wait function:
    osSignalWait (0x0001, osWaitForever); // wait forever for the signal 0x0001
    +
  2. +
  3. In another thread (or threads) that are supposed to wake the waiting thread up call:
    osSignalSet (tid_thread1, 0x0001); // set the signal 0x0001 for thread tid_thread1
    +
    osDelay (1000); // wait for 1 second
    +
  4. +
+

Macro Definition Documentation

+ +
+
+ + + + +
#define osFeature_Signals   8
+
+

The CMSIS-RTOS API may support a variable number of signal flags. This define specifies the number of signal flags available per thread. The maximum value is 32 signal flags per thread.

+

CMSIS-RTOS RTX Setting: osFeature_Signals is 16

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int32_t osSignalClear (osThreadId thread_id,
int32_t signals 
)
+
+
Parameters
+ + + +
[in]thread_idthread ID obtained by osThreadCreate or osThreadGetId.
[in]signalsspecifies the signal flags of the thread that shall be cleared.
+
+
+
Returns
previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters or call from ISR.
+
Note
MUST REMAIN UNCHANGED: osSignalClear shall be consistent in every CMSIS-RTOS.
+

Clear the signal flags of an active thread.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
void Thread_2 (void const *arg);
+
+
osThreadDef (Thread_2, osPriorityHigh, 1, 0);
+
+
static void EX_Signal_1 (void) {
+
int32_t signals;
+
osThreadId thread_id;
+
+
thread_id = osThreadCreate (osThread(Thread_2), NULL);
+
if (thread_id == NULL) {
+
// Failed to create a thread.
+
}
+
else {
+
f :
+
signals = osSignalClear (thread_id, 0x01);
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int32_t osSignalSet (osThreadId thread_id,
int32_t signals 
)
+
+
Parameters
+ + + +
[in]thread_idthread ID obtained by osThreadCreate or osThreadGetId.
[in]signalsspecifies the signal flags of the thread that should be set.
+
+
+
Returns
previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
+
Note
MUST REMAIN UNCHANGED: osSignalSet shall be consistent in every CMSIS-RTOS.
+

Set the signal flags of an active thread. This function may be used also within interrupt service routines.

+
Note
Interrupt Service Routines can call this function.
+

Code Example

+
void Thread_2 (void const *arg);
+
+
osThreadDef (Thread_2, osPriorityHigh, 1, 0);
+
+
static void EX_Signal_1 (void) {
+
int32_t signals;
+
uint32_t exec;
+
osThreadId thread_id;
+
+
thread_id = osThreadCreate (osThread(Thread_2), NULL);
+
if (thread_id == NULL) {
+
// Failed to create a thread.
+
}
+
else {
+
signals = osSignalSet (thread_id, 0x00000005); // Send signals to the created thread
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osEvent osSignalWait (int32_t signals,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]signalswait until all specified signal flags set or 0 for any single signal flag.
[in]millisecTimout Value or 0 in case of no time-out.
+
+
+
Returns
event flag information or error code.
+
Note
MUST REMAIN UNCHANGED: osSignalWait shall be consistent in every CMSIS-RTOS.
+

Suspend the execution of the current RUNNING thread until all specified signal flags with the parameter signals are set. When the parameter signals is 0 the current RUNNING thread is suspended until any signal is set. When these signal flags are already set, the function returns instantly. Otherwise the thread is put into the state WAITING. Signal flags that are reported as event are automatically cleared.

+

The argument millisec specifies how long the system waits for the specified signal flags. While the system waits the thread calling this function is put into the state WAITING. The timeout value can have the following values:

+
    +
  • when millisec is 0, the function returns instantly.
  • +
  • when millisec is set to osWaitForever the function will wait for an infinite time until a specified signal is set.
  • +
  • all other values specify a time in millisecond for a timeout.
  • +
+

Status and Error Codes
+

+
    +
  • osOK: no signal received when the timeout value millisec was 0.
  • +
  • osEventTimeout: signal not occurred within timeout
  • +
  • osEventSignal: signal occurred, value.signals contains the signal flags; these signal flags are cleared.
  • +
  • osErrorValue: the value signals is outside of the permitted range.
  • +
  • osErrorISR: osSignalWait cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
void Thread_2 (void const *arg);
+
+
osThreadDef (Thread_2, osPriorityHigh, 1, 0);
+
+
static void EX_Signal_1 (void) {
+
osThreadId thread_id;
+
osEvent evt;
+
+
thread_id = osThreadCreate (osThread(Thread_2), NULL);
+
if (thread_id == NULL) {
+
// Failed to create a thread.
+
}
+
else {
+
:
+
// wait for a signal
+
evt = osSignalWait (0x01, 100);
+
if (evt.status == osEventSignal) {
+
// handle event status
+
}
+
}
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.js b/docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.js new file mode 100644 index 0000000..23a0448 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__SignalMgmt.js @@ -0,0 +1,7 @@ +var group__CMSIS__RTOS__SignalMgmt = +[ + [ "osFeature_Signals", "group__CMSIS__RTOS__SignalMgmt.html#ga01edde265710d883b6e237d34a6ef4a6", null ], + [ "osSignalClear", "group__CMSIS__RTOS__SignalMgmt.html#ga87283a6ebc31ce9ed42baf3ea7e4eab6", null ], + [ "osSignalSet", "group__CMSIS__RTOS__SignalMgmt.html#ga3de2730654589d6c3559c4b9e2825553", null ], + [ "osSignalWait", "group__CMSIS__RTOS__SignalMgmt.html#ga38860acda96df47da6923348d96fc4c9", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Status.html b/docs/RTOS/html/group__CMSIS__RTOS__Status.html new file mode 100644 index 0000000..49b4213 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Status.html @@ -0,0 +1,234 @@ + + + + + +Status and Error Codes +CMSIS-RTOS: Status and Error Codes + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Status and Error Codes
+
+
+ +

Status and Error Codes returned by CMSIS-RTOS API functions. +More...

+ + + + +

+Enumerations

enum  osStatus {
+  osOK = 0, +
+  osEventSignal = 0x08, +
+  osEventMessage = 0x10, +
+  osEventMail = 0x20, +
+  osEventTimeout = 0x40, +
+  osErrorParameter = 0x80, +
+  osErrorResource = 0x81, +
+  osErrorTimeoutResource = 0xC1, +
+  osErrorISR = 0x82, +
+  osErrorISRRecursive = 0x83, +
+  osErrorPriority = 0x84, +
+  osErrorNoMemory = 0x85, +
+  osErrorValue = 0x86, +
+  osErrorOS = 0xFF, +
+  os_status_reserved = 0x7FFFFFFF +
+ }
 
+

Description

+

The Status and Error Codes section lists all the return values that the CMSIS-RTOS functions will return.

+

Enumeration Type Documentation

+ +
+
+ + + + +
enum osStatus
+
+
Note
MUST REMAIN UNCHANGED: osStatus shall be consistent in every CMSIS-RTOS.
+

The osStatus enumeration defines the event status and error codes that are returned by the CMSIS-RTOS functions.

+ + + + + + + + + + + + + + + + +
Enumerator
osOK  +

function completed; no error or event occurred.

+
osEventSignal  +

function completed; signal event occurred.

+
osEventMessage  +

function completed; message event occurred.

+
osEventMail  +

function completed; mail event occurred.

+
osEventTimeout  +

function completed; timeout occurred.

+
osErrorParameter  +

parameter error: a mandatory parameter was missing or specified an incorrect object.

+
osErrorResource  +

resource not available: a specified resource was not available.

+
osErrorTimeoutResource  +

resource not available within given time: a specified resource was not available within the timeout period.

+
osErrorISR  +

not allowed in ISR context: the function cannot be called from interrupt service routines.

+
osErrorISRRecursive  +

function called multiple times from ISR with same object.

+
osErrorPriority  +

system cannot determine priority or thread has illegal priority.

+
osErrorNoMemory  +

system is out of memory: it was impossible to allocate or reserve memory for the operation.

+
osErrorValue  +

value of a parameter is out of range.

+
osErrorOS  +

unspecified RTOS error: run-time error but no other error message fits.

+
os_status_reserved  +

prevent from enum down-size compiler optimization.

+
+ +
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Status.js b/docs/RTOS/html/group__CMSIS__RTOS__Status.js new file mode 100644 index 0000000..24d2d2b --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Status.js @@ -0,0 +1,20 @@ +var group__CMSIS__RTOS__Status = +[ + [ "osStatus", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e", [ + [ "osOK", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea9e1c9e2550bb4de8969a935acffc968f", null ], + [ "osEventSignal", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5df7e9643aa8a2f5f3a6f6ec59758518", null ], + [ "osEventMessage", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ead604f3673359dd4ac643b16dc5a2c342", null ], + [ "osEventMail", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea15b12e42b42b53f35fb8a2724ad02926", null ], + [ "osEventTimeout", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea78f477732375c0e1fca814e369618177", null ], + [ "osErrorParameter", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac24adca6a5d072c9f01c32178ba0d109", null ], + [ "osErrorResource", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea8fc5801e8b0482bdf22ad63a77f0155d", null ], + [ "osErrorTimeoutResource", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea314d24a49003f09459035db0dd7c9467", null ], + [ "osErrorISR", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea21635bdc492d3094fe83027fa4a30e2f", null ], + [ "osErrorISRRecursive", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf6552310a817452aedfcd453f2805d65", null ], + [ "osErrorPriority", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eab7dda0ef504817659334cbfd650ae56f", null ], + [ "osErrorNoMemory", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf1fac0240218e51eb30a13da2f8aae81", null ], + [ "osErrorValue", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea4672c8a0c0f6bb1d7981da4602e8e9ee", null ], + [ "osErrorOS", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5fde24ff588ec5ab9cb8314bade26fbc", null ], + [ "os_status_reserved", "group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac7a77f5fe18a15a357790c36a4aca1b1", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.html b/docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.html new file mode 100644 index 0000000..2f0d2dd --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.html @@ -0,0 +1,647 @@ + + + + + +Thread Management +CMSIS-RTOS: Thread Management + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Thread Management
+
+
+ +

Define, create, and control thread functions. +More...

+ + + + + + + + +

+Macros

#define osThreadDef(name, priority, instances, stacksz)
 Create a Thread Definition with function, priority, and stack requirements. More...
 
#define osThread(name)   &os_thread_def_##name
 Access a Thread definition. More...
 
+ + + + +

+Enumerations

enum  osPriority {
+  osPriorityIdle = -3, +
+  osPriorityLow = -2, +
+  osPriorityBelowNormal = -1, +
+  osPriorityNormal = 0, +
+  osPriorityAboveNormal = +1, +
+  osPriorityHigh = +2, +
+  osPriorityRealtime = +3, +
+  osPriorityError = 0x84 +
+ }
 Priority used for thread control. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument)
 Create a thread and add it to Active Threads and set it to state READY. More...
 
osThreadId osThreadGetId (void)
 Return the thread ID of the current running thread. More...
 
osStatus osThreadTerminate (osThreadId thread_id)
 Terminate execution of a thread and remove it from Active Threads. More...
 
osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority)
 Change priority of an active thread. More...
 
osPriority osThreadGetPriority (osThreadId thread_id)
 Get current priority of an active thread. More...
 
osStatus osThreadYield (void)
 Pass control to next thread that is in state READY. More...
 
+

Description

+

The Thread Management function group allows defining, creating, and controlling thread functions in the system. The function main is a special thread function that is started at system initialization and has the initial priority osPriorityNormal.

+

Threads can be in the following states:

+
    +
  • RUNNING: The thread that is currently running is in the RUNNING state. Only one thread at a time can be in this state.
  • +
  • READY: Threads which are ready to run are in the READY state. Once the RUNNING thread has terminated or is WAITING, the next READY thread with the highest priority becomes the RUNNING thread.
  • +
  • WAITING: Threads that are waiting for an event to occur are in the WAITING state.
  • +
  • INACTIVE: Threads that are not created or terminated are in the INACTIVE state. These threads typically consume no system resources.
  • +
+
+ThreadStatus.png +
+Thread State and State Transitions
+

A CMSIS-RTOS assumes that threads are scheduled as shown in the figure Thread State and State Transitions. The thread states change as follows:

+
    +
  • A thread is created using the function osThreadCreate. This puts the thread into the READY or RUNNING state (depending on the thread priority).
  • +
  • CMSIS-RTOS is pre-emptive. The active thread with the highest priority becomes the RUNNING thread provided it does not wait for any event. The initial priority of a thread is defined with the osThreadDef but may be changed during execution using the function osThreadSetPriority.
  • +
  • The RUNNING thread transfers into the WAITING state when it is waiting for an event.
  • +
  • Active threads can be terminated any time using the function osThreadTerminate. Threads can terminate also by just returning from the thread function. Threads that are terminated are in the INACTIVE state and typically do not consume any dynamic memory resources.
  • +
+

Macro Definition Documentation

+ +
+
+ + + + + + + + +
#define osThread( name)   &os_thread_def_##name
+
+

Access to the thread definition for the function osThreadCreate.

+
Parameters
+ + +
namename of the thread definition object.
+
+
+
Note
CAN BE CHANGED: The parameter to osThread shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define osThreadDef( name,
 priority,
 instances,
 stacksz 
)
+
+

Define the attributes of a thread functions that can be created by the function osThreadCreate using osThread. The argument instances defines the number of times that osThreadCreate can be called for the same osThreadDef.

+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread (void const *arg); // function prototype for a Thread
+
osThreadDef (Thread, osPriorityNormal, 3, 0); // define Thread and specify to allow three instances
+
+
void ThreadCreate_example (void) {
+
osThreadId id1, id2, id3;
+
+
id1 = osThreadCreate (osThread (Thread), NULL); // create the thread with id1
+
id2 = osThreadCreate (osThread (Thread), NULL); // create the thread with id2
+
id3 = osThreadCreate (osThread (Thread), NULL); // create the thread with id3
+
if (id1 == NULL) { // handle thread creation for id1
+
// Failed to create the thread with id1
+
}
+
if (id2 == NULL) { // handle thread creation for id2
+
// Failed to create the thread with id2
+
}
+
if (id3 == NULL) { // handle thread creation for id3
+
// Failed to create the thread with id3
+
}
+
:
+
osThreadTerminate (id1); // stop the thread with id1
+
osThreadTerminate (id2); // stop the thread with id2
+
osThreadTerminate (id3); // stop the thread with id3
+
}
+
Parameters
+ + + + + +
namename of the thread function.
priorityinitial priority of the thread function.
instancesnumber of possible thread instances.
stackszstack size (in bytes) requirements for the thread function.
+
+
+
Note
CAN BE CHANGED: The parameters to osThreadDef shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum osPriority
+
+
Note
MUST REMAIN UNCHANGED: osPriority shall be consistent in every CMSIS-RTOS.
+
+Cannot be called from Interrupt Service Routines.
+

The osPriority value specifies the priority for a thread. The default thread priority should be osPriorityNormal. If a Thread is active that has a higher priority than the currently executing thread, then a thread switch occurs immediately to execute the new task.

+

To prevent from a priority inversion, a CMSIS-RTOS compliant OS may optionally implement a priority inheritance method. A priority inversion occurs when a high priority thread is waiting for a resource or event that is controlled by a thread with a lower priority.

+ + + + + + + + + +
Enumerator
osPriorityIdle  +

priority: idle (lowest)

+
osPriorityLow  +

priority: low

+
osPriorityBelowNormal  +

priority: below normal

+
osPriorityNormal  +

priority: normal (default)

+
osPriorityAboveNormal  +

priority: above normal

+
osPriorityHigh  +

priority: high

+
osPriorityRealtime  +

priority: realtime (highest)

+
osPriorityError  +

system cannot determine priority or thread has illegal priority

+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
osThreadId osThreadCreate (const osThreadDef_tthread_def,
void * argument 
)
+
+
Parameters
+ + + +
[in]thread_defthread definition referenced with osThread.
[in]argumentpointer that is passed to the thread function as start argument.
+
+
+
Returns
thread ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osThreadCreate shall be consistent in every CMSIS-RTOS.
+

Start a thread function by adding it to the Active Threads list and set it to state READY. The thread function receives the argument pointer as function argument when the function is started. When the priority of the created thread function is higher than the current RUNNING thread, the created thread function starts instantly and becomes the new RUNNING thread.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread_1 (void const *arg); // function prototype for Thread_1
+
osThreadDef (Thread_1, osPriorityNormal, 1, 0); // define Thread_1
+
+
void ThreadCreate_example (void) {
+ +
+
id = osThreadCreate (osThread (Thread_1), NULL); // create the thread
+
if (id == NULL) { // handle thread creation
+
// Failed to create a thread
+
}
+
:
+
osThreadTerminate (id); // stop the thread
+
}
+
+
+
+ +
+
+ + + + + + + + +
osThreadId osThreadGetId (void )
+
+
Returns
thread ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osThreadGetId shall be consistent in every CMSIS-RTOS.
+

Get the thread ID of the current running thread.

+
Note
Cannot be called from Interrupt Service Routines.
+
+Must not be used inside the idle daemon. This would lead to undefined behavior.
+

Code Example

+
void ThreadGetId_example (void) {
+
osThreadId id; // id for the currently running thread
+
+
id = osThreadGetId ();
+
if (id == NULL) {
+
// Failed to get the id; not in a thread
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
osPriority osThreadGetPriority (osThreadId thread_id)
+
+
Parameters
+ + +
[in]thread_idthread ID obtained by osThreadCreate or osThreadGetId.
+
+
+
Returns
current priority value of the thread function.
+
Note
MUST REMAIN UNCHANGED: osThreadGetPriority shall be consistent in every CMSIS-RTOS.
+

Get the priority of an active thread. In case of a failure the value osPriorityError is returned.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread_1 (void const *arg) { // Thread function
+
osThreadId id; // id for the currently running thread
+
osPriority priority; // thread priority
+
+
id = osThreadGetId (); // Obtain ID of current running thread
+
+
if (id != NULL) {
+
priority = osThreadGetPriority (id);
+
}
+
else {
+
// Failed to get the id
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osStatus osThreadSetPriority (osThreadId thread_id,
osPriority priority 
)
+
+
Parameters
+ + + +
[in]thread_idthread ID obtained by osThreadCreate or osThreadGetId.
[in]prioritynew priority value for the thread function.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osThreadSetPriority shall be consistent in every CMSIS-RTOS.
+

Change the priority of an active thread.

+

Status and Error Codes
+

+
    +
  • osOK: the priority of the specified thread has been successfully changed.
  • +
  • osErrorParameter: thread_id is incorrect.
  • +
  • osErrorValue: incorrect priority value.
  • +
  • osErrorResource: thread_id refers to a thread that is not an active thread.
  • +
  • osErrorISR: osThreadSetPriority cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread_1 (void const *arg) { // Thread function
+
osThreadId id; // id for the currently running thread
+
osPriority pr; // thread priority
+
osStatus status; // status of the executed function
+
+
:
+
id = osThreadGetId (); // Obtain ID of current running thread
+
+
if (id != NULL) {
+ +
if (status == osOK) {
+
// Thread priority changed to BelowNormal
+
}
+
else {
+
// Failed to set the priority
+
}
+
}
+
else {
+
// Failed to get the id
+
}
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osThreadTerminate (osThreadId thread_id)
+
+
Parameters
+ + +
[in]thread_idthread ID obtained by osThreadCreate or osThreadGetId.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osThreadTerminate shall be consistent in every CMSIS-RTOS.
+

Remove the thread function from the active thread list. If the thread is currently RUNNING the execution will stop.

+
Note
In case that osThreadTerminate terminates the currently running task, the function never returns and other threads that are in the READY state are started.
+

Status and Error Codes
+

+
    +
  • osOK: the specified thread has been successfully terminated.
  • +
  • osErrorParameter: thread_id is incorrect.
  • +
  • osErrorResource: thread_id refers to a thread that is not an active thread.
  • +
  • osErrorISR: osThreadTerminate cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+
+Avoid calling the function with a thread_id that does not exist or has been terminated already.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread_1 (void const *arg); // function prototype for Thread_1
+
osThreadDef (Thread_1, osPriorityNormal, 1, 0); // define Thread_1
+
+
void ThreadTerminate_example (void) {
+
osStatus status;
+ +
+
id = osThreadCreate (osThread (Thread_1), NULL); // create the thread
+
:
+
status = osThreadTerminate (id); // stop the thread
+
if (status == osOK) {
+
// Thread was terminated successfully
+
}
+
else {
+
// Failed to terminate a thread
+
}
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osThreadYield (void )
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osThreadYield shall be consistent in every CMSIS-RTOS.
+

Pass control to the next thread that is in state READY. If there is no other thread in the state READY, the current thread continues execution and no thread switching occurs.

+

Status and Error Codes
+

+
    +
  • osOK: the function has been correctly executed.
  • +
  • osErrorISR: osThreadYield cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread_1 (void const *arg) { // Thread function
+
osStatus status; // status of the executed function
+
:
+
while (1) {
+
status = osThreadYield(); //
+
if (status != osOK) {
+
// thread switch not occurred, not in a thread function
+
}
+
}
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.js b/docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.js new file mode 100644 index 0000000..ba6111f --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__ThreadMgmt.js @@ -0,0 +1,21 @@ +var group__CMSIS__RTOS__ThreadMgmt = +[ + [ "osThread", "group__CMSIS__RTOS__ThreadMgmt.html#gaf0c7c6b5e09f8be198312144b5c9e453", null ], + [ "osThreadDef", "group__CMSIS__RTOS__ThreadMgmt.html#gaee93d929beb350f16e5cc7fa602e229f", null ], + [ "osPriority", "group__CMSIS__RTOS__ThreadMgmt.html#ga7f2b42f1983b9107775ec2a1c69a849a", [ + [ "osPriorityIdle", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa549e79a43ff4f8b2b31afb613f5caa81", null ], + [ "osPriorityLow", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa61cb822239ac8f66dfbdc7291598a3d4", null ], + [ "osPriorityBelowNormal", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa193b650117c209b4a203954542bcc3e6", null ], + [ "osPriorityNormal", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa45a2895ad30c79fb97de18cac7cc19f1", null ], + [ "osPriorityAboveNormal", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa17b36cd9cd38652c2bc6d4803990674b", null ], + [ "osPriorityHigh", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa914433934143a9ba767e59577c56e6c2", null ], + [ "osPriorityRealtime", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa1485dec3702434a1ec3cb74c7a17a4af", null ], + [ "osPriorityError", "cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aae35f5e2f9c64ad346822521b643bdea4", null ] + ] ], + [ "osThreadCreate", "group__CMSIS__RTOS__ThreadMgmt.html#gac59b5713cb083702dce759c73fd90dff", null ], + [ "osThreadGetId", "group__CMSIS__RTOS__ThreadMgmt.html#gab1df2a28925862ef8f9cf4e1c995c5a7", null ], + [ "osThreadGetPriority", "group__CMSIS__RTOS__ThreadMgmt.html#ga4299d838978bc2aae5e4350754e6a4e9", null ], + [ "osThreadSetPriority", "group__CMSIS__RTOS__ThreadMgmt.html#ga0dfb90ccf1f6e4b54b9251b12d1cbc8b", null ], + [ "osThreadTerminate", "group__CMSIS__RTOS__ThreadMgmt.html#gaea135bb90eb853eff39e0800b91bbeab", null ], + [ "osThreadYield", "group__CMSIS__RTOS__ThreadMgmt.html#gaf13a667493c5d629a90c13e113b99233", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.html b/docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.html new file mode 100644 index 0000000..944b5b6 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.html @@ -0,0 +1,534 @@ + + + + + +Timer Management +CMSIS-RTOS: Timer Management + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Timer Management
+
+
+ +

Create and control timer and timer callback functions. +More...

+ + + + + + + + +

+Macros

#define osTimerDef(name, function)
 Define a Timer object. More...
 
#define osTimer(name)   &os_timer_def_##name
 Access a Timer definition. More...
 
+ + + +

+Enumerations

enum  os_timer_type {
+  osTimerOnce = 0, +
+  osTimerPeriodic = 1 +
+ }
 
+ + + + + + + + + + + + + +

+Functions

osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument)
 Create a timer. More...
 
osStatus osTimerStart (osTimerId timer_id, uint32_t millisec)
 Start or restart a timer. More...
 
osStatus osTimerStop (osTimerId timer_id)
 Stop the timer. More...
 
osStatus osTimerDelete (osTimerId timer_id)
 Delete a timer that was created by osTimerCreate. More...
 
+

Description

+

In addition to the Generic Wait Functions CMSIS-RTOS also supports virtual timer objects. These timer objects can trigger the execution of a function (not threads). When a timer expires, a callback function is executed to run associated code with the timer. The timer number is passed as a parameter to the callback function. Each timer can be configured as a one-shot or a periodic timer. A periodic timer repeats its operation until it is deleted or stopped. All timers can be started, restarted, or stopped.

+

Timers are handled in the thread osTimerThread. Callback functions run under control of this thread and may use other CMSIS-RTOS API calls.

+

The figure below shows the behavior of a periodic timer. For one-shot timers, the timer stops after execution of the callback function.

+
+Timer.png +
+Behavior of a Periodic Timer
+

Working with Timers

+

The following steps are required to use a timer:

+
    +
  1. Define the timers:
    osTimerDef(one_shot, start_machine); // when the timer expires, the function start_machine is called
    +
    osTimerDef(periodic, toggle_power); // when the timer expires, the function toggle_power is called
    +
    osTimerId one_shot_id, periodic_id;
    +
  2. +
  3. Instantiate and start the timers in an RTOS thread:
    one_shot_id = osTimerCreate(osTimer(one_shot), osTimerOnce, (void *)0); // creates a one-shot timer;
    +
    // (void*)0 is passed as an argument to the callback function
    +
    periodic_id = osTimerCreate(osTimer(periodic), osTimerPeriodic, (void *)5); // creates a periodic timer;
    +
    // (void*)5 is passed as an argument to the callback function
    +
    osTimerStart(one_shot_id, 500);
    +
    osTimerStart(periodic, 1500);
    +
  4. +
+

Macro Definition Documentation

+ +
+
+ + + + + + + + +
#define osTimer( name)   &os_timer_def_##name
+
+

Access to the timer definition for the function osTimerCreate.

+
Parameters
+ + +
namename of the timer object.
+
+
+
Note
CAN BE CHANGED: The parameter to osTimer shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define osTimerDef( name,
 function 
)
+
+

Define the attributes of a timer.

+
Parameters
+ + + +
namename of the timer object.
functionname of the timer call back function.
+
+
+
Note
CAN BE CHANGED: The parameter to osTimerDef shall be consistent but the macro body is implementation specific in every CMSIS-RTOS.
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum os_timer_type
+
+
Note
MUST REMAIN UNCHANGED: os_timer_type shall be consistent in every CMSIS-RTOS. The os_timer_type specifies the a repeating (periodic) or one-shot timer for the function osTimerCreate.
+ + + +
Enumerator
osTimerOnce  +

one-shot timer

+
osTimerPeriodic  +

repeating timer

+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
osTimerId osTimerCreate (const osTimerDef_ttimer_def,
os_timer_type type,
void * argument 
)
+
+
Parameters
+ + + + +
[in]timer_deftimer object referenced with osTimer.
[in]typeosTimerOnce for one-shot or osTimerPeriodic for periodic behavior.
[in]argumentargument to the timer call back function.
+
+
+
Returns
timer ID for reference by other functions or NULL in case of error.
+
Note
MUST REMAIN UNCHANGED: osTimerCreate shall be consistent in every CMSIS-RTOS.
+

Create a one-shot or periodic timer and associate it with a callback function argument. The timer is in stopped until it is started with osTimerStart.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Timer1_Callback (void const *arg); // prototypes for timer callback function
+
void Timer2_Callback (void const *arg);
+
+
osTimerDef (Timer1, Timer1_Callback); // define timers
+
osTimerDef (Timer2, Timer2_Callback);
+
+
uint32_t exec1; // argument for the timer call back function
+
uint32_t exec2; // argument for the timer call back function
+
+
void TimerCreate_example (void) {
+
osTimerId id1; // timer id
+
osTimerId id2; // timer id
+
+
// Create one-shoot timer
+
exec1 = 1;
+
id1 = osTimerCreate (osTimer(Timer1), osTimerOnce, &exec1);
+
if (id1 != NULL) {
+
// One-shoot timer created
+
}
+
+
// Create periodic timer
+
exec2 = 2;
+
id2 = osTimerCreate (osTimer(Timer2), osTimerPeriodic, &exec2);
+
if (id2 != NULL) {
+
// Periodic timer created
+
}
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osTimerDelete (osTimerId timer_id)
+
+
Parameters
+ + +
[in]timer_idtimer ID obtained by osTimerCreate.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osTimerDelete shall be consistent in every CMSIS-RTOS.
+

Delete the timer object.

+

Status and Error Codes
+

+
    +
  • osOK: the specified timer has been deleted.
  • +
  • osErrorISR: osTimerDelete cannot be called from interrupt service routines.
  • +
  • osErrorParameter: timer_id is incorrect.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Timer_Callback (void const *arg); // prototype for timer callback function
+
osTimerDef (Timer, Timer_Callback); // define timer
+
+
void TimerDelete_example (void) {
+
osTimerId id; // timer id
+
osStatus status; // function return status
+
+
// Create periodic timer
+
exec = 1;
+
id = osTimerCreate (osTimer(Timer2), osTimerPeriodic, NULL);
+
osTimerStart (id, 1000UL); // start timer
+
:
+
status = osTimerDelete (id); // stop and delete timer
+
if (status != osOK) {
+
// Timer could not be deleted
+
}
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
osStatus osTimerStart (osTimerId timer_id,
uint32_t millisec 
)
+
+
Parameters
+ + + +
[in]timer_idtimer ID obtained by osTimerCreate.
[in]millisectime delay value of the timer.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osTimerStart shall be consistent in every CMSIS-RTOS.
+

Start or restart the timer.

+

Status and Error Codes
+

+
    +
  • osOK: the specified timer has been started or restarted.
  • +
  • osErrorISR: osTimerStart cannot be called from interrupt service routines.
  • +
  • osErrorParameter: timer_id is incorrect.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Time_Callback (void const *arg) { // timer callback function
+
// arg contains &exec
+
// called every second after osTimerStart
+
}
+
+
osTimerDef (Timer, Time_Callback); // define timer
+
uint32_t exec; // argument for the timer call back function
+
+
void TimerStart_example (void) {
+
osTimerId id; // timer id
+
uint32_t timerDelay; // timer value
+
osStatus status; // function return status
+
+
// Create periodic timer
+
exec = 1;
+
id = osTimerCreate (osTimer(Timer), osTimerPeriodic, &exec);
+
if (id) {
+
timerDelay = 1000;
+
status = osTimerStart (id, timerDelay); // start timer
+
if (status != osOK) {
+
// Timer could not be started
+
}
+
}
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + +
osStatus osTimerStop (osTimerId timer_id)
+
+
Parameters
+ + +
[in]timer_idtimer ID obtained by osTimerCreate.
+
+
+
Returns
status code that indicates the execution status of the function.
+
Note
MUST REMAIN UNCHANGED: osTimerStop shall be consistent in every CMSIS-RTOS.
+

Stop the timer.

+

Status and Error Codes
+

+
    +
  • osOK: the specified timer has been stopped.
  • +
  • osErrorISR: osTimerStop cannot be called from interrupt service routines.
  • +
  • osErrorParameter: timer_id is incorrect.
  • +
  • osErrorResource: the timer is not started.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Timer_Callback (void const *arg); // prototype for timer callback function
+
osTimerDef (Timer, Timer_Callback); // define timer
+
+
void TimerStop_example (void) {
+
osTimerId id; // timer id
+
osStatus status; // function return status
+
+
// Create periodic timer
+
exec = 1;
+
id = osTimerCreate (osTimer(Timer2), osTimerPeriodic, NULL);
+
osTimerStart (id, 1000); // start timer
+
:
+
status = osTimerStop (id); // stop timer
+
if (status != osOK) {
+
// Timer could not be stopped
+
}
+
:
+
osTimerStart (id, 1000); // start timer again
+
:
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.js b/docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.js new file mode 100644 index 0000000..b671c0e --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__TimerMgmt.js @@ -0,0 +1,13 @@ +var group__CMSIS__RTOS__TimerMgmt = +[ + [ "osTimer", "group__CMSIS__RTOS__TimerMgmt.html#ga1b8d670eaf964b2910fa06885e650678", null ], + [ "osTimerDef", "group__CMSIS__RTOS__TimerMgmt.html#ga1c720627e08d1cc1afcad44e799ed492", null ], + [ "os_timer_type", "group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9", [ + [ "osTimerOnce", "group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ad21712f8df5f97069c82dc9eec37b951", null ], + [ "osTimerPeriodic", "group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ab9c91f9699162edb09bb7c90c11c8788", null ] + ] ], + [ "osTimerCreate", "group__CMSIS__RTOS__TimerMgmt.html#gaedd312bfdca04e0b8162b666e09a1ae6", null ], + [ "osTimerDelete", "group__CMSIS__RTOS__TimerMgmt.html#ga746b8043d906849bd65e3900fcb483cf", null ], + [ "osTimerStart", "group__CMSIS__RTOS__TimerMgmt.html#ga27a797a401b068e2644d1125f22a07ca", null ], + [ "osTimerStop", "group__CMSIS__RTOS__TimerMgmt.html#ga58f36b121a812936435cacc6e1e0e091", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Wait.html b/docs/RTOS/html/group__CMSIS__RTOS__Wait.html new file mode 100644 index 0000000..76a772d --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Wait.html @@ -0,0 +1,293 @@ + + + + + +Generic Wait Functions +CMSIS-RTOS: Generic Wait Functions + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Generic Wait Functions
+
+
+ +

Wait for a time period or unspecified events. +More...

+ + + + + +

+Macros

#define osFeature_Wait   1
 osWait function: 1=available, 0=not available More...
 
+ + + + + + + +

+Functions

osStatus osDelay (uint32_t millisec)
 Wait for Timeout (Time Delay). More...
 
osEvent osWait (uint32_t millisec)
 Wait for Signal, Message, Mail, or Timeout. More...
 
+

Description

+

The Generic Wait function group provides means for a time delay and allow to wait for unspecified events.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define osFeature_Wait   1
+
+

A CMSIS-RTOS implementation may support the generic wait function osWait.

+ +

CMSIS-RTOS RTX Setting: osFeature_Wait is 0

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
osStatus osDelay (uint32_t millisec)
+
+
Parameters
+ + +
[in]millisectime delay value
+
+
+
Returns
status code that indicates the execution status of the function.
+

Wait for a specified time period in millisec.

+

The millisec value specifies the number of timer ticks and is therefore an upper bound. The exact time delay depends on the actual time elapsed since the last timer tick.

+

For a value of 1, the system waits until the next timer tick occurs. That means that the actual time delay may be up to one timer tick less.

+

Status and Error Codes
+

+
    +
  • osEventTimeout: the time delay is executed.
  • +
  • osErrorISR: osDelay cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread_1 (void const *arg) { // Thread function
+
osStatus status; // capture the return status
+
uint32_t delayTime; // delay time in milliseconds
+
+
delayTime = 1000; // delay 1 second
+
:
+
status = osDelay (delayTime); // suspend thread execution
+
// handle error code
+
:
+
}
+
+
+
+ +
+
+ + + + + + + + +
osEvent osWait (uint32_t millisec)
+
+
Parameters
+ + +
[in]millisecTimout Value or 0 in case of no time-out
+
+
+
Returns
event that contains signal, message, or mail information or error code.
+
Note
MUST REMAIN UNCHANGED: osWait shall be consistent in every CMSIS-RTOS.
+

Wait for any event of the type Signal, Message, Mail for a specified time period in millisec. While the system waits, the thread that is calling this function is put into the state WAITING. When millisec is set to osWaitForever, the function will wait for an infinite time until an event occurs.

+

The osWait function puts a thread into the state WAITING and waits for any of the following events:

+
    +
  • A signal sent to that thread explicitly
  • +
  • A message from a message object that is registered to that thread
  • +
  • A mail from a mail object that is registered to that thread
  • +
+
Note
This function is optional and may not be provided by all CMSIS-RTOS implementations.
+

Status and Error Codes
+

+
    +
  • osEventSignal: a signal event occurred and is returned.
  • +
  • osEventMessage: a message event occurred and is returned.
  • +
  • osEventMail: a mail event occurred and is returned.
  • +
  • osEventTimeout: the time delay is executed.
  • +
  • osErrorISR: osDelay cannot be called from interrupt service routines.
  • +
+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "cmsis_os.h"
+
+
void Thread_1 (void const *arg) { // Thread function
+
osEvent Event; // capture the event
+
uint32_t waitTime; // wait time in milliseconds
+
+
:
+
waitTime = osWaitForever; // special "wait" value
+
Event = osWait (waitTime); // wait forever and until an event occurred
+
switch (Event.status) {
+
case osEventSignal: // Signal arrived
+
: // Event.value.signals contains the signal flags
+
break;
+
+
case osEventMessage: // Message arrived
+
: // Event.value.p contains the message pointer
+
: // Event.def.message_id contains the message Id
+
break;
+
+
case osEventMail: // Mail arrived
+
: // Event.value.p contains the mail pointer
+
: // Event.def.mail_id contains the mail Id
+
break;
+
+
case osEventTimeout: // Timeout occurred
+
break;
+
+
default: // Error occurred
+
break;
+
}
+
:
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__CMSIS__RTOS__Wait.js b/docs/RTOS/html/group__CMSIS__RTOS__Wait.js new file mode 100644 index 0000000..f597494 --- /dev/null +++ b/docs/RTOS/html/group__CMSIS__RTOS__Wait.js @@ -0,0 +1,6 @@ +var group__CMSIS__RTOS__Wait = +[ + [ "osFeature_Wait", "group__CMSIS__RTOS__Wait.html#ga6c97d38879ae86491628f6e647639bad", null ], + [ "osDelay", "group__CMSIS__RTOS__Wait.html#ga02e19d5e723bfb06ba9324d625162255", null ], + [ "osWait", "group__CMSIS__RTOS__Wait.html#ga8470c8aaedfde524a44e22e5b2328285", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/group__RTX__Global__Functions.html b/docs/RTOS/html/group__RTX__Global__Functions.html new file mode 100644 index 0000000..88deadd --- /dev/null +++ b/docs/RTOS/html/group__RTX__Global__Functions.html @@ -0,0 +1,468 @@ + + + + + +RTX Specific Functions +CMSIS-RTOS: RTX Specific Functions + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
RTX Specific Functions
+
+
+ +

This section describes the functions that are specific to CMSIS-RTOS RTX. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

__NO_RETURN void os_idle_demon (void)
 OS idle demon (running when no other thread is ready to run). More...
 
int os_tick_init (void)
 Initializes an alternative hardware timer as RTX kernel timer. More...
 
uint32_t os_tick_val (void)
 Get alternative hardware timer's current value (0 .. OS_TRV) More...
 
uint32_t os_tick_ovf (void)
 Get alternative hardware timer's overflow flag. More...
 
void os_tick_irqack (void)
 Acknowledge alternative hardware timer interrupt. More...
 
__NO_RETURN void os_error (uint32_t error_code)
 OS error callback (called when a runtime error is detected). More...
 
uint32_t os_suspend (void)
 Suspend the RTX task scheduler. More...
 
void os_resume (uint32_t sleep_time)
 Resume the RTX task scheduler. More...
 
+

Description

+

The RTX kernel can be customized for different application requirements:

+ +

Function Documentation

+ +
+
+ + + + + + + + +
void os_error (uint32_t error_code)
+
+
Parameters
+ + +
[in]error_codeactual error code that has been detected.
+
+
+

Some system error conditions can be detected during runtime. If the RTX kernel detects a runtime error, it calls the runtime error function os_error.

+

The argument error_code passes the actual error code to this function:

+ + + + + + + + + + + +
Error Code Description
OS_ERROR_STACK_OVFThe stack checking has detected a stack overflow for the currently running thread.
OS_ERROR_FIFO_OVF The ISR FIFO Queue buffer overflow is detected.
OS_ERROR_MBX_OVF A mailbox overflow is detected for the function osMessagePut or osMailPut.
OS_ERROR_TIMER_OVFThe User Timer Callback Queue overflow is detected.
+

The function os_error must contain an infinite loop to prevent further program execution. You can use an emulator to step over infinite loop and trace into the code introducing a runtime error. For the overflow errors this means you need to increase the size of the object causing an overflow.

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
void os_error (uint32_t error_code) {
+
+
// HERE: include optional code to be executed on runtime error.
+
switch (error_code) {
+
+ +
// Stack overflow detected for the currently running task.
+
// Thread can be identified by calling svcThreadGetId().
+
break;
+
+ +
// ISR FIFO Queue buffer overflow detected.
+
break;
+
+ +
// Mailbox overflow detected.
+
break;
+
+ +
// User Timer Callback Queue overflow detected.
+
break;
+
}
+
for (;;);
+
}
+

OS error callback (called when a runtime error is detected).

+
Parameters
+ + +
[in]error_codeactual error code that has been detected
+
+
+ +
+
+ +
+
+ + + + + + + + +
void os_idle_demon (void )
+
+

The function os_idle_demon is executed by the RTX kernel, when no other threads are ready to run. By default, this task is an empty end-less loop that does nothing. It only waits until another task becomes ready to run. You may change the code of the os_idle_demon function to put the CPU into a power-saving or idle mode.

+

The default stack size for this task is defined in the file #RTX_Conf_CM.c. Refer to Thread Configuration entry Default Thread stack size [bytes].

+
Note
Cannot be called from Interrupt Service Routines.
+

Code Example

+
void os_idle_demon (void) {
+
+
for (;;) {
+
__WFI(); // wait for interrupt
+
}
+
}
+

OS idle demon (running when no other thread is ready to run).

+ +
+
+ +
+
+ + + + + + + + +
void os_resume (uint32_t sleep_time)
+
+
Parameters
+ + +
[in]sleep_timespecifies how long the system was in sleep or power-down mode.
+
+
+

The function os_resume resumes the RTX task scheduler. You must call this function after you have called os_suspend to re-enable the task scheduler.

+

The argument sleep_time specifies how long the system was in sleep or power-down mode. It is measured in number of system intervals.

+
Note
    +
  • You can call this function from the idle task only.
  • +
  • When the system is in power-down, the system tick timer is not running.
  • +
  • Cannot be called from Interrupt Service Routines.
  • +
+
+

See os_suspend for a Code Example.

+ +
+
+ +
+
+ + + + + + + + +
uint32_t os_suspend (void )
+
+
Returns
number of ticks, for how long the system can sleep or power-down.
+

The function os_suspend suspends the RTX task scheduler. The function calculates the time, for how long the system is allowed to power-down, and locks the task scheduler. When the function returns, the task switches are disabled. For normal RTX operation, after calling os_suspend, you must call the os_resume function to re-enable the OS task scheduler.

+
Note
    +
  • You can call this function from the idle task only.
  • +
  • When the system is in power-down, the system tick timer is not running.
  • +
  • Cannot be called from Interrupt Service Routines.
  • +
+
+

Code Example

+

The low power RTX is controlled from the os_idle_demon. The peripheral wake-up timer must be initialized before the system enters an endless loop. os_suspend calculates the timeout until the first suspended task becomes ready, and returns the timeout to the user:

+
for (;;) {
+
sleep = os_suspend();
+

The user sets-up a peripheral timer to sleep timeout and starts the timer. The timeout is measured in system ticks.

+
if (sleep) {
+
// Setup the wake-up timer ...
+

When the wake-up timer is set-up and running, the user puts the system in power-down mode. The wake-up timer must run also in power-down mode. All other peripherals and the CPU may power-down to reduce power.

+
// Power-down the system ...
+
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
+
__WFE();
+

The wake-up timer, when expired, generates the interrupt and wakes-up the system. Hence, it must run also in power-down mode. The system resumes operation and needs to call the function os_resume. This function restores the RTX and re-enables the scheduler.

+
// After Wake-up
+
sleep = (tc - LPC_WWDT->TV) / 250;
+
}
+
os_resume(sleep);
+

If, for any reason, the system does not wake up immediately after the wake-up interrupt, the actual sleep time is checked and adjusted.

+ +
+
+ +
+
+ + + + + + + + +
int os_tick_init (void )
+
+
Returns
IRQ number of the alternative hardware timer
+

The function os_tick_init initializes an alternate hardware timer as the system tick timer and starts it. If you setup OS_SYSTICK to 0, this function will be available for adding the alternate timer. It returns the interrupt number of the alternative hardware timer.

+
Note
- When using an alternate timer, you must enter the OS_Tick_Handler in the interrupt vector table in the startup file.
+
+- Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "LPC43xx.h" // Device header
+
+
int os_tick_init (void) {
+
// Initialize hardware timer as system tick timer.
+
+
LPC_CCU1->CLK_M4_RITIMER_CFG = (1UL << 0);
+
+
LPC_RITIMER->COMPVAL = OS_TRV; // Set match value
+
LPC_RITIMER->COUNTER = 0; // Set count value to 0
+
LPC_RITIMER->CTRL = (1UL << 3) | // Timer enable
+
(1UL << 2) | // Timer enable for debug
+
(1UL << 1) | // Timer enable clear on match
+
(1UL << 0); // Clear interrupt flag
+
+
return (M0_RITIMER_OR_WWDT_IRQn); // Return IRQ number of timer (0..239)
+
}
+
+
+
+ +
+
+ + + + + + + + +
void os_tick_irqack (void )
+
+

The function os_tick_irqack acknowledges the peripheral timer interrupt.

+
Note
- When using an alternate timer, you must enter the OS_Tick_Handler in the interrupt vector table in the startup file.
+
+- Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "LPC43xx.h" // Device header
+
+
void os_tick_irqack (void) {
+
+
LPC_RITIMER->CTRL |= (1UL << 0); // Clear interrupt flag
+
}
+
+
+
+ +
+
+ + + + + + + + +
uint32_t os_tick_ovf (void )
+
+
Returns
Overflow flag
+
    +
  • 1 : overflow
  • +
  • 0 : no overflow
  • +
+
+

The function os_tick_ovf returns the overflow flag of the alternate hardware timer specified by os_tick_init.

+
Note
- When using an alternate timer, you must enter the OS_Tick_Handler in the interrupt vector table in the startup file.
+
+- Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "LPC43xx.h" // Device header
+
+
uint32_t os_tick_ovf (void) {
+
+
return (LPC_RITIMER->CTRL);
+
}
+
+
+
+ +
+
+ + + + + + + + +
uint32_t os_tick_val (void )
+
+
Returns
Current value of the alternative hardware timer
+

The function os_tick_val returns the current value of the alternate hardware timer specified by os_tick_init.

+
Note
- When using an alternate timer, you must enter the OS_Tick_Handler in the interrupt vector table in the startup file.
+
+- Cannot be called from Interrupt Service Routines.
+

Code Example

+
#include "LPC43xx.h" // Device header
+
+
uint32_t os_tick_val (void) {
+
+
return (LPC_RITIMER->COUNTER);
+
}
+
+
+
+
+
+ + + + diff --git a/docs/RTOS/html/group__RTX__Global__Functions.js b/docs/RTOS/html/group__RTX__Global__Functions.js new file mode 100644 index 0000000..b7eba00 --- /dev/null +++ b/docs/RTOS/html/group__RTX__Global__Functions.js @@ -0,0 +1,11 @@ +var group__RTX__Global__Functions = +[ + [ "os_error", "group__RTX__Global__Functions.html#ga651ae76b3acf45f80bf0e0487b51d6e6", null ], + [ "os_idle_demon", "group__RTX__Global__Functions.html#gafb4dc4d3dff8343a393726d2860282e4", null ], + [ "os_resume", "group__RTX__Global__Functions.html#ga1b85a217d43e6b971ffcf24f8aae1c33", null ], + [ "os_suspend", "group__RTX__Global__Functions.html#ga3e9c57746ccbdfe90464ad50513c569e", null ], + [ "os_tick_init", "group__RTX__Global__Functions.html#ga145e7eafdd042bb522020cbb3b469d9c", null ], + [ "os_tick_irqack", "group__RTX__Global__Functions.html#ga85dab8408f27236c7341a69feb6258c7", null ], + [ "os_tick_ovf", "group__RTX__Global__Functions.html#gad5deddec3fea0fb31798f571afc3c692", null ], + [ "os_tick_val", "group__RTX__Global__Functions.html#ga567543bf38239a91f09751686c23017b", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/index.html b/docs/RTOS/html/index.html new file mode 100644 index 0000000..a26b6a4 --- /dev/null +++ b/docs/RTOS/html/index.html @@ -0,0 +1,154 @@ + + + + + +Main Page +CMSIS-RTOS: Main Page + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
CMSIS-RTOS Documentation
+
+
+

This manual describes the CMSIS-RTOS API Version 1 and the reference implementation CMSIS-RTOS RTX which is designed for Cortex-M processor-based devices. The RTOS kernel can be used for creating applications that perform multiple tasks simultaneously. These tasks are executed by threads that operate in a quasi-parallel fashion.

+

While it is certainly possible to create real-time applications without an RTOS (by executing one or more tasks in a loop), there are numerous scheduling, maintenance, and timing issues that can be solved better with an RTOS. For example, an RTOS enables flexible scheduling of system resources like CPU and memory, and offers methods to communicate between threads.

+

CMSIS-RTOS API programs are written using standard C/C++ constructs and are compiled with the ARMCC, GCC, or IAR Compiler. The cmsis_os.h header file defines functions and macros that allow declaring tasks and accessing all RTOS features easily.

+

This manual contains the following sections:

+ +
Note
An extended version of the CMSIS-RTOS API is available in CMSIS-RTOS v2.
+
+

CMSIS-RTOS in ARM::CMSIS Pack

+

The following files relevant to CMSIS-RTOS are present in the ARM::CMSIS Pack directories:

+ + + + + + + + + +
File/Folder Content
CMSIS/Documentation/RTOS This documentation
CMSIS/Documentation/RTOS2 CMSIS-RTOS API Version 2 documentation
CMSIS/RTOS/Template Header File Template: cmsis_os.h
+
+
+ + + + diff --git a/docs/RTOS/html/jquery.js b/docs/RTOS/html/jquery.js new file mode 100644 index 0000000..3db33e6 --- /dev/null +++ b/docs/RTOS/html/jquery.js @@ -0,0 +1,72 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); +/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null; +p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + +
+
+
Configuration for Low-Power Modes
+
+
+

The system thread os_idle_demon can be use to switch the system into a low-power mode. The easiest form to enter a low-power mode is the execution of the __WFE function that puts the processor into a sleep mode where it waits for an event.

+

Configuration Example:

+
#include "device.h" /* Device definitions */
+
+
void os_idle_demon (void) {
+
/* The idle demon is a system thread, running when no other thread is */
+
/* ready to run. */
+
+
for (;;) {
+
__WFE(); /* Enter sleep mode */
+
}
+
}
+
Note
__WFE() is not available at every Cortex-M implementation. Check device manuals for availability.
+

+Tick-less operation

+

CMSIS-RTOS RTX provides extension for tick-less operation which is useful for applications that use extensively low-power modes where the SysTick timer is also disabled. To provide a time-tick in such power-saving modes a wake-up timer is used to derive timer intervals. The RTX functions os_suspend and os_resume control the tick-less operation.

+

Using this functions allows the RTX thread scheduler to stop the periodic kernel tick interrupt. When all active threads are suspended, the system enters power-down and calculates how long it can stay in this power-down mode. In the power-down mode the processor and potentially peripherals can be switched off. Only a wake-up timer must remain powered, because this timer is responsible to wake-up the system after the power-down period expires.

+

The tick-less operation is controlled from the os_idle_demon thread. The wake-up timeout value is set before the system enters the power-down mode. The function os_suspend calculates the wake-up timeout measured in RTX Timer Ticks; this value is used to setup the wake-up timer that runs during the power-down mode of the system.

+

Once the system resumes operation (either by a wake-up time out or other interrupts) the RTX thread scheduler is started with the function os_resume. The parameter sleep_time specifies the time (in RTX Timer Ticks) that the system was in power-down mode.

+

Code Example

+
#include "LPC11Uxx.h" /* LPC11Uxx definitions */
+
+
void os_idle_demon (void) {
+
/* The idle demon is a system thread, running when no other thread is */
+
/* ready to run. */
+
unsigned int sleep;
+
unsigned int tc;
+
+
LPC_SYSCON->SYSAHBCLKCTRL |= (1UL << 15) | /* Enable clock for WWDT */
+
(1UL << 19); /* Enable clock for Pin IRQ */
+
+
LPC_SYSCON->PINTSEL[0] = 1; /* P0.1 selected as INT0 IRQ */
+
LPC_SYSCON->STARTERP0 |= (1UL << 0); /* Enable INT0 wake-up */
+
LPC_SYSCON->STARTERP1 |= (1UL << 12); /* Enable WWDT wake-up */
+
+
LPC_SYSCON->WDTOSCCTRL = (3 << 0) | /* WDOSC DIVSEL=3 */
+
(2 << 5); /* WDOSC FREQ=0.8MHz */
+
LPC_SYSCON->PDRUNCFG &= ~(1UL << 6); /* Power-up WDT Oscillator */
+
LPC_SYSCON->PDSLEEPCFG &= ~(1UL << 6); /* Power WDT Oscillator in PD */
+
+
LPC_WWDT->CLKSEL = (1UL << 0) | /* Select WDOSC as Clock */
+
(1UL << 31); /* Lock selection */
+
LPC_WWDT->WARNINT = 1000; /* WDT Warning IRQ value */
+
LPC_WWDT->MOD = (1UL << 0); /* Enable WDT */
+
+
NVIC_EnableIRQ(FLEX_INT0_IRQn); /* Enable INT0 IRQ (wake-up) */
+
NVIC_EnableIRQ(WDT_IRQn); /* Enable WWDT IRQ (wake-up) */
+
+
for (;;) {
+
/* HERE: include optional user code to be executed when no task runs.*/
+
sleep = os_suspend(); /* Suspend RTX thread scheduler */
+
+
if (sleep) { /* How long can we sleep? */
+
/* "sleep" is in RTX Timer Ticks which is 10ms in this configuration */
+
+
/* Setup WDT wake-up: WDT ticks @25kHz (FREQ/2/(DIVSEL+1)/4) */
+
tc = (sleep * 250) + 1000;
+
LPC_WWDT->TC = tc;
+
LPC_WWDT->FEED = 0xAA;
+
LPC_WWDT->FEED = 0x55;
+
+
/* Enter Power-down mode */
+
LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG; /* Power after wake-up */
+
LPC_PMU->PCON = 0x02; /* Select Power-down mode */
+
SCB->SCR = (1UL << 2); /* Set SLEEPDEEP */
+
__WFE(); /* Enter Power-down mode */
+
+
/* After Wake-up */
+
sleep = (tc - LPC_WWDT->TV) / 250;
+
}
+
+
os_resume(sleep); /* Resume RTX thread scheduler */
+
}
+
}
+
Note
__WFE() is not available at every Cortex-M implementation. Check device manuals for availability.
+
+ + + + + diff --git a/docs/RTOS/html/manage_rte_output.png b/docs/RTOS/html/manage_rte_output.png new file mode 100644 index 0000000..81672bf Binary files /dev/null and b/docs/RTOS/html/manage_rte_output.png differ diff --git a/docs/RTOS/html/misraCompliance.html b/docs/RTOS/html/misraCompliance.html new file mode 100644 index 0000000..b6c9a02 --- /dev/null +++ b/docs/RTOS/html/misraCompliance.html @@ -0,0 +1,173 @@ + + + + + +MISRA-C:2004 Compliance Exceptions +CMSIS-RTOS: MISRA-C:2004 Compliance Exceptions + + + + + + + + + + + + + + +
+
+
+ + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+ + +
+
    + +
+
+ + + + +
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
MISRA-C:2004 Compliance Exceptions
+
+
+

CMSIS-RTOS RTX tries to be MISRA-C compliant as much as possible. However, there are some violations in order to simplify the overall code logic and to generate more efficient code.

+

CMSIS-RTOS RTX generates the following notes, warnings and infos for MISRA-C:2004 rules:

+
    +
  • Rule 1.1, required, Rule 2.2, required: Non-ANSI reserved word or construct: '//'
  • +
  • Rule 1.2, required: Both sides have side effects
  • +
  • Rule 1.2, required: Unusual pointer cast (incompatible indirect types)
  • +
  • Rule 8.1, required: Function defined without a prototype in scope
  • +
  • Rule 11.1, required, Rule 11.3, advisory: cast from pointer to unsigned int
  • +
  • Rule 11.1, required, Rule 11.3, advisory: cast from unsigned int to pointer
  • +
  • Rule 11.4, advisory: cast from pointer to pointer
  • +
  • Rule 12.11, advisory: Overflow in computing constant for operation: 'unsigned shift left'
  • +
  • Rule 13.7, required, Rule 14.1, required: Constant value Boolean
  • +
  • Rule 14.4, required: Use of goto is deprecated
  • +
  • Rule 14.7, required: Return statement before end of function
  • +
  • Rule 16.10, required: Ignoring return value of function
  • +
  • Rule 17.2, required, Rule 17.3, required: Relational or subtract operator applied to pointers
  • +
  • Rule 19.4, required, Rule 19.10, required: Expression-like macro not parenthesized
  • +
  • Rule 19.15, required: Repeated include file
  • +
+

CMSIS-RTOS RTX violates the following MISRA-C:2004 rules:

+
    +
  • Required Rule 8.5: object/function definition in header file
  • +
  • Required Rule 10.1: Prohibited Implicit Conversion: Non-constant argument to function
  • +
  • Required Rule 10.1: Implicit conversion of complex integer expression
  • +
  • Required Rule 10.3: Cast of complex integer expression to larger type
  • +
  • Required Rule 10.3: Cast of complex expression changes signedness
  • +
  • Required Rule 11.5: attempt to cast away const/volatile from a pointer or reference
  • +
  • Required Rule 12.4: side effects on right hand of logical operator: '&&'
  • +
  • Required Rule 12.4: side effects on right hand of logical operator: '||'
  • +
  • Required Rule 12.5: non-primary expression used with logical operator
  • +
  • Required Rule 14.3: null statement not in line by itself
  • +
  • Required Rule 14.8: left brace expected for while, do...while and for
  • +
  • Required Rule 14.9: left brace expected for if and else
  • +
  • Required Rule 15.3: default missing from switch statement
  • +
  • Required Rule 16.9: function identifier used without '&' or parenthesized parameter list
  • +
  • Required Rule 17.4: pointer arithmetic other than array indexing used
  • +
  • Required Rule 18.4: declaration of union type or object of union type: '{...}'
  • +
  • Required Rule 19.12: Multiple use of '#/##' operators in definition of macro
  • +
  • Required Rule 20.2: Re-use of C90 identifier pattern
  • +
  • Advisory Rule 12.1: dependence placed on C's operator precedence; operators: '+' and '-'
  • +
  • Advisory Rule 12.13: increment or decrement combined with another operator
  • +
  • Advisory Rule 19.13: '#/##' operator used in macro
  • +
  • Advisory Rule 19.7: Function-like macro defined
  • +
+
+
+ + + + diff --git a/docs/RTOS/html/modules.html b/docs/RTOS/html/modules.html new file mode 100644 index 0000000..d9de004 --- /dev/null +++ b/docs/RTOS/html/modules.html @@ -0,0 +1,147 @@ + + + + + +Reference +CMSIS-RTOS: Reference + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Reference
+
+
+
Here is a list of all modules:
+
[detail level 123]
+ + + + + + + + + + + + + + + +
oCMSIS-RTOS APIThis section describes the CMSIS-RTOS API
|oKernel Information and ControlProvide version/system information and start the RTOS Kernel
|oThread ManagementDefine, create, and control thread functions
|oGeneric Wait FunctionsWait for a time period or unspecified events
|oTimer ManagementCreate and control timer and timer callback functions
|oInter-Thread Communication and Resource SharingFunctions for inter-thread communication
||oSignal EventsSynchronize threads using signals
||oMessage QueueExchange messages between threads in a FIFO-like operation
||oMemory PoolManage thread-safe fixed-size blocks of dynamic memory
||oMail QueueExchange data between threads using a queue of memory blocks
||oMutexesSynchronize resource access using Mutual Exclusion (Mutex)
||\SemaphoresAccess shared resources simultaneously from different threads
|oGeneric Data Types and DefinitionsData Type Definitions used by the CMSIS-RTOS API functions
|\Status and Error CodesStatus and Error Codes returned by CMSIS-RTOS API functions
\RTX Specific FunctionsThis section describes the functions that are specific to CMSIS-RTOS RTX
+
+
+
+ + + + diff --git a/docs/RTOS/html/modules.js b/docs/RTOS/html/modules.js new file mode 100644 index 0000000..93a80a5 --- /dev/null +++ b/docs/RTOS/html/modules.js @@ -0,0 +1,5 @@ +var modules = +[ + [ "CMSIS-RTOS API", "group__CMSIS__RTOS.html", "group__CMSIS__RTOS" ], + [ "RTX Specific Functions", "group__RTX__Global__Functions.html", "group__RTX__Global__Functions" ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/nav_f.png b/docs/RTOS/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/RTOS/html/nav_f.png differ diff --git a/docs/RTOS/html/nav_g.png b/docs/RTOS/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/RTOS/html/nav_g.png differ diff --git a/docs/RTOS/html/nav_h.png b/docs/RTOS/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/RTOS/html/nav_h.png differ diff --git a/docs/RTOS/html/navtree.css b/docs/RTOS/html/navtree.css new file mode 100644 index 0000000..41a9cb9 --- /dev/null +++ b/docs/RTOS/html/navtree.css @@ -0,0 +1,143 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#fff; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + background-color: #FAFAFF; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: 250px; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background:url("ftv2splitbar.png") repeat scroll right center transparent; + cursor:e-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/RTOS/html/navtree.js b/docs/RTOS/html/navtree.js new file mode 100644 index 0000000..a7b21ba --- /dev/null +++ b/docs/RTOS/html/navtree.js @@ -0,0 +1,551 @@ +var NAVTREE = +[ + [ "CMSIS-RTOS", "index.html", [ + [ "Revision History", "rtos_revisionHistory.html", [ + [ "CMSIS-RTOS API", "rtos_revisionHistory.html#GenRTOSRev", null ], + [ "CMSIS-RTOS RTX", "rtos_revisionHistory.html#RTXRevisionHistory", null ] + ] ], + [ "Generic RTOS Interface", "genRTOSIF.html", null ], + [ "Using a CMSIS-RTOS Implementation", "usingOS.html", [ + [ "Header File Template: cmsis_os.h", "usingOS.html#cmsis_os_h", null ] + ] ], + [ "Function Overview", "functionOverview.html", [ + [ "Timout Value", "functionOverview.html#CMSIS_RTOS_TimeOutValue", null ], + [ "Calls from Interrupt Service Routines", "functionOverview.html#CMSIS_RTOS_ISR_Calls", null ] + ] ], + [ "RTOS Validation", "rtosValidation.html", [ + [ "Sample Test Output", "rtosValidation.html#test_output", null ] + ] ], + [ "RTX Implementation", "rtxImplementation.html", "rtxImplementation" ], + [ "Reference", "modules.html", "modules" ], + [ "Data Structures", "annotated.html", "annotated" ], + [ "Data Structure Index", "classes.html", null ], + [ "Data Fields", "functions.html", [ + [ "All", "functions.html", null ], + [ "Variables", "functions_vars.html", null ] + ] ] + ] ] +]; + +var NAVTREEINDEX = +[ +"annotated.html" +]; + +var SYNCONMSG = 'click to disable panel synchronisation'; +var SYNCOFFMSG = 'click to enable panel synchronisation'; +var SYNCONMSG = 'click to disable panel synchronisation'; +var SYNCOFFMSG = 'click to enable panel synchronisation'; +var navTreeSubIndices = new Array(); + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + if ($.browser.msie && $.browser.version<=8) { + // script.onload does not work with older versions of IE + script.onreadystatechange = function() { + if (script.readyState=='complete' || script.readyState=='loaded') { + func(); if (show) showRoot(); + } + } + } + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("img"); + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.width = 16; + imgNode.height = 22; + imgNode.border = 0; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.src = node.relpath+"ftv2pnode.png"; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + imgNode.src = node.relpath+"ftv2pnode.png"; + } else { + var span = document.createElement("span"); + span.style.display = 'inline-block'; + span.style.width = 16*(level+1)+'px'; + span.style.height = '22px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + if (anchor.parent().attr('class')=='memItemLeft' || + anchor.parent().attr('class')=='fieldtype' || + anchor.parent().is(':header')) + { + pos = anchor.parent().position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath($(location).attr('pathname')); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } if (imm || ($.browser.msie && $.browser.version>8)) { + // somehow slideDown jumps to the start of tree for IE9 :-( + $(node.getChildrenUL()).show(); + } else { + $(node.getChildrenUL()).slideDown("fast"); + } + if (node.isLast) { + node.plus_img.src = node.relpath+"ftv2mlastnode.png"; + } else { + node.plus_img.src = node.relpath+"ftv2mnode.png"; + } + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = $(location).attr('hash'); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+ + window.location.hash.substring(1)+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parents().slice(2).prop('tagName')=='TR') { + glowEffect(anchor.parents('div.memitem'),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + gotoAnchor(anchor,aname,false); +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + if (node.isLast) { + node.plus_img.src = node.relpath+"ftv2mlastnode.png"; + } else { + node.plus_img.src = node.relpath+"ftv2mnode.png"; + } + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1]; + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + //root=root.replace(/_source\./,'.'); // source link to doc link + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash')); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("img"); + o.node.plus_img.src = relpath+"ftv2pnode.png"; + o.node.plus_img.width = 16; + o.node.plus_img.height = 22; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + $(window).load(function(){ + navTo(o,toroot,window.location.hash,relpath); + showRoot(); + }); + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath($(location).attr('pathname'))+':'+ + $(location).attr('hash').substring(1); + a=$('.item a[class$="'+clslink+'"]'); + } + if (a==null || !$(a).parent().parent().hasClass('selected')){ + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + } + var link=stripPath2($(location).attr('pathname')); + navTo(o,link,$(location).attr('hash'),relpath); + } else if (!animationInProgress) { + $('#doc-content').scrollTop(0); + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + navTo(o,toroot,window.location.hash,relpath); + } + }) +} + diff --git a/docs/RTOS/html/navtreeindex0.js b/docs/RTOS/html/navtreeindex0.js new file mode 100644 index 0000000..28fb552 --- /dev/null +++ b/docs/RTOS/html/navtreeindex0.js @@ -0,0 +1,208 @@ +var NAVTREEINDEX0 = +{ +"annotated.html":[7], +"classes.html":[8], +"cmsis__os_8h.html#a15773df83aba93f8e61f3737af5fae47":[7,10,0], +"cmsis__os_8h.html#a15da8f23c6fe684b70a73646ada685e7":[7,9,3], +"cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c":[7,4,1], +"cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c":[7,5,1], +"cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c":[7,7,1], +"cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca":[7,6,0], +"cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca":[7,8,0], +"cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f":[7,4,0], +"cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f":[7,5,0], +"cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f":[7,7,0], +"cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0":[7,4,2], +"cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0":[7,5,2], +"cmsis__os_8h.html#a950b7f81ad4711959517296e63bc79d1":[7,9,2], +"cmsis__os_8h.html#aa4c4115851a098c0b87358ab6c025603":[7,9,0], +"cmsis__os_8h.html#ac112e786b2a234e0e45cb5bdbee53763":[7,7,2], +"cmsis__os_8h.html#ad3c9624ee214329fb34e71f544a6933e":[7,9,1], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa1485dec3702434a1ec3cb74c7a17a4af":[6,0,1,2,6], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa17b36cd9cd38652c2bc6d4803990674b":[6,0,1,2,4], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa193b650117c209b4a203954542bcc3e6":[6,0,1,2,2], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa45a2895ad30c79fb97de18cac7cc19f1":[6,0,1,2,3], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa549e79a43ff4f8b2b31afb613f5caa81":[6,0,1,2,0], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa61cb822239ac8f66dfbdc7291598a3d4":[6,0,1,2,1], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa914433934143a9ba767e59577c56e6c2":[6,0,1,2,5], +"cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aae35f5e2f9c64ad346822521b643bdea4":[6,0,1,2,7], +"cmsis__os_8h.html#structosMailQDef__t":[7,4], +"cmsis__os_8h.html#structosMessageQDef__t":[7,5], +"cmsis__os_8h.html#structosMutexDef__t":[7,6], +"cmsis__os_8h.html#structosPoolDef__t":[7,7], +"cmsis__os_8h.html#structosSemaphoreDef__t":[7,8], +"cmsis__os_8h.html#structosThreadDef__t":[7,9], +"cmsis__os_8h.html#structosTimerDef__t":[7,10], +"configure.html":[5,5], +"creating_RTX_LIB.html":[5,7], +"dirstructfiles.html":[5,1], +"dirstructfiles.html#Folders":[5,1,0], +"dirstructfiles.html#RTX_Conf_CM":[5,1,2], +"dirstructfiles.html#libFiles":[5,1,1], +"exampleRTX_Tutorial.html":[5,6], +"functionOverview.html":[3], +"functionOverview.html#CMSIS_RTOS_ISR_Calls":[3,1], +"functionOverview.html#CMSIS_RTOS_TimeOutValue":[3,0], +"functions.html":[9,0], +"functions_vars.html":[9,1], +"genRTOSIF.html":[1], +"group__CMSIS__RTOS.html":[6,0], +"group__CMSIS__RTOS__Definitions.html":[6,0,5], +"group__CMSIS__RTOS__Definitions.html#a0b9f8fd3645f01d8cb09cae82add2d7f":[6,0,5,0,2], +"group__CMSIS__RTOS__Definitions.html#a4ccaa172acbdcbf38fa0ea0ef0229c49":[6,0,5,2,1], +"group__CMSIS__RTOS__Definitions.html#a57aa2b69577037fb2428bc48a9fb1038":[6,0,5,2,0], +"group__CMSIS__RTOS__Definitions.html#a596b6d55c3321db19239256bbe403df6":[6,0,5,0,0], +"group__CMSIS__RTOS__Definitions.html#a83878c91171338902e0fe0fb97a8c47a":[6,0,5,1,0], +"group__CMSIS__RTOS__Definitions.html#a9e3669d19b675bd57058fd4664205d2a":[6,0,5,1,2], +"group__CMSIS__RTOS__Definitions.html#aa8420f8bebd6d9578b405b6bbaa813d9":[6,0,5,1,1], +"group__CMSIS__RTOS__Definitions.html#ad477a289f1f03ac45407b64268d707d3":[6,0,5,0,1], +"group__CMSIS__RTOS__Definitions.html#structosEvent":[6,0,5,0], +"group__CMSIS__RTOS__Definitions.html#structos__mailQ":[6,0,5,3], +"group__CMSIS__RTOS__Definitions.html#unionosEvent_8def":[6,0,5,2], +"group__CMSIS__RTOS__Definitions.html#unionosEvent_8value":[6,0,5,1], +"group__CMSIS__RTOS__InterThread.html":[6,0,4], +"group__CMSIS__RTOS__KernelCtrl.html":[6,0,0], +"group__CMSIS__RTOS__KernelCtrl.html#ga22f7d235bc9f783933bd5a981fd79696":[6,0,0,2], +"group__CMSIS__RTOS__KernelCtrl.html#ga3b571de44cd3094c643247a7397f86b5":[6,0,0,8], +"group__CMSIS__RTOS__KernelCtrl.html#ga47cf03658f01cdffca688e9096b58289":[6,0,0,4], +"group__CMSIS__RTOS__KernelCtrl.html#ga53d078a801022e202e8115c083ece68e":[6,0,0,7], +"group__CMSIS__RTOS__KernelCtrl.html#ga702196bacccbb978620c736b209387f1":[6,0,0,0], +"group__CMSIS__RTOS__KernelCtrl.html#ga9e0954d52722673e2031233a2ab99960":[6,0,0,5], +"group__CMSIS__RTOS__KernelCtrl.html#gaab668ffd2ea76bb0a77ab0ab385eaef2":[6,0,0,9], +"group__CMSIS__RTOS__KernelCtrl.html#gab78dce646fabec479c5f34bc5175b7de":[6,0,0,1], +"group__CMSIS__RTOS__KernelCtrl.html#gad0262e4688e95d1e9038afd9bcc16001":[6,0,0,10], +"group__CMSIS__RTOS__KernelCtrl.html#gae12c190af42d7310d8006d64f4ed5a88":[6,0,0,6], +"group__CMSIS__RTOS__KernelCtrl.html#gae554ec16c23c5b7d65affade2a351891":[6,0,0,3], +"group__CMSIS__RTOS__Mail.html":[6,0,4,3], +"group__CMSIS__RTOS__Mail.html#ga27c1060cf21393f96b4fd1ed1c0167cc":[6,0,4,3,6], +"group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02":[6,0,4,3,8], +"group__CMSIS__RTOS__Mail.html#ga58d712b16c0c6668059f509386d1e55b":[6,0,4,3,2], +"group__CMSIS__RTOS__Mail.html#ga8fde74f6fe5b9e88f75cc5eb8f2124fd":[6,0,4,3,4], +"group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174":[6,0,4,3,5], +"group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd":[6,0,4,3,7], +"group__CMSIS__RTOS__Mail.html#gaceb2e0071ce160d153047f2eac1aca8e":[6,0,4,3,0], +"group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2":[6,0,4,3,1], +"group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194":[6,0,4,3,3], +"group__CMSIS__RTOS__Message.html":[6,0,4,1], +"group__CMSIS__RTOS__Message.html#ga2d446a0b4bb90bf05d6f92eedeaabc97":[6,0,4,1,1], +"group__CMSIS__RTOS__Message.html#ga479a6561f859e3d4818e25708593d203":[6,0,4,1,0], +"group__CMSIS__RTOS__Message.html#ga6c6892b8f2296cca6becd57ca2d7e1ae":[6,0,4,1,4], +"group__CMSIS__RTOS__Message.html#gac0dcf462fc92de8ffaba6cc004514a6d":[6,0,4,1,5], +"group__CMSIS__RTOS__Message.html#gac9a6a6276c12609793e7701afcc82326":[6,0,4,1,2], +"group__CMSIS__RTOS__Message.html#gaf3b9345cf426304d46565152bc26fb78":[6,0,4,1,3], +"group__CMSIS__RTOS__MutexMgmt.html":[6,0,4,4], +"group__CMSIS__RTOS__MutexMgmt.html#ga006e4744d741e8e132c3d5bbc295afe1":[6,0,4,4,4], +"group__CMSIS__RTOS__MutexMgmt.html#ga1122a86faa64b4a0880c76cf68d0c934":[6,0,4,4,0], +"group__CMSIS__RTOS__MutexMgmt.html#ga5c9de56e717016e39e788064e9a291cc":[6,0,4,4,2], +"group__CMSIS__RTOS__MutexMgmt.html#ga5e1752b73f573ee015dbd9ef1edaba13":[6,0,4,4,5], +"group__CMSIS__RTOS__MutexMgmt.html#ga9b522438489d7c402c95332b58bc94f3":[6,0,4,4,1], +"group__CMSIS__RTOS__MutexMgmt.html#gac27e24135185d51d18f3dabc20910219":[6,0,4,4,3], +"group__CMSIS__RTOS__PoolMgmt.html":[6,0,4,2], +"group__CMSIS__RTOS__PoolMgmt.html#ga34af5c4f4ab38f4138ea7f1f9ece3a1a":[6,0,4,2,5], +"group__CMSIS__RTOS__PoolMgmt.html#ga4a861e9c469c9d0daf5721bf174f8e54":[6,0,4,2,6], +"group__CMSIS__RTOS__PoolMgmt.html#ga5f0b204a82327533d420210125c90697":[6,0,4,2,1], +"group__CMSIS__RTOS__PoolMgmt.html#ga87b471d4fe2d5dbd0040708edd52771b":[6,0,4,2,2], +"group__CMSIS__RTOS__PoolMgmt.html#ga9f129fcad4730fbd1048ad4fa262f36a":[6,0,4,2,4], +"group__CMSIS__RTOS__PoolMgmt.html#gaa0b2994f1a866c19e0d11e6e0d44f543":[6,0,4,2,3], +"group__CMSIS__RTOS__PoolMgmt.html#gadd84b683001de327894851b428587caa":[6,0,4,2,0], +"group__CMSIS__RTOS__SemaphoreMgmt.html":[6,0,4,5], +"group__CMSIS__RTOS__SemaphoreMgmt.html#ga03761ee8d2c3cd4544e18364ab301dac":[6,0,4,5,1], +"group__CMSIS__RTOS__SemaphoreMgmt.html#ga7da4c7bfb340779c9fc7b321f5ab3e3a":[6,0,4,5,0], +"group__CMSIS__RTOS__SemaphoreMgmt.html#ga97381e8e55cd47cec390bf57c96d6edb":[6,0,4,5,3], +"group__CMSIS__RTOS__SemaphoreMgmt.html#ga9e66fe361749071e5ab87826c43c2f1b":[6,0,4,5,2], +"group__CMSIS__RTOS__SemaphoreMgmt.html#gab108914997c49e14d8ff1ae0d1988ca0":[6,0,4,5,5], +"group__CMSIS__RTOS__SemaphoreMgmt.html#gabae2801ac2c096f6e8c69a264908f595":[6,0,4,5,4], +"group__CMSIS__RTOS__SemaphoreMgmt.html#gacc15b0fc8ce1167fe43da33042e62098":[6,0,4,5,6], +"group__CMSIS__RTOS__SignalMgmt.html":[6,0,4,0], +"group__CMSIS__RTOS__SignalMgmt.html#ga01edde265710d883b6e237d34a6ef4a6":[6,0,4,0,0], +"group__CMSIS__RTOS__SignalMgmt.html#ga38860acda96df47da6923348d96fc4c9":[6,0,4,0,3], +"group__CMSIS__RTOS__SignalMgmt.html#ga3de2730654589d6c3559c4b9e2825553":[6,0,4,0,2], +"group__CMSIS__RTOS__SignalMgmt.html#ga87283a6ebc31ce9ed42baf3ea7e4eab6":[6,0,4,0,1], +"group__CMSIS__RTOS__Status.html":[6,0,6], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e":[6,0,6,0], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea15b12e42b42b53f35fb8a2724ad02926":[6,0,6,0,3], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea21635bdc492d3094fe83027fa4a30e2f":[6,0,6,0,8], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea314d24a49003f09459035db0dd7c9467":[6,0,6,0,7], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea4672c8a0c0f6bb1d7981da4602e8e9ee":[6,0,6,0,12], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5df7e9643aa8a2f5f3a6f6ec59758518":[6,0,6,0,1], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5fde24ff588ec5ab9cb8314bade26fbc":[6,0,6,0,13], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea78f477732375c0e1fca814e369618177":[6,0,6,0,4], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea8fc5801e8b0482bdf22ad63a77f0155d":[6,0,6,0,6], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea9e1c9e2550bb4de8969a935acffc968f":[6,0,6,0,0], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eab7dda0ef504817659334cbfd650ae56f":[6,0,6,0,10], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac24adca6a5d072c9f01c32178ba0d109":[6,0,6,0,5], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac7a77f5fe18a15a357790c36a4aca1b1":[6,0,6,0,14], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ead604f3673359dd4ac643b16dc5a2c342":[6,0,6,0,2], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf1fac0240218e51eb30a13da2f8aae81":[6,0,6,0,11], +"group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf6552310a817452aedfcd453f2805d65":[6,0,6,0,9], +"group__CMSIS__RTOS__ThreadMgmt.html":[6,0,1], +"group__CMSIS__RTOS__ThreadMgmt.html#ga0dfb90ccf1f6e4b54b9251b12d1cbc8b":[6,0,1,6], +"group__CMSIS__RTOS__ThreadMgmt.html#ga4299d838978bc2aae5e4350754e6a4e9":[6,0,1,5], +"group__CMSIS__RTOS__ThreadMgmt.html#ga7f2b42f1983b9107775ec2a1c69a849a":[6,0,1,2], +"group__CMSIS__RTOS__ThreadMgmt.html#gab1df2a28925862ef8f9cf4e1c995c5a7":[6,0,1,4], +"group__CMSIS__RTOS__ThreadMgmt.html#gac59b5713cb083702dce759c73fd90dff":[6,0,1,3], +"group__CMSIS__RTOS__ThreadMgmt.html#gaea135bb90eb853eff39e0800b91bbeab":[6,0,1,7], +"group__CMSIS__RTOS__ThreadMgmt.html#gaee93d929beb350f16e5cc7fa602e229f":[6,0,1,1], +"group__CMSIS__RTOS__ThreadMgmt.html#gaf0c7c6b5e09f8be198312144b5c9e453":[6,0,1,0], +"group__CMSIS__RTOS__ThreadMgmt.html#gaf13a667493c5d629a90c13e113b99233":[6,0,1,8], +"group__CMSIS__RTOS__TimerMgmt.html":[6,0,3], +"group__CMSIS__RTOS__TimerMgmt.html#ga1b8d670eaf964b2910fa06885e650678":[6,0,3,0], +"group__CMSIS__RTOS__TimerMgmt.html#ga1c720627e08d1cc1afcad44e799ed492":[6,0,3,1], +"group__CMSIS__RTOS__TimerMgmt.html#ga27a797a401b068e2644d1125f22a07ca":[6,0,3,5], +"group__CMSIS__RTOS__TimerMgmt.html#ga58f36b121a812936435cacc6e1e0e091":[6,0,3,6], +"group__CMSIS__RTOS__TimerMgmt.html#ga746b8043d906849bd65e3900fcb483cf":[6,0,3,4], +"group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9":[6,0,3,2], +"group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ab9c91f9699162edb09bb7c90c11c8788":[6,0,3,2,1], +"group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ad21712f8df5f97069c82dc9eec37b951":[6,0,3,2,0], +"group__CMSIS__RTOS__TimerMgmt.html#gaedd312bfdca04e0b8162b666e09a1ae6":[6,0,3,3], +"group__CMSIS__RTOS__Wait.html":[6,0,2], +"group__CMSIS__RTOS__Wait.html#ga02e19d5e723bfb06ba9324d625162255":[6,0,2,1], +"group__CMSIS__RTOS__Wait.html#ga6c97d38879ae86491628f6e647639bad":[6,0,2,0], +"group__CMSIS__RTOS__Wait.html#ga8470c8aaedfde524a44e22e5b2328285":[6,0,2,2], +"group__RTX__Global__Functions.html":[6,1], +"group__RTX__Global__Functions.html#ga145e7eafdd042bb522020cbb3b469d9c":[6,1,4], +"group__RTX__Global__Functions.html#ga1b85a217d43e6b971ffcf24f8aae1c33":[6,1,2], +"group__RTX__Global__Functions.html#ga3e9c57746ccbdfe90464ad50513c569e":[6,1,3], +"group__RTX__Global__Functions.html#ga567543bf38239a91f09751686c23017b":[6,1,7], +"group__RTX__Global__Functions.html#ga651ae76b3acf45f80bf0e0487b51d6e6":[6,1,0], +"group__RTX__Global__Functions.html#ga85dab8408f27236c7341a69feb6258c7":[6,1,5], +"group__RTX__Global__Functions.html#gad5deddec3fea0fb31798f571afc3c692":[6,1,6], +"group__RTX__Global__Functions.html#gafb4dc4d3dff8343a393726d2860282e4":[6,1,1], +"index.html":[], +"lowPower.html":[5,5,3], +"lowPower.html#TickLess":[5,5,3,0], +"misraCompliance.html":[5,3], +"modules.html":[6], +"pages.html":[], +"rtosValidation.html":[4], +"rtosValidation.html#test_output":[4,0], +"rtos_revisionHistory.html":[0], +"rtos_revisionHistory.html#GenRTOSRev":[0,0], +"rtos_revisionHistory.html#RTXRevisionHistory":[0,1], +"rtxImplementation.html":[5], +"svcFunctions.html":[5,5,4], +"systemConfig.html":[5,5,2], +"systemConfig.html#ISRFIFO":[5,5,2,2], +"systemConfig.html#RoundRobin":[5,5,2,0], +"systemConfig.html#UserTimer":[5,5,2,1], +"technicalData.html":[5,2], +"technicalData.html#osWait":[5,2,0], +"theory.html":[5,0], +"theory.html#KernelTimer":[5,0,1], +"theory.html#PriorityInversion":[5,0,3], +"theory.html#RTX_Threads":[5,0,2], +"theory.html#isr_function_calls":[5,0,4], +"theory.html#osFeature":[5,0,0], +"threadConfig.html":[5,5,0], +"threadConfig.html#processorMode":[5,5,0,3], +"threadConfig.html#stackCheck":[5,5,0,1], +"threadConfig.html#stackConfig":[5,5,0,0], +"threadConfig.html#stackUsage":[5,5,0,2], +"timerTick.html":[5,5,1], +"timerTick.html#AltTimer":[5,5,1,0], +"using.html":[5,4], +"using.html#DefRefObj":[5,4,0], +"using.html#UsingIRQs":[5,4,1], +"usingOS.html":[2], +"usingOS.html#cmsis_os_h":[2,0] +}; diff --git a/docs/RTOS/html/open.png b/docs/RTOS/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/docs/RTOS/html/open.png differ diff --git a/docs/RTOS/html/own_lib_projwin.png b/docs/RTOS/html/own_lib_projwin.png new file mode 100644 index 0000000..7373a18 Binary files /dev/null and b/docs/RTOS/html/own_lib_projwin.png differ diff --git a/docs/RTOS/html/pages.html b/docs/RTOS/html/pages.html new file mode 100644 index 0000000..9e5dd5b --- /dev/null +++ b/docs/RTOS/html/pages.html @@ -0,0 +1,132 @@ + + + + + +Usage and Description +CMSIS-RTOS: Usage and Description + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-RTOS +  Version 1.03 +
+
Real-Time Operating System: API and RTX Reference Implementation.
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Usage and Description
+
+
+
Here is a list of all related documentation pages:
+ +
+
+
+
+ + + + diff --git a/docs/RTOS/html/printComponentTabs.js b/docs/RTOS/html/printComponentTabs.js new file mode 100644 index 0000000..8afdb6b --- /dev/null +++ b/docs/RTOS/html/printComponentTabs.js @@ -0,0 +1,39 @@ +var strgURL = location.pathname; // path of current component + +// constuctor for the array of objects +function tabElement(id, folderName, tabTxt ) { + this.id = id; // elementID as needed in html; + this.folderName = folderName; // folder name of the component + this.tabTxt = tabTxt; // Text displayed as menu on the web + this.currentListItem = '
  • ' + this.tabTxt + '
  • '; + this.listItem = '
  • ' + this.tabTxt + '
  • '; +}; + +// array of objects +var arr = []; + +// fill array + arr.push( new tabElement( "GEN", "/General/html/", "General") ); + arr.push( new tabElement( "CORE_A", "/Core_A/html/", "CMSIS-Core(A)") ); + arr.push( new tabElement( "CORE_M", "/Core/html/", "CMSIS-Core(M)") ); + arr.push( new tabElement( "DRV", "/Driver/html/", "Driver") ); + arr.push( new tabElement( "DSP", "/DSP/html/", "DSP") ); + arr.push( new tabElement( "NN", "/NN/html/", "NN") ); + arr.push( new tabElement( "RTOSv1", "/RTOS/html/", "RTOS v1") ); + arr.push( new tabElement( "RTOSv2", "/RTOS2/html/", "RTOS v2") ); + arr.push( new tabElement( "PACK", "/Pack/html/", "Pack") ); + arr.push( new tabElement( "SVD", "/SVD/html/", "SVD") ); + arr.push( new tabElement( "DAP", "/DAP/html/", "DAP") ); + arr.push( new tabElement( "ZONE", "/Zone/html/", "Zone") ); + +// write tabs +// called from the header file. +function writeComponentTabs() { + for ( var i=0; i < arr.length; i++ ) { + if (strgURL.search(arr[i].folderName) > 0) { // if this is the current folder + document.write(arr[i].currentListItem); // then print and hightlight the tab + } else { + document.write(arr[i].listItem); // else, print the tab + } + } +}; diff --git a/docs/RTOS/html/project_window.png b/docs/RTOS/html/project_window.png new file mode 100644 index 0000000..0846b93 Binary files /dev/null and b/docs/RTOS/html/project_window.png differ diff --git a/docs/RTOS/html/resize.js b/docs/RTOS/html/resize.js new file mode 100644 index 0000000..304fcb6 --- /dev/null +++ b/docs/RTOS/html/resize.js @@ -0,0 +1,97 @@ +var cookie_namespace = 'doxygen'; +var sidenav,navtree,content,header; + +function readCookie(cookie) +{ + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) + { + var index = document.cookie.indexOf(myCookie); + if (index != -1) + { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) + { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; +} + +function writeCookie(cookie, val, expiration) +{ + if (val==undefined) return; + if (expiration == null) + { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; +} + +function resizeWidth() +{ + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth, null); +} + +function restoreWidth(navWidth) +{ + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+6+"px"}); + sidenav.css({width:navWidth + "px"}); +} + +function resizeHeight() +{ + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px",top: headerHeight+"px"}); +} + +function initResizable() +{ + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(window).resize(function() { resizeHeight(); }); + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(document).bind('touchmove',function(e){ + var device = navigator.userAgent.toLowerCase(); + var ios = device.match(/(iphone|ipod|ipad)/); + if (ios) { + try { + var target = e.target; + while (target) { + if ($(target).css('-webkit-overflow-scrolling')=='touch') return; + target = target.parentNode; + } + e.preventDefault(); + } catch(err) { + e.preventDefault(); + } + } + }); +} + + diff --git a/docs/RTOS/html/rtosValidation.html b/docs/RTOS/html/rtosValidation.html new file mode 100644 index 0000000..700a335 --- /dev/null +++ b/docs/RTOS/html/rtosValidation.html @@ -0,0 +1,171 @@ + + + + + +RTOS Validation +CMSIS-RTOS: RTOS Validation + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    RTOS Validation
    +
    +
    +

    Arm offers a Software Pack for the CMSIS-RTOS Validation. The ARM::CMSIS-RTOS_Validation Pack contains the following:

    +
      +
    • Source code of a CMSIS-RTOS Validation Suite along with configuration file.
    • +
    • Documentation of the CMSIS-RTOS Validation Suite.
    • +
    • Example that shows the usage of the CMSIS-RTOS Validation Suite using simulation.
    • +
    +

    The CMSIS-RTOS Validation Suite is currently available in beta release and performs generic validation of various RTOS features. The test cases verify the functional behaviour, test invalid parameters and call management functions from ISR.

    +

    The following CMSIS-RTOS features can be tested with the current release:

    +
      +
    • Thread : Create multiple threads, terminate, restart, yield, change priority
    • +
    • Timer : Create periodic and one-shot timers
    • +
    • GenWait : Call generic wait functions (osDelay and osWait)
    • +
    • WaitFunc : Measure wait ticks (delay, mail, message, mutex, semaphore, signal)
    • +
    +

    Moreover the following inter-thread communication functions can be tested:

    +
      +
    • Signal : Verify signal events
    • +
    • Memory Pool : Verify memory allocation
    • +
    • Message Queue : Exchange messages between threads
    • +
    • Mail Queue : Exchange data between threads
    • +
    • Mutex : Synchronize resource access
    • +
    • Semaphore : Access shared resources
    • +
    +

    The RTOS Validation output can be printed to a console, output via ITM printf, or output to a memory buffer.

    +

    +Sample Test Output

    +
    CMSIS-RTOS Test Suite   Oct 21 2015   16:39:16 
    +
    +TEST 01: TC_ThreadCreate                  PASSED
    +TEST 02: TC_ThreadMultiInstance           PASSED
    +TEST 03: TC_ThreadTerminate               PASSED
    +  :
    +  :
    +TEST 08: TC_ThreadChainedCreate           PASSED
    +TEST 09: TC_ThreadYield                   NOT EXECUTED
    +TEST 10: TC_ThreadParam                   PASSED
    +  :
    +  :
    +TEST 60: TC_MailFromISRToThread           PASSED
    +
    +Test Summary: 60 Tests, 59 Executed, 59 Passed, 0 Failed, 0 Warnings.
    +Test Result: PASSED
    +
    +
    + + + + diff --git a/docs/RTOS/html/rtos_revisionHistory.html b/docs/RTOS/html/rtos_revisionHistory.html new file mode 100644 index 0000000..de1097c --- /dev/null +++ b/docs/RTOS/html/rtos_revisionHistory.html @@ -0,0 +1,227 @@ + + + + + +Revision History +CMSIS-RTOS: Revision History + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    Revision History
    +
    +
    +

    +CMSIS-RTOS API

    + + + + + + + + + + + + + + + +
    Version Description
    V1.03 - only documentation changes Incorporated documentation for reference implementation CMSIS-RTOS RTX.
    V1.02 - only documentation changes Added: Overview of the CMSIS-RTOS Validation Software Pack.
    + Clarified: Behaviour of Timout Value.
    V1.02 Added: New control functions for short timeouts in microsecond resolution osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec.
    + Removed: osSignalGet.
    V1.01 Added capabilities for C++, kernel initialization and object deletion.
    + Prepared for C++ class interface. In this context to const attribute has been moved from osXxxxDef_t typedefs to the osXxxxDef macros.
    + Added: osTimerDelete, osMutexDelete, osSemaphoreDelete.
    + Added: osKernelInitialize that prepares the Kernel for object creation.
    +
    V1.00 First official Release.
    + Added: osKernelStart; starting 'main' as a thread is now an optional feature.
    + Semaphores have now the standard behavior.
    + osTimerCreate does no longer start the timer. Added: osTimerStart (replaces osTimerRestart).
    + Changed: osThreadPass is renamed to osThreadYield.
    V0.02 Preview Release.
    +

    +CMSIS-RTOS RTX

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Version Description
    V4.82 Corrected: Recursive Mutex 16-bit lock counter is now checked to not overflow.
    +
    V4.81 Added provisions for Arm Compiler 6.
    + Corrected: Message Queue behavior when osMessagePut timed out due to full queue and osMessageGet was called from ISR.
    +
    V4.80 Restored time delay parameter 'millisec' old behavior (before V4.79) for software compatibility.
    + Corrected: implicit mutex release when mutex owner thread is terminated.
    +
    V4.79 Corrected: time delay parameter ‘millisec’ in all functions (osDelay, osSignalWait, …) is now treated as lower bound – wait for at least time given (before it could have been up to 1ms less).
    + Corrected: Lazy Context switching for Cortex-M4 with FPU could lead to a crash when thread which used FPU was terminated.
    + Corrected: osMailCAlloc only cleared the allocated memory block if it was available without waiting.
    + Corrected: osThreadCreate function returns NULL when trying to create more concurrent threads than defined in the configuration.
    + Improved source code MISRA compliance.
    +
    V4.78 Corrected: osTimerStart function accepts full 32-bit range for time delay value in milisec.
    + Added: User Timer Callback Queue overflow reported through os_error(OS_ERROR_TIMER_OVF).
    +
    V4.77 Added: Stack usage watermark.
    +
    V4.76 Optimized Service calls in GCC libraries.
    + Corrected: Stack/Heap regions can be used with scatter loading.
    +
    V4.75 Corrected: Service calls for Cortex-M4 with Floating Point for GCC.
    + Corrected: osSignalClear returns 0x80000000 when called from interrupt service routines.
    + Corrected: C standard library memory functions (malloc, free, ...) can be called between calls to osKernelInitialize and osKernelStart.
    + Corrected: Interrupt Priority Group can be configured between calls to osKernelInitialize and osKernelStart.
    +
    V4.74 Corrected: osKernelInitialize and osKernelStart when called from main which is already a thread.
    +
    V4.73 Corrected: mutex priority inversion when thread owns more than one mutex.
    + Added: RTX extensions os_suspend and os_resume.
    + Added: RTX os_error template.
    V4.72 Corrected: object initialization when defined inside function (allocated on stack and not as static memory).
    V4.71 Corrected: osMailFree behaviour when osMailAlloc timed out.
    V4.70 Added: New control functions for short timeouts in microsecond resolution osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec.
    + Removed: osSignalGet.
    V4.61 Enhanced: osTimerCreate can now be called after osKernelInitialize (before only after osKernelStart).
    + Corrected: Initialization of alternative kernel timer for Cortex-M0/M0+/M1 (when SysTick timer is not used).
    + Corrected: Message/Mail Queue behavior when timeout expires.
    V4.51 Corrected: problem with osKernelInitialize when after the call high priority threads are defined.
    V4.50 Based on CMSIS-RTOS API Version 1.01 and the classic RTX V4.50 Kernel.
    + Added: osTimerDelete, osMutexDelete, osSemaphoreDelete.
    + Added: osKernelInitialize that prepares the Kernel for object creation.
    + Added: support for Low Power Cortex-M applications based on new configuration functions: os_suspend, os_resume.
    + Added: support for peripheral timer to be used as OS tick timer instead of Core SysTick timer.
    + Corrected: stack checking did not work for os_tsk_delete_self function Preview Release.
    V4.20 Initial CMSIS-RTOS adaption of the RTX Kernel.
    +
    +
    + + + + diff --git a/docs/RTOS/html/rtxImplementation.html b/docs/RTOS/html/rtxImplementation.html new file mode 100644 index 0000000..73fdaf2 --- /dev/null +++ b/docs/RTOS/html/rtxImplementation.html @@ -0,0 +1,163 @@ + + + + + +RTX Implementation +CMSIS-RTOS: RTX Implementation + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    RTX Implementation
    +
    +
    +

    This version of RTX implements the CMSIS-RTOS API, which is a generic RTOS interface for Cortex-M processor-based devices. The CMSIS-RTOS API provides a standardized interface for software components that require RTOS functionality. This RTX implementation gives therefore serious benefits to the users and the software industry.

    +
      +
    • The unified feature set of the CMSIS-RTOS API simplifies sharing of software components and reduces learning efforts.
    • +
    • Middleware components that use the CMSIS-RTOS API are RTOS agnostic and CMSIS-RTOS compliant middleware is easier to adapt.
    • +
    • This RTX implementation is available under the Apache-2.0 license and can be freely distributed with project templates.
    • +
    +

    The CMSIS-RTOS RTX manages the resources of the microcontroller system and implements the concept of parallel threads that run concurrently. There are many advantages of using the CMSIS-RTOS RTX kernel.

    +

    Applications frequently require several concurrent activities. RTX can manage multiple concurrent activities at the time when they are needed. Each activity gets a separate thread which executes a specific task and this simplifies the overall program structure. The CMSIS-RTOS RTX system is scalable and additional threads can be added easily at a later time. Threads have a priority allowing faster execution of time-critical parts of an user application.

    +

    The CMSIS-RTOS RTX offers services needed in many real-time applications, for example, periodical activation of timer functions, memory management, and message exchange between threads with time limits.

    +
    +RTX_Structure.png +
    +CMSIS-RTOS RTX Structure
    +

    Compared to the classic Keil RTX version, the CMSIS-RTOS RTX library is extended with the CMSIS API interface module (source file rt_cmsis.c) which implements the function translation. The header file cmsis_os.h provides the API to the CMSIS-RTOS RTX for the user application. Refer to Create an RTX Project for more information.

    +

    CMSIS-RTOS RTX has several options that are configured with the RTX_Conf_CM.c file. Refer to Configure RTX for more information.

    +

    Attributes of the CMSIS-RTOS RTX implementation:

    + +

    The following sections provide further details:

    + +
    +
    + + + + diff --git a/docs/RTOS/html/rtxImplementation.js b/docs/RTOS/html/rtxImplementation.js new file mode 100644 index 0000000..96d7f31 --- /dev/null +++ b/docs/RTOS/html/rtxImplementation.js @@ -0,0 +1,26 @@ +var rtxImplementation = +[ + [ "Theory of Operation", "theory.html", [ + [ "Settings for osFeature_xxx in cmsis_os.h", "theory.html#osFeature", null ], + [ "RTX Kernel Timer Tick and Thread Management", "theory.html#KernelTimer", null ], + [ "CMSIS-RTOS RTX Threads", "theory.html#RTX_Threads", null ], + [ "Priority Inversion on Resource Sharing", "theory.html#PriorityInversion", null ], + [ "Function calls from Interrupt Service Routines (ISR)", "theory.html#isr_function_calls", null ] + ] ], + [ "Directory Structure and File Overview", "dirstructfiles.html", [ + [ "CMSIS-RTOS RTX Directory Structure", "dirstructfiles.html#Folders", null ], + [ "CMSIS-RTOS RTX Library Files", "dirstructfiles.html#libFiles", null ], + [ "Configuration File RTX_Conf_CM.c", "dirstructfiles.html#RTX_Conf_CM", null ] + ] ], + [ "Technical Data", "technicalData.html", [ + [ "osWait", "technicalData.html#osWait", null ] + ] ], + [ "MISRA-C:2004 Compliance Exceptions", "misraCompliance.html", null ], + [ "Create an RTX Project", "using.html", [ + [ "Define and Reference Object Definitions", "using.html#DefRefObj", null ], + [ "Using IRQ Interrupts", "using.html#UsingIRQs", null ] + ] ], + [ "Configure RTX", "configure.html", "configure" ], + [ "RTX Tutorial", "exampleRTX_Tutorial.html", null ], + [ "Building the RTX Library", "creating_RTX_LIB.html", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/search/all_0.html b/docs/RTOS/html/search/all_0.html new file mode 100644 index 0000000..17b6da8 --- /dev/null +++ b/docs/RTOS/html/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_0.js b/docs/RTOS/html/search/all_0.js new file mode 100644 index 0000000..73791ef --- /dev/null +++ b/docs/RTOS/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['building_20the_20rtx_20library',['Building the RTX Library',['../creating_RTX_LIB.html',1,'rtxImplementation']]] +]; diff --git a/docs/RTOS/html/search/all_1.html b/docs/RTOS/html/search/all_1.html new file mode 100644 index 0000000..e290644 --- /dev/null +++ b/docs/RTOS/html/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_1.js b/docs/RTOS/html/search/all_1.js new file mode 100644 index 0000000..1557d8e --- /dev/null +++ b/docs/RTOS/html/search/all_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cmsis_5fos_2eh',['cmsis_os.h',['../cmsis__os_8h.html',1,'']]], + ['cmsis_5fos_2etxt',['cmsis_os.txt',['../cmsis__os_8txt.html',1,'']]], + ['cmsis_5fos_5frtx_5fextensions_2eh',['cmsis_os_rtx_extensions.h',['../cmsis__os__rtx__extensions_8h.html',1,'']]], + ['cmsis_2drtos_20api',['CMSIS-RTOS API',['../group__CMSIS__RTOS.html',1,'']]], + ['configure_20rtx',['Configure RTX',['../configure.html',1,'rtxImplementation']]], + ['configuration_20for_20low_2dpower_20modes',['Configuration for Low-Power Modes',['../lowPower.html',1,'configure']]], + ['create_20an_20rtx_20project',['Create an RTX Project',['../using.html',1,'rtxImplementation']]] +]; diff --git a/docs/RTOS/html/search/all_2.html b/docs/RTOS/html/search/all_2.html new file mode 100644 index 0000000..95ded12 --- /dev/null +++ b/docs/RTOS/html/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_2.js b/docs/RTOS/html/search/all_2.js new file mode 100644 index 0000000..e6f25ab --- /dev/null +++ b/docs/RTOS/html/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['def',['def',['../group__CMSIS__RTOS__Definitions.html#a596b6d55c3321db19239256bbe403df6',1,'osEvent']]], + ['directory_20structure_20and_20file_20overview',['Directory Structure and File Overview',['../dirstructfiles.html',1,'rtxImplementation']]], + ['dummy',['dummy',['../cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca',1,'osMutexDef_t::dummy()'],['../cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca',1,'osSemaphoreDef_t::dummy()']]] +]; diff --git a/docs/RTOS/html/search/all_3.html b/docs/RTOS/html/search/all_3.html new file mode 100644 index 0000000..4d312d0 --- /dev/null +++ b/docs/RTOS/html/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_3.js b/docs/RTOS/html/search/all_3.js new file mode 100644 index 0000000..92b936a --- /dev/null +++ b/docs/RTOS/html/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['function_20overview',['Function Overview',['../functionOverview.html',1,'index']]] +]; diff --git a/docs/RTOS/html/search/all_4.html b/docs/RTOS/html/search/all_4.html new file mode 100644 index 0000000..d72a910 --- /dev/null +++ b/docs/RTOS/html/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_4.js b/docs/RTOS/html/search/all_4.js new file mode 100644 index 0000000..d5eb908 --- /dev/null +++ b/docs/RTOS/html/search/all_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['generic_20data_20types_20and_20definitions',['Generic Data Types and Definitions',['../group__CMSIS__RTOS__Definitions.html',1,'']]], + ['generic_20wait_20functions',['Generic Wait Functions',['../group__CMSIS__RTOS__Wait.html',1,'']]], + ['generic_20rtos_20interface',['Generic RTOS Interface',['../genRTOSIF.html',1,'index']]] +]; diff --git a/docs/RTOS/html/search/all_5.html b/docs/RTOS/html/search/all_5.html new file mode 100644 index 0000000..99ef726 --- /dev/null +++ b/docs/RTOS/html/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_5.js b/docs/RTOS/html/search/all_5.js new file mode 100644 index 0000000..1ee8798 --- /dev/null +++ b/docs/RTOS/html/search/all_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['inter_2dthread_20communication_20and_20resource_20sharing',['Inter-Thread Communication and Resource Sharing',['../group__CMSIS__RTOS__InterThread.html',1,'']]], + ['instances',['instances',['../cmsis__os_8h.html#aa4c4115851a098c0b87358ab6c025603',1,'osThreadDef_t']]], + ['item_5fsz',['item_sz',['../cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f',1,'osPoolDef_t::item_sz()'],['../cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f',1,'osMessageQDef_t::item_sz()'],['../cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f',1,'osMailQDef_t::item_sz()']]] +]; diff --git a/docs/RTOS/html/search/all_6.html b/docs/RTOS/html/search/all_6.html new file mode 100644 index 0000000..6133ab3 --- /dev/null +++ b/docs/RTOS/html/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_6.js b/docs/RTOS/html/search/all_6.js new file mode 100644 index 0000000..1b6ceb1 --- /dev/null +++ b/docs/RTOS/html/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kernel_20information_20and_20control',['Kernel Information and Control',['../group__CMSIS__RTOS__KernelCtrl.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/all_7.html b/docs/RTOS/html/search/all_7.html new file mode 100644 index 0000000..5748125 --- /dev/null +++ b/docs/RTOS/html/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_7.js b/docs/RTOS/html/search/all_7.js new file mode 100644 index 0000000..0898e92 --- /dev/null +++ b/docs/RTOS/html/search/all_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['mail_20queue',['Mail Queue',['../group__CMSIS__RTOS__Mail.html',1,'']]], + ['message_20queue',['Message Queue',['../group__CMSIS__RTOS__Message.html',1,'']]], + ['mutexes',['Mutexes',['../group__CMSIS__RTOS__MutexMgmt.html',1,'']]], + ['memory_20pool',['Memory Pool',['../group__CMSIS__RTOS__PoolMgmt.html',1,'']]], + ['misra_2dc_3a2004_20compliance_20exceptions',['MISRA-C:2004 Compliance Exceptions',['../misraCompliance.html',1,'rtxImplementation']]] +]; diff --git a/docs/RTOS/html/search/all_8.html b/docs/RTOS/html/search/all_8.html new file mode 100644 index 0000000..0179bdd --- /dev/null +++ b/docs/RTOS/html/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_8.js b/docs/RTOS/html/search/all_8.js new file mode 100644 index 0000000..e22fe05 --- /dev/null +++ b/docs/RTOS/html/search/all_8.js @@ -0,0 +1,150 @@ +var searchData= +[ + ['os_5fclock',['OS_CLOCK',['../RTX__Conf__CM_8c.html#adff23afdf544a322a38314870f8848b9',1,'RTX_Conf_CM.c']]], + ['os_5ferror',['os_error',['../group__RTX__Global__Functions.html#ga651ae76b3acf45f80bf0e0487b51d6e6',1,'os_error(uint32_t error_code): RTX_Conf_CM.c'],['../group__RTX__Global__Functions.html#ga651ae76b3acf45f80bf0e0487b51d6e6',1,'os_error(uint32_t error_code): RTX_Conf_CM.c']]], + ['os_5ferror_5ffifo_5fovf',['OS_ERROR_FIFO_OVF',['../RTX__Conf__CM_8c.html#a075d54df14c85a6afe32b7f5c99c9c29',1,'RTX_Conf_CM.c']]], + ['os_5ferror_5fmbx_5fovf',['OS_ERROR_MBX_OVF',['../RTX__Conf__CM_8c.html#ab715d7d66c341c067ef0a97b55db8a10',1,'RTX_Conf_CM.c']]], + ['os_5ferror_5fstack_5fovf',['OS_ERROR_STACK_OVF',['../RTX__Conf__CM_8c.html#abf8311a7a239ec56c6d725f926ba766d',1,'RTX_Conf_CM.c']]], + ['os_5ferror_5ftimer_5fovf',['OS_ERROR_TIMER_OVF',['../RTX__Conf__CM_8c.html#a79d7e388d951f11bd0dabd13f722cea8',1,'RTX_Conf_CM.c']]], + ['os_5ffifosz',['OS_FIFOSZ',['../RTX__Conf__CM_8c.html#a93c8e36d441750016f9f72e102f68d66',1,'RTX_Conf_CM.c']]], + ['os_5fidle_5fdemon',['os_idle_demon',['../group__RTX__Global__Functions.html#gafb4dc4d3dff8343a393726d2860282e4',1,'os_idle_demon(void): RTX_Conf_CM.c'],['../group__RTX__Global__Functions.html#gafb4dc4d3dff8343a393726d2860282e4',1,'os_idle_demon(void): RTX_Conf_CM.c']]], + ['os_5fmailq',['os_mailQ',['../group__CMSIS__RTOS__Definitions.html#structos__mailQ',1,'']]], + ['os_5fmainstksize',['OS_MAINSTKSIZE',['../RTX__Conf__CM_8c.html#a95362a96f44d4314f148ae24edd52f7c',1,'RTX_Conf_CM.c']]], + ['os_5fmutexcnt',['OS_MUTEXCNT',['../RTX__Conf__CM_8c.html#ad11cf133eea28b601f9a63cd9af9b786',1,'RTX_Conf_CM.c']]], + ['os_5fprivcnt',['OS_PRIVCNT',['../RTX__Conf__CM_8c.html#a7cfcbf2c4f9d0a63424a2a48592955b1',1,'RTX_Conf_CM.c']]], + ['os_5fprivstksize',['OS_PRIVSTKSIZE',['../RTX__Conf__CM_8c.html#a6e0d30986e4ae0df44f449a4b3b0fbec',1,'RTX_Conf_CM.c']]], + ['os_5fpthread',['os_pthread',['../cmsis__os_8h.html#aee631e5ea1b700fc35695cc7bc574cf7',1,'cmsis_os.h']]], + ['os_5fptimer',['os_ptimer',['../cmsis__os_8h.html#aa2d85e49bde9f6951ff3545cd323f065',1,'cmsis_os.h']]], + ['os_5fresume',['os_resume',['../group__RTX__Global__Functions.html#ga1b85a217d43e6b971ffcf24f8aae1c33',1,'cmsis_os_rtx_extensions.h']]], + ['os_5frobin',['OS_ROBIN',['../RTX__Conf__CM_8c.html#ae34f3058383d9fa9280bbf595618ab0a',1,'RTX_Conf_CM.c']]], + ['os_5frobintout',['OS_ROBINTOUT',['../RTX__Conf__CM_8c.html#ad89fdd7232cfba74d400080b6bcc0012',1,'RTX_Conf_CM.c']]], + ['os_5frunpriv',['OS_RUNPRIV',['../RTX__Conf__CM_8c.html#a786924d58be54e943a7e73458cebc51b',1,'RTX_Conf_CM.c']]], + ['os_5fstatus_5freserved',['os_status_reserved',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac7a77f5fe18a15a357790c36a4aca1b1',1,'cmsis_os.h']]], + ['os_5fstkcheck',['OS_STKCHECK',['../RTX__Conf__CM_8c.html#a6ef9e00396f881f0fa9ac877150e5962',1,'RTX_Conf_CM.c']]], + ['os_5fstkinit',['OS_STKINIT',['../RTX__Conf__CM_8c.html#ac820623da739e4219ee86f15bdcd9752',1,'RTX_Conf_CM.c']]], + ['os_5fstksize',['OS_STKSIZE',['../RTX__Conf__CM_8c.html#a16495c133349f3e7c27ac933857c1a8c',1,'RTX_Conf_CM.c']]], + ['os_5fsuspend',['os_suspend',['../group__RTX__Global__Functions.html#ga3e9c57746ccbdfe90464ad50513c569e',1,'cmsis_os_rtx_extensions.h']]], + ['os_5ftaskcnt',['OS_TASKCNT',['../RTX__Conf__CM_8c.html#a309353d912327b7f4a2300711ee1b349',1,'RTX_Conf_CM.c']]], + ['os_5ftick',['OS_TICK',['../RTX__Conf__CM_8c.html#ab6b10bd6d60e95ab28c775757f6bfbcc',1,'RTX_Conf_CM.c']]], + ['os_5ftick_5finit',['os_tick_init',['../group__RTX__Global__Functions.html#ga145e7eafdd042bb522020cbb3b469d9c',1,'RTX_Conf_CM.c']]], + ['os_5ftick_5firqack',['os_tick_irqack',['../group__RTX__Global__Functions.html#ga85dab8408f27236c7341a69feb6258c7',1,'RTX_Conf_CM.c']]], + ['os_5ftick_5fovf',['os_tick_ovf',['../group__RTX__Global__Functions.html#gad5deddec3fea0fb31798f571afc3c692',1,'RTX_Conf_CM.c']]], + ['os_5ftick_5fval',['os_tick_val',['../group__RTX__Global__Functions.html#ga567543bf38239a91f09751686c23017b',1,'RTX_Conf_CM.c']]], + ['os_5ftimer_5ftype',['os_timer_type',['../group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9',1,'os_timer_type(): cmsis_os.txt'],['../cmsis__os_8h.html#adac860eb9e1b4b0619271e6595ed83d9',1,'os_timer_type(): cmsis_os.h']]], + ['os_5ftimercbqs',['OS_TIMERCBQS',['../RTX__Conf__CM_8c.html#a29701cff84a42494279367ad018f252d',1,'RTX_Conf_CM.c']]], + ['os_5ftimerprio',['OS_TIMERPRIO',['../RTX__Conf__CM_8c.html#a90af874f1df4dfb0f8821cc2d860dae6',1,'RTX_Conf_CM.c']]], + ['os_5ftimers',['OS_TIMERS',['../RTX__Conf__CM_8c.html#a23b0f1095632e58b5ac0d8f7dcfdfded',1,'RTX_Conf_CM.c']]], + ['os_5ftimerstksz',['OS_TIMERSTKSZ',['../RTX__Conf__CM_8c.html#a76d1b01799981a753fc528e600015627',1,'RTX_Conf_CM.c']]], + ['os_5ftrv',['OS_TRV',['../RTX__Conf__CM_8c.html#a9d55a070ddb219165bd4287f08318d51',1,'RTX_Conf_CM.c']]], + ['oscmsis',['osCMSIS',['../group__CMSIS__RTOS__KernelCtrl.html#ga702196bacccbb978620c736b209387f1',1,'cmsis_os.h']]], + ['oscmsis_5fkernel',['osCMSIS_KERNEL',['../group__CMSIS__RTOS__KernelCtrl.html#gab78dce646fabec479c5f34bc5175b7de',1,'cmsis_os.h']]], + ['osdelay',['osDelay',['../group__CMSIS__RTOS__Wait.html#ga02e19d5e723bfb06ba9324d625162255',1,'cmsis_os.h']]], + ['oserrorisr',['osErrorISR',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea21635bdc492d3094fe83027fa4a30e2f',1,'cmsis_os.h']]], + ['oserrorisrrecursive',['osErrorISRRecursive',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf6552310a817452aedfcd453f2805d65',1,'cmsis_os.h']]], + ['oserrornomemory',['osErrorNoMemory',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf1fac0240218e51eb30a13da2f8aae81',1,'cmsis_os.h']]], + ['oserroros',['osErrorOS',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5fde24ff588ec5ab9cb8314bade26fbc',1,'cmsis_os.h']]], + ['oserrorparameter',['osErrorParameter',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac24adca6a5d072c9f01c32178ba0d109',1,'cmsis_os.h']]], + ['oserrorpriority',['osErrorPriority',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eab7dda0ef504817659334cbfd650ae56f',1,'cmsis_os.h']]], + ['oserrorresource',['osErrorResource',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea8fc5801e8b0482bdf22ad63a77f0155d',1,'cmsis_os.h']]], + ['oserrortimeoutresource',['osErrorTimeoutResource',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea314d24a49003f09459035db0dd7c9467',1,'cmsis_os.h']]], + ['oserrorvalue',['osErrorValue',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea4672c8a0c0f6bb1d7981da4602e8e9ee',1,'cmsis_os.h']]], + ['osevent',['osEvent',['../group__CMSIS__RTOS__Definitions.html#structosEvent',1,'']]], + ['osevent_2edef',['osEvent.def',['../group__CMSIS__RTOS__Definitions.html#unionosEvent_8def',1,'']]], + ['osevent_2evalue',['osEvent.value',['../group__CMSIS__RTOS__Definitions.html#unionosEvent_8value',1,'']]], + ['oseventmail',['osEventMail',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea15b12e42b42b53f35fb8a2724ad02926',1,'cmsis_os.h']]], + ['oseventmessage',['osEventMessage',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ead604f3673359dd4ac643b16dc5a2c342',1,'cmsis_os.h']]], + ['oseventsignal',['osEventSignal',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5df7e9643aa8a2f5f3a6f6ec59758518',1,'cmsis_os.h']]], + ['oseventtimeout',['osEventTimeout',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea78f477732375c0e1fca814e369618177',1,'cmsis_os.h']]], + ['osfeature_5fmailq',['osFeature_MailQ',['../group__CMSIS__RTOS__Mail.html#gaceb2e0071ce160d153047f2eac1aca8e',1,'cmsis_os.h']]], + ['osfeature_5fmainthread',['osFeature_MainThread',['../group__CMSIS__RTOS__KernelCtrl.html#ga22f7d235bc9f783933bd5a981fd79696',1,'cmsis_os.h']]], + ['osfeature_5fmessageq',['osFeature_MessageQ',['../group__CMSIS__RTOS__Message.html#ga479a6561f859e3d4818e25708593d203',1,'cmsis_os.h']]], + ['osfeature_5fpool',['osFeature_Pool',['../group__CMSIS__RTOS__PoolMgmt.html#gadd84b683001de327894851b428587caa',1,'cmsis_os.h']]], + ['osfeature_5fsemaphore',['osFeature_Semaphore',['../group__CMSIS__RTOS__SemaphoreMgmt.html#ga7da4c7bfb340779c9fc7b321f5ab3e3a',1,'cmsis_os.h']]], + ['osfeature_5fsignals',['osFeature_Signals',['../group__CMSIS__RTOS__SignalMgmt.html#ga01edde265710d883b6e237d34a6ef4a6',1,'cmsis_os.h']]], + ['osfeature_5fsystick',['osFeature_SysTick',['../group__CMSIS__RTOS__KernelCtrl.html#gae554ec16c23c5b7d65affade2a351891',1,'cmsis_os.h']]], + ['osfeature_5fwait',['osFeature_Wait',['../group__CMSIS__RTOS__Wait.html#ga6c97d38879ae86491628f6e647639bad',1,'cmsis_os.h']]], + ['oskernelinitialize',['osKernelInitialize',['../group__CMSIS__RTOS__KernelCtrl.html#ga53d078a801022e202e8115c083ece68e',1,'cmsis_os.h']]], + ['oskernelrunning',['osKernelRunning',['../group__CMSIS__RTOS__KernelCtrl.html#ga3b571de44cd3094c643247a7397f86b5',1,'cmsis_os.h']]], + ['oskernelstart',['osKernelStart',['../group__CMSIS__RTOS__KernelCtrl.html#gaab668ffd2ea76bb0a77ab0ab385eaef2',1,'cmsis_os.h']]], + ['oskernelsystemid',['osKernelSystemId',['../group__CMSIS__RTOS__KernelCtrl.html#ga47cf03658f01cdffca688e9096b58289',1,'cmsis_os.h']]], + ['oskernelsystick',['osKernelSysTick',['../group__CMSIS__RTOS__KernelCtrl.html#gad0262e4688e95d1e9038afd9bcc16001',1,'cmsis_os.h']]], + ['oskernelsystickfrequency',['osKernelSysTickFrequency',['../group__CMSIS__RTOS__KernelCtrl.html#ga9e0954d52722673e2031233a2ab99960',1,'cmsis_os.h']]], + ['oskernelsystickmicrosec',['osKernelSysTickMicroSec',['../group__CMSIS__RTOS__KernelCtrl.html#gae12c190af42d7310d8006d64f4ed5a88',1,'cmsis_os.h']]], + ['osmailalloc',['osMailAlloc',['../group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194',1,'cmsis_os.h']]], + ['osmailcalloc',['osMailCAlloc',['../group__CMSIS__RTOS__Mail.html#ga8fde74f6fe5b9e88f75cc5eb8f2124fd',1,'cmsis_os.h']]], + ['osmailcreate',['osMailCreate',['../group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174',1,'cmsis_os.h']]], + ['osmailfree',['osMailFree',['../group__CMSIS__RTOS__Mail.html#ga27c1060cf21393f96b4fd1ed1c0167cc',1,'cmsis_os.h']]], + ['osmailget',['osMailGet',['../group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd',1,'cmsis_os.h']]], + ['osmailput',['osMailPut',['../group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02',1,'cmsis_os.h']]], + ['osmailq',['osMailQ',['../group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2',1,'cmsis_os.h']]], + ['osmailqdef',['osMailQDef',['../group__CMSIS__RTOS__Mail.html#ga58d712b16c0c6668059f509386d1e55b',1,'cmsis_os.h']]], + ['osmailqdef_5ft',['osMailQDef_t',['../cmsis__os_8h.html#structosMailQDef__t',1,'']]], + ['osmailqid',['osMailQId',['../cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5',1,'cmsis_os.h']]], + ['osmessagecreate',['osMessageCreate',['../group__CMSIS__RTOS__Message.html#gaf3b9345cf426304d46565152bc26fb78',1,'cmsis_os.h']]], + ['osmessageget',['osMessageGet',['../group__CMSIS__RTOS__Message.html#ga6c6892b8f2296cca6becd57ca2d7e1ae',1,'cmsis_os.h']]], + ['osmessageput',['osMessagePut',['../group__CMSIS__RTOS__Message.html#gac0dcf462fc92de8ffaba6cc004514a6d',1,'cmsis_os.h']]], + ['osmessageq',['osMessageQ',['../group__CMSIS__RTOS__Message.html#ga2d446a0b4bb90bf05d6f92eedeaabc97',1,'cmsis_os.h']]], + ['osmessageqdef',['osMessageQDef',['../group__CMSIS__RTOS__Message.html#gac9a6a6276c12609793e7701afcc82326',1,'cmsis_os.h']]], + ['osmessageqdef_5ft',['osMessageQDef_t',['../cmsis__os_8h.html#structosMessageQDef__t',1,'']]], + ['osmessageqid',['osMessageQId',['../cmsis__os_8h.html#ad9ec70c32c6c521970636b521e12d17f',1,'cmsis_os.h']]], + ['osmutex',['osMutex',['../group__CMSIS__RTOS__MutexMgmt.html#ga1122a86faa64b4a0880c76cf68d0c934',1,'cmsis_os.h']]], + ['osmutexcreate',['osMutexCreate',['../group__CMSIS__RTOS__MutexMgmt.html#ga5c9de56e717016e39e788064e9a291cc',1,'cmsis_os.h']]], + ['osmutexdef',['osMutexDef',['../group__CMSIS__RTOS__MutexMgmt.html#ga9b522438489d7c402c95332b58bc94f3',1,'cmsis_os.h']]], + ['osmutexdef_5ft',['osMutexDef_t',['../cmsis__os_8h.html#structosMutexDef__t',1,'']]], + ['osmutexdelete',['osMutexDelete',['../group__CMSIS__RTOS__MutexMgmt.html#gac27e24135185d51d18f3dabc20910219',1,'cmsis_os.h']]], + ['osmutexid',['osMutexId',['../cmsis__os_8h.html#a3263c1ad9fd79b84f908d65e8da44ac2',1,'cmsis_os.h']]], + ['osmutexrelease',['osMutexRelease',['../group__CMSIS__RTOS__MutexMgmt.html#ga006e4744d741e8e132c3d5bbc295afe1',1,'cmsis_os.h']]], + ['osmutexwait',['osMutexWait',['../group__CMSIS__RTOS__MutexMgmt.html#ga5e1752b73f573ee015dbd9ef1edaba13',1,'cmsis_os.h']]], + ['osok',['osOK',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea9e1c9e2550bb4de8969a935acffc968f',1,'cmsis_os.h']]], + ['ospool',['osPool',['../group__CMSIS__RTOS__PoolMgmt.html#ga5f0b204a82327533d420210125c90697',1,'cmsis_os.h']]], + ['ospoolalloc',['osPoolAlloc',['../group__CMSIS__RTOS__PoolMgmt.html#gaa0b2994f1a866c19e0d11e6e0d44f543',1,'cmsis_os.h']]], + ['ospoolcalloc',['osPoolCAlloc',['../group__CMSIS__RTOS__PoolMgmt.html#ga9f129fcad4730fbd1048ad4fa262f36a',1,'cmsis_os.h']]], + ['ospoolcreate',['osPoolCreate',['../group__CMSIS__RTOS__PoolMgmt.html#ga34af5c4f4ab38f4138ea7f1f9ece3a1a',1,'cmsis_os.h']]], + ['ospooldef',['osPoolDef',['../group__CMSIS__RTOS__PoolMgmt.html#ga87b471d4fe2d5dbd0040708edd52771b',1,'cmsis_os.h']]], + ['ospooldef_5ft',['osPoolDef_t',['../cmsis__os_8h.html#structosPoolDef__t',1,'']]], + ['ospoolfree',['osPoolFree',['../group__CMSIS__RTOS__PoolMgmt.html#ga4a861e9c469c9d0daf5721bf174f8e54',1,'cmsis_os.h']]], + ['ospoolid',['osPoolId',['../cmsis__os_8h.html#a08d2e20fd9bbd96220fe068d420f3686',1,'cmsis_os.h']]], + ['ospriority',['osPriority',['../group__CMSIS__RTOS__ThreadMgmt.html#ga7f2b42f1983b9107775ec2a1c69a849a',1,'cmsis_os.h']]], + ['ospriorityabovenormal',['osPriorityAboveNormal',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa17b36cd9cd38652c2bc6d4803990674b',1,'cmsis_os.h']]], + ['osprioritybelownormal',['osPriorityBelowNormal',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa193b650117c209b4a203954542bcc3e6',1,'cmsis_os.h']]], + ['ospriorityerror',['osPriorityError',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aae35f5e2f9c64ad346822521b643bdea4',1,'cmsis_os.h']]], + ['ospriorityhigh',['osPriorityHigh',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa914433934143a9ba767e59577c56e6c2',1,'cmsis_os.h']]], + ['ospriorityidle',['osPriorityIdle',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa549e79a43ff4f8b2b31afb613f5caa81',1,'cmsis_os.h']]], + ['osprioritylow',['osPriorityLow',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa61cb822239ac8f66dfbdc7291598a3d4',1,'cmsis_os.h']]], + ['osprioritynormal',['osPriorityNormal',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa45a2895ad30c79fb97de18cac7cc19f1',1,'cmsis_os.h']]], + ['ospriorityrealtime',['osPriorityRealtime',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa1485dec3702434a1ec3cb74c7a17a4af',1,'cmsis_os.h']]], + ['ossemaphore',['osSemaphore',['../group__CMSIS__RTOS__SemaphoreMgmt.html#ga03761ee8d2c3cd4544e18364ab301dac',1,'cmsis_os.h']]], + ['ossemaphorecreate',['osSemaphoreCreate',['../group__CMSIS__RTOS__SemaphoreMgmt.html#ga97381e8e55cd47cec390bf57c96d6edb',1,'cmsis_os.h']]], + ['ossemaphoredef',['osSemaphoreDef',['../group__CMSIS__RTOS__SemaphoreMgmt.html#ga9e66fe361749071e5ab87826c43c2f1b',1,'cmsis_os.h']]], + ['ossemaphoredef_5ft',['osSemaphoreDef_t',['../cmsis__os_8h.html#structosSemaphoreDef__t',1,'']]], + ['ossemaphoredelete',['osSemaphoreDelete',['../group__CMSIS__RTOS__SemaphoreMgmt.html#gabae2801ac2c096f6e8c69a264908f595',1,'cmsis_os.h']]], + ['ossemaphoreid',['osSemaphoreId',['../cmsis__os_8h.html#aa8968896c84094aa973683c84fa06f84',1,'cmsis_os.h']]], + ['ossemaphorerelease',['osSemaphoreRelease',['../group__CMSIS__RTOS__SemaphoreMgmt.html#gab108914997c49e14d8ff1ae0d1988ca0',1,'cmsis_os.h']]], + ['ossemaphorewait',['osSemaphoreWait',['../group__CMSIS__RTOS__SemaphoreMgmt.html#gacc15b0fc8ce1167fe43da33042e62098',1,'cmsis_os.h']]], + ['ossignalclear',['osSignalClear',['../group__CMSIS__RTOS__SignalMgmt.html#ga87283a6ebc31ce9ed42baf3ea7e4eab6',1,'cmsis_os.h']]], + ['ossignalset',['osSignalSet',['../group__CMSIS__RTOS__SignalMgmt.html#ga3de2730654589d6c3559c4b9e2825553',1,'cmsis_os.h']]], + ['ossignalwait',['osSignalWait',['../group__CMSIS__RTOS__SignalMgmt.html#ga38860acda96df47da6923348d96fc4c9',1,'cmsis_os.h']]], + ['osstatus',['osStatus',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e',1,'osStatus(): cmsis_os.txt'],['../cmsis__os_8h.html#ae2e091fefc4c767117727bd5aba4d99e',1,'osStatus(): cmsis_os.h']]], + ['osthread',['osThread',['../group__CMSIS__RTOS__ThreadMgmt.html#gaf0c7c6b5e09f8be198312144b5c9e453',1,'cmsis_os.h']]], + ['osthreadcreate',['osThreadCreate',['../group__CMSIS__RTOS__ThreadMgmt.html#gac59b5713cb083702dce759c73fd90dff',1,'cmsis_os.h']]], + ['osthreaddef',['osThreadDef',['../group__CMSIS__RTOS__ThreadMgmt.html#gaee93d929beb350f16e5cc7fa602e229f',1,'cmsis_os.h']]], + ['osthreaddef_5ft',['osThreadDef_t',['../cmsis__os_8h.html#structosThreadDef__t',1,'']]], + ['osthreadgetid',['osThreadGetId',['../group__CMSIS__RTOS__ThreadMgmt.html#gab1df2a28925862ef8f9cf4e1c995c5a7',1,'cmsis_os.h']]], + ['osthreadgetpriority',['osThreadGetPriority',['../group__CMSIS__RTOS__ThreadMgmt.html#ga4299d838978bc2aae5e4350754e6a4e9',1,'cmsis_os.h']]], + ['osthreadid',['osThreadId',['../cmsis__os_8h.html#adfeb153a84a81309e2d958268197617f',1,'cmsis_os.h']]], + ['osthreadsetpriority',['osThreadSetPriority',['../group__CMSIS__RTOS__ThreadMgmt.html#ga0dfb90ccf1f6e4b54b9251b12d1cbc8b',1,'cmsis_os.h']]], + ['osthreadterminate',['osThreadTerminate',['../group__CMSIS__RTOS__ThreadMgmt.html#gaea135bb90eb853eff39e0800b91bbeab',1,'cmsis_os.h']]], + ['osthreadyield',['osThreadYield',['../group__CMSIS__RTOS__ThreadMgmt.html#gaf13a667493c5d629a90c13e113b99233',1,'cmsis_os.h']]], + ['ostimer',['osTimer',['../group__CMSIS__RTOS__TimerMgmt.html#ga1b8d670eaf964b2910fa06885e650678',1,'cmsis_os.h']]], + ['ostimercreate',['osTimerCreate',['../group__CMSIS__RTOS__TimerMgmt.html#gaedd312bfdca04e0b8162b666e09a1ae6',1,'cmsis_os.h']]], + ['ostimerdef',['osTimerDef',['../group__CMSIS__RTOS__TimerMgmt.html#ga1c720627e08d1cc1afcad44e799ed492',1,'cmsis_os.h']]], + ['ostimerdef_5ft',['osTimerDef_t',['../cmsis__os_8h.html#structosTimerDef__t',1,'']]], + ['ostimerdelete',['osTimerDelete',['../group__CMSIS__RTOS__TimerMgmt.html#ga746b8043d906849bd65e3900fcb483cf',1,'cmsis_os.h']]], + ['ostimerid',['osTimerId',['../cmsis__os_8h.html#ab8530dd4273f1f5382187732e14fcaa7',1,'cmsis_os.h']]], + ['ostimeronce',['osTimerOnce',['../group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ad21712f8df5f97069c82dc9eec37b951',1,'cmsis_os.h']]], + ['ostimerperiodic',['osTimerPeriodic',['../group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ab9c91f9699162edb09bb7c90c11c8788',1,'cmsis_os.h']]], + ['ostimerstart',['osTimerStart',['../group__CMSIS__RTOS__TimerMgmt.html#ga27a797a401b068e2644d1125f22a07ca',1,'cmsis_os.h']]], + ['ostimerstop',['osTimerStop',['../group__CMSIS__RTOS__TimerMgmt.html#ga58f36b121a812936435cacc6e1e0e091',1,'cmsis_os.h']]], + ['oswait',['osWait',['../group__CMSIS__RTOS__Wait.html#ga8470c8aaedfde524a44e22e5b2328285',1,'cmsis_os.h']]], + ['oswaitforever',['osWaitForever',['../cmsis__os_8h.html#a9eb9a7a797a42e4b55eb171ecc609ddb',1,'cmsis_os.h']]] +]; diff --git a/docs/RTOS/html/search/all_9.html b/docs/RTOS/html/search/all_9.html new file mode 100644 index 0000000..cd46d44 --- /dev/null +++ b/docs/RTOS/html/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_9.js b/docs/RTOS/html/search/all_9.js new file mode 100644 index 0000000..4a6f1b2 --- /dev/null +++ b/docs/RTOS/html/search/all_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['pool',['pool',['../cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c',1,'osPoolDef_t::pool()'],['../cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c',1,'osMessageQDef_t::pool()'],['../cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c',1,'osMailQDef_t::pool()']]], + ['pool_5fsz',['pool_sz',['../cmsis__os_8h.html#ac112e786b2a234e0e45cb5bdbee53763',1,'osPoolDef_t']]], + ['pthread',['pthread',['../cmsis__os_8h.html#ad3c9624ee214329fb34e71f544a6933e',1,'osThreadDef_t']]], + ['ptimer',['ptimer',['../cmsis__os_8h.html#a15773df83aba93f8e61f3737af5fae47',1,'osTimerDef_t']]] +]; diff --git a/docs/RTOS/html/search/all_a.html b/docs/RTOS/html/search/all_a.html new file mode 100644 index 0000000..eab6553 --- /dev/null +++ b/docs/RTOS/html/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_a.js b/docs/RTOS/html/search/all_a.js new file mode 100644 index 0000000..72dd5cd --- /dev/null +++ b/docs/RTOS/html/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['queue_5fsz',['queue_sz',['../cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0',1,'osMessageQDef_t::queue_sz()'],['../cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0',1,'osMailQDef_t::queue_sz()']]] +]; diff --git a/docs/RTOS/html/search/all_b.html b/docs/RTOS/html/search/all_b.html new file mode 100644 index 0000000..a2c161e --- /dev/null +++ b/docs/RTOS/html/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_b.js b/docs/RTOS/html/search/all_b.js new file mode 100644 index 0000000..3417bef --- /dev/null +++ b/docs/RTOS/html/search/all_b.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['rtx_20tutorial',['RTX Tutorial',['../exampleRTX_Tutorial.html',1,'rtxImplementation']]], + ['revision_20history',['Revision History',['../rtos_revisionHistory.html',1,'index']]], + ['rtos_20validation',['RTOS Validation',['../rtosValidation.html',1,'index']]], + ['rtx_5fconf_5fcm_2ec',['RTX_Conf_CM.c',['../RTX__Conf__CM_8c.html',1,'']]], + ['rtx_20specific_20functions',['RTX Specific Functions',['../group__RTX__Global__Functions.html',1,'']]], + ['rtx_20implementation',['RTX Implementation',['../rtxImplementation.html',1,'index']]], + ['rtx_20kernel_20tick_20timer_20configuration',['RTX Kernel Tick Timer Configuration',['../timerTick.html',1,'configure']]] +]; diff --git a/docs/RTOS/html/search/all_c.html b/docs/RTOS/html/search/all_c.html new file mode 100644 index 0000000..bdd3ee2 --- /dev/null +++ b/docs/RTOS/html/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_c.js b/docs/RTOS/html/search/all_c.js new file mode 100644 index 0000000..00dc3fe --- /dev/null +++ b/docs/RTOS/html/search/all_c.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['semaphores',['Semaphores',['../group__CMSIS__RTOS__SemaphoreMgmt.html',1,'']]], + ['signal_20events',['Signal Events',['../group__CMSIS__RTOS__SignalMgmt.html',1,'']]], + ['status_20and_20error_20codes',['Status and Error Codes',['../group__CMSIS__RTOS__Status.html',1,'']]], + ['stacksize',['stacksize',['../cmsis__os_8h.html#a950b7f81ad4711959517296e63bc79d1',1,'osThreadDef_t']]], + ['status',['status',['../group__CMSIS__RTOS__Definitions.html#ad477a289f1f03ac45407b64268d707d3',1,'osEvent']]], + ['svc_20functions',['SVC Functions',['../svcFunctions.html',1,'configure']]], + ['svcthreadgetid',['svcThreadGetId',['../RTX__Conf__CM_8c.html#a395cca131b7746fc43c104a3485b77f7',1,'RTX_Conf_CM.c']]], + ['system_20configuration',['System Configuration',['../systemConfig.html',1,'configure']]] +]; diff --git a/docs/RTOS/html/search/all_d.html b/docs/RTOS/html/search/all_d.html new file mode 100644 index 0000000..d510933 --- /dev/null +++ b/docs/RTOS/html/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_d.js b/docs/RTOS/html/search/all_d.js new file mode 100644 index 0000000..9034603 --- /dev/null +++ b/docs/RTOS/html/search/all_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['thread_20management',['Thread Management',['../group__CMSIS__RTOS__ThreadMgmt.html',1,'']]], + ['timer_20management',['Timer Management',['../group__CMSIS__RTOS__TimerMgmt.html',1,'']]], + ['technical_20data',['Technical Data',['../technicalData.html',1,'rtxImplementation']]], + ['theory_20of_20operation',['Theory of Operation',['../theory.html',1,'rtxImplementation']]], + ['thread_20configuration',['Thread Configuration',['../threadConfig.html',1,'configure']]], + ['tpriority',['tpriority',['../cmsis__os_8h.html#a15da8f23c6fe684b70a73646ada685e7',1,'osThreadDef_t']]] +]; diff --git a/docs/RTOS/html/search/all_e.html b/docs/RTOS/html/search/all_e.html new file mode 100644 index 0000000..3cda017 --- /dev/null +++ b/docs/RTOS/html/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_e.js b/docs/RTOS/html/search/all_e.js new file mode 100644 index 0000000..ebbd626 --- /dev/null +++ b/docs/RTOS/html/search/all_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['using_20a_20cmsis_2drtos_20implementation',['Using a CMSIS-RTOS Implementation',['../usingOS.html',1,'index']]] +]; diff --git a/docs/RTOS/html/search/all_f.html b/docs/RTOS/html/search/all_f.html new file mode 100644 index 0000000..7419b02 --- /dev/null +++ b/docs/RTOS/html/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/all_f.js b/docs/RTOS/html/search/all_f.js new file mode 100644 index 0000000..8f5695b --- /dev/null +++ b/docs/RTOS/html/search/all_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['value',['../group__CMSIS__RTOS__Definitions.html#a0b9f8fd3645f01d8cb09cae82add2d7f',1,'osEvent']]] +]; diff --git a/docs/RTOS/html/search/classes_0.html b/docs/RTOS/html/search/classes_0.html new file mode 100644 index 0000000..fabdc03 --- /dev/null +++ b/docs/RTOS/html/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/classes_0.js b/docs/RTOS/html/search/classes_0.js new file mode 100644 index 0000000..94c404e --- /dev/null +++ b/docs/RTOS/html/search/classes_0.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['os_5fmailq',['os_mailQ',['../group__CMSIS__RTOS__Definitions.html#structos__mailQ',1,'']]], + ['osevent',['osEvent',['../group__CMSIS__RTOS__Definitions.html#structosEvent',1,'']]], + ['osevent_2edef',['osEvent.def',['../group__CMSIS__RTOS__Definitions.html#unionosEvent_8def',1,'']]], + ['osevent_2evalue',['osEvent.value',['../group__CMSIS__RTOS__Definitions.html#unionosEvent_8value',1,'']]], + ['osmailqdef_5ft',['osMailQDef_t',['../cmsis__os_8h.html#structosMailQDef__t',1,'']]], + ['osmessageqdef_5ft',['osMessageQDef_t',['../cmsis__os_8h.html#structosMessageQDef__t',1,'']]], + ['osmutexdef_5ft',['osMutexDef_t',['../cmsis__os_8h.html#structosMutexDef__t',1,'']]], + ['ospooldef_5ft',['osPoolDef_t',['../cmsis__os_8h.html#structosPoolDef__t',1,'']]], + ['ossemaphoredef_5ft',['osSemaphoreDef_t',['../cmsis__os_8h.html#structosSemaphoreDef__t',1,'']]], + ['osthreaddef_5ft',['osThreadDef_t',['../cmsis__os_8h.html#structosThreadDef__t',1,'']]], + ['ostimerdef_5ft',['osTimerDef_t',['../cmsis__os_8h.html#structosTimerDef__t',1,'']]] +]; diff --git a/docs/RTOS/html/search/close.png b/docs/RTOS/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/docs/RTOS/html/search/close.png differ diff --git a/docs/RTOS/html/search/defines_0.html b/docs/RTOS/html/search/defines_0.html new file mode 100644 index 0000000..c2f0b46 --- /dev/null +++ b/docs/RTOS/html/search/defines_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/defines_0.js b/docs/RTOS/html/search/defines_0.js new file mode 100644 index 0000000..37c3122 --- /dev/null +++ b/docs/RTOS/html/search/defines_0.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['os_5fclock',['OS_CLOCK',['../RTX__Conf__CM_8c.html#adff23afdf544a322a38314870f8848b9',1,'RTX_Conf_CM.c']]], + ['os_5ferror_5ffifo_5fovf',['OS_ERROR_FIFO_OVF',['../RTX__Conf__CM_8c.html#a075d54df14c85a6afe32b7f5c99c9c29',1,'RTX_Conf_CM.c']]], + ['os_5ferror_5fmbx_5fovf',['OS_ERROR_MBX_OVF',['../RTX__Conf__CM_8c.html#ab715d7d66c341c067ef0a97b55db8a10',1,'RTX_Conf_CM.c']]], + ['os_5ferror_5fstack_5fovf',['OS_ERROR_STACK_OVF',['../RTX__Conf__CM_8c.html#abf8311a7a239ec56c6d725f926ba766d',1,'RTX_Conf_CM.c']]], + ['os_5ferror_5ftimer_5fovf',['OS_ERROR_TIMER_OVF',['../RTX__Conf__CM_8c.html#a79d7e388d951f11bd0dabd13f722cea8',1,'RTX_Conf_CM.c']]], + ['os_5ffifosz',['OS_FIFOSZ',['../RTX__Conf__CM_8c.html#a93c8e36d441750016f9f72e102f68d66',1,'RTX_Conf_CM.c']]], + ['os_5fmainstksize',['OS_MAINSTKSIZE',['../RTX__Conf__CM_8c.html#a95362a96f44d4314f148ae24edd52f7c',1,'RTX_Conf_CM.c']]], + ['os_5fmutexcnt',['OS_MUTEXCNT',['../RTX__Conf__CM_8c.html#ad11cf133eea28b601f9a63cd9af9b786',1,'RTX_Conf_CM.c']]], + ['os_5fprivcnt',['OS_PRIVCNT',['../RTX__Conf__CM_8c.html#a7cfcbf2c4f9d0a63424a2a48592955b1',1,'RTX_Conf_CM.c']]], + ['os_5fprivstksize',['OS_PRIVSTKSIZE',['../RTX__Conf__CM_8c.html#a6e0d30986e4ae0df44f449a4b3b0fbec',1,'RTX_Conf_CM.c']]], + ['os_5frobin',['OS_ROBIN',['../RTX__Conf__CM_8c.html#ae34f3058383d9fa9280bbf595618ab0a',1,'RTX_Conf_CM.c']]], + ['os_5frobintout',['OS_ROBINTOUT',['../RTX__Conf__CM_8c.html#ad89fdd7232cfba74d400080b6bcc0012',1,'RTX_Conf_CM.c']]], + ['os_5frunpriv',['OS_RUNPRIV',['../RTX__Conf__CM_8c.html#a786924d58be54e943a7e73458cebc51b',1,'RTX_Conf_CM.c']]], + ['os_5fstkcheck',['OS_STKCHECK',['../RTX__Conf__CM_8c.html#a6ef9e00396f881f0fa9ac877150e5962',1,'RTX_Conf_CM.c']]], + ['os_5fstkinit',['OS_STKINIT',['../RTX__Conf__CM_8c.html#ac820623da739e4219ee86f15bdcd9752',1,'RTX_Conf_CM.c']]], + ['os_5fstksize',['OS_STKSIZE',['../RTX__Conf__CM_8c.html#a16495c133349f3e7c27ac933857c1a8c',1,'RTX_Conf_CM.c']]], + ['os_5ftaskcnt',['OS_TASKCNT',['../RTX__Conf__CM_8c.html#a309353d912327b7f4a2300711ee1b349',1,'RTX_Conf_CM.c']]], + ['os_5ftick',['OS_TICK',['../RTX__Conf__CM_8c.html#ab6b10bd6d60e95ab28c775757f6bfbcc',1,'RTX_Conf_CM.c']]], + ['os_5ftimercbqs',['OS_TIMERCBQS',['../RTX__Conf__CM_8c.html#a29701cff84a42494279367ad018f252d',1,'RTX_Conf_CM.c']]], + ['os_5ftimerprio',['OS_TIMERPRIO',['../RTX__Conf__CM_8c.html#a90af874f1df4dfb0f8821cc2d860dae6',1,'RTX_Conf_CM.c']]], + ['os_5ftimers',['OS_TIMERS',['../RTX__Conf__CM_8c.html#a23b0f1095632e58b5ac0d8f7dcfdfded',1,'RTX_Conf_CM.c']]], + ['os_5ftimerstksz',['OS_TIMERSTKSZ',['../RTX__Conf__CM_8c.html#a76d1b01799981a753fc528e600015627',1,'RTX_Conf_CM.c']]], + ['os_5ftrv',['OS_TRV',['../RTX__Conf__CM_8c.html#a9d55a070ddb219165bd4287f08318d51',1,'RTX_Conf_CM.c']]], + ['oswaitforever',['osWaitForever',['../cmsis__os_8h.html#a9eb9a7a797a42e4b55eb171ecc609ddb',1,'cmsis_os.h']]] +]; diff --git a/docs/RTOS/html/search/enums_0.html b/docs/RTOS/html/search/enums_0.html new file mode 100644 index 0000000..b4cbe1e --- /dev/null +++ b/docs/RTOS/html/search/enums_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/enums_0.js b/docs/RTOS/html/search/enums_0.js new file mode 100644 index 0000000..10a49c3 --- /dev/null +++ b/docs/RTOS/html/search/enums_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['os_5ftimer_5ftype',['os_timer_type',['../group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9',1,'os_timer_type(): cmsis_os.txt'],['../cmsis__os_8h.html#adac860eb9e1b4b0619271e6595ed83d9',1,'os_timer_type(): cmsis_os.h']]], + ['ospriority',['osPriority',['../group__CMSIS__RTOS__ThreadMgmt.html#ga7f2b42f1983b9107775ec2a1c69a849a',1,'cmsis_os.h']]], + ['osstatus',['osStatus',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e',1,'osStatus(): cmsis_os.txt'],['../cmsis__os_8h.html#ae2e091fefc4c767117727bd5aba4d99e',1,'osStatus(): cmsis_os.h']]] +]; diff --git a/docs/RTOS/html/search/enumvalues_0.html b/docs/RTOS/html/search/enumvalues_0.html new file mode 100644 index 0000000..3e00fcf --- /dev/null +++ b/docs/RTOS/html/search/enumvalues_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/enumvalues_0.js b/docs/RTOS/html/search/enumvalues_0.js new file mode 100644 index 0000000..242059a --- /dev/null +++ b/docs/RTOS/html/search/enumvalues_0.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['os_5fstatus_5freserved',['os_status_reserved',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac7a77f5fe18a15a357790c36a4aca1b1',1,'cmsis_os.h']]], + ['oserrorisr',['osErrorISR',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea21635bdc492d3094fe83027fa4a30e2f',1,'cmsis_os.h']]], + ['oserrorisrrecursive',['osErrorISRRecursive',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf6552310a817452aedfcd453f2805d65',1,'cmsis_os.h']]], + ['oserrornomemory',['osErrorNoMemory',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eaf1fac0240218e51eb30a13da2f8aae81',1,'cmsis_os.h']]], + ['oserroros',['osErrorOS',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5fde24ff588ec5ab9cb8314bade26fbc',1,'cmsis_os.h']]], + ['oserrorparameter',['osErrorParameter',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eac24adca6a5d072c9f01c32178ba0d109',1,'cmsis_os.h']]], + ['oserrorpriority',['osErrorPriority',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99eab7dda0ef504817659334cbfd650ae56f',1,'cmsis_os.h']]], + ['oserrorresource',['osErrorResource',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea8fc5801e8b0482bdf22ad63a77f0155d',1,'cmsis_os.h']]], + ['oserrortimeoutresource',['osErrorTimeoutResource',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea314d24a49003f09459035db0dd7c9467',1,'cmsis_os.h']]], + ['oserrorvalue',['osErrorValue',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea4672c8a0c0f6bb1d7981da4602e8e9ee',1,'cmsis_os.h']]], + ['oseventmail',['osEventMail',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea15b12e42b42b53f35fb8a2724ad02926',1,'cmsis_os.h']]], + ['oseventmessage',['osEventMessage',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ead604f3673359dd4ac643b16dc5a2c342',1,'cmsis_os.h']]], + ['oseventsignal',['osEventSignal',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea5df7e9643aa8a2f5f3a6f6ec59758518',1,'cmsis_os.h']]], + ['oseventtimeout',['osEventTimeout',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea78f477732375c0e1fca814e369618177',1,'cmsis_os.h']]], + ['osok',['osOK',['../group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea9e1c9e2550bb4de8969a935acffc968f',1,'cmsis_os.h']]], + ['ospriorityabovenormal',['osPriorityAboveNormal',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa17b36cd9cd38652c2bc6d4803990674b',1,'cmsis_os.h']]], + ['osprioritybelownormal',['osPriorityBelowNormal',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa193b650117c209b4a203954542bcc3e6',1,'cmsis_os.h']]], + ['ospriorityerror',['osPriorityError',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aae35f5e2f9c64ad346822521b643bdea4',1,'cmsis_os.h']]], + ['ospriorityhigh',['osPriorityHigh',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa914433934143a9ba767e59577c56e6c2',1,'cmsis_os.h']]], + ['ospriorityidle',['osPriorityIdle',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa549e79a43ff4f8b2b31afb613f5caa81',1,'cmsis_os.h']]], + ['osprioritylow',['osPriorityLow',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa61cb822239ac8f66dfbdc7291598a3d4',1,'cmsis_os.h']]], + ['osprioritynormal',['osPriorityNormal',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa45a2895ad30c79fb97de18cac7cc19f1',1,'cmsis_os.h']]], + ['ospriorityrealtime',['osPriorityRealtime',['../cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa1485dec3702434a1ec3cb74c7a17a4af',1,'cmsis_os.h']]], + ['ostimeronce',['osTimerOnce',['../group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ad21712f8df5f97069c82dc9eec37b951',1,'cmsis_os.h']]], + ['ostimerperiodic',['osTimerPeriodic',['../group__CMSIS__RTOS__TimerMgmt.html#gadac860eb9e1b4b0619271e6595ed83d9ab9c91f9699162edb09bb7c90c11c8788',1,'cmsis_os.h']]] +]; diff --git a/docs/RTOS/html/search/files_0.html b/docs/RTOS/html/search/files_0.html new file mode 100644 index 0000000..c7aa36c --- /dev/null +++ b/docs/RTOS/html/search/files_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/files_0.js b/docs/RTOS/html/search/files_0.js new file mode 100644 index 0000000..ebba2f1 --- /dev/null +++ b/docs/RTOS/html/search/files_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cmsis_5fos_2eh',['cmsis_os.h',['../cmsis__os_8h.html',1,'']]], + ['cmsis_5fos_2etxt',['cmsis_os.txt',['../cmsis__os_8txt.html',1,'']]], + ['cmsis_5fos_5frtx_5fextensions_2eh',['cmsis_os_rtx_extensions.h',['../cmsis__os__rtx__extensions_8h.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/files_1.html b/docs/RTOS/html/search/files_1.html new file mode 100644 index 0000000..eca1c80 --- /dev/null +++ b/docs/RTOS/html/search/files_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/files_1.js b/docs/RTOS/html/search/files_1.js new file mode 100644 index 0000000..3800696 --- /dev/null +++ b/docs/RTOS/html/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rtx_5fconf_5fcm_2ec',['RTX_Conf_CM.c',['../RTX__Conf__CM_8c.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/functions_0.html b/docs/RTOS/html/search/functions_0.html new file mode 100644 index 0000000..16a5a52 --- /dev/null +++ b/docs/RTOS/html/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/functions_0.js b/docs/RTOS/html/search/functions_0.js new file mode 100644 index 0000000..5a42bb5 --- /dev/null +++ b/docs/RTOS/html/search/functions_0.js @@ -0,0 +1,51 @@ +var searchData= +[ + ['os_5ferror',['os_error',['../group__RTX__Global__Functions.html#ga651ae76b3acf45f80bf0e0487b51d6e6',1,'os_error(uint32_t error_code): RTX_Conf_CM.c'],['../group__RTX__Global__Functions.html#ga651ae76b3acf45f80bf0e0487b51d6e6',1,'os_error(uint32_t error_code): RTX_Conf_CM.c']]], + ['os_5fidle_5fdemon',['os_idle_demon',['../group__RTX__Global__Functions.html#gafb4dc4d3dff8343a393726d2860282e4',1,'os_idle_demon(void): RTX_Conf_CM.c'],['../group__RTX__Global__Functions.html#gafb4dc4d3dff8343a393726d2860282e4',1,'os_idle_demon(void): RTX_Conf_CM.c']]], + ['os_5fresume',['os_resume',['../group__RTX__Global__Functions.html#ga1b85a217d43e6b971ffcf24f8aae1c33',1,'cmsis_os_rtx_extensions.h']]], + ['os_5fsuspend',['os_suspend',['../group__RTX__Global__Functions.html#ga3e9c57746ccbdfe90464ad50513c569e',1,'cmsis_os_rtx_extensions.h']]], + ['os_5ftick_5finit',['os_tick_init',['../group__RTX__Global__Functions.html#ga145e7eafdd042bb522020cbb3b469d9c',1,'RTX_Conf_CM.c']]], + ['os_5ftick_5firqack',['os_tick_irqack',['../group__RTX__Global__Functions.html#ga85dab8408f27236c7341a69feb6258c7',1,'RTX_Conf_CM.c']]], + ['os_5ftick_5fovf',['os_tick_ovf',['../group__RTX__Global__Functions.html#gad5deddec3fea0fb31798f571afc3c692',1,'RTX_Conf_CM.c']]], + ['os_5ftick_5fval',['os_tick_val',['../group__RTX__Global__Functions.html#ga567543bf38239a91f09751686c23017b',1,'RTX_Conf_CM.c']]], + ['osdelay',['osDelay',['../group__CMSIS__RTOS__Wait.html#ga02e19d5e723bfb06ba9324d625162255',1,'cmsis_os.h']]], + ['oskernelinitialize',['osKernelInitialize',['../group__CMSIS__RTOS__KernelCtrl.html#ga53d078a801022e202e8115c083ece68e',1,'cmsis_os.h']]], + ['oskernelrunning',['osKernelRunning',['../group__CMSIS__RTOS__KernelCtrl.html#ga3b571de44cd3094c643247a7397f86b5',1,'cmsis_os.h']]], + ['oskernelstart',['osKernelStart',['../group__CMSIS__RTOS__KernelCtrl.html#gaab668ffd2ea76bb0a77ab0ab385eaef2',1,'cmsis_os.h']]], + ['oskernelsystick',['osKernelSysTick',['../group__CMSIS__RTOS__KernelCtrl.html#gad0262e4688e95d1e9038afd9bcc16001',1,'cmsis_os.h']]], + ['osmailalloc',['osMailAlloc',['../group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194',1,'cmsis_os.h']]], + ['osmailcalloc',['osMailCAlloc',['../group__CMSIS__RTOS__Mail.html#ga8fde74f6fe5b9e88f75cc5eb8f2124fd',1,'cmsis_os.h']]], + ['osmailcreate',['osMailCreate',['../group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174',1,'cmsis_os.h']]], + ['osmailfree',['osMailFree',['../group__CMSIS__RTOS__Mail.html#ga27c1060cf21393f96b4fd1ed1c0167cc',1,'cmsis_os.h']]], + ['osmailget',['osMailGet',['../group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd',1,'cmsis_os.h']]], + ['osmailput',['osMailPut',['../group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02',1,'cmsis_os.h']]], + ['osmessagecreate',['osMessageCreate',['../group__CMSIS__RTOS__Message.html#gaf3b9345cf426304d46565152bc26fb78',1,'cmsis_os.h']]], + ['osmessageget',['osMessageGet',['../group__CMSIS__RTOS__Message.html#ga6c6892b8f2296cca6becd57ca2d7e1ae',1,'cmsis_os.h']]], + ['osmessageput',['osMessagePut',['../group__CMSIS__RTOS__Message.html#gac0dcf462fc92de8ffaba6cc004514a6d',1,'cmsis_os.h']]], + ['osmutexcreate',['osMutexCreate',['../group__CMSIS__RTOS__MutexMgmt.html#ga5c9de56e717016e39e788064e9a291cc',1,'cmsis_os.h']]], + ['osmutexdelete',['osMutexDelete',['../group__CMSIS__RTOS__MutexMgmt.html#gac27e24135185d51d18f3dabc20910219',1,'cmsis_os.h']]], + ['osmutexrelease',['osMutexRelease',['../group__CMSIS__RTOS__MutexMgmt.html#ga006e4744d741e8e132c3d5bbc295afe1',1,'cmsis_os.h']]], + ['osmutexwait',['osMutexWait',['../group__CMSIS__RTOS__MutexMgmt.html#ga5e1752b73f573ee015dbd9ef1edaba13',1,'cmsis_os.h']]], + ['ospoolalloc',['osPoolAlloc',['../group__CMSIS__RTOS__PoolMgmt.html#gaa0b2994f1a866c19e0d11e6e0d44f543',1,'cmsis_os.h']]], + ['ospoolcalloc',['osPoolCAlloc',['../group__CMSIS__RTOS__PoolMgmt.html#ga9f129fcad4730fbd1048ad4fa262f36a',1,'cmsis_os.h']]], + ['ospoolcreate',['osPoolCreate',['../group__CMSIS__RTOS__PoolMgmt.html#ga34af5c4f4ab38f4138ea7f1f9ece3a1a',1,'cmsis_os.h']]], + ['ospoolfree',['osPoolFree',['../group__CMSIS__RTOS__PoolMgmt.html#ga4a861e9c469c9d0daf5721bf174f8e54',1,'cmsis_os.h']]], + ['ossemaphorecreate',['osSemaphoreCreate',['../group__CMSIS__RTOS__SemaphoreMgmt.html#ga97381e8e55cd47cec390bf57c96d6edb',1,'cmsis_os.h']]], + ['ossemaphoredelete',['osSemaphoreDelete',['../group__CMSIS__RTOS__SemaphoreMgmt.html#gabae2801ac2c096f6e8c69a264908f595',1,'cmsis_os.h']]], + ['ossemaphorerelease',['osSemaphoreRelease',['../group__CMSIS__RTOS__SemaphoreMgmt.html#gab108914997c49e14d8ff1ae0d1988ca0',1,'cmsis_os.h']]], + ['ossemaphorewait',['osSemaphoreWait',['../group__CMSIS__RTOS__SemaphoreMgmt.html#gacc15b0fc8ce1167fe43da33042e62098',1,'cmsis_os.h']]], + ['ossignalclear',['osSignalClear',['../group__CMSIS__RTOS__SignalMgmt.html#ga87283a6ebc31ce9ed42baf3ea7e4eab6',1,'cmsis_os.h']]], + ['ossignalset',['osSignalSet',['../group__CMSIS__RTOS__SignalMgmt.html#ga3de2730654589d6c3559c4b9e2825553',1,'cmsis_os.h']]], + ['ossignalwait',['osSignalWait',['../group__CMSIS__RTOS__SignalMgmt.html#ga38860acda96df47da6923348d96fc4c9',1,'cmsis_os.h']]], + ['osthreadcreate',['osThreadCreate',['../group__CMSIS__RTOS__ThreadMgmt.html#gac59b5713cb083702dce759c73fd90dff',1,'cmsis_os.h']]], + ['osthreadgetid',['osThreadGetId',['../group__CMSIS__RTOS__ThreadMgmt.html#gab1df2a28925862ef8f9cf4e1c995c5a7',1,'cmsis_os.h']]], + ['osthreadgetpriority',['osThreadGetPriority',['../group__CMSIS__RTOS__ThreadMgmt.html#ga4299d838978bc2aae5e4350754e6a4e9',1,'cmsis_os.h']]], + ['osthreadsetpriority',['osThreadSetPriority',['../group__CMSIS__RTOS__ThreadMgmt.html#ga0dfb90ccf1f6e4b54b9251b12d1cbc8b',1,'cmsis_os.h']]], + ['osthreadterminate',['osThreadTerminate',['../group__CMSIS__RTOS__ThreadMgmt.html#gaea135bb90eb853eff39e0800b91bbeab',1,'cmsis_os.h']]], + ['osthreadyield',['osThreadYield',['../group__CMSIS__RTOS__ThreadMgmt.html#gaf13a667493c5d629a90c13e113b99233',1,'cmsis_os.h']]], + ['ostimercreate',['osTimerCreate',['../group__CMSIS__RTOS__TimerMgmt.html#gaedd312bfdca04e0b8162b666e09a1ae6',1,'cmsis_os.h']]], + ['ostimerdelete',['osTimerDelete',['../group__CMSIS__RTOS__TimerMgmt.html#ga746b8043d906849bd65e3900fcb483cf',1,'cmsis_os.h']]], + ['ostimerstart',['osTimerStart',['../group__CMSIS__RTOS__TimerMgmt.html#ga27a797a401b068e2644d1125f22a07ca',1,'cmsis_os.h']]], + ['ostimerstop',['osTimerStop',['../group__CMSIS__RTOS__TimerMgmt.html#ga58f36b121a812936435cacc6e1e0e091',1,'cmsis_os.h']]], + ['oswait',['osWait',['../group__CMSIS__RTOS__Wait.html#ga8470c8aaedfde524a44e22e5b2328285',1,'cmsis_os.h']]] +]; diff --git a/docs/RTOS/html/search/functions_1.html b/docs/RTOS/html/search/functions_1.html new file mode 100644 index 0000000..3b4eacf --- /dev/null +++ b/docs/RTOS/html/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/functions_1.js b/docs/RTOS/html/search/functions_1.js new file mode 100644 index 0000000..92f3757 --- /dev/null +++ b/docs/RTOS/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['svcthreadgetid',['svcThreadGetId',['../RTX__Conf__CM_8c.html#a395cca131b7746fc43c104a3485b77f7',1,'RTX_Conf_CM.c']]] +]; diff --git a/docs/RTOS/html/search/groups_0.html b/docs/RTOS/html/search/groups_0.html new file mode 100644 index 0000000..2090afa --- /dev/null +++ b/docs/RTOS/html/search/groups_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_0.js b/docs/RTOS/html/search/groups_0.js new file mode 100644 index 0000000..0ebfbe3 --- /dev/null +++ b/docs/RTOS/html/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cmsis_2drtos_20api',['CMSIS-RTOS API',['../group__CMSIS__RTOS.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/groups_1.html b/docs/RTOS/html/search/groups_1.html new file mode 100644 index 0000000..3ad8a3b --- /dev/null +++ b/docs/RTOS/html/search/groups_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_1.js b/docs/RTOS/html/search/groups_1.js new file mode 100644 index 0000000..b232e01 --- /dev/null +++ b/docs/RTOS/html/search/groups_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['generic_20data_20types_20and_20definitions',['Generic Data Types and Definitions',['../group__CMSIS__RTOS__Definitions.html',1,'']]], + ['generic_20wait_20functions',['Generic Wait Functions',['../group__CMSIS__RTOS__Wait.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/groups_2.html b/docs/RTOS/html/search/groups_2.html new file mode 100644 index 0000000..361832c --- /dev/null +++ b/docs/RTOS/html/search/groups_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_2.js b/docs/RTOS/html/search/groups_2.js new file mode 100644 index 0000000..528c93b --- /dev/null +++ b/docs/RTOS/html/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['inter_2dthread_20communication_20and_20resource_20sharing',['Inter-Thread Communication and Resource Sharing',['../group__CMSIS__RTOS__InterThread.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/groups_3.html b/docs/RTOS/html/search/groups_3.html new file mode 100644 index 0000000..f42200a --- /dev/null +++ b/docs/RTOS/html/search/groups_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_3.js b/docs/RTOS/html/search/groups_3.js new file mode 100644 index 0000000..1b6ceb1 --- /dev/null +++ b/docs/RTOS/html/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kernel_20information_20and_20control',['Kernel Information and Control',['../group__CMSIS__RTOS__KernelCtrl.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/groups_4.html b/docs/RTOS/html/search/groups_4.html new file mode 100644 index 0000000..b07fdf9 --- /dev/null +++ b/docs/RTOS/html/search/groups_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_4.js b/docs/RTOS/html/search/groups_4.js new file mode 100644 index 0000000..ed72916 --- /dev/null +++ b/docs/RTOS/html/search/groups_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['mail_20queue',['Mail Queue',['../group__CMSIS__RTOS__Mail.html',1,'']]], + ['message_20queue',['Message Queue',['../group__CMSIS__RTOS__Message.html',1,'']]], + ['mutexes',['Mutexes',['../group__CMSIS__RTOS__MutexMgmt.html',1,'']]], + ['memory_20pool',['Memory Pool',['../group__CMSIS__RTOS__PoolMgmt.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/groups_5.html b/docs/RTOS/html/search/groups_5.html new file mode 100644 index 0000000..35324c0 --- /dev/null +++ b/docs/RTOS/html/search/groups_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_5.js b/docs/RTOS/html/search/groups_5.js new file mode 100644 index 0000000..08671c1 --- /dev/null +++ b/docs/RTOS/html/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rtx_20specific_20functions',['RTX Specific Functions',['../group__RTX__Global__Functions.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/groups_6.html b/docs/RTOS/html/search/groups_6.html new file mode 100644 index 0000000..3231402 --- /dev/null +++ b/docs/RTOS/html/search/groups_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_6.js b/docs/RTOS/html/search/groups_6.js new file mode 100644 index 0000000..1be771f --- /dev/null +++ b/docs/RTOS/html/search/groups_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['semaphores',['Semaphores',['../group__CMSIS__RTOS__SemaphoreMgmt.html',1,'']]], + ['signal_20events',['Signal Events',['../group__CMSIS__RTOS__SignalMgmt.html',1,'']]], + ['status_20and_20error_20codes',['Status and Error Codes',['../group__CMSIS__RTOS__Status.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/groups_7.html b/docs/RTOS/html/search/groups_7.html new file mode 100644 index 0000000..27334b6 --- /dev/null +++ b/docs/RTOS/html/search/groups_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/groups_7.js b/docs/RTOS/html/search/groups_7.js new file mode 100644 index 0000000..ab2196c --- /dev/null +++ b/docs/RTOS/html/search/groups_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['thread_20management',['Thread Management',['../group__CMSIS__RTOS__ThreadMgmt.html',1,'']]], + ['timer_20management',['Timer Management',['../group__CMSIS__RTOS__TimerMgmt.html',1,'']]] +]; diff --git a/docs/RTOS/html/search/mag_sel.png b/docs/RTOS/html/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/docs/RTOS/html/search/mag_sel.png differ diff --git a/docs/RTOS/html/search/nomatches.html b/docs/RTOS/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/docs/RTOS/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/docs/RTOS/html/search/pages_0.html b/docs/RTOS/html/search/pages_0.html new file mode 100644 index 0000000..c51c834 --- /dev/null +++ b/docs/RTOS/html/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_0.js b/docs/RTOS/html/search/pages_0.js new file mode 100644 index 0000000..73791ef --- /dev/null +++ b/docs/RTOS/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['building_20the_20rtx_20library',['Building the RTX Library',['../creating_RTX_LIB.html',1,'rtxImplementation']]] +]; diff --git a/docs/RTOS/html/search/pages_1.html b/docs/RTOS/html/search/pages_1.html new file mode 100644 index 0000000..2a98fce --- /dev/null +++ b/docs/RTOS/html/search/pages_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_1.js b/docs/RTOS/html/search/pages_1.js new file mode 100644 index 0000000..28630a0 --- /dev/null +++ b/docs/RTOS/html/search/pages_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['configure_20rtx',['Configure RTX',['../configure.html',1,'rtxImplementation']]], + ['configuration_20for_20low_2dpower_20modes',['Configuration for Low-Power Modes',['../lowPower.html',1,'configure']]], + ['create_20an_20rtx_20project',['Create an RTX Project',['../using.html',1,'rtxImplementation']]] +]; diff --git a/docs/RTOS/html/search/pages_2.html b/docs/RTOS/html/search/pages_2.html new file mode 100644 index 0000000..0711a0b --- /dev/null +++ b/docs/RTOS/html/search/pages_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_2.js b/docs/RTOS/html/search/pages_2.js new file mode 100644 index 0000000..d04f353 --- /dev/null +++ b/docs/RTOS/html/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['directory_20structure_20and_20file_20overview',['Directory Structure and File Overview',['../dirstructfiles.html',1,'rtxImplementation']]] +]; diff --git a/docs/RTOS/html/search/pages_3.html b/docs/RTOS/html/search/pages_3.html new file mode 100644 index 0000000..4310311 --- /dev/null +++ b/docs/RTOS/html/search/pages_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_3.js b/docs/RTOS/html/search/pages_3.js new file mode 100644 index 0000000..92b936a --- /dev/null +++ b/docs/RTOS/html/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['function_20overview',['Function Overview',['../functionOverview.html',1,'index']]] +]; diff --git a/docs/RTOS/html/search/pages_4.html b/docs/RTOS/html/search/pages_4.html new file mode 100644 index 0000000..ae5ce18 --- /dev/null +++ b/docs/RTOS/html/search/pages_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_4.js b/docs/RTOS/html/search/pages_4.js new file mode 100644 index 0000000..9883cb3 --- /dev/null +++ b/docs/RTOS/html/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['generic_20rtos_20interface',['Generic RTOS Interface',['../genRTOSIF.html',1,'index']]] +]; diff --git a/docs/RTOS/html/search/pages_5.html b/docs/RTOS/html/search/pages_5.html new file mode 100644 index 0000000..02c1114 --- /dev/null +++ b/docs/RTOS/html/search/pages_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_5.js b/docs/RTOS/html/search/pages_5.js new file mode 100644 index 0000000..17e739d --- /dev/null +++ b/docs/RTOS/html/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['misra_2dc_3a2004_20compliance_20exceptions',['MISRA-C:2004 Compliance Exceptions',['../misraCompliance.html',1,'rtxImplementation']]] +]; diff --git a/docs/RTOS/html/search/pages_6.html b/docs/RTOS/html/search/pages_6.html new file mode 100644 index 0000000..afb70af --- /dev/null +++ b/docs/RTOS/html/search/pages_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_6.js b/docs/RTOS/html/search/pages_6.js new file mode 100644 index 0000000..90c14ce --- /dev/null +++ b/docs/RTOS/html/search/pages_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['rtx_20tutorial',['RTX Tutorial',['../exampleRTX_Tutorial.html',1,'rtxImplementation']]], + ['revision_20history',['Revision History',['../rtos_revisionHistory.html',1,'index']]], + ['rtos_20validation',['RTOS Validation',['../rtosValidation.html',1,'index']]], + ['rtx_20implementation',['RTX Implementation',['../rtxImplementation.html',1,'index']]], + ['rtx_20kernel_20tick_20timer_20configuration',['RTX Kernel Tick Timer Configuration',['../timerTick.html',1,'configure']]] +]; diff --git a/docs/RTOS/html/search/pages_7.html b/docs/RTOS/html/search/pages_7.html new file mode 100644 index 0000000..9d7ba25 --- /dev/null +++ b/docs/RTOS/html/search/pages_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_7.js b/docs/RTOS/html/search/pages_7.js new file mode 100644 index 0000000..ec70b69 --- /dev/null +++ b/docs/RTOS/html/search/pages_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['svc_20functions',['SVC Functions',['../svcFunctions.html',1,'configure']]], + ['system_20configuration',['System Configuration',['../systemConfig.html',1,'configure']]] +]; diff --git a/docs/RTOS/html/search/pages_8.html b/docs/RTOS/html/search/pages_8.html new file mode 100644 index 0000000..3377887 --- /dev/null +++ b/docs/RTOS/html/search/pages_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_8.js b/docs/RTOS/html/search/pages_8.js new file mode 100644 index 0000000..a5ef4ac --- /dev/null +++ b/docs/RTOS/html/search/pages_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['technical_20data',['Technical Data',['../technicalData.html',1,'rtxImplementation']]], + ['theory_20of_20operation',['Theory of Operation',['../theory.html',1,'rtxImplementation']]], + ['thread_20configuration',['Thread Configuration',['../threadConfig.html',1,'configure']]] +]; diff --git a/docs/RTOS/html/search/pages_9.html b/docs/RTOS/html/search/pages_9.html new file mode 100644 index 0000000..203934e --- /dev/null +++ b/docs/RTOS/html/search/pages_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/pages_9.js b/docs/RTOS/html/search/pages_9.js new file mode 100644 index 0000000..ebbd626 --- /dev/null +++ b/docs/RTOS/html/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['using_20a_20cmsis_2drtos_20implementation',['Using a CMSIS-RTOS Implementation',['../usingOS.html',1,'index']]] +]; diff --git a/docs/RTOS/html/search/search.css b/docs/RTOS/html/search/search.css new file mode 100644 index 0000000..4d7612f --- /dev/null +++ b/docs/RTOS/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/RTOS/html/search/search.js b/docs/RTOS/html/search/search.js new file mode 100644 index 0000000..789d29d --- /dev/null +++ b/docs/RTOS/html/search/search.js @@ -0,0 +1,813 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "bcdfgikmopqrstuv", + 1: "o", + 2: "cr", + 3: "os", + 4: "dipqstv", + 5: "o", + 6: "o", + 7: "o", + 8: "o", + 9: "cgikmrst", + 10: "bcdfgmrstu" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "files", + 3: "functions", + 4: "variables", + 5: "typedefs", + 6: "enums", + 7: "enumvalues", + 8: "defines", + 9: "groups", + 10: "pages" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/typedefs_0.js b/docs/RTOS/html/search/typedefs_0.js new file mode 100644 index 0000000..e543bcc --- /dev/null +++ b/docs/RTOS/html/search/typedefs_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['os_5fpthread',['os_pthread',['../cmsis__os_8h.html#aee631e5ea1b700fc35695cc7bc574cf7',1,'cmsis_os.h']]], + ['os_5fptimer',['os_ptimer',['../cmsis__os_8h.html#aa2d85e49bde9f6951ff3545cd323f065',1,'cmsis_os.h']]], + ['osmailqid',['osMailQId',['../cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5',1,'cmsis_os.h']]], + ['osmessageqid',['osMessageQId',['../cmsis__os_8h.html#ad9ec70c32c6c521970636b521e12d17f',1,'cmsis_os.h']]], + ['osmutexid',['osMutexId',['../cmsis__os_8h.html#a3263c1ad9fd79b84f908d65e8da44ac2',1,'cmsis_os.h']]], + ['ospoolid',['osPoolId',['../cmsis__os_8h.html#a08d2e20fd9bbd96220fe068d420f3686',1,'cmsis_os.h']]], + ['ossemaphoreid',['osSemaphoreId',['../cmsis__os_8h.html#aa8968896c84094aa973683c84fa06f84',1,'cmsis_os.h']]], + ['osthreadid',['osThreadId',['../cmsis__os_8h.html#adfeb153a84a81309e2d958268197617f',1,'cmsis_os.h']]], + ['ostimerid',['osTimerId',['../cmsis__os_8h.html#ab8530dd4273f1f5382187732e14fcaa7',1,'cmsis_os.h']]] +]; diff --git a/docs/RTOS/html/search/variables_0.html b/docs/RTOS/html/search/variables_0.html new file mode 100644 index 0000000..1b8adc9 --- /dev/null +++ b/docs/RTOS/html/search/variables_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_0.js b/docs/RTOS/html/search/variables_0.js new file mode 100644 index 0000000..10a84b7 --- /dev/null +++ b/docs/RTOS/html/search/variables_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['def',['def',['../group__CMSIS__RTOS__Definitions.html#a596b6d55c3321db19239256bbe403df6',1,'osEvent']]], + ['dummy',['dummy',['../cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca',1,'osMutexDef_t::dummy()'],['../cmsis__os_8h.html#a44b7a3baf02bac7ad707e8f2f5eca1ca',1,'osSemaphoreDef_t::dummy()']]] +]; diff --git a/docs/RTOS/html/search/variables_1.html b/docs/RTOS/html/search/variables_1.html new file mode 100644 index 0000000..78f63cd --- /dev/null +++ b/docs/RTOS/html/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_1.js b/docs/RTOS/html/search/variables_1.js new file mode 100644 index 0000000..6605ab3 --- /dev/null +++ b/docs/RTOS/html/search/variables_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['instances',['instances',['../cmsis__os_8h.html#aa4c4115851a098c0b87358ab6c025603',1,'osThreadDef_t']]], + ['item_5fsz',['item_sz',['../cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f',1,'osPoolDef_t::item_sz()'],['../cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f',1,'osMessageQDef_t::item_sz()'],['../cmsis__os_8h.html#a4c2a0c691de3365c00ecd22d8102811f',1,'osMailQDef_t::item_sz()']]] +]; diff --git a/docs/RTOS/html/search/variables_2.html b/docs/RTOS/html/search/variables_2.html new file mode 100644 index 0000000..ea80d20 --- /dev/null +++ b/docs/RTOS/html/search/variables_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_2.js b/docs/RTOS/html/search/variables_2.js new file mode 100644 index 0000000..4a6f1b2 --- /dev/null +++ b/docs/RTOS/html/search/variables_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['pool',['pool',['../cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c',1,'osPoolDef_t::pool()'],['../cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c',1,'osMessageQDef_t::pool()'],['../cmsis__os_8h.html#a269c3935f8bc66db70bccdd02cb05e3c',1,'osMailQDef_t::pool()']]], + ['pool_5fsz',['pool_sz',['../cmsis__os_8h.html#ac112e786b2a234e0e45cb5bdbee53763',1,'osPoolDef_t']]], + ['pthread',['pthread',['../cmsis__os_8h.html#ad3c9624ee214329fb34e71f544a6933e',1,'osThreadDef_t']]], + ['ptimer',['ptimer',['../cmsis__os_8h.html#a15773df83aba93f8e61f3737af5fae47',1,'osTimerDef_t']]] +]; diff --git a/docs/RTOS/html/search/variables_3.html b/docs/RTOS/html/search/variables_3.html new file mode 100644 index 0000000..0dca26f --- /dev/null +++ b/docs/RTOS/html/search/variables_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_3.js b/docs/RTOS/html/search/variables_3.js new file mode 100644 index 0000000..72dd5cd --- /dev/null +++ b/docs/RTOS/html/search/variables_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['queue_5fsz',['queue_sz',['../cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0',1,'osMessageQDef_t::queue_sz()'],['../cmsis__os_8h.html#a8a83a3a8c0aa8057b13807d2a54077e0',1,'osMailQDef_t::queue_sz()']]] +]; diff --git a/docs/RTOS/html/search/variables_4.html b/docs/RTOS/html/search/variables_4.html new file mode 100644 index 0000000..400e8e9 --- /dev/null +++ b/docs/RTOS/html/search/variables_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_4.js b/docs/RTOS/html/search/variables_4.js new file mode 100644 index 0000000..b4ff6e8 --- /dev/null +++ b/docs/RTOS/html/search/variables_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['stacksize',['stacksize',['../cmsis__os_8h.html#a950b7f81ad4711959517296e63bc79d1',1,'osThreadDef_t']]], + ['status',['status',['../group__CMSIS__RTOS__Definitions.html#ad477a289f1f03ac45407b64268d707d3',1,'osEvent']]] +]; diff --git a/docs/RTOS/html/search/variables_5.html b/docs/RTOS/html/search/variables_5.html new file mode 100644 index 0000000..7f1241f --- /dev/null +++ b/docs/RTOS/html/search/variables_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_5.js b/docs/RTOS/html/search/variables_5.js new file mode 100644 index 0000000..1cc6efb --- /dev/null +++ b/docs/RTOS/html/search/variables_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tpriority',['tpriority',['../cmsis__os_8h.html#a15da8f23c6fe684b70a73646ada685e7',1,'osThreadDef_t']]] +]; diff --git a/docs/RTOS/html/search/variables_6.html b/docs/RTOS/html/search/variables_6.html new file mode 100644 index 0000000..7536df8 --- /dev/null +++ b/docs/RTOS/html/search/variables_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_6.js b/docs/RTOS/html/search/variables_6.js new file mode 100644 index 0000000..8f5695b --- /dev/null +++ b/docs/RTOS/html/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['value',['../group__CMSIS__RTOS__Definitions.html#a0b9f8fd3645f01d8cb09cae82add2d7f',1,'osEvent']]] +]; diff --git a/docs/RTOS/html/search/variables_7.html b/docs/RTOS/html/search/variables_7.html new file mode 100644 index 0000000..66186a6 --- /dev/null +++ b/docs/RTOS/html/search/variables_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/RTOS/html/search/variables_7.js b/docs/RTOS/html/search/variables_7.js new file mode 100644 index 0000000..d748c4a --- /dev/null +++ b/docs/RTOS/html/search/variables_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['v',['v',['../group__CMSIS__RTOS__Definitions.html#a9e0a00edabf3b8a5dafff624fff7bbfc',1,'osEvent']]], + ['value',['value',['../group__CMSIS__RTOS__Definitions.html#a0b9f8fd3645f01d8cb09cae82add2d7f',1,'osEvent']]] +]; diff --git a/docs/RTOS/html/simple_signal.png b/docs/RTOS/html/simple_signal.png new file mode 100644 index 0000000..a0305e4 Binary files /dev/null and b/docs/RTOS/html/simple_signal.png differ diff --git a/docs/RTOS/html/stack_usage_watermark.png b/docs/RTOS/html/stack_usage_watermark.png new file mode 100644 index 0000000..4a4ee10 Binary files /dev/null and b/docs/RTOS/html/stack_usage_watermark.png differ diff --git a/docs/RTOS/html/structosMailQDef__t.html b/docs/RTOS/html/structosMailQDef__t.html new file mode 100644 index 0000000..0154cac --- /dev/null +++ b/docs/RTOS/html/structosMailQDef__t.html @@ -0,0 +1,193 @@ + + + + + +osMailQDef_t Struct Reference +CMSIS-RTOS: osMailQDef_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +
    osMailQDef_t Struct Reference
    +
    +
    + +

    Definition structure for mail queue. + More...

    + + + + + + + + + + + +

    +Data Fields

    uint32_t queue_sz
     number of elements in the queue More...
     
    uint32_t item_sz
     size of an item More...
     
    void * pool
     memory array for mail More...
     
    +

    Description

    +
    Note
    CAN BE CHANGED: os_mailQ_def is implementation specific in every CMSIS-RTOS.
    +

    Field Documentation

    + +
    +
    + + + + +
    uint32_t item_sz
    +
    + +
    +
    + +
    +
    + + + + +
    void* pool
    +
    + +
    +
    + +
    +
    + + + + +
    uint32_t queue_sz
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/structosMailQDef__t.js b/docs/RTOS/html/structosMailQDef__t.js new file mode 100644 index 0000000..00f1f43 --- /dev/null +++ b/docs/RTOS/html/structosMailQDef__t.js @@ -0,0 +1,6 @@ +var structosMailQDef__t = +[ + [ "item_sz", "structosMailQDef__t.html#a4c2a0c691de3365c00ecd22d8102811f", null ], + [ "pool", "structosMailQDef__t.html#a269c3935f8bc66db70bccdd02cb05e3c", null ], + [ "queue_sz", "structosMailQDef__t.html#a8a83a3a8c0aa8057b13807d2a54077e0", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/structosMessageQDef__t.html b/docs/RTOS/html/structosMessageQDef__t.html new file mode 100644 index 0000000..ec51ae5 --- /dev/null +++ b/docs/RTOS/html/structosMessageQDef__t.html @@ -0,0 +1,193 @@ + + + + + +osMessageQDef_t Struct Reference +CMSIS-RTOS: osMessageQDef_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +
    osMessageQDef_t Struct Reference
    +
    +
    + +

    Definition structure for message queue. + More...

    + + + + + + + + + + + +

    +Data Fields

    uint32_t queue_sz
     number of elements in the queue More...
     
    uint32_t item_sz
     size of an item More...
     
    void * pool
     memory array for messages More...
     
    +

    Description

    +
    Note
    CAN BE CHANGED: os_messageQ_def is implementation specific in every CMSIS-RTOS.
    +

    Field Documentation

    + +
    +
    + + + + +
    uint32_t item_sz
    +
    + +
    +
    + +
    +
    + + + + +
    void* pool
    +
    + +
    +
    + +
    +
    + + + + +
    uint32_t queue_sz
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/structosMessageQDef__t.js b/docs/RTOS/html/structosMessageQDef__t.js new file mode 100644 index 0000000..68945a5 --- /dev/null +++ b/docs/RTOS/html/structosMessageQDef__t.js @@ -0,0 +1,6 @@ +var structosMessageQDef__t = +[ + [ "item_sz", "structosMessageQDef__t.html#a4c2a0c691de3365c00ecd22d8102811f", null ], + [ "pool", "structosMessageQDef__t.html#a269c3935f8bc66db70bccdd02cb05e3c", null ], + [ "queue_sz", "structosMessageQDef__t.html#a8a83a3a8c0aa8057b13807d2a54077e0", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/structosMutexDef__t.html b/docs/RTOS/html/structosMutexDef__t.html new file mode 100644 index 0000000..cef730a --- /dev/null +++ b/docs/RTOS/html/structosMutexDef__t.html @@ -0,0 +1,163 @@ + + + + + +osMutexDef_t Struct Reference +CMSIS-RTOS: osMutexDef_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +
    osMutexDef_t Struct Reference
    +
    +
    + +

    Mutex Definition structure contains setup information for a mutex. + More...

    + + + + + +

    +Data Fields

    uint32_t dummy
     dummy value. More...
     
    +

    Description

    +
    Note
    CAN BE CHANGED: os_mutex_def is implementation specific in every CMSIS-RTOS.
    +

    Field Documentation

    + +
    +
    + + + + +
    uint32_t dummy
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/structosMutexDef__t.js b/docs/RTOS/html/structosMutexDef__t.js new file mode 100644 index 0000000..f2d1a42 --- /dev/null +++ b/docs/RTOS/html/structosMutexDef__t.js @@ -0,0 +1,4 @@ +var structosMutexDef__t = +[ + [ "dummy", "structosMutexDef__t.html#a44b7a3baf02bac7ad707e8f2f5eca1ca", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/structosPoolDef__t.html b/docs/RTOS/html/structosPoolDef__t.html new file mode 100644 index 0000000..87be461 --- /dev/null +++ b/docs/RTOS/html/structosPoolDef__t.html @@ -0,0 +1,193 @@ + + + + + +osPoolDef_t Struct Reference +CMSIS-RTOS: osPoolDef_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +
    osPoolDef_t Struct Reference
    +
    +
    + +

    Definition structure for memory block allocation. + More...

    + + + + + + + + + + + +

    +Data Fields

    uint32_t pool_sz
     number of items (elements) in the pool More...
     
    uint32_t item_sz
     size of an item More...
     
    void * pool
     pointer to memory for pool More...
     
    +

    Description

    +
    Note
    CAN BE CHANGED: os_pool_def is implementation specific in every CMSIS-RTOS.
    +

    Field Documentation

    + +
    +
    + + + + +
    uint32_t item_sz
    +
    + +
    +
    + +
    +
    + + + + +
    void* pool
    +
    + +
    +
    + +
    +
    + + + + +
    uint32_t pool_sz
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/structosPoolDef__t.js b/docs/RTOS/html/structosPoolDef__t.js new file mode 100644 index 0000000..05f8859 --- /dev/null +++ b/docs/RTOS/html/structosPoolDef__t.js @@ -0,0 +1,6 @@ +var structosPoolDef__t = +[ + [ "item_sz", "structosPoolDef__t.html#a4c2a0c691de3365c00ecd22d8102811f", null ], + [ "pool", "structosPoolDef__t.html#a269c3935f8bc66db70bccdd02cb05e3c", null ], + [ "pool_sz", "structosPoolDef__t.html#ac112e786b2a234e0e45cb5bdbee53763", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/structosSemaphoreDef__t.html b/docs/RTOS/html/structosSemaphoreDef__t.html new file mode 100644 index 0000000..f352bb4 --- /dev/null +++ b/docs/RTOS/html/structosSemaphoreDef__t.html @@ -0,0 +1,163 @@ + + + + + +osSemaphoreDef_t Struct Reference +CMSIS-RTOS: osSemaphoreDef_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +
    osSemaphoreDef_t Struct Reference
    +
    +
    + +

    Semaphore Definition structure contains setup information for a semaphore. + More...

    + + + + + +

    +Data Fields

    uint32_t dummy
     dummy value. More...
     
    +

    Description

    +
    Note
    CAN BE CHANGED: os_semaphore_def is implementation specific in every CMSIS-RTOS.
    +

    Field Documentation

    + +
    +
    + + + + +
    uint32_t dummy
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/structosSemaphoreDef__t.js b/docs/RTOS/html/structosSemaphoreDef__t.js new file mode 100644 index 0000000..1cdee3f --- /dev/null +++ b/docs/RTOS/html/structosSemaphoreDef__t.js @@ -0,0 +1,4 @@ +var structosSemaphoreDef__t = +[ + [ "dummy", "structosSemaphoreDef__t.html#a44b7a3baf02bac7ad707e8f2f5eca1ca", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/structosThreadDef__t.html b/docs/RTOS/html/structosThreadDef__t.html new file mode 100644 index 0000000..e8f9609 --- /dev/null +++ b/docs/RTOS/html/structosThreadDef__t.html @@ -0,0 +1,208 @@ + + + + + +osThreadDef_t Struct Reference +CMSIS-RTOS: osThreadDef_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +
    osThreadDef_t Struct Reference
    +
    +
    + +

    Thread Definition structure contains startup information of a thread. + More...

    + + + + + + + + + + + + + + +

    +Data Fields

    os_pthread pthread
     start address of thread function More...
     
    osPriority tpriority
     initial thread priority More...
     
    uint32_t instances
     maximum number of instances of that thread function More...
     
    uint32_t stacksize
     stack size requirements in bytes; 0 is default stack size More...
     
    +

    Description

    +
    Note
    CAN BE CHANGED: os_thread_def is implementation specific in every CMSIS-RTOS.
    +

    Field Documentation

    + +
    +
    + + + + +
    uint32_t instances
    +
    + +
    +
    + +
    +
    + + + + +
    os_pthread pthread
    +
    + +
    +
    + +
    +
    + + + + +
    uint32_t stacksize
    +
    + +
    +
    + +
    +
    + + + + +
    osPriority tpriority
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/structosThreadDef__t.js b/docs/RTOS/html/structosThreadDef__t.js new file mode 100644 index 0000000..a39cbd4 --- /dev/null +++ b/docs/RTOS/html/structosThreadDef__t.js @@ -0,0 +1,7 @@ +var structosThreadDef__t = +[ + [ "instances", "structosThreadDef__t.html#aa4c4115851a098c0b87358ab6c025603", null ], + [ "pthread", "structosThreadDef__t.html#ad3c9624ee214329fb34e71f544a6933e", null ], + [ "stacksize", "structosThreadDef__t.html#a950b7f81ad4711959517296e63bc79d1", null ], + [ "tpriority", "structosThreadDef__t.html#a15da8f23c6fe684b70a73646ada685e7", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/structosTimerDef__t.html b/docs/RTOS/html/structosTimerDef__t.html new file mode 100644 index 0000000..92b7362 --- /dev/null +++ b/docs/RTOS/html/structosTimerDef__t.html @@ -0,0 +1,163 @@ + + + + + +osTimerDef_t Struct Reference +CMSIS-RTOS: osTimerDef_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +
    osTimerDef_t Struct Reference
    +
    +
    + +

    Timer Definition structure contains timer parameters. + More...

    + + + + + +

    +Data Fields

    os_ptimer ptimer
     start address of a timer function More...
     
    +

    Description

    +
    Note
    CAN BE CHANGED: os_timer_def is implementation specific in every CMSIS-RTOS.
    +

    Field Documentation

    + +
    +
    + + + + +
    os_ptimer ptimer
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/structosTimerDef__t.js b/docs/RTOS/html/structosTimerDef__t.js new file mode 100644 index 0000000..2aa8a7b --- /dev/null +++ b/docs/RTOS/html/structosTimerDef__t.js @@ -0,0 +1,4 @@ +var structosTimerDef__t = +[ + [ "ptimer", "structosTimerDef__t.html#a15773df83aba93f8e61f3737af5fae47", null ] +]; \ No newline at end of file diff --git a/docs/RTOS/html/svcFunctions.html b/docs/RTOS/html/svcFunctions.html new file mode 100644 index 0000000..612e401 --- /dev/null +++ b/docs/RTOS/html/svcFunctions.html @@ -0,0 +1,167 @@ + + + + + +SVC Functions +CMSIS-RTOS: SVC Functions + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    SVC Functions
    +
    +
    +

    Supervisor Calls (SVC) are exceptions targeted at software and operating systems for generating system function calls. They are sometimes called software interrupts. For example, instead of allowing user programs to directly access hardware, an operating system may provide access to hardware through an SVC. So when a user program wants to use certain hardware, it generates the SVC exception using SVC instructions, and then the software exception handler in the operating system is executed and provides the requested service to the user application. In this way, access to hardware is under the control of the OS, which can provide a more robust system by preventing the user applications from directly accessing the hardware.

    +

    SVC can also make software more portable because the user application does not need to know the programming details of the underlying hardware. The user program will only need to know the application programming interface (API) function ID and parameters; the actual hardware-level programming is handled by device drivers.

    +

    SVCs run in Privileged Handler mode of the Cortex-M core. SVC functions accept arguments and can return values. The functions are used in the same way as other functions; however, differences are hidden to the user. The ARMCC handles the differences and generates code instructions to call SVC functions. SVC functions are called by executing the SVC instruction. When executing SVC instructions, the controller changes to the Privileged Handler Mode.

    +

    Interrupts are not disabled in this mode. To protect SVC function from interrupts, you need to include the disable/enable intrinsic functions __disable_irq() and __enable_irq() in your code.

    +

    You can use SVC functions to access protected peripherals, for example, to configure NVIC and interrupts. This is required if you run tasks in unprivileged (protected) mode and you need to change interrupts from the task.

    +

    To implement SVC functions in your CMSIS-RTOS RTX kernel project, you need to:

    +
      +
    1. Copy the file SVC_Table.s to your project folder and include it into your project. This file is available as a source code template.
    2. +
    3. Declare a function with a __svc(x) attribute. Use the first SVC number, starting from 1, that is free.
      void __svc(1) inc_5bit (U32 *cp);
      +
    4. +
    5. Write a function implementation and convert the function name into a __SVC_x function name. Later, this name is referenced by the linker from the SVC_Table.s module. You also need to disable/enable interrupts.
      void __SVC_1 (U32 *cp) {
      +
      // A protected function to increment a 5-bit counter.
      +
      __disable_irq();
      +
      cp = (*cp + 1) & 0x1F;
      +
      __enable_irq();
      +
      }
      +
    6. +
    7. Add the function __SVC_x to the SVC function table in the SVC_Table.s module. First import it from other modules:
      ; Import user SVC functions here.
      +
      IMPORT __SVC_1
      +
      Then, add a reference to it into the table:
      ; Insert user SVC functions here. SVC 0 used by RTL Kernel.
      +
      DCD __SVC_1 ; user SVC function
      +
    8. +
    9. Your SVC function should now look like this:
      void __svc(1) inc_5bit (U32 *cp);
      +
      void __SVC_1 (U32 *cp) {
      +
      // A protected function to increment a 5-bit counter.
      +
      __disable_irq();
      +
      cp = (*cp + 1) & 0x1F;
      +
      __enable_irq();
      +
      }
      +
    10. +
    +
    Note
      +
    • SVC function 0 is reserved for the CMSIS-RTOS RTX kernel.
    • +
    • Do not leave gaps when numbering SVC functions. They must occupy a continuous range of numbers starting from 1.
    • +
    • SVC functions can still be interrupted.
    • +
    • CMSIS-RTOS RTX must not be called before the main() function.
    • +
    +
    +
    +
    + + + + diff --git a/docs/RTOS/html/sync_off.png b/docs/RTOS/html/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/docs/RTOS/html/sync_off.png differ diff --git a/docs/RTOS/html/sync_on.png b/docs/RTOS/html/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/docs/RTOS/html/sync_on.png differ diff --git a/docs/RTOS/html/systemConfig.html b/docs/RTOS/html/systemConfig.html new file mode 100644 index 0000000..713604a --- /dev/null +++ b/docs/RTOS/html/systemConfig.html @@ -0,0 +1,194 @@ + + + + + +System Configuration +CMSIS-RTOS: System Configuration + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    System Configuration
    +
    +
    +

    The CMSIS-RTOS RTX provides system-wide settings for:

    + +

    +Settings for Round-Robin Thread Switching

    +

    CMSIS-RTOS RTX may be configured to use round-robin multitasking thread switching. Round-robin allows quasi-parallel execution of several threads of the same priority. Threads are not really executed concurrently, but are scheduled where the available CPU time is divided into time slices and CMSIS-RTOS RTX assigns a time slice to each thread. Because the time slice is typically short (only a few milliseconds), it appears as though threads execute simultaneously.

    +

    Round-robin thread switching functions as follows:

    +
      +
    • the tick is preloaded with the timeout value when a thread switch occurs
    • +
    • the tick is decremented (if not already zero) each system tick if the same thread is still executing
    • +
    • when the tick reaches 0 it indicates that a timeout has occurred. If there is another thread ready with the same priority, then the system switches to that thread and the tick is preloaded with timeout again.
    • +
    +

    In other words, threads execute for the duration of their time slice (unless a thread's time slice is given up). Then, RTX switches to the next thread that is in READY state and has the same priority. If no other thread with the same priority is ready to run, the current running thread resumes it execution.

    +
    Note
    When switching to higher priority threads, the round-robin timeout value is reset.
    +

    Round-Robin multitasking is controlled with the #define OS_ROBIN. The time slice period is configured (in RTX Timer ticks) with the #define OS_ROBINTOUT.

    +

    Code Example:

    +

    The following example shows a simple CMSIS-RTOS RTX program that uses Round-Robin Multitasking. The two threads in this program are counter loops. RTX starts executing job 1, which is the function named job1. This function creates another task called job2. After job1 executes for its time slice, RTX switches to job2. After job2 executes for its time slice, RTX switches back to job1. This process repeats indefinitely.

    +
    #include "cmsis_os.h" // CMSIS-RTOS header file
    +
    +
    int counter1;
    +
    int counter2;
    +
    +
    void job1 (void const *arg) {
    +
    while (1) { // loop forever
    +
    counter1++; // update the counter
    +
    }
    +
    }
    +
    +
    void job2 (void const *arg) {
    +
    while (1) { // loop forever
    +
    counter2++; // update the counter
    +
    }
    +
    }
    +
    + + +
    +
    int main (void) {
    +
    osKernelInitialize (); // setup kernel
    +
    osThreadCreate (osThread(job1), NULL); // create threads
    +
    osThreadCreate (osThread(job2), NULL);
    +
    osKernelStart (); // start kernel
    +
    }
    +
    Note
    Rather than waiting for a thread time slice to expire, use CMSIS-RTOS functions to signal to the RTX kernel that it can switch to another task. The function osThreadYield passes control to other threads without Round-Robin Multitasking.
    +

    +User Timer Management

    +

    CMSIS-RTOS RTX supports Timer Management which provides timer callback functions. The Timer Management is configured with the following #defines:

    + + + + + + + + + + + +
    Name #define Description
    User Timers OS_TIMERS Enables the Timer Management. When disabled, the osTimerThread is not created.
    Timer Thread Priority OS_TIMERPRIO Specifies the priority of the osTimerThread that executes the timer callback functions.
    Timer Thread stack size [bytes] OS_TIMERSTKSZ Specifies the stack size (in words) for the the osTimerThread.
    Timer Callback Queue size OS_TIMERCBQS Specifies the maximum number of concurrent timer callbacks.
    +
    Note
    Refer to CMSIS-RTOS RTX Threads for more information about the osTimerThread.
    +

    +ISR FIFO Queue size

    +

    ISR functions store requests to this buffer, when they are called from the interrupt handler. The default value for #define OS_FIFOSZ is 16.

    +
    +
    + + + + diff --git a/docs/RTOS/html/tab_a.png b/docs/RTOS/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/docs/RTOS/html/tab_a.png differ diff --git a/docs/RTOS/html/tab_b.png b/docs/RTOS/html/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/docs/RTOS/html/tab_b.png differ diff --git a/docs/RTOS/html/tab_h.png b/docs/RTOS/html/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/docs/RTOS/html/tab_h.png differ diff --git a/docs/RTOS/html/tab_s.png b/docs/RTOS/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/docs/RTOS/html/tab_s.png differ diff --git a/docs/RTOS/html/tab_topnav.png b/docs/RTOS/html/tab_topnav.png new file mode 100644 index 0000000..b257b77 Binary files /dev/null and b/docs/RTOS/html/tab_topnav.png differ diff --git a/docs/RTOS/html/tabs.css b/docs/RTOS/html/tabs.css new file mode 100644 index 0000000..ffbab50 --- /dev/null +++ b/docs/RTOS/html/tabs.css @@ -0,0 +1,71 @@ +.tabs, .tabs1, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 10px; +} + +.tabs1 { + background-image: url('tab_topnav.png'); + font-size: 12px; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; + line-height: 24px; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + list-style: none; +} + +.tabs1 .tablist li { + float: left; + display: table-cell; + background-image: url('tab_topnav.png'); + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/docs/RTOS/html/technicalData.html b/docs/RTOS/html/technicalData.html new file mode 100644 index 0000000..166f1a7 --- /dev/null +++ b/docs/RTOS/html/technicalData.html @@ -0,0 +1,211 @@ + + + + + +Technical Data +CMSIS-RTOS: Technical Data + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    Technical Data
    +
    +
    +

    This section lists the technical data of CMSIS-RTOS RTX.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Description

    Limitations

    +

    +
    Defined Tasks

    Unlimited

    +

    +
    Active Threads

    250 max

    +

    +
    Mailboxes

    Unlimited

    +

    +
    Semaphores

    Unlimited

    +

    +
    Mutexes

    Unlimited

    +

    +
    Signals

    16 per thread

    +

    +
    Timer Callbacks

    Unlimited

    +

    +
    Code Space

    < 5.0 Kbytes

    +

    +
    RAM Space for Kernel

    300 bytes + 128 bytes Main Stack

    +

    +
    RAM Space for a Thread

    StackSize + 52 bytes

    +

    +
    RAM Space for a Mailbox

    MaxMessages * 4 + 16 bytes

    +

    +
    RAM Space for a Semaphore

    8 bytes

    +

    +
    RAM Space for a Mutex

    12 bytes

    +

    +
    RAM Space for a User Timer

    24 bytes

    +

    +
    Hardware Requirements

    SysTick timer or other hardware timer

    +

    +
    Thread context switch time

    < 2.6 usec @ 72 MHz

    +

    +
    Interrupt lockout time Not disabled
    +
    Note
      +
    • Unlimited means that the RTX kernel does not impose any limitations on the number. However, the available system memory resources limit the number of items you can create.
    • +
    • RAM requirements depend on the number of concurrently running threads.
    • +
    • The code and RAM size is calculated for ARMCC Compiler when using the MicroLib runtime library.
    • +
    +
    +

    +osWait

    +

    The generic wait function osWait is currently not supported by CMSIS-RTOS RTX.

    +
    +
    + + + + diff --git a/docs/RTOS/html/theory.html b/docs/RTOS/html/theory.html new file mode 100644 index 0000000..f4d4f34 --- /dev/null +++ b/docs/RTOS/html/theory.html @@ -0,0 +1,194 @@ + + + + + +Theory of Operation +CMSIS-RTOS: Theory of Operation + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    Theory of Operation
    +
    +
    +

    This section describes how CMSIS-RTOS RTX manages the resources of the target system. Many aspects of the CMSIS-RTOS RTX kernel can be configured. Information about configuration options is mentioned where applicable.

    +

    +Settings for osFeature_xxx in cmsis_os.h

    +

    CMSIS-RTOS RTX uses the following #defines.

    + + + + + + + + + + + + + + + + + + + +
    osFeature_xxx #define RTX Setting Meaning
    osFeature_MainThread 1 main can be a thread
    osFeature_Pool 1 Memory Pools are available
    osFeature_MailQ 1 Mail Queues are available
    osFeature_MessageQ 1 Message Queues are available
    osFeature_Signals 16 16 Signal Flags are available per thread
    osFeature_Semaphore 65535 Maximum count for osSemaphoreCreate function
    osFeature_Wait 0 osWait is not available
    osFeature_SysTick 1 osKernelSysTick functions are available
    +

    +RTX Kernel Timer Tick and Thread Management

    +

    By default, CMSIS-RTOS RTX uses the Cortex-M SysTick timer to generate periodic interrupts for the RTX kernel timer tick. CMSIS-RTOS provides Timer Management functions and several CMSIS-RTOS functions have a timeout parameter. This periodic RTX kernel timer tick interrupt is used to derive the required time interval. CMSIS-RTOS RTX also provides configuration options for a alternative timer and tick-less operation. Refer to RTX Kernel Tick Timer Configuration for more information.

    +

    To handle timeout and time delays for threads, the CMSIS-RTOS RTX thread management is controlled by the RTX kernel timer tick interrupt. The thread context switch itself is implemented in the HAL_CMx.x hardware abstraction layer source files. The thread context contains all CPU registers (R0 - R12), the return address (LR), the program counter (PC), and the processor status register (xPSR). For the Cortex-M4 FPU and Cortex-M7 FPU the floating point status and registers (S0 - S32, FPSCR) are also part of the thread context.

    +

    When a thread switch occurs:

    +
      +
    • the thread context of the current running thread is stored on the local stack of this thread.
    • +
    • the stack pointer is switched to the next running thread.
    • +
    • the thread context of this next running thread is restored and this thread starts to run.
    • +
    +
    Note
      +
    • For Cortex-M0, Cortex-M3, Cortex-M4, and Cortex-M7 the thread context requires 64 bytes on the local stack.
    • +
    • For Cortex-M4 FPU and Cortex-M7 FPU the thread context requires 200 bytes on the local stack. For devices with Cortex-M4 FPU and Cortex-M7 FPU the default stack space should be increased to a minimum of 300 bytes.
    • +
    +
    +

    Each thread is provided with an separate stack that holds the thread context and stack space for automatic variables and return addresses for function call nesting. The stack sizes of the RTX threads are flexible configurable as explained in the section Thread Configuration. RTX even offers a configurable checking for stack overflows. Refer to Stack Overflow Checking for more information.

    +

    +CMSIS-RTOS RTX Threads

    +

    At startup time, the CMSIS-RTOS RTX creates the following threads:

    +
      +
    • main : the 'main' function of the application code is started as thread with the osPriorityNormal.
    • +
    • os_idle_demon : this thread executes when no other thread is in RUNNING state. The code of that thread is provided in the RTX_Conf_CM.c file and is typically used to put the system into a power-saving mode.
    • +
    • osTimerThread : this thread executes the Timer Management callback functions. This thread can be disabled; refer to User Timer Management for configuration options.
    • +
    +

    +Priority Inversion on Resource Sharing

    +

    The CMSIS-RTOS RTX employs a priority-based preemptive scheduler which ensures that from all the threads that are in the READY state, the thread with the highest priority gets executed and becomes the RUNNING thread. Because threads share resources, events that are outside of the control of the RTX scheduler can prevent the highest priority thread from running when it should. If this happens, a critical deadline could be missed, causing the system to fail. Priority inversion is the term of a scenario in which the highest-priority ready task fails to run when it should.

    +

    Threads typically share resources to communicate and process data by using the CMSIS-RTOS Mutexes. At any time, two or more threads share a resource, such as a memory buffer or a serial port, one of them may have a higher priority. It is expected that the higher-priority thread runs as soon as it is in the READY state. However, if the lower-priority thread is using a shared resource of a higher-priority thread, this higher-priority thread must wait until the lower-priority thread releases the shared resource.

    +

    To prevent priority inversions, the CMSIS-RTOS RTX implements a priority inheritance method for the Mutexes. A lower-priority thread inherit the priority of any higher-priority thread that is waiting with osMutexWait on a shared resource. During the time the higher-priority thread is in WAITING state, the lower-priority thread runs at the same priority of a higher-priority pending thread. When the lower-priority thread stops to share a resource with osMutexRelease, the original priority is assigned to this thread again.

    +

    +Function calls from Interrupt Service Routines (ISR)

    +

    The following CMSIS-RTOS functions can be called from threads and Interrupt Service Routines (ISR):

    + +

    Functions that cannot be called from an ISR are verifying the interrupt status and return the status code osErrorISR in case that they are called from an ISR context.

    +
    +
    + + + + diff --git a/docs/RTOS/html/threadConfig.html b/docs/RTOS/html/threadConfig.html new file mode 100644 index 0000000..b601e04 --- /dev/null +++ b/docs/RTOS/html/threadConfig.html @@ -0,0 +1,192 @@ + + + + + +Thread Configuration +CMSIS-RTOS: Thread Configuration + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    Thread Configuration
    +
    +
    +

    The CMSIS-RTOS RTX provides several parameters for the thread configuration.

    + +

    +Configuration of Thread count and Stack Space

    +

    osThreadDef defines a thread function. The parameter stacksz specifies thereby the stack requirements of this thread function. CMSIS-RTOS RTX defines two methods for defining the stack requirements:

    +
      +
    • when stacksz is 0, a fixed-size memory pool is used to for the thread stack. In this case OS_STKSIZE specifies the stack size for the thread function.
    • +
    • when stacksz is not 0, the thread stack is allocated from a user space. The size of this user space is specified with OS_PRIVSTKSIZE.
    • +
    +

    The CMSIS-RTOS RTX kernel uses a separate stack for each thread it creates. However, before the kernel is started by the osKernelInitialize() function, the main stack size that is configured in the file startup_device.s is used.

    +

    Main stack is also used when:

    +
      +
    • the user application calls the majority of RTX functions from Thread mode (ending up in an SVC call)
    • +
    • running from handlers (user interrupt of exception handlers like SVCm PendSV, Faults, etc.)
    • +
    + + + + + + + + + + + + + + + + + + + +
    Name #define Description
    Number of concurrent running user threads OS_TASKCNT Indicates the maximum number of threads that will run at the same time (including main).
    Default Thread stack size [bytes] OS_STKSIZE Specifies the default stack size (in words) for threads that are defined with osThreadDef stacksz = 0.
    Main Thread stack size [bytes] OS_MAINSTKSIZE Is the stack requirement (in words) for the main function that is started by default as an RTOS thread.
    Number of threads with user-provided stack size OS_PRIVCNT Indicates the number of threads that are defined with osThreadDef stacksz != 0 (excluding main). stacksz specifies the stack size requirement of that thread.
    Total stack size [bytes] for threads with user-provided stack size OS_PRIVSTKSIZE Is the combined stack requirement (in words) of all threads that are defined with with osThreadDef stacksz != 0 (excluding main).
    Stack Overflow Checking OS_STKCHECK If a stack overflow is detected at a thread switch, the function os_error with error code = 1 is called. By default, this function is implemented as endless loop and will practically stop code execution.
    Stack Usage Watermark OS_STKINIT Initializes the thread stack with a watermark pattern that can be used to determine the maximum stack usage within each thread.
    Processor Mode for Thread Execution OS_RUNPRIV Controls the processor mode (privileged/unprivileged)
    +

    +Stack Overflow Checking

    +

    CMSIS-RTOS RTX implements a software stack overflow checking that traps stack overruns. Stack is used for return addresses and automatic variables and extensive usage or incorrect stack configuration may cause a stack overflow. Software stack overflow checking is controlled with the #define OS_STKCHECK.

    +

    If a stack overflow is detected, the function os_error with error code = 1 is called. By default, this function is implemented as endless loop and will practically stop code execution.

    +

    +Stack Usage Watermark

    +

    The total stack size of an application needs to be as small as possible in a memory restricted embedded system. To be able to set the smallest stack size for every thread, the developer needs to know the maximum stack usage over the runtime of the application.

    +

    The Stack Usage Watermark feature support this by initializing the thread stack with a watermark pattern (0xCC) when a thread is created. This allows the debugger to determine the maximum stack usage for each thread.

    +
    +stack_usage_watermark.png +
    +System and Thread Viewer showing current and maximum stack usage
    +

    Stack usage watermark is controlled with the #define OS_STKINIT. Setting this #define increases significantly the execution time of osThreadCreate (depending on thread stack size).

    +

    +Processor Mode for Thread Execution

    +

    CMSIS-RTOS RTX allows to execute threads in unprivileged or privileged processor mode. The processor mode is controlled with the #define OS_RUNPRIV.

    +

    In unprivileged processor mode, the software:

    +
      +
    • has limited access to the MSR and MRS instructions, and cannot use the CPS instruction.
    • +
    • cannot access the system timer, NVIC, or system control block.
    • +
    • might have restricted access to memory or peripherals.
    • +
    +

    In privileged processor mode the software can use all the instructions and has access to all resources.

    +
    Note
    It is recommended to use the privileged processor mode.
    +
    +
    + + + + diff --git a/docs/RTOS/html/timerTick.html b/docs/RTOS/html/timerTick.html new file mode 100644 index 0000000..b1a7727 --- /dev/null +++ b/docs/RTOS/html/timerTick.html @@ -0,0 +1,225 @@ + + + + + +RTX Kernel Tick Timer Configuration +CMSIS-RTOS: RTX Kernel Tick Timer Configuration + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    RTX Kernel Tick Timer Configuration
    +
    +
    +

    The CMSIS-RTOS RTX functions provide delays in units of milliseconds that are derived from the RTX Timer Tick. It is therefore recommended to configure the RTX Timer Tick to generate a 1 millisecond interval. Configuring a longer RTX Timer Tick may reduce energy consumption, but has impacts on the granularity of the timeouts.

    + + + + + + + + + +
    Name #define Description
    Use Cortex-M SysTick timer as RTX Kernel Timer OS_SYSTICK Selects the Cortex-M SysTick timer as RTX kernel timer. In this case, the RTX kernel configures the SysTick timer clock source as processor clock. Therefore the value OS_CLOCK should be identical with the value of the CMSIS variable SystemCoreClock.
    RTOS Kernel Timer input clock frequency [Hz] OS_CLOCK Specifies the Cortex-M processor clock frequency in Hz. This value is used to calculate the RTX kernel timer reload value.
    RTX Timer tick interval value [us] OS_TICK Specifies the RTX Timer Tick interval in microseconds (us). This value is used to calculate timeout values. When the SysTick core timer is enabled the value is also used to configure the SysTick timer. It is recommended to configure the RTX Timer tick to 1000 us which results in a timeout granularity of 1 millisecond.
    +

    +Usage of an Alternate Timer as RTX Kernel Timer

    +

    With #define OS_SYSTICK 0 an alternative timer is selected as RTX kernel timer.

    +

    Four functions in the RTX_Conf_CM.c file need to be adapted for using an alternative hardware timer.

    +
      +
    • os_tick_init provides the initialization function for the alternative hardware timer.
    • +
    • os_tick_val returns the current value of the alternative hardware timer.
    • +
    • os_tick_ovf returns the overflow flag of the alternative hardware timer.
    • +
    • os_tick_irqack is an interrupt acknowledge function that is called to confirm the alternative hardware timer interrupt.
    • +
    • OS_Tick_Handler needs to be called as the hardware timer interrupt function; the startup code should be modified to this function.
    • +
    +

    Configuration Code:

    +
    #if (OS_SYSTICK == 0) // Functions for alternative timer as RTX kernel timer
    +
    +
    /*--------------------------- os_tick_init ----------------------------------*/
    +
    +
    /// \brief Initializes an alternative hardware timer as RTX kernel timer
    +
    /// \return IRQ number of the alternative hardware timer
    +
    int os_tick_init (void) {
    +
    return (-1); /* Return IRQ number of timer (0..239) */
    +
    }
    +
    +
    /*--------------------------- os_tick_val -----------------------------------*/
    +
    +
    /// \brief Get alternative hardware timer's current value (0 .. OS_TRV)
    +
    /// \return Current value of the alternative hardware timer
    +
    uint32_t os_tick_val (void) {
    +
    return (0);
    +
    }
    +
    +
    /*--------------------------- os_tick_ovf -----------------------------------*/
    +
    +
    /// \brief Get alternative hardware timer's overflow flag
    +
    /// \return Overflow flag\n
    +
    /// - 1 : overflow
    +
    /// - 0 : no overflow
    +
    uint32_t os_tick_ovf (void) {
    +
    return (0);
    +
    }
    +
    +
    /*--------------------------- os_tick_irqack --------------------------------*/
    +
    +
    /// \brief Acknowledge alternative hardware timer interrupt
    +
    void os_tick_irqack (void) {
    +
    /* ... */
    +
    }
    +
    +
    #endif // (OS_SYSTICK == 0)
    +

    +

    OS_Tick_Handler

    +

    The function OS_Tick_Handler handles the RTX tick interval interrupts. It is used if you are using an alternate timer as the RTX tick timer.

    +

    The OS_Tick_Handler is an interrupt handler function, which runs the OS task scheduler. It is called by the Nested Vectored Interrupt Controller (NVIC) on the alternate timer's interrupt, and cannot be called as a regular C-function. It must be entered into the Interrupt Table in startup file. The default Cortex-M interrupt vector must be replaced by OS_Tick_Handler.

    +
    ; Vector Table Mapped to Address 0 at Reset
    +
    +
    AREA RESET, DATA, READONLY
    +
    EXPORT __Vectors
    +
    +
    IMPORT OS_Tick_Handler
    +
    +
    __Vectors DCD __initial_sp ; Top of Stack
    +
    DCD Reset_Handler ; Reset Handler
    +
    DCD NMI_Handler ; NMI Handler
    +
    DCD HardFault_Handler ; Hard Fault Handler
    +
    DCD MemManage_Handler ; MPU Fault Handler
    +
    DCD BusFault_Handler ; Bus Fault Handler
    +
    DCD UsageFault_Handler ; Usage Fault Handler
    +
    DCD 0 ; Reserved
    +
    DCD 0 ; Reserved
    +
    DCD 0 ; Reserved
    +
    DCD 0 ; Reserved
    +
    DCD SVC_Handler ; SVCall Handler
    +
    DCD DebugMon_Handler ; Debug Monitor Handler
    +
    DCD 0 ; Reserved
    +
    DCD PendSV_Handler ; PendSV Handler
    +
    DCD SysTick_Handler ; SysTick Handler
    +
    +
    ; External Interrupts
    +
    DCD WDT_IRQHandler ; 16: Watchdog Timer
    +
    DCD TIMER0_IRQHandler ; 17: Timer0
    +
    ...
    +
    DCD I2S_IRQHandler ; 43: I2S
    +
    DCD ENET_IRQHandler ; 44: Ethernet
    +
    DCD OS_Tick_Handler ; 45: Repetitive Interrupt Timer
    +
    DCD MCPWM_IRQHandler ; 46: Motor Control PWM
    +
    ...
    +
    +
    + + + + diff --git a/docs/RTOS/html/using.html b/docs/RTOS/html/using.html new file mode 100644 index 0000000..778ce6b --- /dev/null +++ b/docs/RTOS/html/using.html @@ -0,0 +1,203 @@ + + + + + +Create an RTX Project +CMSIS-RTOS: Create an RTX Project + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    Create an RTX Project
    +
    +
    +

    Example projects using CMSIS-RTOS RTX are available for various development boards. To make use of these examples, you need to install a Device Family Pack in µVision and use Pack Installer to open a CMSIS-RTOS Blinky project. If you wish to start a CMSIS-RTOS RTX from scratch, follow these steps:

    +
      +
    • Create a new project and select a device.
    • +
    • In the Manage Run-Time Environment window that opens, select CMSIS::CORE and CMSIS::RTOS (API)::Keil RTX. If the Validation Output requires other components to be present, try to use the Resolve button:

      +
      +manage_rte_output.png +
      +
    • +
    • Click OK. In the Project window, you will see the files that have been automatically added to you project, such as RTX_Conf_CM.c and the system and startup files:

      +
      +project_window.png +
      +
    • +
    • You can add template files to the project by right-clicking on Source Group 1 and selecting Add New Item to 'Source Group 1'. In the new window, click on User Code Template. On the right-hand side you will see all available template files for CMSIS-RTOS RTX:

      +
      +add_item.png +
      +
    • +
    • Finally, configure RTX to the application's needs using the RTX_Conf_CM.c file.
    • +
    +

    +Define and Reference Object Definitions

    +

    With #define osObjectsExternal objects are defined as external symbols. This allows to create a consistent header file that is used throughout a project. If you are using the CMSIS-RTOS 'main' function user code template, such a header file (called osObjects.h) will be added automatically to the project:

    +

    Code Example

    +
    /*----------------------------------------------------------------------------
    +
    * osObjects.h: CMSIS-RTOS global object definitions for an application
    +
    *----------------------------------------------------------------------------
    +
    +
    * This header file defines global RTOS objects used throughout a project
    +
    +
    * #define osObjectsPublic indicates that objects are defined; without that
    +
    * definition the objects are defined as external symbols.
    +
    +
    *--------------------------------------------------------------------------*/
    +
    +
    #ifndef __osObjects
    +
    #define __osObjects
    +
    +
    #if (!defined (osObjectsPublic))
    +
    #define osObjectsExternal // define RTOS objects with extern attribute
    +
    #endif
    +
    +
    #include <cmsis_os.h> // CMSIS RTOS header file
    +
    +
    // global 'thread' functions -------------------------------------------------
    +
    extern void thread_sample (void const *argument); // function prototype
    +
    osThreadDef (thread_sample, osPriorityBelowNormal, 1, 100);
    +
    +
    // global 'memory pools' -----------------------------------------------------
    +
    osPoolDef(MyPool, 10, long);
    +
    +
    #endif // __osObjects
    +

    This header file defines all objects when included in a C/C++ source file. When #define osObjectsExternal is present before the header file, the objects are defined as external symbols. A single consistent header file can therefore be used throughout the whole project.

    +

    Code Example

    +
    #include "osObjects.h" // Definition of the CMSIS-RTOS objects
    +

    +Using IRQ Interrupts

    +

    The CMSIS-RTOS RTX kernel uses the following interrupts:

    +
      +
    • Timer interrupt (SysTick or alternative peripheral timer) to generate periodic timer ticks
    • +
    • SVC (Supervisor Call) when calling the majority of RTX functions from Thread mode
    • +
    • PendSV (request for system-level service) when calling certain RTX functions from Handler mode
    • +
    +

    Interrupts can be used without limitation. Interrupt priority grouping can be used with some restrictions:

    +
      +
    • IRQ interrupts are never disabled by RTX Kernel for Armv7-M architectures (Cortex-M3/M4/M7).
    • +
    • Software interrupt 0 is used by RTX and cannot be used in an application.
    • +
    • RTX uses its own SVC Handler which is automatically linked from the library. SVC Functions explains how to use a custom SVC table.
    • +
    • When interrupt priority grouping is used, the PRIGROUP must be set before the osKernelInitialize() function is called (usually in the SystemInit() function in the system_device.c file). The kernel reads the value of PRIGROUP to correctly set internal interrupt pre-emption priorities.
    • +
    • Allowed values for PRIGROUP are from 0 to 6. The PRIGROUP value 7 will cause RTX to fail.
    • +
    • The lowest two pre-emption priorities are reserved for RTX kernel, all remaining pre-emption priorities are available to be used in an application.
    • +
    • Do not change the priority used by the RTX kernel. If this cannot be avoided, ensure that the preempt priority of SysTick/PendSV is lower than SVC.
    • +
    • Check the main stack size configured from the device startup file if you see sporadic crashes of your application. Supervisor Calls (SVCs) are used when calling RTX functions from Thread mode. All SVC calls use the main stack.
    • +
    +
    +
    + + + + diff --git a/docs/RTOS/html/usingOS.html b/docs/RTOS/html/usingOS.html new file mode 100644 index 0000000..78a39d0 --- /dev/null +++ b/docs/RTOS/html/usingOS.html @@ -0,0 +1,902 @@ + + + + + +Using a CMSIS-RTOS Implementation +CMSIS-RTOS: Using a CMSIS-RTOS Implementation + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    CMSIS-RTOS +  Version 1.03 +
    +
    Real-Time Operating System: API and RTX Reference Implementation.
    +
    +
    + +
    +
      + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + + + + +
    + +
    + +
    +
    +
    Using a CMSIS-RTOS Implementation
    +
    +
    +

    A CMSIS-RTOS implementation is typically provided as a library. To add the RTOS functionality to an existing CMSIS-based application, the RTOS library (and typically a configuration file) needs to be added. The available functionality of the RTOS library is defined in the header file cmsis_os.h that is specific for each CMSIS-RTOS implementation.

    +
    +CMSIS_RTOS_Files.png +
    +CMSIS-RTOS File Structure
    +

    Depending on the CMSIS-RTOS implementation, execution may start with the main function as the first thread. This has the benefit that an application programmer may use other middleware libraries that create threads internally, but the remaining part of the user application just uses the main thread. Therefore, the usage of the RTOS can be invisible to the application programmer, but libraries can use CMSIS-RTOS features.

    +

    Once the files are added to a project, the user can start working with the CMSIS-RTOS functions. A code example is provided below:

    +

    Code Example

    +
    #include "cmsis_os.h" // CMSIS-RTOS header file
    +
    +
    void job1 (void const *argument) { // thread function 'job1'
    +
    while (1) {
    +
    : // execute some code
    +
    osDelay (10); // delay execution for 10 milliseconds
    +
    }
    +
    }
    +
    +
    osThreadDef(job1, osPriorityAboveNormal, 1, 0); // define job1 as thread function
    +
    +
    void job2 (void const *argument) { // thread function 'job2'
    +
    osThreadCreate(osThread(job1),NULL); // create job1 thread
    +
    while (1) {
    +
    : // execute some code
    +
    }
    +
    }
    +
    +
    osThreadDef(job2, osPriorityNormal, 1, 0); // define job2 as thread function
    +
    +
    void job3 (void const *argument) { // thread function 'job3'
    +
    while (1) {
    +
    : // execute some code
    +
    osDelay (20); // delay execution for 20 milliseconds
    +
    }
    +
    }
    +
    +
    osThreadDef(job3, osPriorityNormal, 1, 0); // define job3 as thread function
    +
    +
    int main (void) { // program execution starts here
    +
    osKernelInitialize (); // initialize RTOS kernel
    +
    : // setup and initialize peripherals
    + + +
    osKernelStart (); // start kernel with job2 execution
    +
    }
    +

    +Header File Template: cmsis_os.h

    +

    The file cmsis_os.h is a template header file for a CMSIS-RTOS compliant Real-Time Operating System (RTOS). Each RTOS that is compliant with CMSIS-RTOS shall provide a specific cmsis_os.h header file that represents its implementation.

    +

    The file cmsis_os.h contains:

    +
      +
    • CMSIS-RTOS API function definitions
    • +
    • struct definitions for parameters and return types
    • +
    • status and priority values used by CMSIS-RTOS API functions
    • +
    • macros for defining threads and other kernel objects
    • +
    +

    Name conventions and header file modifications

    +

    All definitions are prefixed with os to give an unique name space for CMSIS-RTOS functions. Definitions that are prefixed os_ are not used in the application code but local to this header file. All definitions and functions that belong to a module are grouped and have a common prefix, i.e. osThread.

    +

    Definitions that are marked with CAN BE CHANGED can be adapted towards the needs of the actual CMSIS-RTOS implementation. These definitions can be specific to the underlying RTOS kernel.

    +

    Definitions that are marked with MUST REMAIN UNCHANGED cannot be altered. Otherwise the CMSIS-RTOS implementation is no longer compliant to the standard. Note that some functions are optional and need not to be provided by every CMSIS-RTOS implementation.

    +

    Define and reference object definitions

    +

    With #define osObjectsExternal objects are defined as external symbols. This allows to create a consistent header file that is used throughout a project as shown below:

    +

    Header File

    +
    #include <cmsis_os.h> // CMSIS RTOS header file
    +
    +
    // Thread definition
    +
    extern void thread_sample (void const *argument); // function prototype
    +
    osThreadDef (thread_sample, osPriorityBelowNormal, 1, 100);
    +
    +
    // Pool definition
    +
    osPoolDef(MyPool, 10, long);
    +

    This header file defines all objects when included in a C/C++ source file. When #define osObjectsExternal is present before the header file, the objects are defined as external symbols. A single consistent header file can therefore be used throughout the whole project.

    +

    Example

    +
    #include "osObjects.h" // Definition of the CMSIS-RTOS objects
    +
    #define osObjectsExternal // Objects will be defined as external symbols
    +
    #include "osObjects.h" // Reference to the CMSIS-RTOS objects
    +

    Header file cmsis_os.h

    +
    /* ----------------------------------------------------------------------
    +
    * $Date: 5. February 2013
    +
    * $Revision: V1.02
    +
    *
    +
    * Project: CMSIS-RTOS API
    +
    * Title: cmsis_os.h template header file
    +
    *
    +
    * Version 0.02
    +
    * Initial Proposal Phase
    +
    * Version 0.03
    +
    * osKernelStart added, optional feature: main started as thread
    +
    * osSemaphores have standard behavior
    +
    * osTimerCreate does not start the timer, added osTimerStart
    +
    * osThreadPass is renamed to osThreadYield
    +
    * Version 1.01
    +
    * Support for C++ interface
    +
    * - const attribute removed from the osXxxxDef_t typedef's
    +
    * - const attribute added to the osXxxxDef macros
    +
    * Added: osTimerDelete, osMutexDelete, osSemaphoreDelete
    +
    * Added: osKernelInitialize
    +
    * Version 1.02
    +
    * Control functions for short timeouts in microsecond resolution:
    +
    * Added: osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec
    +
    * Removed: osSignalGet
    +
    *----------------------------------------------------------------------------
    +
    *
    +
    * Copyright (c) 2013-2017 ARM LIMITED
    +
    *
    +
    * SPDX-License-Identifier: Apache-2.0
    +
    *
    +
    * Licensed under the Apache License, Version 2.0 (the License); you may
    +
    * not use this file except in compliance with the License.
    +
    * You may obtain a copy of the License at
    +
    *
    +
    * www.apache.org/licenses/LICENSE-2.0
    +
    *
    +
    * Unless required by applicable law or agreed to in writing, software
    +
    * distributed under the License is distributed on an AS IS BASIS, WITHOUT
    +
    * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    * See the License for the specific language governing permissions and
    +
    * limitations under the License.
    +
    *---------------------------------------------------------------------------*/
    +
    +
    +
    #ifndef _CMSIS_OS_H
    +
    #define _CMSIS_OS_H
    +
    +
    /// \note MUST REMAIN UNCHANGED: \b osCMSIS identifies the CMSIS-RTOS API version.
    +
    #define osCMSIS 0x10002 ///< API version (main [31:16] .sub [15:0])
    +
    +
    /// \note CAN BE CHANGED: \b osCMSIS_KERNEL identifies the underlying RTOS kernel and version number.
    +
    #define osCMSIS_KERNEL 0x10000 ///< RTOS identification and version (main [31:16] .sub [15:0])
    +
    +
    /// \note MUST REMAIN UNCHANGED: \b osKernelSystemId shall be consistent in every CMSIS-RTOS.
    +
    #define osKernelSystemId "KERNEL V1.00" ///< RTOS identification string
    +
    +
    /// \note MUST REMAIN UNCHANGED: \b osFeature_xxx shall be consistent in every CMSIS-RTOS.
    +
    #define osFeature_MainThread 1 ///< main thread 1=main can be thread, 0=not available
    +
    #define osFeature_Pool 1 ///< Memory Pools: 1=available, 0=not available
    +
    #define osFeature_MailQ 1 ///< Mail Queues: 1=available, 0=not available
    +
    #define osFeature_MessageQ 1 ///< Message Queues: 1=available, 0=not available
    +
    #define osFeature_Signals 8 ///< maximum number of Signal Flags available per thread
    +
    #define osFeature_Semaphore 30 ///< maximum count for \ref osSemaphoreCreate function
    +
    #define osFeature_Wait 1 ///< osWait function: 1=available, 0=not available
    +
    #define osFeature_SysTick 1 ///< osKernelSysTick functions: 1=available, 0=not available
    +
    +
    #include <stdint.h>
    +
    #include <stddef.h>
    +
    +
    #ifdef __cplusplus
    +
    extern "C"
    +
    {
    +
    #endif
    +
    +
    +
    // ==== Enumeration, structures, defines ====
    +
    +
    /// Priority used for thread control.
    +
    /// \note MUST REMAIN UNCHANGED: \b osPriority shall be consistent in every CMSIS-RTOS.
    +
    typedef enum {
    +
    osPriorityIdle = -3, ///< priority: idle (lowest)
    +
    osPriorityLow = -2, ///< priority: low
    +
    osPriorityBelowNormal = -1, ///< priority: below normal
    +
    osPriorityNormal = 0, ///< priority: normal (default)
    +
    osPriorityAboveNormal = +1, ///< priority: above normal
    +
    osPriorityHigh = +2, ///< priority: high
    +
    osPriorityRealtime = +3, ///< priority: realtime (highest)
    +
    osPriorityError = 0x84 ///< system cannot determine priority or thread has illegal priority
    + +
    +
    /// Timeout value.
    +
    /// \note MUST REMAIN UNCHANGED: \b osWaitForever shall be consistent in every CMSIS-RTOS.
    +
    #define osWaitForever 0xFFFFFFFF ///< wait forever timeout value
    +
    +
    /// Status code values returned by CMSIS-RTOS functions.
    +
    /// \note MUST REMAIN UNCHANGED: \b osStatus shall be consistent in every CMSIS-RTOS.
    +
    typedef enum {
    +
    osOK = 0, ///< function completed; no error or event occurred.
    +
    osEventSignal = 0x08, ///< function completed; signal event occurred.
    +
    osEventMessage = 0x10, ///< function completed; message event occurred.
    +
    osEventMail = 0x20, ///< function completed; mail event occurred.
    +
    osEventTimeout = 0x40, ///< function completed; timeout occurred.
    +
    osErrorParameter = 0x80, ///< parameter error: a mandatory parameter was missing or specified an incorrect object.
    +
    osErrorResource = 0x81, ///< resource not available: a specified resource was not available.
    +
    osErrorTimeoutResource = 0xC1, ///< resource not available within given time: a specified resource was not available within the timeout period.
    +
    osErrorISR = 0x82, ///< not allowed in ISR context: the function cannot be called from interrupt service routines.
    +
    osErrorISRRecursive = 0x83, ///< function called multiple times from ISR with same object.
    +
    osErrorPriority = 0x84, ///< system cannot determine priority or thread has illegal priority.
    +
    osErrorNoMemory = 0x85, ///< system is out of memory: it was impossible to allocate or reserve memory for the operation.
    +
    osErrorValue = 0x86, ///< value of a parameter is out of range.
    +
    osErrorOS = 0xFF, ///< unspecified RTOS error: run-time error but no other error message fits.
    +
    os_status_reserved = 0x7FFFFFFF ///< prevent from enum down-size compiler optimization.
    + +
    +
    +
    /// Timer type value for the timer definition.
    +
    /// \note MUST REMAIN UNCHANGED: \b os_timer_type shall be consistent in every CMSIS-RTOS.
    +
    typedef enum {
    +
    osTimerOnce = 0, ///< one-shot timer
    +
    osTimerPeriodic = 1 ///< repeating timer
    + +
    +
    /// Entry point of a thread.
    +
    /// \note MUST REMAIN UNCHANGED: \b os_pthread shall be consistent in every CMSIS-RTOS.
    +
    typedef void (*os_pthread) (void const *argument);
    +
    +
    /// Entry point of a timer call back function.
    +
    /// \note MUST REMAIN UNCHANGED: \b os_ptimer shall be consistent in every CMSIS-RTOS.
    +
    typedef void (*os_ptimer) (void const *argument);
    +
    +
    // >>> the following data type definitions may shall adapted towards a specific RTOS
    +
    +
    /// Thread ID identifies the thread (pointer to a thread control block).
    +
    /// \note CAN BE CHANGED: \b os_thread_cb is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_thread_cb *osThreadId;
    +
    +
    /// Timer ID identifies the timer (pointer to a timer control block).
    +
    /// \note CAN BE CHANGED: \b os_timer_cb is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_timer_cb *osTimerId;
    +
    +
    /// Mutex ID identifies the mutex (pointer to a mutex control block).
    +
    /// \note CAN BE CHANGED: \b os_mutex_cb is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_mutex_cb *osMutexId;
    +
    +
    /// Semaphore ID identifies the semaphore (pointer to a semaphore control block).
    +
    /// \note CAN BE CHANGED: \b os_semaphore_cb is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_semaphore_cb *osSemaphoreId;
    +
    +
    /// Pool ID identifies the memory pool (pointer to a memory pool control block).
    +
    /// \note CAN BE CHANGED: \b os_pool_cb is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_pool_cb *osPoolId;
    +
    +
    /// Message ID identifies the message queue (pointer to a message queue control block).
    +
    /// \note CAN BE CHANGED: \b os_messageQ_cb is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_messageQ_cb *osMessageQId;
    +
    +
    /// Mail ID identifies the mail queue (pointer to a mail queue control block).
    +
    /// \note CAN BE CHANGED: \b os_mailQ_cb is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_mailQ_cb *osMailQId;
    +
    +
    +
    /// Thread Definition structure contains startup information of a thread.
    +
    /// \note CAN BE CHANGED: \b os_thread_def is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_thread_def {
    +
    os_pthread pthread; ///< start address of thread function
    +
    osPriority tpriority; ///< initial thread priority
    +
    uint32_t instances; ///< maximum number of instances of that thread function
    +
    uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size
    + +
    +
    /// Timer Definition structure contains timer parameters.
    +
    /// \note CAN BE CHANGED: \b os_timer_def is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_timer_def {
    +
    os_ptimer ptimer; ///< start address of a timer function
    + +
    +
    /// Mutex Definition structure contains setup information for a mutex.
    +
    /// \note CAN BE CHANGED: \b os_mutex_def is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_mutex_def {
    +
    uint32_t dummy; ///< dummy value.
    + +
    +
    /// Semaphore Definition structure contains setup information for a semaphore.
    +
    /// \note CAN BE CHANGED: \b os_semaphore_def is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_semaphore_def {
    +
    uint32_t dummy; ///< dummy value.
    + +
    +
    /// Definition structure for memory block allocation.
    +
    /// \note CAN BE CHANGED: \b os_pool_def is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_pool_def {
    +
    uint32_t pool_sz; ///< number of items (elements) in the pool
    +
    uint32_t item_sz; ///< size of an item
    +
    void *pool; ///< pointer to memory for pool
    + +
    +
    /// Definition structure for message queue.
    +
    /// \note CAN BE CHANGED: \b os_messageQ_def is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_messageQ_def {
    +
    uint32_t queue_sz; ///< number of elements in the queue
    +
    uint32_t item_sz; ///< size of an item
    +
    void *pool; ///< memory array for messages
    + +
    +
    /// Definition structure for mail queue.
    +
    /// \note CAN BE CHANGED: \b os_mailQ_def is implementation specific in every CMSIS-RTOS.
    +
    typedef struct os_mailQ_def {
    +
    uint32_t queue_sz; ///< number of elements in the queue
    +
    uint32_t item_sz; ///< size of an item
    +
    void *pool; ///< memory array for mail
    + +
    +
    /// Event structure contains detailed information about an event.
    +
    /// \note MUST REMAIN UNCHANGED: \b os_event shall be consistent in every CMSIS-RTOS.
    +
    /// However the struct may be extended at the end.
    +
    typedef struct {
    +
    osStatus status; ///< status code: event or error information
    +
    union {
    +
    uint32_t v; ///< message as 32-bit value
    +
    void *p; ///< message or mail as void pointer
    +
    int32_t signals; ///< signal flags
    +
    } value; ///< event value
    +
    union {
    +
    osMailQId mail_id; ///< mail id obtained by \ref osMailCreate
    +
    osMessageQId message_id; ///< message id obtained by \ref osMessageCreate
    +
    } def; ///< event definition
    + +
    +
    +
    // ==== Kernel Control Functions ====
    +
    +
    /// Initialize the RTOS Kernel for creating objects.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osKernelInitialize shall be consistent in every CMSIS-RTOS.
    + +
    +
    /// Start the RTOS Kernel.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osKernelStart shall be consistent in every CMSIS-RTOS.
    + +
    +
    /// Check if the RTOS kernel is already started.
    +
    /// \note MUST REMAIN UNCHANGED: \b osKernelRunning shall be consistent in every CMSIS-RTOS.
    +
    /// \return 0 RTOS is not started, 1 RTOS is started.
    +
    int32_t osKernelRunning(void);
    +
    +
    #if (defined (osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available
    +
    +
    /// Get the RTOS kernel system timer counter
    +
    /// \note MUST REMAIN UNCHANGED: \b osKernelSysTick shall be consistent in every CMSIS-RTOS.
    +
    /// \return RTOS kernel system timer as 32-bit value
    +
    uint32_t osKernelSysTick (void);
    +
    +
    /// The RTOS kernel system timer frequency in Hz
    +
    /// \note Reflects the system timer setting and is typically defined in a configuration file.
    +
    #define osKernelSysTickFrequency 100000000
    +
    +
    /// Convert a microseconds value to a RTOS kernel system timer value.
    +
    /// \param microsec time value in microseconds.
    +
    /// \return time value normalized to the \ref osKernelSysTickFrequency
    +
    #define osKernelSysTickMicroSec(microsec) (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000)
    +
    +
    #endif // System Timer available
    +
    +
    // ==== Thread Management ====
    +
    +
    /// Create a Thread Definition with function, priority, and stack requirements.
    +
    /// \param name name of the thread function.
    +
    /// \param priority initial priority of the thread function.
    +
    /// \param instances number of possible thread instances.
    +
    /// \param stacksz stack size (in bytes) requirements for the thread function.
    +
    /// \note CAN BE CHANGED: The parameters to \b osThreadDef shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #if defined (osObjectsExternal) // object is external
    +
    #define osThreadDef(name, priority, instances, stacksz) \
    +
    extern const osThreadDef_t os_thread_def_##name
    +
    #else // define the object
    +
    #define osThreadDef(name, priority, instances, stacksz) \
    +
    const osThreadDef_t os_thread_def_##name = \
    +
    { (name), (priority), (instances), (stacksz) }
    +
    #endif
    +
    +
    /// Access a Thread definition.
    +
    /// \param name name of the thread definition object.
    +
    /// \note CAN BE CHANGED: The parameter to \b osThread shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #define osThread(name) \
    +
    &os_thread_def_##name
    +
    +
    /// Create a thread and add it to Active Threads and set it to state READY.
    +
    /// \param[in] thread_def thread definition referenced with \ref osThread.
    +
    /// \param[in] argument pointer that is passed to the thread function as start argument.
    +
    /// \return thread ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osThreadCreate shall be consistent in every CMSIS-RTOS.
    +
    osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument);
    +
    +
    /// Return the thread ID of the current running thread.
    +
    /// \return thread ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osThreadGetId shall be consistent in every CMSIS-RTOS.
    +
    osThreadId osThreadGetId (void);
    +
    +
    /// Terminate execution of a thread and remove it from Active Threads.
    +
    /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osThreadTerminate shall be consistent in every CMSIS-RTOS.
    +
    osStatus osThreadTerminate (osThreadId thread_id);
    +
    +
    /// Pass control to next thread that is in state \b READY.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osThreadYield shall be consistent in every CMSIS-RTOS.
    + +
    +
    /// Change priority of an active thread.
    +
    /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
    +
    /// \param[in] priority new priority value for the thread function.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osThreadSetPriority shall be consistent in every CMSIS-RTOS.
    +
    osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority);
    +
    +
    /// Get current priority of an active thread.
    +
    /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
    +
    /// \return current priority value of the thread function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osThreadGetPriority shall be consistent in every CMSIS-RTOS.
    +
    osPriority osThreadGetPriority (osThreadId thread_id);
    +
    +
    +
    // ==== Generic Wait Functions ====
    +
    +
    /// Wait for Timeout (Time Delay).
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value
    +
    /// \return status code that indicates the execution status of the function.
    +
    osStatus osDelay (uint32_t millisec);
    +
    +
    #if (defined (osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available
    +
    +
    /// Wait for Signal, Message, Mail, or Timeout.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out
    +
    /// \return event that contains signal, message, or mail information or error code.
    +
    /// \note MUST REMAIN UNCHANGED: \b osWait shall be consistent in every CMSIS-RTOS.
    +
    osEvent osWait (uint32_t millisec);
    +
    +
    #endif // Generic Wait available
    +
    +
    +
    // ==== Timer Management Functions ====
    +
    /// Define a Timer object.
    +
    /// \param name name of the timer object.
    +
    /// \param function name of the timer call back function.
    +
    /// \note CAN BE CHANGED: The parameter to \b osTimerDef shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #if defined (osObjectsExternal) // object is external
    +
    #define osTimerDef(name, function) \
    +
    extern const osTimerDef_t os_timer_def_##name
    +
    #else // define the object
    +
    #define osTimerDef(name, function) \
    +
    const osTimerDef_t os_timer_def_##name = \
    +
    { (function) }
    +
    #endif
    +
    +
    /// Access a Timer definition.
    +
    /// \param name name of the timer object.
    +
    /// \note CAN BE CHANGED: The parameter to \b osTimer shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #define osTimer(name) \
    +
    &os_timer_def_##name
    +
    +
    /// Create a timer.
    +
    /// \param[in] timer_def timer object referenced with \ref osTimer.
    +
    /// \param[in] type osTimerOnce for one-shot or osTimerPeriodic for periodic behavior.
    +
    /// \param[in] argument argument to the timer call back function.
    +
    /// \return timer ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osTimerCreate shall be consistent in every CMSIS-RTOS.
    +
    osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument);
    +
    +
    /// Start or restart a timer.
    +
    /// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value of the timer.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS.
    +
    osStatus osTimerStart (osTimerId timer_id, uint32_t millisec);
    +
    +
    /// Stop the timer.
    +
    /// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osTimerStop shall be consistent in every CMSIS-RTOS.
    +
    osStatus osTimerStop (osTimerId timer_id);
    +
    +
    /// Delete a timer that was created by \ref osTimerCreate.
    +
    /// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osTimerDelete shall be consistent in every CMSIS-RTOS.
    +
    osStatus osTimerDelete (osTimerId timer_id);
    +
    +
    +
    // ==== Signal Management ====
    +
    +
    /// Set the specified Signal Flags of an active thread.
    +
    /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
    +
    /// \param[in] signals specifies the signal flags of the thread that should be set.
    +
    /// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
    +
    /// \note MUST REMAIN UNCHANGED: \b osSignalSet shall be consistent in every CMSIS-RTOS.
    +
    int32_t osSignalSet (osThreadId thread_id, int32_t signals);
    +
    +
    /// Clear the specified Signal Flags of an active thread.
    +
    /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
    +
    /// \param[in] signals specifies the signal flags of the thread that shall be cleared.
    +
    /// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters or call from ISR.
    +
    /// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS.
    +
    int32_t osSignalClear (osThreadId thread_id, int32_t signals);
    +
    +
    /// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread.
    +
    /// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
    +
    /// \return event flag information or error code.
    +
    /// \note MUST REMAIN UNCHANGED: \b osSignalWait shall be consistent in every CMSIS-RTOS.
    +
    osEvent osSignalWait (int32_t signals, uint32_t millisec);
    +
    +
    +
    // ==== Mutex Management ====
    +
    +
    /// Define a Mutex.
    +
    /// \param name name of the mutex object.
    +
    /// \note CAN BE CHANGED: The parameter to \b osMutexDef shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #if defined (osObjectsExternal) // object is external
    +
    #define osMutexDef(name) \
    +
    extern const osMutexDef_t os_mutex_def_##name
    +
    #else // define the object
    +
    #define osMutexDef(name) \
    +
    const osMutexDef_t os_mutex_def_##name = { 0 }
    +
    #endif
    +
    +
    /// Access a Mutex definition.
    +
    /// \param name name of the mutex object.
    +
    /// \note CAN BE CHANGED: The parameter to \b osMutex shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #define osMutex(name) \
    +
    &os_mutex_def_##name
    +
    +
    /// Create and Initialize a Mutex object.
    +
    /// \param[in] mutex_def mutex definition referenced with \ref osMutex.
    +
    /// \return mutex ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMutexCreate shall be consistent in every CMSIS-RTOS.
    +
    osMutexId osMutexCreate (const osMutexDef_t *mutex_def);
    +
    +
    /// Wait until a Mutex becomes available.
    +
    /// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMutexWait shall be consistent in every CMSIS-RTOS.
    +
    osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec);
    +
    +
    /// Release a Mutex that was obtained by \ref osMutexWait.
    +
    /// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMutexRelease shall be consistent in every CMSIS-RTOS.
    +
    osStatus osMutexRelease (osMutexId mutex_id);
    +
    +
    /// Delete a Mutex that was created by \ref osMutexCreate.
    +
    /// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMutexDelete shall be consistent in every CMSIS-RTOS.
    +
    osStatus osMutexDelete (osMutexId mutex_id);
    +
    +
    +
    // ==== Semaphore Management Functions ====
    +
    +
    #if (defined (osFeature_Semaphore) && (osFeature_Semaphore != 0)) // Semaphore available
    +
    +
    /// Define a Semaphore object.
    +
    /// \param name name of the semaphore object.
    +
    /// \note CAN BE CHANGED: The parameter to \b osSemaphoreDef shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #if defined (osObjectsExternal) // object is external
    +
    #define osSemaphoreDef(name) \
    +
    extern const osSemaphoreDef_t os_semaphore_def_##name
    +
    #else // define the object
    +
    #define osSemaphoreDef(name) \
    +
    const osSemaphoreDef_t os_semaphore_def_##name = { 0 }
    +
    #endif
    +
    +
    /// Access a Semaphore definition.
    +
    /// \param name name of the semaphore object.
    +
    /// \note CAN BE CHANGED: The parameter to \b osSemaphore shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #define osSemaphore(name) \
    +
    &os_semaphore_def_##name
    +
    +
    /// Create and Initialize a Semaphore object used for managing resources.
    +
    /// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore.
    +
    /// \param[in] count number of available resources.
    +
    /// \return semaphore ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osSemaphoreCreate shall be consistent in every CMSIS-RTOS.
    +
    osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count);
    +
    +
    /// Wait until a Semaphore token becomes available.
    +
    /// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
    +
    /// \return number of available tokens, or -1 in case of incorrect parameters.
    +
    /// \note MUST REMAIN UNCHANGED: \b osSemaphoreWait shall be consistent in every CMSIS-RTOS.
    +
    int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec);
    +
    +
    /// Release a Semaphore token.
    +
    /// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS.
    +
    osStatus osSemaphoreRelease (osSemaphoreId semaphore_id);
    +
    +
    /// Delete a Semaphore that was created by \ref osSemaphoreCreate.
    +
    /// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osSemaphoreDelete shall be consistent in every CMSIS-RTOS.
    +
    osStatus osSemaphoreDelete (osSemaphoreId semaphore_id);
    +
    +
    #endif // Semaphore available
    +
    +
    +
    // ==== Memory Pool Management Functions ====
    +
    +
    #if (defined (osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool Management available
    +
    +
    /// \brief Define a Memory Pool.
    +
    /// \param name name of the memory pool.
    +
    /// \param no maximum number of blocks (objects) in the memory pool.
    +
    /// \param type data type of a single block (object).
    +
    /// \note CAN BE CHANGED: The parameter to \b osPoolDef shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #if defined (osObjectsExternal) // object is external
    +
    #define osPoolDef(name, no, type) \
    +
    extern const osPoolDef_t os_pool_def_##name
    +
    #else // define the object
    +
    #define osPoolDef(name, no, type) \
    +
    const osPoolDef_t os_pool_def_##name = \
    +
    { (no), sizeof(type), NULL }
    +
    #endif
    +
    +
    /// \brief Access a Memory Pool definition.
    +
    /// \param name name of the memory pool
    +
    /// \note CAN BE CHANGED: The parameter to \b osPool shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #define osPool(name) \
    +
    &os_pool_def_##name
    +
    +
    /// Create and Initialize a memory pool.
    +
    /// \param[in] pool_def memory pool definition referenced with \ref osPool.
    +
    /// \return memory pool ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osPoolCreate shall be consistent in every CMSIS-RTOS.
    +
    osPoolId osPoolCreate (const osPoolDef_t *pool_def);
    +
    +
    /// Allocate a memory block from a memory pool.
    +
    /// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
    +
    /// \return address of the allocated memory block or NULL in case of no memory available.
    +
    /// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS.
    +
    void *osPoolAlloc (osPoolId pool_id);
    +
    +
    /// Allocate a memory block from a memory pool and set memory block to zero.
    +
    /// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
    +
    /// \return address of the allocated memory block or NULL in case of no memory available.
    +
    /// \note MUST REMAIN UNCHANGED: \b osPoolCAlloc shall be consistent in every CMSIS-RTOS.
    +
    void *osPoolCAlloc (osPoolId pool_id);
    +
    +
    /// Return an allocated memory block back to a specific memory pool.
    +
    /// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
    +
    /// \param[in] block address of the allocated memory block that is returned to the memory pool.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS.
    +
    osStatus osPoolFree (osPoolId pool_id, void *block);
    +
    +
    #endif // Memory Pool Management available
    +
    +
    +
    // ==== Message Queue Management Functions ====
    +
    +
    #if (defined (osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queues available
    +
    +
    /// \brief Create a Message Queue Definition.
    +
    /// \param name name of the queue.
    +
    /// \param queue_sz maximum number of messages in the queue.
    +
    /// \param type data type of a single message element (for debugger).
    +
    /// \note CAN BE CHANGED: The parameter to \b osMessageQDef shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #if defined (osObjectsExternal) // object is external
    +
    #define osMessageQDef(name, queue_sz, type) \
    +
    extern const osMessageQDef_t os_messageQ_def_##name
    +
    #else // define the object
    +
    #define osMessageQDef(name, queue_sz, type) \
    +
    const osMessageQDef_t os_messageQ_def_##name = \
    +
    { (queue_sz), sizeof (type) }
    +
    #endif
    +
    +
    /// \brief Access a Message Queue Definition.
    +
    /// \param name name of the queue
    +
    /// \note CAN BE CHANGED: The parameter to \b osMessageQ shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #define osMessageQ(name) \
    +
    &os_messageQ_def_##name
    +
    +
    /// Create and Initialize a Message Queue.
    +
    /// \param[in] queue_def queue definition referenced with \ref osMessageQ.
    +
    /// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
    +
    /// \return message queue ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMessageCreate shall be consistent in every CMSIS-RTOS.
    +
    osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id);
    +
    +
    /// Put a Message to a Queue.
    +
    /// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
    +
    /// \param[in] info message information.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMessagePut shall be consistent in every CMSIS-RTOS.
    +
    osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec);
    +
    +
    /// Get a Message or Wait for a Message from a Queue.
    +
    /// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
    +
    /// \return event information that includes status code.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMessageGet shall be consistent in every CMSIS-RTOS.
    +
    osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec);
    +
    +
    #endif // Message Queues available
    +
    +
    +
    // ==== Mail Queue Management Functions ====
    +
    +
    #if (defined (osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queues available
    +
    +
    /// \brief Create a Mail Queue Definition.
    +
    /// \param name name of the queue
    +
    /// \param queue_sz maximum number of messages in queue
    +
    /// \param type data type of a single message element
    +
    /// \note CAN BE CHANGED: The parameter to \b osMailQDef shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #if defined (osObjectsExternal) // object is external
    +
    #define osMailQDef(name, queue_sz, type) \
    +
    extern const osMailQDef_t os_mailQ_def_##name
    +
    #else // define the object
    +
    #define osMailQDef(name, queue_sz, type) \
    +
    const osMailQDef_t os_mailQ_def_##name = \
    +
    { (queue_sz), sizeof (type) }
    +
    #endif
    +
    +
    /// \brief Access a Mail Queue Definition.
    +
    /// \param name name of the queue
    +
    /// \note CAN BE CHANGED: The parameter to \b osMailQ shall be consistent but the
    +
    /// macro body is implementation specific in every CMSIS-RTOS.
    +
    #define osMailQ(name) \
    +
    &os_mailQ_def_##name
    +
    +
    /// Create and Initialize mail queue.
    +
    /// \param[in] queue_def reference to the mail queue definition obtain with \ref osMailQ
    +
    /// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
    +
    /// \return mail queue ID for reference by other functions or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMailCreate shall be consistent in every CMSIS-RTOS.
    +
    osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id);
    +
    +
    /// Allocate a memory block from a mail.
    +
    /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out
    +
    /// \return pointer to memory block that can be filled with mail or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMailAlloc shall be consistent in every CMSIS-RTOS.
    +
    void *osMailAlloc (osMailQId queue_id, uint32_t millisec);
    +
    +
    /// Allocate a memory block from a mail and set memory block to zero.
    +
    /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out
    +
    /// \return pointer to memory block that can be filled with mail or NULL in case of error.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMailCAlloc shall be consistent in every CMSIS-RTOS.
    +
    void *osMailCAlloc (osMailQId queue_id, uint32_t millisec);
    +
    +
    /// Put a mail to a queue.
    +
    /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
    +
    /// \param[in] mail memory block previously allocated with \ref osMailAlloc or \ref osMailCAlloc.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMailPut shall be consistent in every CMSIS-RTOS.
    +
    osStatus osMailPut (osMailQId queue_id, void *mail);
    +
    +
    /// Get a mail from a queue.
    +
    /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
    +
    /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out
    +
    /// \return event that contains mail information or error code.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMailGet shall be consistent in every CMSIS-RTOS.
    +
    osEvent osMailGet (osMailQId queue_id, uint32_t millisec);
    +
    +
    /// Free a memory block from a mail.
    +
    /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
    +
    /// \param[in] mail pointer to the memory block that was obtained with \ref osMailGet.
    +
    /// \return status code that indicates the execution status of the function.
    +
    /// \note MUST REMAIN UNCHANGED: \b osMailFree shall be consistent in every CMSIS-RTOS.
    +
    osStatus osMailFree (osMailQId queue_id, void *mail);
    +
    +
    #endif // Mail Queues available
    +
    +
    +
    #ifdef __cplusplus
    +
    }
    +
    #endif
    +
    +
    #endif // _CMSIS_OS_H
    +
    +
    + + + + -- cgit