Release Candidate 1
This commit is contained in:
MMS 2021-08-19 11:06:24 -04:00
parent 8c916c02b9
commit c3b15c6674
22 changed files with 145 additions and 946 deletions

View File

@ -5,9 +5,9 @@
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "QP/C"
PROJECT_NUMBER = "6.9.3"
PROJECT_BRIEF =
PROJECT_LOGO = images/header_logo_ql.png
PROJECT_NUMBER = "6.9.4"
PROJECT_BRIEF = "Real-Time Embedded Framework"
PROJECT_LOGO = images/logo_ql.png
OUTPUT_DIRECTORY =
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
@ -15,7 +15,17 @@ OUTPUT_LANGUAGE = English
OUTPUT_TEXT_DIRECTION = None
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
@ -24,21 +34,22 @@ STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
JAVADOC_BANNER = NO
QT_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
PYTHON_DOCSTRING = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES = "next{1}=<hr><b>Next:</b> @ref \1</p>" \
"description=@par Description" \
"amplification=@par Amplification" \
"rationale=@par Rationale" \
"caption{1}=<div class=\"caption\" align=\"center\">\1</div>" \
"hint=@par Hint" \
"usage=@par Usage" \
"caption{1}=<div class=\"caption\" align=\"center\">\1</div>" \
"reqdef{2}=<div class= vmargin20></div>@anchor \1 <TABLE><TR ALIGN= left><TH NOWRAP>\1</TH><TH WIDTH= 100%>\2</TH></TR></TABLE>" \
"reqref{1}=@ref \1 \"\1\"" \
"termdef{2}=@anchor term_\1 @par \2" \
"termref{1}=@ref term_\1"
"termref{2}=<a class=\"extern\" target=\"_blank\" href=\"https://www.state-machine.com/\1\">\2</a>" \
"reqdef{1}=@anchor \1 @xrefitem reqdef \"Requirement\" \"Requirement Index\" @ref \1" \
"reqref{1}=@ref \1 \"\1\""
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
@ -181,6 +192,7 @@ SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
CLANG_ASSISTED_PARSING = NO
CLANG_ADD_INC_PATHS = YES
CLANG_OPTIONS =
CLANG_DATABASE_PATH =
#---------------------------------------------------------------------------
@ -194,14 +206,15 @@ IGNORE_PREFIX =
GENERATE_HTML = YES
HTML_OUTPUT = ../html
HTML_FILE_EXTENSION = .html
HTML_HEADER = ../../doxygen/header.html
HTML_FOOTER = ../../doxygen/footer.html
HTML_HEADER = ../../doxygen/header-awesome.html
HTML_FOOTER = ../../doxygen/footer-awesome.html
HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET = ../../doxygen/ql.css
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_EXTRA_STYLESHEET = ../../doxygen/doxygen-awesome.css \
../../doxygen/ql-awesome.css
HTML_EXTRA_FILES = ../../doxygen/doxygen-awesome-darkmode-toggle.js
HTML_COLORSTYLE_HUE = 209
HTML_COLORSTYLE_SAT = 255
HTML_COLORSTYLE_GAMMA = 113
HTML_TIMESTAMP = NO
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
@ -231,7 +244,7 @@ ECLIPSE_DOC_ID = com.state-machine.qp
DISABLE_INDEX = YES
GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 180
TREEVIEW_WIDTH = 300
EXT_LINKS_IN_WINDOW = NO
HTML_FORMULA_FORMAT = png
FORMULA_FONTSIZE = 10
@ -239,7 +252,7 @@ FORMULA_TRANSPARENT = YES
FORMULA_MACROFILE =
USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES

View File

@ -1,390 +1,13 @@
# Doxyfile 1.9.0
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "QP/C"
PROJECT_NUMBER = "6.9.3"
PROJECT_BRIEF =
PROJECT_LOGO = images/header_logo_ql.png
OUTPUT_DIRECTORY =
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
OUTPUT_TEXT_DIRECTION = None
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
JAVADOC_BANNER = NO
QT_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = YES
PYTHON_DOCSTRING = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES = "next{1}=<hr><b>Next:</b> @ref \1</p>" \
"description=@par Description" \
"hint=@par Hint" \
"usage=@par Usage" \
"caption{1}=<div class=\"caption\" align=\"center\">\1</div>" \
"reqdef{2}=<div class= vmargin20></div>@anchor \1 <TABLE><TR ALIGN= left><TH NOWRAP>\1</TH><TH WIDTH= 100%>\2</TH></TR></TABLE>" \
"reqref{1}=@ref \1 \"\1\"" \
"termdef{2}=@anchor term_\1 @par \2" \
"termref{1}=@ref term_\1"
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
OPTIMIZE_OUTPUT_SLICE = NO
EXTENSION_MAPPING = lnt=Objective-C
MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 4
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = YES
INLINE_SIMPLE_STRUCTS = YES
TYPEDEF_HIDES_STRUCT = YES
LOOKUP_CACHE_SIZE = 0
NUM_PROC_THREADS = 1
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_PRIV_VIRTUAL = NO
EXTRACT_PACKAGE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
RESOLVE_UNNAMED_PARAMS = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = YES
HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = NO
SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = main.dox \
gs.dox \
struct.dox \
api.dox \
exa.dox \
exa_apps.dox \
exa_native.dox \
../../doxygen/exa_low-power.dox \
exa_rtos.dox \
exa_os.dox \
exa_qutest.dox \
exa_mware.dox \
ports.dox \
ports_native.dox \
../../doxygen/ports_arm-cm.dox \
ports_rtos.dox \
ports_os.dox \
history.dox \
macros.h \
metrics.dox \
modules.dox \
../include \
../src \
../ports/lint-plus \
../../doxygen/help.dox
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.dox \
*.h \
*.c \
*.cpp \
*.s \
*.asm \
*.lnt
RECURSIVE = YES
EXCLUDE = ../include/qs_dummy.h
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = QP_IMPL
EXAMPLE_PATH = snippets \
../include \
../src \
../ports \
../examples
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH = images \
../../doxygen/images
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
CLANG_ASSISTED_PARSING = NO
CLANG_OPTIONS =
CLANG_DATABASE_PATH =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
IGNORE_PREFIX =
@INCLUDE = Doxyfile
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = tmp
HTML_FILE_EXTENSION = .html
HTML_HEADER = ../../doxygen/header.html
HTML_FOOTER = ../../doxygen/footer.html
HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET = ../../doxygen/ql.css
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = NO
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = com.state-machine.doc
DOCSET_PUBLISHER_ID = com.state-machine.doc
DOCSET_PUBLISHER_NAME = QuantumLeaps
GENERATE_HTMLHELP = YES
CHM_FILE = ../qpc.chm
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = YES
TOC_EXPAND = NO
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = com.state-machine.qp
QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS =
QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = com.state-machine.qp
DISABLE_INDEX = YES
GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 180
EXT_LINKS_IN_WINDOW = NO
HTML_FORMULA_FORMAT = png
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
FORMULA_MACROFILE =
USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
LATEX_MAKEINDEX_CMD = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = letter
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
LATEX_EXTRA_STYLESHEET =
LATEX_EXTRA_FILES =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
LATEX_TIMESTAMP = NO
LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_SUBDIR =
MAN_LINKS = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_PROGRAMLISTING = YES
XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = Q_SPY \
QP_IMPL \
Q_UTEST \
QK_ON_CONTEXT_SW \
QXK_ON_CONTEXT_SW \
QF_MAX_ACTIVE \
QF_MAX_TICK_RATE \
QF_MAX_EPOOL \
QF_EVENT_SIZ_SIZE \
QF_EQUEUE_CTR_SIZE \
QF_MPOOL_SIZ_SIZE \
QF_MPOOL_CTR_SIZE \
QF_TIMEEVT_CTR_SIZE \
QF_ACTIVE_STOP \
QS_TIME_SIZE
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = YES
UML_LIMIT_NUM_FIELDS = 10
DOT_UML_DETAILS = NO
DOT_WRAP_THRESHOLD = 17
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH = C:/tools/graphviz/bin
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES

View File

@ -1,394 +1,11 @@
# Doxyfile 1.9.0
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "QP/C"
PROJECT_NUMBER = "6.9.3"
PROJECT_BRIEF =
PROJECT_LOGO = images/header_logo_ql.png
OUTPUT_DIRECTORY =
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
OUTPUT_TEXT_DIRECTION = None
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
JAVADOC_BANNER = NO
QT_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = YES
PYTHON_DOCSTRING = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES = "next{1}=<hr><b>Next:</b> @ref \1</p>" \
"description=@par Description" \
"hint=@par Hint" \
"usage=@par Usage" \
"caption{1}=<div class=\"caption\" align=\"center\">\1</div>" \
"reqdef{2}=<div class= vmargin20></div>@anchor \1 <TABLE><TR ALIGN= left><TH NOWRAP>\1</TH><TH WIDTH= 100%>\2</TH></TR></TABLE>" \
"reqref{1}=@ref \1 \"\1\"" \
"termdef{2}=@anchor term_\1 @par \2" \
"termref{1}=@ref term_\1"
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
OPTIMIZE_OUTPUT_SLICE = NO
EXTENSION_MAPPING = lnt=Objective-C
MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 4
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = YES
INLINE_SIMPLE_STRUCTS = YES
TYPEDEF_HIDES_STRUCT = YES
LOOKUP_CACHE_SIZE = 0
NUM_PROC_THREADS = 1
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_PRIV_VIRTUAL = NO
EXTRACT_PACKAGE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
RESOLVE_UNNAMED_PARAMS = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = YES
HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = NO
SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
@INCLUDE = Doxyfile
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = main.dox \
gs.dox \
struct.dox \
api.dox \
spec.dox \
srs.dox \
sas.dox \
sds.dox \
exa.dox \
exa_apps.dox \
exa_native.dox \
../../doxygen/exa_low-power.dox \
exa_rtos.dox \
exa_os.dox \
exa_qutest.dox \
exa_mware.dox \
ports.dox \
ports_native.dox \
../../doxygen/ports_arm-cm.dox \
ports_rtos.dox \
ports_os.dox \
history.dox \
macros.h \
metrics.dox \
modules.dox \
../include \
../src \
../ports/lint-plus \
modules.dox
../../doxygen/help.dox
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.dox \
*.h \
*.c \
*.cpp \
*.s \
*.asm \
*.lnt
RECURSIVE = YES
EXCLUDE = ../include/qs_dummy.h
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = QP_IMPL
EXAMPLE_PATH = snippets \
../include \
../src \
../ports \
../examples
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH = images \
../../doxygen/images
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
CLANG_ASSISTED_PARSING = NO
CLANG_OPTIONS =
CLANG_DATABASE_PATH =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = ../html
HTML_FILE_EXTENSION = .html
HTML_HEADER = ../../doxygen/header.html
HTML_FOOTER = ../../doxygen/footer.html
HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET = ../../doxygen/ql.css
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = NO
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = com.state-machine.doc
DOCSET_PUBLISHER_ID = com.state-machine.doc
DOCSET_PUBLISHER_NAME = QuantumLeaps
GENERATE_HTMLHELP = NO
CHM_FILE = ../qpc.chm
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = YES
TOC_EXPAND = NO
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = com.state-machine.qp
QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS =
QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = com.state-machine.qp
DISABLE_INDEX = YES
GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 180
EXT_LINKS_IN_WINDOW = NO
HTML_FORMULA_FORMAT = png
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
FORMULA_MACROFILE =
USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
LATEX_MAKEINDEX_CMD = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = letter
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
LATEX_EXTRA_STYLESHEET =
LATEX_EXTRA_FILES =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
LATEX_TIMESTAMP = NO
LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_SUBDIR =
MAN_LINKS = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_PROGRAMLISTING = YES
XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = Q_SPY \
QP_IMPL \
Q_UTEST \
QK_ON_CONTEXT_SW \
QXK_ON_CONTEXT_SW \
QF_MAX_ACTIVE \
QF_MAX_TICK_RATE \
QF_MAX_EPOOL \
QF_EVENT_SIZ_SIZE \
QF_EQUEUE_CTR_SIZE \
QF_MPOOL_SIZ_SIZE \
QF_MPOOL_CTR_SIZE \
QF_TIMEEVT_CTR_SIZE \
QF_ACTIVE_STOP \
QS_TIME_SIZE
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = YES
UML_LIMIT_NUM_FIELDS = 10
DOT_UML_DETAILS = NO
DOT_WRAP_THRESHOLD = 17
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH = C:/tools/graphviz/bin
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES

View File

@ -66,7 +66,7 @@ QF is a portable, event-driven, real-time framework for execution of active obje
- QTimeEvt_armX()
- QTimeEvt_disarm()
- QTimeEvt_rearm()
- QTimeEvt_ctr()
- QTimeEvt_currCtr()
- ::QTicker active object

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
doxygen/images/logo_ql.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
doxygen/img/github-qp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
doxygen/img/help_dark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

BIN
doxygen/img/help_light.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 B

View File

@ -14,9 +14,12 @@
<img src="AN_OOP_in_C.gif">
<img src="AN_Active_Objects_for_Embedded.jpg">
<img src="AN_Crash_Course_in_UML_State_Machines.gif">
<img src="help_light.png">
<img src="help_dark.png">
<img src="tree-view_linked.png">
<img src="tree-view_unlinked.png">
<img src="logo_qp.gif">
<img src="github-corner.png">
<img src="github-qp.png">
<img src="logo_qwin.jpg">
<img src="board.png">
<img src="checkboxoff.png">
@ -34,7 +37,6 @@
<img src="file_qmp.png">
<img src="file_tcl.png">
<img src="file_wish.png">
<img src="file_wish.png">
<img src="folder.png">
<img src="forbidden.png">
<img src="header_bg.png">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -2,9 +2,14 @@
@image html qp_banner.jpg
@section ab_new What's new?
To check what's new in QP/C, please see @ref history "QP/C Revision History".
@htmlonly
<a target="_blank" href="https://github.com/QuantumLeaps/qpc" title="QP/C on GitHub"><img style="float:right; clear:right;" src="img/github-corner.png"></a>
@endhtmlonly
@section ab_new What's new?
To check what's new in QP/C, please see @ref history "QP/C Revision History". You can also get the latest __QP/C code__, with the recent enhancements and bug fixes, from the <a class="extern" target="_blank" href="https://github.com/QuantumLeaps/qpc"><strong>GitHub QP/C repository</strong></a>.
<div style="clear:both"></div>
@section ab_about What is it?
@ -15,14 +20,8 @@ The behavior of active objects is specified in QP/C by means of <a href="https:/
@attention
To use QP/C&trade; effectively, you need to understand the <a href="https://www.state-machine.com/category/concepts/" target="_blank" class="extern"><strong>key concepts</strong></a> that underline the architecture of the framework and your applications based on the framework.
<div style="clear:both"></div>
@htmlonly
<img style="float:right; margin:10px 8px 8px 15px; clear:right;" src="img/logo_qp.gif" title="QP">
@endhtmlonly
@section ab_goals What does it do?
The main goals of the QP/C&trade; framework are:
- to provide a reusable event-driven **architecture** based on <a class="extern" target="_blank" href="https://www.state-machine.com/active-object/">active objects (actors)</a>, which is inherently **safer**, more extensible, and easier to understand than the usual _shared-state concurrency_ based on a traditional Real-Time Operating System (RTOS).
@ -124,7 +123,6 @@ Training and consulting services are also available from Quantum Leaps. Please r
- e-mail: <a class="extern" target="_blank" href="mailto:info@state-machine.com">info@state-machine.com</a>
@image html logo_ql_TM.jpg
@next{gs}
*/

View File

@ -1,8 +1,8 @@
@echo off
:: ==========================================================================
:: Product: QP/C script for generating Doxygen documentation
:: Last Updated for Version: 6.9.0
:: Date of the Last Update: 2020-08-24
:: Last Updated for Version: 6.9.4
:: Date of the Last Update: 2021-08-14
::
:: Q u a n t u m L e a P s
:: ------------------------

View File

@ -113,16 +113,6 @@ The software shall support hierarchical state nesting
@subsection sas_qep State Machine Event Processor
@reqdef{RQPC101, The software shall support hierarchical state nesting}
@par Amplification
State hierarchy is the primary mechanism of behavioral reuse in state machines.
@par Rationale
This is a useful thing to have
@reqdef{RQPC102, The software shall support manual coding}
@subsection sas_qv Cooperative Run-to-Completion Kernel

View File

@ -1,30 +1,28 @@
/*! @page srs_toc SRS
/*! @page srs_toc Requirements (SRS)
<h1>Software Requirements Specification (SRS)</h1>
<p>This document specifies the requirements for the **QP/C** @termref{ao} @termref{framework} (later referenced simply as _QP/C_). This document describes the intended features of _QP/C_, as well as the interfaces to other software, hardware, and various other technical dependencies. The quick links to the main sections of this SRS are given below:
<p>This document specifies the requirements for the **QP/C** @termref{rtef, real-time embedded framework (RTEF)} (later referenced simply as _QP/C_). This document describes the intended features of _QP/C_, as well as the interfaces to other software, hardware, and various other technical dependencies. The quick links to the main sections of this SRS are given below:
</p>
- @subpage srs_intro
+ @ref srs_concepts
+ @ref srs_purpose
+ @ref srs_scope
+ @ref srs_audience
+ @ref srs_conv
+ @ref srs_refs
- @subpage srs_descr
+ @ref srs_prod
+ @ref srs_funct
+ @ref srs_user
+ @ref srs_assume
- @subpage srs
+ @ref srs_fun
- @ref srs_qf
- @ref srs_qep
- @ref srs_qv
- @ref srs_qk
- @ref srs_qxk
+ @ref srs_non-fun
- @subpage srs_fun
+ @ref srs_qf
+ @ref srs_qep
+ @ref srs_qv
+ @ref srs_qk
+ @ref srs_qxk
- @subpage srs_nf
+ @ref srs_constr
- @subpage reqdef
@next{srs_intro}
@ -42,66 +40,12 @@
- problems related to execution logic, such as correctly choosing the right code to execute in response to a given event.
<p>The embedded software industry is in the midst of a major revolution. Tremendous amount of new development lays ahead. This new software needs an actual @termref{architecture} that is _safer_, more extensible, and easier to understand than the usual "free-threading" approach of a traditional Real-Time Operating System (@termref{RTOS}).
</p>
This document describes the requirements of the QP/C software framework, which provides such a reusable software architecture for real-time embedded (RTE) systems. This architecture is based on event-driven, asynchronous, non-blocking, encapsulated @ref srs_ao "active objects".
@section srs_concepts Key Concepts
This section introduces the key concepts related to this increasingly popular "reactive approach", and specifically how they apply to the QP/C active object framework. Please refer to the Section @ref srs_refs for more information about the concepts.
@subsection srs_ao Active Objects
<strong>Active objects</strong> (a.k.a. **actors**) are event-driven, strictly encapsulated software objects running in their own threads of control that communicate with one another asynchronously by exchanging events. The @termref{UML} specification further proposes the UML variant of **hierarchical state machines** (UML state machines), with which to model the _behavior_ of event-driven active objects.
The Active Object design pattern inherently supports and automatically enforces the best practices of concurrent programming. Structuring applications as sets of collaborating active objects is valuable, because it dramatically improves the developers' ability to reason about concurrent code, gives them higher-level abstractions and idioms that raise the semantic level of their program, and lets them express their intent more directly and **safely** than working with "naked threads" of an @termref{RTOS} directly.
@subsection srs_framework Active Object (Actor) Frameworks
Active objects (actors) are universally implemented by means of a @termref{framework} that provides, at a minimum, an execution context (thread) for each active object, queuing of events, and event-based timing services.
> **Inversion of Control** <br>The most important point to understand about a framework is how it differs from a toolkit, such as a traditional @termref{RTOS}. When you use an RTOS, <em>you</em> write the main body of each thread and <em>you</em> call the code from the (RT)OS (such as a semaphore, time delay, etc.) In contrast, when you use a framework, you reuse the whole architecture and write the code that <em>it</em> calls. This leads to <span class="label label-primary">inversion of control</span> compared to the traditional RTOS and is very characteristic to virtually all event-driven systems, such as Active Objects.
The inversion of control is the main reason for the **architectural-reuse** and enforcement of the best practices, as opposed to re-inventing them for each project at hand. This reuse leads to a much higher consistency and **conceptual integrity** of the final product and dramatic **improvement of developer's productivity**.
@subsection srs_encapsulation True Encapsulation for Concurrency
In a sense active objects are the most stringent form of object-oriented programming (OOP), because the asynchronous communication enables active objects to be truly <strong>encapsulated</strong>. In contrast, the traditional OOP encapsulation, as provided by C++, C# or Java, does not really encapsulate anything in terms of concurrency. Any operation on an object runs in the caller's thread and the attributes of the object are subject to the same race conditions as global data, not encapsulated at all. To become thread-safe, operations need to be explicitly protected by a mutual exclusion mechanism, such as a mutex or a monitor, but this <span title="&quot;Sharing Is the Root of All Contention&quot; by Herb Sutter, DDJ 2009"><a class="extern" target="_blank" href="http://www.drdobbs.com/architecture-and-design/sharing-is-the-root-of-all-contention/214100002">reduces parallelism dramatically, causes contention, and is a natural enemy of scalability</a></span>.
In contrast, all private attributes of an active object are truly encapsulated without any mutual exclusion mechanism, because they can be only accessed from the active object's own thread. Note that this <strong>encapsulation for concurrency</strong> is not a programming language feature, so it is no more difficult to achieve in C as in C++, but it requires a programming discipline to avoid sharing resources (<span title="&quot;Shared nothing architecture&quot;, Wikipedia"><a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/Shared_nothing_architecture">shared-nothing principle</a></span>). However, the event-based communication helps immensely, because instead of sharing a resource, a dedicated active object can become the manager of the resource and the rest of the system can access the resource only via events posted to this manager active object.
@subsection srs_asynch Asynchronous Communication
Each active object has its own event queue and receives all events exclusively through this queue. Events are delivered <strong>asynchronously</strong>, meaning that an event producer merely posts an event to the event queue of the recipient active object but does <strong>not</strong> wait (<a href="#Blocking">block</a>) in line for the actual processing of the event. The event processing occurs always in the thread context of the recipient active object. The active object framework, such as QP, is responsible for delivering and queuing the events in a thread-safe and deterministic manner.
@subsection srs_rtc Run-to-Completion Event Processing
<p>Each active object handles events in run-to-completion (RTC) fashion, which also is exactly the semantics universally assumed by all state machine formalisms, including <span title="&quot;Run-to-completion execution model in UML State Machines&quot; Wikipedia"><a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/UML_state_machine#Run-to-completion_execution_model">UML statecharts</a></span>. RTC simply means that an active object handles one event at a time, that is, the active object must complete the processing of an event before it can start processing of the next event from its queue.
> **RTC versus Preemption** <br>In the case of active objects, where each object runs in its own thread, it is important to clearly distinguish the notion of RTC from the concept of <span title="&quot;Preemption (computing)&quot; Wikipedia"><a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/Preemption_(computing)">thread preemption</a></span>. In particular, RTC does <strong>not</strong> mean that the active object thread has to monopolize the CPU until the RTC step is complete. Under a <em>preemptive</em> kernel, for example, an RTC step can be preempted by another thread executing on the same CPU. This is determined by the scheduling policy of the underlying kernel, not by the active object model. When the suspended thread is assigned CPU time again, it resumes from the point of preemption and, eventually, completes its event processing. As long as the preempting and the preempted threads don't not share any resources, there are <strong>no concurrency hazards</strong>.
@subsection srs_blocking No Blocking
Most conventional RTOS kernels manage the tasks and all inter-task communication based on <strong>blocking</strong>, such as waiting on a semaphore. However, blocking is problematic, because while a task is blocked waiting for one type of event, the task is not doing any other work and is <strong>not responsive</strong> to other events. Such a task cannot be easily extended to handle new events.
In contrast, event-driven active objects don't need to block, because in event-driven systems the control is <a href="#Inversion">inverted</a> compared to traditional RTOS tasks. Instead of blocking to wait for an event, an active object simply finishes its RTC step and returns to the framework to be activated when the next event arrives. This arrangement allows active objects to remain <strong>responsive</strong> to events of all types, which is central to the unprecedented flexibility and extensibility of active object systems.
@subsection srs_hsm Hierarchical State Machines
As suggested in the UML specification and similar as in <span title="&quot;Real-Time Object-Oriented Modeling&quot; Wikipedia"><a class="extern" target="_blank" href="https://en.wikipedia.org/wiki/Real-Time_Object-Oriented_Modeling">ROOM</a></span>, the behavior of each Active Object can be specified by means of a <span class="label label-primary">hierarchical state machine</span> (<span title="&quot;UML state machine&quot;, Wikipedia"><a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/UML_state_machine">UML statechart</a></span>), which is a very effective and elegant technique of describing event-driven behavior.
@section srs_purpose Purpose
The purpose of the QP/C @termref{ao} @termref{framework} is to provide a reusable software @termref{architecture} and efficient implementation of the @termref{ao} model of computation for deeply embedded applications, such as single-chip microcontrollers.
@ -134,12 +78,6 @@ Requirement definitions use consistent terminology to indicate whether something
@section srs_refs References
@next{srs_descr}
*/
/*##########################################################################*/
/*! @page srs_descr Overall Description
@section srs_prod Product Perspective
@ -149,6 +87,8 @@ Requirement definitions use consistent terminology to indicate whether something
- @reqref{RQPC101}
- @reqref{RQPC102}
- @reqref{RQPC201}
- @reqref{RQPC202}
@section srs_user User Characteristics
@ -159,71 +99,85 @@ The main users of the QP/C framework are **embedded software engineers**, who de
@section srs_assume Assumptions and Dependencies
@next{srs}
@next{srs_fun}
*/
/*##########################################################################*/
/*! @page srs Requirements
/*! @page srs_fun Functional Requirements
@section srs_fun Functional Requirements
@section srs_qf Active Object Framework
@subsection srs_qf Active Object Framework
The software shall support hierarchical state nesting
@section srs_qep State Machine Event Processor
@reqdef{RQPC101} The software shall support hierarchical state nesting
@subsection srs_qep State Machine Event Processor
@reqdef{RQPC101, The software shall support hierarchical state nesting}
@par Amplification
@amplification
State hierarchy is the primary mechanism of behavioral reuse in state machines.
@par Rationale
@rationale
This is a useful thing to have
@reqdef{RQPC102, The software shall support manual coding}
@reqdef{RQPC102} The software shall support manual coding
@amplification
The implementation must be traceable.
@section srs_qv Cooperative Run-to-Completion Kernel
@subsection srs_qv Cooperative Run-to-Completion Kernel
@section srs_qk Preemptive Run-to-Completion Kernel
@subsection srs_qk Preemptive Run-to-Completion Kernel
@section srs_qxk Preemptive Blocking Kernel
@next{srs_nf}
*/
/*##########################################################################*/
/*! @page srs_nf Non-Functional Requirements
@section srs_quality Software Quality Attributes
@subsection srs_qxk Preemptive Blocking Kernel
@section srs_perform Performance Requirements
@reqdef{RQPC201} The software shall support hierarchical state nesting
@section srs_non-fun Non-functional Requirements
@amplification
State hierarchy is the primary mechanism of behavioral reuse in state machines.
@rationale
This is a useful thing to have
@subsection srs_quality Software Quality Attributes
@section srs_port Portability Requirements
@reqdef{RQPC202}
The software shall support hierarchical state nesting
@par Amplification
The implementation must be traceable.
@subsection srs_perform Performance Requirements
@section srs_safe Safety Requirements
@subsection srs_port Portability Requirements
@subsection srs_safe Safety Requirements
@subsection srs_secure Security Requirements
@section srs_secure Security Requirements
@section srs_constr Constraints
@subsection srs_standards Compliance with Standards
@section srs_standards Compliance with Standards
@next{sas_toc}
*/

View File

@ -69,35 +69,35 @@ The figure below shows the main classes comprising the QP/C framework and their
@image html qp_classes.gif "Main Classes in the QP Framework"
<ul class="tag">
<li><span class="tag">0</span> The ::QEvt class represents events without parameters and serves as the base class for derivation of time events and any events with parameters. For example, application-level events `ObjectPosEvt` and `ObjectImageEvt` inherit ::QEvt and add to it some parameters (see [8]).
</li>
<dl class="tag">
<dt>0</dt><dd> The ::QEvt class represents events without parameters and serves as the base class for derivation of time events and any events with parameters. For example, application-level events `ObjectPosEvt` and `ObjectImageEvt` inherit ::QEvt and add to it some parameters (see [8]).
</dd>
<li><span class="tag">1</span> The abstract ::QHsm class represents a Hierarchical State Machine (HSM) with full support for hierarchical nesting of states, entry/exit actions, initial transitions, and transitions to history in any composite state. This class is designed for ease of manual coding of HSMs in C, but it is also supported by the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>.
<dt>1</dt><dd> The abstract ::QHsm class represents a Hierarchical State Machine (HSM) with full support for hierarchical nesting of states, entry/exit actions, initial transitions, and transitions to history in any composite state. This class is designed for ease of manual coding of HSMs in C, but it is also supported by the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>.
::QHsm is also the base class for the ::QMsm state machine, which provides a superior efficiency, but requires the use of the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a> to generate code.
</li>
</dd>
<li><span class="tag">2</span> The abstract ::QActive class represents an active object that uses the ::QHsm style implementation strategy for state machines. This strategy is tailored to manual coding, but it is also supported by the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>. The resulting code is slower than in the ::QMsm-style implementation strategy. The @ref game application provides an example of application-level classes deriving from ::QActive and ::QHsm (see [6] and [7]).
</li>
<dt>2</dt><dd> The abstract ::QActive class represents an active object that uses the ::QHsm style implementation strategy for state machines. This strategy is tailored to manual coding, but it is also supported by the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>. The resulting code is slower than in the ::QMsm-style implementation strategy. The @ref game application provides an example of application-level classes deriving from ::QActive and ::QHsm (see [6] and [7]).
</dd>
<li><span class="tag">3</span> The abstract ::QMsm class (QM State Machine) derives from ::QHsm and implements the fastest and the most efficient strategy for coding hierarchical state machines, but this strategy is not human-maintainable and requires the use of the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>. The class is abstract, meaning that it is not designed to be instantiated directly, but rather only for inheritance.
</li>
<dt>3</dt><dd> The abstract ::QMsm class (QM State Machine) derives from ::QHsm and implements the fastest and the most efficient strategy for coding hierarchical state machines, but this strategy is not human-maintainable and requires the use of the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>. The class is abstract, meaning that it is not designed to be instantiated directly, but rather only for inheritance.
</dd>
<li><span class="tag">4</span> The abstract ::QMActive class represents an active object that uses the ::QMsm state machine implementation strategy. This strategy requires the use of the QM modeling tool to generate state machine code automatically, but the code is faster than in the ::QHsm style implementation strategy and needs less run-time support (smaller event-processor).
</li>
<dt>4</dt><dd>The abstract ::QMActive class represents an active object that uses the ::QMsm state machine implementation strategy. This strategy requires the use of the QM modeling tool to generate state machine code automatically, but the code is faster than in the ::QHsm style implementation strategy and needs less run-time support (smaller event-processor).
</dd>
<li><span class="tag">5</span> The ::QTimeEvt class represents time events in QP. **Time events** are special QP events equipped with the notion of time passage. The basic usage model of the time events is as follows. An active object allocates one or more ::QTimeEvt objects (provides the storage for them). When the active object needs to arrange for a timeout, it arms one of its time events to fire either just once (one-shot) or periodically. Each time event times out independently from the others, so a QP application can make multiple parallel timeout requests (from the same or different active objects). When QP detects that the appropriate moment has arrived, it inserts the time event directly into the recipient's event queue. The recipient then processes the time event just like any other event.
</li>
<dt>5</dt><dd> The ::QTimeEvt class represents time events in QP. **Time events** are special QP events equipped with the notion of time passage. The basic usage model of the time events is as follows. An active object allocates one or more ::QTimeEvt objects (provides the storage for them). When the active object needs to arrange for a timeout, it arms one of its time events to fire either just once (one-shot) or periodically. Each time event times out independently from the others, so a QP application can make multiple parallel timeout requests (from the same or different active objects). When QP detects that the appropriate moment has arrived, it inserts the time event directly into the recipient's event queue. The recipient then processes the time event just like any other event.
</dd>
<li><span class="tag">6</span> Active Objects in the application derive either from the ::QActive or ::QMActive base class.
</li>
<dt>6</dt><dd> Active Objects in the application derive either from the ::QActive or ::QMActive base class.
</dd>
<li><span class="tag">7</span> Applications can also use classes derived directly from the ::QHsm or ::QMsm base classes to represent "raw" state machines that are not active objects, because they don't have event queue and execution thread. Such "raw" state machines are typically used as "Orthogonal Components".
</li>
<dt>7</dt><dd> Applications can also use classes derived directly from the ::QHsm or ::QMsm base classes to represent "raw" state machines that are not active objects, because they don't have event queue and execution thread. Such "raw" state machines are typically used as "Orthogonal Components".
</dd>
<li><span class="tag">8</span> Application-level events with parameters derive from the ::QEvt class.
</li>
</ul>
<dt>8</dt><dd> Application-level events with parameters derive from the ::QEvt class.
</dd>
</dl>
@section sm State Machines

View File

@ -1,7 +1,7 @@
/*****************************************************************************
* Product: DPP example, NUCLEO-L053R8 board, preemptive QXK kernel
* Last updated for version 6.9.3
* Last updated on 2021-03-03
* Product: DPP example, STM32 NUCLEO-L053R8 board, preemptive QXK kernel
* Last updated for version 6.9.4
* Last updated on 2021-08-04
*
* Q u a n t u m L e a P s
* ------------------------
@ -55,6 +55,7 @@ static uint32_t l_rnd; /* random seed */
/* QSpy source IDs */
static QSpyId const l_SysTick_Handler = { 0U };
static QSpyId const l_EXTI0_1_IRQHandler = { 0U };
enum AppRecords { /* application-specific trace records */
PHILO_STAT = QS_USER
@ -118,7 +119,7 @@ void SysTick_Handler(void) { /* system clock tick ISR */
void EXTI0_1_IRQHandler(void) {
static QEvt const testEvt = { TEST_SIG, 0U, 0U };
QXK_ISR_ENTRY(); /* inform QXK about entering an ISR */
QXTHREAD_POST_X(XT_Test2, &testEvt, 0U, (void *)0);
QXTHREAD_POST_X(XT_Test2, &testEvt, 0U, &l_EXTI0_1_IRQHandler);
QXK_ISR_EXIT(); /* inform QXK about exiting an ISR */
}
/*..........................................................................*/
@ -167,6 +168,7 @@ void BSP_init(void) {
Q_ERROR();
}
QS_OBJ_DICTIONARY(&l_SysTick_Handler);
QS_OBJ_DICTIONARY(&l_EXTI0_1_IRQHandler);
QS_USR_DICTIONARY(PHILO_STAT);
/* setup the QS filters... */

View File

@ -3,14 +3,14 @@
* Model: calc1_sub.qm
* File: ${.::calc1_sub.c}
*
* This code has been generated by QM 5.1.0 <www.state-machine.com/qm/>.
* This code has been generated by QM 5.1.3 <www.state-machine.com/qm/>.
* DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
*
* This code is covered by the following QP license:
* License # : QPC-EVAL
* Issued to : Institution or an individual evaluating the QP/C framework
* Framework(s): qpc
* Support ends: 2021-12-31
* Support ends: 2022-12-31
* Product(s) :
* This license is available only for evaluation purposes and
* the generated code is still licensed under the terms of GPL.
@ -225,8 +225,8 @@ static QMState const Calc_operand_negated_s = {
/*.$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
/*. Check for the minimum required QP version */
#if (QP_VERSION < 680U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpc version 6.8.0 or higher required
#if (QP_VERSION < 690U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpc version 6.9.0 or higher required
#endif
/*.$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
/*.$define${SMs::the_calc} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/

View File

@ -3,14 +3,14 @@
* Model: calc1_sub.qm
* File: ${.::calc1_sub.h}
*
* This code has been generated by QM 5.1.0 <www.state-machine.com/qm/>.
* This code has been generated by QM 5.1.3 <www.state-machine.com/qm/>.
* DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
*
* This code is covered by the following QP license:
* License # : QPC-EVAL
* Issued to : Institution or an individual evaluating the QP/C framework
* Framework(s): qpc
* Support ends: 2021-12-31
* Support ends: 2022-12-31
* Product(s) :
* This license is available only for evaluation purposes and
* the generated code is still licensed under the terms of GPL.

View File

@ -4,8 +4,8 @@
* @ingroup qep
* @cond
******************************************************************************
* Last updated for version 6.9.3
* Last updated on 2021-02-26
* Last updated for version 6.9.4
* Last updated on 2021-07-29
*
* Q u a n t u m L e a P s
* ------------------------
@ -45,16 +45,16 @@
* major version number, Y is a 1-digit minor version number, and Z is
* a 1-digit release number.
*/
#define QP_VERSION 693U
#define QP_VERSION 694U
/*! The current QP version number string of the form XX.Y.Z, where XX is
* a 2-digit major version number, Y is a 1-digit minor version number,
* and Z is a 1-digit release number.
*/
#define QP_VERSION_STR "6.9.3"
#define QP_VERSION_STR "6.9.4"
/*! Encrypted current QP release (6.9.3) and date (2021-04-12) */
#define QP_RELEASE 0x8295AA8AU
/*! Encrypted current QP release (6.9.4) and date (2021-07-31) */
#define QP_RELEASE 0x8264FD99U
/****************************************************************************/