Merge branch 'feature/修改状态机结构,去掉事件' into develop
This commit is contained in:
commit
585fcf3212
|
@ -15,8 +15,8 @@
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" id="com.ti.ccstudio.buildDefinitions.C2000.Debug.1844093621" name="CPU1_RAM" parent="com.ti.ccstudio.buildDefinitions.C2000.Debug">
|
<configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" id="com.ti.ccstudio.buildDefinitions.C2000.Debug.1844093621" name="CPU1_RAM" parent="com.ti.ccstudio.buildDefinitions.C2000.Debug">
|
||||||
<folderInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.1844093621." name="/" resourcePath="">
|
<folderInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.1844093621." name="/" resourcePath="">
|
||||||
<toolChain id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain.1805321654" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.590139635">
|
<toolChain id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain.249788100" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.592017555">
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.805138293" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.404513923" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
|
||||||
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=TMS320C28XX.TMS320F28377D"/>
|
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=TMS320C28XX.TMS320F28377D"/>
|
||||||
<listOptionValue builtIn="false" value="DEVICE_CORE_ID="/>
|
<listOptionValue builtIn="false" value="DEVICE_CORE_ID="/>
|
||||||
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
|
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
|
||||||
|
@ -28,21 +28,21 @@
|
||||||
<listOptionValue builtIn="false" value="PRODUCT_MACRO_IMPORTS={}"/>
|
<listOptionValue builtIn="false" value="PRODUCT_MACRO_IMPORTS={}"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.513451712" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="22.6.0.LTS" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.305402828" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="22.6.1.LTS" valueType="string"/>
|
||||||
<targetPlatform id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug.1537686623" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug"/>
|
<targetPlatform id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug.991038051" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug"/>
|
||||||
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug.1308301813" keepEnvironmentInBuildfile="false" name="GNU Make" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug"/>
|
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug.1390233029" name="GNU Make.CPU1_RAM" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug"/>
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.169024832" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug">
|
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.584474634" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL.1852737827" name="Option deprecated, set by default (--large_memory_model, -ml)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL" value="true" valueType="boolean"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL.879609465" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL" value="true" valueType="boolean"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY.436949653" name="Unified memory (--unified_memory, -mt)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY" value="true" valueType="boolean"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY.479773730" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY" value="true" valueType="boolean"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.1206458229" name="Processor version (--silicon_version, -v)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.28" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.1636612494" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.28" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.1243236335" name="Specify floating point support (--float_support)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.fpu32" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.1698350652" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.fpu32" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.CLA_SUPPORT.862922409" name="Specify CLA support (--cla_support)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.CLA_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.CLA_SUPPORT.cla1" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.CLA_SUPPORT.499775360" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.CLA_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.CLA_SUPPORT.cla1" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.VCU_SUPPORT.789583918" name="Specify VCU support (--vcu_support)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.VCU_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.VCU_SUPPORT.vcu2" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.VCU_SUPPORT.2139851081" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.VCU_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.VCU_SUPPORT.vcu2" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.TMU_SUPPORT.1809245799" name="Specify TMU support (--tmu_support)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.TMU_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.TMU_SUPPORT.tmu0" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.TMU_SUPPORT.1467835285" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.TMU_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.TMU_SUPPORT.tmu0" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.1580760795" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.1828469393" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.2114718752" name="Speed vs. size trade-offs (--opt_for_speed, -mf)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.2" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.1025940074" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.2" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FP_MODE.536412730" name="Floating Point mode (--fp_mode)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FP_MODE" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FP_MODE.relaxed" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FP_MODE.860711964" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FP_MODE" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FP_MODE.relaxed" valueType="enumerated"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH.980621474" name="Add dir to #include search path (--include_path, -I)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH" valueType="includePath">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH.2094867255" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
|
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/baseFSM"/>
|
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/baseFSM"/>
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/usr"/>
|
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/usr"/>
|
||||||
|
@ -58,36 +58,36 @@
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_LOC}/../vscode/FSM_OOP/baseFSM"/>
|
<listOptionValue builtIn="false" value="${PROJECT_LOC}/../vscode/FSM_OOP/baseFSM"/>
|
||||||
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
|
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ADVICE__PERFORMANCE.605523803" name="Provide advice on optimization techniques (--advice:performance)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ADVICE__PERFORMANCE" value="--advice:performance=all" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ADVICE__PERFORMANCE.171868085" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ADVICE__PERFORMANCE" value="--advice:performance=all" valueType="string"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE.963154982" name="Pre-define NAME (--define, -D)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE" valueType="definedSymbols">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE.1681891118" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE" valueType="definedSymbols">
|
||||||
<listOptionValue builtIn="false" value="_INLINE"/>
|
<listOptionValue builtIn="false" value="_INLINE"/>
|
||||||
<listOptionValue builtIn="false" value="NDEBUG"/>
|
<listOptionValue builtIn="false" value="NDEBUG"/>
|
||||||
<listOptionValue builtIn="false" value="DSP28377"/>
|
<listOptionValue builtIn="false" value="DSP28377"/>
|
||||||
<listOptionValue builtIn="false" value="CPU1"/>
|
<listOptionValue builtIn="false" value="CPU1"/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.1154586089" name="Debugging model" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.1901056751" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.C_DIALECT.58637704" name="C Dialect" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.C_DIALECT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.C_DIALECT.C99" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.C_DIALECT.1353315307" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.C_DIALECT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.C_DIALECT.C99" valueType="enumerated"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING.1770442652" name="Treat diagnostic <id> as warning (--diag_warning, -pdsw)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING" valueType="stringList">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING.57396888" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING" valueType="stringList">
|
||||||
<listOptionValue builtIn="false" value="225"/>
|
<listOptionValue builtIn="false" value="225"/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WRAP.170185464" name="Wrap diagnostic messages (--diag_wrap)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WRAP.1704240081" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER.239663357" name="Emit diagnostic identifier numbers (--display_error_number, -pden)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER.65226327" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.1177630758" name="Application binary interface [See 'General' page to edit] (--abi)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.eabi" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.476173017" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.eabi" valueType="enumerated"/>
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.1948358722" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.1245540863" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.1137813289" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.2068954361" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.1884647892" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.812447921" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.496724480" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.1332829672" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.590139635" name="C2000 Linker" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug">
|
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.592017555" name="C2000 Linker" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE.1169278019" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE" value="0x200" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE.1845372756" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE" value="0x200" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE.1652857044" name="Link information (map) listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE" value="${ProjName}.map" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE.290679978" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE" value="${ProjName}.map" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE.1982263147" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE" value="${ProjName}.out" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE.540534179" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE" value="${ProjName}.out" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.HEAP_SIZE.2068288548" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.HEAP_SIZE" value="0x600" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.HEAP_SIZE.1350598154" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.HEAP_SIZE" value="0x600" valueType="string"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY.1218574796" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY" valueType="libs">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY.1474212421" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY" valueType="libs">
|
||||||
<listOptionValue builtIn="false" value="rts2800_fpu32_eabi.lib"/>
|
<listOptionValue builtIn="false" value="rts2800_fpu32_eabi.lib"/>
|
||||||
<listOptionValue builtIn="false" value="libc.a"/>
|
<listOptionValue builtIn="false" value="libc.a"/>
|
||||||
</option>
|
</option>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH.665425120" name="Add <dir> to library search path (--search_path, -i)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH" valueType="libPaths">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH.324541294" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH" valueType="libPaths">
|
||||||
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/lib"/>
|
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/lib"/>
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
|
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/source"/>
|
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/source"/>
|
||||||
|
@ -95,21 +95,21 @@
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/usr"/>
|
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/usr"/>
|
||||||
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/baseFSM"/>
|
<listOptionValue builtIn="false" value="${PROJECT_ROOT}/FSM_OOP/baseFSM"/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DIAG_WRAP.227102602" name="Wrap diagnostic messages (--diag_wrap)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DIAG_WRAP.1617640026" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER.1170568807" name="Emit diagnostic identifier numbers (--display_error_number)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER.1484093209" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO.253422497" name="Detailed link information data-base into <file> (--xml_link_info, -xml_link_info)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO" value="${ProjName}_linkInfo.xml" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO.1208865168" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO" value="${ProjName}_linkInfo.xml" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT.267642096" name="Specify program entry point for the output module (--entry_point, -e)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT" value="code_start" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT.1816405551" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT" value="code_start" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.CINIT_COMPRESSION.1389010089" name="Compress ELF C style auto initialization data (--cinit_compression)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.CINIT_COMPRESSION" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.CINIT_COMPRESSION.off" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.CINIT_COMPRESSION.934245867" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.CINIT_COMPRESSION" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.CINIT_COMPRESSION.off" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.INITIALIZATION_MODEL.1191787507" name="Initialization model" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.INITIALIZATION_MODEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.INITIALIZATION_MODEL.RAM_MODEL" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.INITIALIZATION_MODEL.483430313" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.INITIALIZATION_MODEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.INITIALIZATION_MODEL.RAM_MODEL" valueType="enumerated"/>
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS.386045799" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS.737359659" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS"/>
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS.996301977" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS.1248498450" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS"/>
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS.212546431" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS.212203086" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.622693696" name="C2000 Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex"/>
|
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.1432236849" name="C2000 Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex"/>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry excluding="2837x_FLASH_lnk_cpu1.cmd|source/F2837xD_SWPrioritizedPieVect.c|2837xD_FLASH_lnk_cpu1.cmd" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
<entry excluding="ParentFSM.c|childFSM.c|2837x_FLASH_lnk_cpu1.cmd|source/F2837xD_SWPrioritizedPieVect.c|2837xD_FLASH_lnk_cpu1.cmd" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
</sourceEntries>
|
</sourceEntries>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -30,33 +30,33 @@ int isDown = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ChildFSM *cFSM;
|
//ChildFSM *cFSM;
|
||||||
ParentFSM *pFSM;
|
//ParentFSM *pFSM;
|
||||||
void childTest(){
|
//void childTest(){
|
||||||
|
//
|
||||||
cFSM = createChildFSM();
|
// cFSM = createChildFSM();
|
||||||
pFSM = createParentFSM();
|
// pFSM = createParentFSM();
|
||||||
|
//
|
||||||
setChildNum((pFSM), 1);
|
// setChildNum((pFSM), 1);
|
||||||
registerChildFSM((pFSM), (cFSM), 0);
|
// registerChildFSM((pFSM), (cFSM), 0);
|
||||||
|
//
|
||||||
for (int i = 0; i < 15; i++)
|
// for (int i = 0; i < 15; i++)
|
||||||
{
|
// {
|
||||||
ParentFSM_Input(pFSM)->arrindex = i;
|
// ParentFSM_Input(pFSM)->arrindex = i;
|
||||||
SetPreloaderReady(pFSM);
|
// SetPreloaderReady(pFSM);
|
||||||
|
//
|
||||||
ChildFSM_Input(cFSM)->arrindex = i;
|
// ChildFSM_Input(cFSM)->arrindex = i;
|
||||||
SetPreloaderReady(cFSM);
|
// SetPreloaderReady(cFSM);
|
||||||
|
//
|
||||||
ChildFSMData* data = getData((FSM *)(cFSM));
|
// ChildFSMData* data = getData((FSM *)(cFSM));
|
||||||
printf(" %d ", data->arrindex);
|
// printf(" %d ", data->arrindex);
|
||||||
|
//
|
||||||
tic();
|
// tic();
|
||||||
_vptrFSM((FSM *)pFSM)->step((FSM *)pFSM);
|
// _vptrFSM((FSM *)pFSM)->step((FSM *)pFSM);
|
||||||
toc(index++);
|
// toc(index++);
|
||||||
printf("\n");
|
// printf("\n");
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,14 +67,15 @@ KeyFSMData* data;
|
||||||
|
|
||||||
void keyFSMTest(){
|
void keyFSMTest(){
|
||||||
keyFSM = createKeyFSM();
|
keyFSM = createKeyFSM();
|
||||||
data = getData((FSM *)keyFSM);
|
data = _getData((FSM *)keyFSM);
|
||||||
|
|
||||||
printf("hello 28377\n");
|
printf("hello 28377\n");
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
|
|
||||||
*KeyFSM_Input(keyFSM) = !GPIO_ReadPin(INPUT_GPIO);
|
*KeyFSM_Input(keyFSM) = !GPIO_ReadPin(INPUT_GPIO);
|
||||||
SetPreloaderReady(keyFSM);
|
PreloaderGetReady(keyFSM);
|
||||||
|
|
||||||
|
|
||||||
tic();
|
tic();
|
||||||
Step(keyFSM);
|
Step(keyFSM);
|
||||||
|
@ -125,8 +126,8 @@ void main(void)
|
||||||
GPIO_SetupPinOptions(INPUT_GPIO, GPIO_INPUT, GPIO_PULLUP);
|
GPIO_SetupPinOptions(INPUT_GPIO, GPIO_INPUT, GPIO_PULLUP);
|
||||||
|
|
||||||
|
|
||||||
childTest();
|
// childTest();
|
||||||
// keyFSMTest();
|
keyFSMTest();
|
||||||
// funptrTest();
|
// funptrTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,62 +1,22 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<configurations XML_version="1.2" id="configurations_0">
|
<configurations XML_version="1.2" id="configurations_0">
|
||||||
|
|
||||||
|
|
||||||
<configuration XML_version="1.2" id="configuration_0">
|
<configuration XML_version="1.2" id="configuration_0">
|
||||||
|
|
||||||
|
|
||||||
<instance XML_version="1.2" desc="Texas Instruments XDS100v3 USB Debug Probe" href="connections/TIXDS100v3_Dot7_Connection.xml" id="Texas Instruments XDS100v3 USB Debug Probe" xml="TIXDS100v3_Dot7_Connection.xml" xmlpath="connections"/>
|
<instance XML_version="1.2" desc="Texas Instruments XDS100v3 USB Debug Probe" href="connections/TIXDS100v3_Dot7_Connection.xml" id="Texas Instruments XDS100v3 USB Debug Probe" xml="TIXDS100v3_Dot7_Connection.xml" xmlpath="connections"/>
|
||||||
|
|
||||||
|
|
||||||
<connection XML_version="1.2" id="Texas Instruments XDS100v3 USB Debug Probe">
|
<connection XML_version="1.2" id="Texas Instruments XDS100v3 USB Debug Probe">
|
||||||
|
|
||||||
|
|
||||||
<instance XML_version="1.2" href="drivers/tixds100v2icepick_c.xml" id="drivers" xml="tixds100v2icepick_c.xml" xmlpath="drivers"/>
|
<instance XML_version="1.2" href="drivers/tixds100v2icepick_c.xml" id="drivers" xml="tixds100v2icepick_c.xml" xmlpath="drivers"/>
|
||||||
|
|
||||||
|
|
||||||
<instance XML_version="1.2" href="drivers/tixds100v2c28x.xml" id="drivers" xml="tixds100v2c28x.xml" xmlpath="drivers"/>
|
<instance XML_version="1.2" href="drivers/tixds100v2c28x.xml" id="drivers" xml="tixds100v2c28x.xml" xmlpath="drivers"/>
|
||||||
|
|
||||||
|
|
||||||
<instance XML_version="1.2" href="drivers/tixds100v2cla1.xml" id="drivers" xml="tixds100v2cla1.xml" xmlpath="drivers"/>
|
<instance XML_version="1.2" href="drivers/tixds100v2cla1.xml" id="drivers" xml="tixds100v2cla1.xml" xmlpath="drivers"/>
|
||||||
|
|
||||||
|
|
||||||
<instance XML_version="1.2" href="drivers/tixds100v2cs_child.xml" id="drivers" xml="tixds100v2cs_child.xml" xmlpath="drivers"/>
|
<instance XML_version="1.2" href="drivers/tixds100v2cs_child.xml" id="drivers" xml="tixds100v2cs_child.xml" xmlpath="drivers"/>
|
||||||
|
|
||||||
|
|
||||||
<platform XML_version="1.2" id="platform_0">
|
<platform XML_version="1.2" id="platform_0">
|
||||||
|
|
||||||
|
|
||||||
<instance XML_version="1.2" desc="TMS320F28377D" href="devices/tms320f28377d.xml" id="TMS320F28377D" xml="tms320f28377d.xml" xmlpath="devices"/>
|
<instance XML_version="1.2" desc="TMS320F28377D" href="devices/tms320f28377d.xml" id="TMS320F28377D" xml="tms320f28377d.xml" xmlpath="devices"/>
|
||||||
|
<device HW_revision="1" XML_version="1.2" description="" id="TMS320F28377D" partnum="TMS320F28377D">
|
||||||
|
|
||||||
<device HW_revision="1" XML_version="1.2" description="" id="TMS320F28377D" partnum="TMS320F28377D" simulation="no">
|
|
||||||
|
|
||||||
|
|
||||||
<router HW_revision="1.0" XML_version="1.2" description="ICEPick_C router" id="IcePick_C_0" isa="ICEPICK_C">
|
<router HW_revision="1.0" XML_version="1.2" description="ICEPick_C router" id="IcePick_C_0" isa="ICEPICK_C">
|
||||||
|
|
||||||
|
|
||||||
<subpath id="Subpath_1">
|
<subpath id="Subpath_1">
|
||||||
|
|
||||||
|
|
||||||
<property Type="numericfield" Value="0x11" desc="Port Number_0" id="Port Number"/>
|
<property Type="numericfield" Value="0x11" desc="Port Number_0" id="Port Number"/>
|
||||||
|
|
||||||
|
|
||||||
</subpath>
|
</subpath>
|
||||||
|
|
||||||
|
|
||||||
</router>
|
</router>
|
||||||
|
|
||||||
|
|
||||||
</device>
|
</device>
|
||||||
|
|
||||||
|
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
|
|
||||||
</connection>
|
</connection>
|
||||||
|
|
||||||
|
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
||||||
|
|
||||||
</configurations>
|
</configurations>
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
{
|
{
|
||||||
|
"terminal.integrated.profiles.windows": {
|
||||||
|
"PowerShell": {
|
||||||
|
"source": "PowerShell",
|
||||||
|
"icon": "terminal-powershell",
|
||||||
|
"args": ["-NoExit","chcp 65001"]
|
||||||
|
},
|
||||||
|
"Command Prompt": {
|
||||||
|
"path": [
|
||||||
|
"${env:windir}\\Sysnative\\cmd.exe",
|
||||||
|
"${env:windir}\\System32\\cmd.exe"
|
||||||
|
],
|
||||||
|
"args": ["/K","chcp 65001"],
|
||||||
|
"icon": "terminal-cmd"
|
||||||
|
},
|
||||||
|
"Git Bash": {
|
||||||
|
"source": "Git Bash"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"filter.h": "c",
|
"filter.h": "c",
|
||||||
"fsm_protected.h": "c",
|
"fsm_protected.h": "c",
|
||||||
|
@ -7,5 +26,10 @@
|
||||||
"stdio.h": "c",
|
"stdio.h": "c",
|
||||||
"assert.h": "c"
|
"assert.h": "c"
|
||||||
},
|
},
|
||||||
"files.encoding": "utf8"
|
|
||||||
|
|
||||||
|
"files.encoding": "utf8",
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM)
|
||||||
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
|
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
|
||||||
|
|
||||||
|
|
||||||
# set(keytest 789)
|
set(keytest 789)
|
||||||
# set(child_parent 789)
|
# set(child_parent 789)
|
||||||
if(DEFINED keytest)
|
if(DEFINED keytest)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
|
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
|
||||||
|
|
|
@ -13,16 +13,17 @@
|
||||||
|
|
||||||
void resetBaseFSM(FSM *pFSM)
|
void resetBaseFSM(FSM *pFSM)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState] != NULL)
|
if (pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState] != NULL)
|
||||||
pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState](pFSM->data, pFSM->privateVars.childFSM);
|
pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState](pFSM->data, pFSM->privateVars.childFSM);
|
||||||
|
|
||||||
pFSM->privateVars.curState = 0;
|
pFSM->privateVars.curState = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void setEvent(FSM* pFSM){
|
static inline void setNextState(FSM* pFSM){
|
||||||
assert(pFSM->vtbl.selectEvent);
|
int curState = pFSM->privateVars.curState;
|
||||||
pFSM->privateVars.curEvent = pFSM->vtbl.selectEvent(pFSM->data, pFSM->signals);
|
if(curState != 0){
|
||||||
|
pFSM->privateVars.nextState = pFSM->privateVars.fcns.selectNextState[curState](pFSM->data, pFSM->signals);
|
||||||
|
}
|
||||||
|
|
||||||
if(0 == pFSM->privateVars.numChild){
|
if(0 == pFSM->privateVars.numChild){
|
||||||
return;
|
return;
|
||||||
|
@ -31,7 +32,7 @@ static inline void setEvent(FSM* pFSM){
|
||||||
for (int i = 0; i < pFSM->privateVars.numChild; i++)
|
for (int i = 0; i < pFSM->privateVars.numChild; i++)
|
||||||
{
|
{
|
||||||
FSM *cFSM = pFSM->privateVars.childFSM[i];
|
FSM *cFSM = pFSM->privateVars.childFSM[i];
|
||||||
setEvent(cFSM);
|
setNextState(cFSM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,56 +47,59 @@ static inline void preload(FSM* pFSM){
|
||||||
void stepBaseFSM(FSM *pFSM)
|
void stepBaseFSM(FSM *pFSM)
|
||||||
{
|
{
|
||||||
preload(pFSM);
|
preload(pFSM);
|
||||||
setEvent(pFSM);
|
setNextState(pFSM);
|
||||||
pFSM->vtbl.resetSignals(pFSM);
|
pFSM->vtbl.resetSignals(pFSM);
|
||||||
|
|
||||||
FSMHandler *fcns = &pFSM->privateVars.fcns;
|
FSMHandler *fcns = &pFSM->privateVars.fcns;
|
||||||
int curState = pFSM->privateVars.curState;
|
int curState = pFSM->privateVars.curState;
|
||||||
void *data = pFSM->data;
|
void *data = pFSM->data;
|
||||||
FSM **childFSM = pFSM->privateVars.childFSM;
|
FSM **childFSM = pFSM->privateVars.childFSM;
|
||||||
int index = pFSM->privateVars.curState * pFSM->privateVars.numEvent + pFSM->privateVars.curEvent;
|
int index = pFSM->privateVars.curState * pFSM->privateVars.numState + pFSM->privateVars.nextState;
|
||||||
int nextState;
|
int nextState = pFSM->privateVars.nextState;
|
||||||
|
|
||||||
if(fcns->delayedEvent){
|
if(fcns->delayedIndex){
|
||||||
fcns->transitionDelayTable[fcns->delayedEvent](data);
|
fcns->transitionDelayTable[fcns->delayedIndex](data);
|
||||||
fcns->delayedEvent = 0;
|
fcns->delayedIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fcns->transitionTable[index] != NULL)
|
if(nextState && curState != nextState){ // 状态切换
|
||||||
{
|
if (fcns->transitionTable[index] != NULL) // 有特定的状态转移函数
|
||||||
if (fcns->exitActionTable[curState] != NULL)
|
{
|
||||||
fcns->exitActionTable[curState](data, childFSM);
|
if (fcns->exitActionTable[curState] != NULL)
|
||||||
|
fcns->exitActionTable[curState](data, childFSM);
|
||||||
|
|
||||||
nextState = (*fcns->transitionTable[index])(data, curState, &fcns->delayedEvent);
|
(*fcns->transitionTable[index])(data, &fcns->delayedIndex);
|
||||||
|
|
||||||
if (fcns->enterActionTable[nextState] != NULL)
|
|
||||||
fcns->enterActionTable[nextState](data, childFSM);
|
|
||||||
|
|
||||||
|
if (fcns->enterActionTable[nextState] != NULL)
|
||||||
|
fcns->enterActionTable[nextState](data, childFSM);
|
||||||
|
}
|
||||||
|
fcns->transitionGeneralAction(data); // 通用状态转移函数
|
||||||
pFSM->privateVars.curState = nextState;
|
pFSM->privateVars.curState = nextState;
|
||||||
}
|
}
|
||||||
else if(curState == 0){
|
else if(curState == 0){ // 处理刚运行进入的默认状态
|
||||||
nextState = pFSM->privateVars.defaultState;
|
nextState = pFSM->privateVars.defaultState;
|
||||||
if (fcns->enterActionTable[nextState] != NULL)
|
if (fcns->enterActionTable[nextState] != NULL)
|
||||||
fcns->enterActionTable[nextState](data, childFSM);
|
fcns->enterActionTable[nextState](data, childFSM);
|
||||||
pFSM->privateVars.curState = nextState;
|
pFSM->privateVars.curState = nextState;
|
||||||
}
|
}
|
||||||
else
|
else // 状态机没动
|
||||||
{
|
{
|
||||||
if (fcns->duringActionTable[curState] != NULL)
|
if (fcns->duringActionTable[curState] != NULL)
|
||||||
fcns->duringActionTable[curState](data, childFSM);
|
fcns->duringActionTable[curState](data, childFSM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FSM* newBaseFSM(int numState, int numEvent, int defaultState){
|
FSM* newBaseFSM(int numState, int defaultState){
|
||||||
typedef void (*StateFuncPtr)(void *data);
|
typedef void (*StateFuncPtr)(void *);
|
||||||
typedef void (*ChildFSMStepFuncPtr)(FSM **cFSM);
|
typedef void (*ChildFSMStepFuncPtr)(FSM **);
|
||||||
typedef int (*TransitionFuncPtr)(void *data, int currentState);
|
typedef int (*TransitionFuncPtr)(void *, int *);
|
||||||
|
typedef int (*SelectNextStateFcnPtr)(void *, void *);
|
||||||
|
|
||||||
FSM *pFSM = calloc(1, sizeof(FSM));
|
FSM *pFSM = calloc(1, sizeof(FSM));
|
||||||
pFSM->privateVars.curEvent = 0;
|
pFSM->privateVars.numState = numState;
|
||||||
pFSM->privateVars.curState = 0;
|
|
||||||
pFSM->privateVars.numEvent = numEvent;
|
|
||||||
pFSM->privateVars.defaultState = defaultState;
|
pFSM->privateVars.defaultState = defaultState;
|
||||||
|
pFSM->privateVars.curState = 0;
|
||||||
|
pFSM->privateVars.nextState = 0;
|
||||||
pFSM->privateVars.numChild = 0;
|
pFSM->privateVars.numChild = 0;
|
||||||
|
|
||||||
pFSM->privateVars.preloader.isReady = 0;
|
pFSM->privateVars.preloader.isReady = 0;
|
||||||
|
@ -104,14 +108,19 @@ FSM* newBaseFSM(int numState, int numEvent, int defaultState){
|
||||||
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
pFSM->privateVars.fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
|
|
||||||
pFSM->privateVars.fcns.transitionTable = calloc(numState * numEvent, sizeof(TransitionFuncPtr));
|
pFSM->privateVars.fcns.selectNextState = calloc(numState, sizeof(SelectNextStateFcnPtr));
|
||||||
pFSM->privateVars.fcns.childFSMStepTable = calloc(numState * numEvent, sizeof(ChildFSMStepFuncPtr));
|
pFSM->privateVars.fcns.transitionTable = calloc(numState * numState, sizeof(TransitionFuncPtr));
|
||||||
pFSM->privateVars.fcns.transitionDelayTable = calloc(numEvent, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.transitionGeneralAction = calloc(1, sizeof(StateFuncPtr));
|
||||||
|
pFSM->privateVars.fcns.transitionDelayTable = calloc(numState * numState, sizeof(StateFuncPtr));
|
||||||
|
|
||||||
|
pFSM->privateVars.fcns.childFSMStepTable = calloc(numState * numState, sizeof(ChildFSMStepFuncPtr));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FSMVtbl vtbl = {
|
FSMVtbl vtbl = {
|
||||||
.reset = resetBaseFSM,
|
.reset = resetBaseFSM,
|
||||||
.step = stepBaseFSM,
|
.step = stepBaseFSM,
|
||||||
.selectEvent = NULL,
|
|
||||||
.setupHandler = NULL,
|
.setupHandler = NULL,
|
||||||
.initData = NULL,
|
.initData = NULL,
|
||||||
.initDataLoader = NULL,
|
.initDataLoader = NULL,
|
||||||
|
@ -133,6 +142,16 @@ void constructFSM(FSM* pFSM){
|
||||||
pFSM->vtbl.initData(pFSM);
|
pFSM->vtbl.initData(pFSM);
|
||||||
pFSM->vtbl.initDataLoader(pFSM);
|
pFSM->vtbl.initDataLoader(pFSM);
|
||||||
pFSM->vtbl.initSignals(pFSM);
|
pFSM->vtbl.initSignals(pFSM);
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------------------------------- 检查状态表 --------------------------------- */
|
||||||
|
for (int i = 1; i < pFSM->privateVars.numState; i++) // 跳过Idle状态,Idle状态只能跳转到默认状态
|
||||||
|
{
|
||||||
|
if(!pFSM->privateVars.fcns.selectNextState[i]){
|
||||||
|
FSM_LOG("每个状态都要有一个状态选择函数!\n");
|
||||||
|
assert(0); // 强制退出
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -142,13 +161,11 @@ void constructFSM(FSM* pFSM){
|
||||||
int getFSMCurState(FSM *pFSM){
|
int getFSMCurState(FSM *pFSM){
|
||||||
return pFSM->privateVars.curState;
|
return pFSM->privateVars.curState;
|
||||||
}
|
}
|
||||||
int getFSMCurEvent(FSM *pFSM){
|
int getFSMNextState(FSM *pFSM){
|
||||||
return pFSM->privateVars.curEvent;
|
return pFSM->privateVars.nextState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void setChildNum(FSM *pFSM, int num){
|
void setChildNum(FSM *pFSM, int num){
|
||||||
pFSM->privateVars.numChild = num;
|
pFSM->privateVars.numChild = num;
|
||||||
pFSM->privateVars.childFSM = (FSM **)calloc(num, sizeof(FSM *));
|
pFSM->privateVars.childFSM = (FSM **)calloc(num, sizeof(FSM *));
|
||||||
|
|
|
@ -22,35 +22,43 @@
|
||||||
#define enter enter
|
#define enter enter
|
||||||
#define exit exit
|
#define exit exit
|
||||||
|
|
||||||
#define transitionHandler(event) event##Handler
|
|
||||||
#define delayHanlder(event) event##DelayHandler
|
#define selectNextStateFcn(curstate) curstate##_##selectNextState
|
||||||
#define actionFcn(action, state) state##_##action##Action
|
#define transitionHandler(curstate, nextstate) curstate##2##nextstate##Handler
|
||||||
#define index(state, event) (state*Count_Event + event)
|
#define delayHanlder(curstate, nextstate) curstate##2##nextstate##DelayHandler
|
||||||
|
#define actionFcn(action, curstate) curstate##_##action##Action
|
||||||
|
#define index(curstate, nextstate) (curstate*Count_State + nextstate)
|
||||||
|
|
||||||
|
|
||||||
typedef struct _FSMHandler FSMHandler;
|
typedef struct _FSMHandler FSMHandler;
|
||||||
typedef void (*Avoid_WARNING_State_Fcns)(void *data, FSM **childFSM);
|
typedef void (*Avoid_WARNING_State_Fcns)(void *data, FSM **childFSM);
|
||||||
typedef void (*Avoid_WARNING_Delay_Handlers)(void *data);
|
typedef void (*Avoid_WARNING_Delay_General_Handlers)(void *data);
|
||||||
typedef int (*Avoid_WARNING_Transition_Handler)(void *data, int curState, int *);
|
typedef void (*Avoid_WARNING_Transition_Handler)(void *data, int *);
|
||||||
typedef void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFsm);
|
typedef void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFsm);
|
||||||
typedef int (*Avoid_WARNING_SelectEvent)(void *data, void *signals);
|
typedef int (*Avoid_WARNING_SelectNextState)(void *data, void *signals);
|
||||||
typedef void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);
|
typedef void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);
|
||||||
|
|
||||||
|
|
||||||
#define addStateActionFcn(type, state) fcns->type##ActionTable[state] = (Avoid_WARNING_State_Fcns)actionFcn(type, state)
|
#define addSelectNextStateFcn(curstate) fcns->selectNextState[curstate] = (Avoid_WARNING_SelectNextState)selectNextStateFcn(curstate)
|
||||||
#define addTransitionHandler(state, event) fcns->transitionTable[index(state, event)] = (Avoid_WARNING_Transition_Handler)transitionHandler(event)
|
#define addStateActionFcn(type, state) fcns->type##ActionTable[state] = (Avoid_WARNING_State_Fcns)actionFcn(type, state)
|
||||||
#define addDelayHandler(event) fcns->transitionDelayTable[event] = (Avoid_WARNING_Delay_Handlers)delayHanlder(event)
|
#define addTransitionHandler(curstate, nextstate) fcns->transitionTable[index(curstate, nextstate)] = (Avoid_WARNING_Transition_Handler)transitionHandler(curstate, nextstate)
|
||||||
|
#define addDelayHandler(curstate, nextstate) fcns->transitionDelayTable[index(curstate, nextstate)] = (Avoid_WARNING_Delay_General_Handlers)delayHanlder(curstate, nextstate)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _FSM FSM;
|
typedef struct _FSM FSM;
|
||||||
typedef struct _FSMHandler{
|
typedef struct _FSMHandler{
|
||||||
int (**transitionTable)(void *data, int currentState, int *);
|
int (**selectNextState)(void *data, void *signals);
|
||||||
|
|
||||||
|
void (**transitionTable)(void *data, int *delayedIndex);
|
||||||
|
void (*transitionGeneralAction)(void *data);
|
||||||
|
|
||||||
void (**enterActionTable)(void *data, FSM **cFSM);
|
void (**enterActionTable)(void *data, FSM **cFSM);
|
||||||
void (**duringActionTable)(void *data, FSM **cFSM);
|
void (**duringActionTable)(void *data, FSM **cFSM);
|
||||||
void (**exitActionTable)(void *data, FSM **cFSM);
|
void (**exitActionTable)(void *data, FSM **cFSM);
|
||||||
|
|
||||||
int delayedEvent;
|
int delayedIndex;
|
||||||
void (**transitionDelayTable)(void *data);
|
void (**transitionDelayTable)(void *data);
|
||||||
|
|
||||||
void (**childFSMStepTable)(FSM **cFSM);
|
void (**childFSMStepTable)(FSM **cFSM);
|
||||||
|
@ -67,11 +75,11 @@ typedef struct _FSMDataLoader
|
||||||
|
|
||||||
typedef struct _FSMPrivateVars
|
typedef struct _FSMPrivateVars
|
||||||
{
|
{
|
||||||
int curState;
|
int numState;
|
||||||
int defaultState; // Idle状态不能停留,必须指定一个初始状态
|
int defaultState; // Idle状态不能停留,必须指定一个初始状态
|
||||||
|
|
||||||
int curEvent;
|
int curState;
|
||||||
int numEvent;
|
int nextState;
|
||||||
|
|
||||||
FSMDataLoader preloader;
|
FSMDataLoader preloader;
|
||||||
|
|
||||||
|
@ -102,7 +110,7 @@ typedef struct _FSM
|
||||||
void constructFSM(FSM* pFSM);
|
void constructFSM(FSM* pFSM);
|
||||||
|
|
||||||
// 继承的函数
|
// 继承的函数
|
||||||
FSM *newBaseFSM(int numState, int numEvent, int defaultState);
|
FSM* newBaseFSM(int numState, int defaultState);
|
||||||
void stepBaseFSM(FSM *pFSM);
|
void stepBaseFSM(FSM *pFSM);
|
||||||
void resetBaseFSM(FSM *pFSM);
|
void resetBaseFSM(FSM *pFSM);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
/*
|
||||||
|
* @Author: godcreator02 qq974980621@gmail.com
|
||||||
|
* @Date: 2024-04-20 18:52:14
|
||||||
|
* @LastEditors: godcreator02 qq974980621@gmail.com
|
||||||
|
* @LastEditTime: 2024-04-20 19:12:55
|
||||||
|
* @FilePath: \vscode\FSM_OOP\baseFSM\FSM_public.h
|
||||||
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
|
*/
|
||||||
#ifndef __FSM_PUBLIC_H_
|
#ifndef __FSM_PUBLIC_H_
|
||||||
#define __FSM_PUBLIC_H_
|
#define __FSM_PUBLIC_H_
|
||||||
|
|
||||||
|
@ -17,9 +25,9 @@ typedef struct _FSMHandler FSMHandler;
|
||||||
// 这几个函数可认为是虚函数, 构造函数里不会初始化FSMVtbl, 必须由子类重新实现
|
// 这几个函数可认为是虚函数, 构造函数里不会初始化FSMVtbl, 必须由子类重新实现
|
||||||
typedef struct _FSMVtbl {
|
typedef struct _FSMVtbl {
|
||||||
// 状态机控制
|
// 状态机控制
|
||||||
int (*selectEvent)(void *data, void *signals); // 可以认为是纯虚函数, 子类必须重新实现
|
|
||||||
void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
|
void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
|
||||||
void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
|
void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
|
||||||
|
|
||||||
void (*initData)(FSM *pFSM); // 子类必须重新实现
|
void (*initData)(FSM *pFSM); // 子类必须重新实现
|
||||||
void (*initSignals)(FSM *pFSM); // 子类必须重新实现
|
void (*initSignals)(FSM *pFSM); // 子类必须重新实现
|
||||||
void (*resetSignals)(FSM *pFSM); // 子类必须重新实现
|
void (*resetSignals)(FSM *pFSM); // 子类必须重新实现
|
||||||
|
@ -29,7 +37,7 @@ typedef struct _FSMVtbl {
|
||||||
|
|
||||||
/* --------------------------------- 状态机信息获取 -------------------------------- */
|
/* --------------------------------- 状态机信息获取 -------------------------------- */
|
||||||
int getFSMCurState(FSM *pFSM);
|
int getFSMCurState(FSM *pFSM);
|
||||||
int getFSMCurEvent(FSM *pFSM);
|
int getFSMNextState(FSM *pFSM);
|
||||||
void setChildNum(FSM *pFSM, int num);
|
void setChildNum(FSM *pFSM, int num);
|
||||||
void registerChildFSM(FSM *parent, FSM *child, int index);
|
void registerChildFSM(FSM *parent, FSM *child, int index);
|
||||||
|
|
||||||
|
@ -43,6 +51,7 @@ void _preloaderGetReady(FSM *pFSM);
|
||||||
int _getPreloaderOverFlag(FSM *pFSM);
|
int _getPreloaderOverFlag(FSM *pFSM);
|
||||||
void _clearPreloaderOverFlag(FSM *pFSM);
|
void _clearPreloaderOverFlag(FSM *pFSM);
|
||||||
|
|
||||||
|
/* ---------------------------------- 虚函数表 ---------------------------------- */
|
||||||
FSMVtbl *_vptrFSM(FSM* pFSM);
|
FSMVtbl *_vptrFSM(FSM* pFSM);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -198,7 +198,7 @@ ParentFSM *createParentFSM(){
|
||||||
pFSM = (ParentFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
|
pFSM = (ParentFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
|
||||||
|
|
||||||
pFSM->base.vtbl.step = step;
|
pFSM->base.vtbl.step = step;
|
||||||
pFSM->base.vtbl.selectEvent = selectEvent;
|
pFSM->base.vtbl.selectNextState = selectEvent;
|
||||||
pFSM->base.vtbl.initData = initData;
|
pFSM->base.vtbl.initData = initData;
|
||||||
pFSM->base.vtbl.setupHandler = setupHandler;
|
pFSM->base.vtbl.setupHandler = setupHandler;
|
||||||
pFSM->base.vtbl.initDataLoader = initDataLoader;
|
pFSM->base.vtbl.initDataLoader = initDataLoader;
|
||||||
|
|
|
@ -71,7 +71,7 @@ ChildFSM *createChildFSM(){
|
||||||
pFSM = (ChildFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
|
pFSM = (ChildFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
|
||||||
|
|
||||||
pFSM->base.vtbl.step = step;
|
pFSM->base.vtbl.step = step;
|
||||||
pFSM->base.vtbl.selectEvent = selectEvent;
|
pFSM->base.vtbl.selectNextState = selectEvent;
|
||||||
pFSM->base.vtbl.initData = initData;
|
pFSM->base.vtbl.initData = initData;
|
||||||
pFSM->base.vtbl.setupHandler = setupHandler;
|
pFSM->base.vtbl.setupHandler = setupHandler;
|
||||||
pFSM->base.vtbl.initDataLoader = initDataLoader;
|
pFSM->base.vtbl.initDataLoader = initDataLoader;
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
/*
|
||||||
|
* @Author: godcreator02 qq974980621@gmail.com
|
||||||
|
* @Date: 2024-04-20 19:02:11
|
||||||
|
* @LastEditors: godcreator02 qq974980621@gmail.com
|
||||||
|
* @LastEditTime: 2024-04-23 14:30:18
|
||||||
|
* @FilePath: \vscode\FSM_OOP\keytest\keyFSM.c
|
||||||
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
@ -9,22 +17,6 @@
|
||||||
重载函数,有些是纯虚的必须重新实现,有些可以不重新实现直接用父类的
|
重载函数,有些是纯虚的必须重新实现,有些可以不重新实现直接用父类的
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static Event selectEvent(KeyFSMData *data){ // 必须重新实现
|
|
||||||
|
|
||||||
if(data->countDelay == 10){
|
|
||||||
return HoldCount4;
|
|
||||||
}
|
|
||||||
else if(data->countDelay == 5){
|
|
||||||
return DelayCount3;
|
|
||||||
}
|
|
||||||
else if(data->in == Up){
|
|
||||||
return PhsicalUp;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return PhsicalDown;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void step(KeyFSM* pFSM){
|
static void step(KeyFSM* pFSM){
|
||||||
printFSM(pFSM);
|
printFSM(pFSM);
|
||||||
stepBaseFSM((FSM *)pFSM);
|
stepBaseFSM((FSM *)pFSM);
|
||||||
|
@ -49,7 +41,28 @@ static void initDataLoader(KeyFSM *pFSM){ // 必须重新实现
|
||||||
pFSM->base.privateVars.preloader.preloadSize = sizeof(KeyIn);
|
pFSM->base.privateVars.preloader.preloadSize = sizeof(KeyIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void initSignals(KeyFSM *pFSM){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void resetSignals(KeyFSM *pFSM){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
|
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
||||||
|
addSelectNextStateFcn(Waiting);
|
||||||
|
addSelectNextStateFcn(DownDebouncing);
|
||||||
|
addSelectNextStateFcn(Downing);
|
||||||
|
addSelectNextStateFcn(Holding);
|
||||||
|
addSelectNextStateFcn(HoldUpDebouncing);
|
||||||
|
addSelectNextStateFcn(UpDebouncing);
|
||||||
|
addSelectNextStateFcn(MultiDownWaiting);
|
||||||
|
addSelectNextStateFcn(MultiDowning);
|
||||||
|
addSelectNextStateFcn(MultiDownDebouncing);
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------- 添加状态中事件,action during exit ----------------------- */
|
||||||
addStateActionFcn(enter, Waiting);
|
addStateActionFcn(enter, Waiting);
|
||||||
addStateActionFcn(during, DownDebouncing);
|
addStateActionFcn(during, DownDebouncing);
|
||||||
addStateActionFcn(during, Downing);
|
addStateActionFcn(during, Downing);
|
||||||
|
@ -61,23 +74,19 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
addStateActionFcn(during, MultiDownDebouncing);
|
addStateActionFcn(during, MultiDownDebouncing);
|
||||||
|
|
||||||
|
|
||||||
addTransitionHandler(Waiting, PhsicalDown);
|
/* --------------------------- 添加转移函数和转移函数对应的Delay -------------------------- */
|
||||||
addTransitionHandler(DownDebouncing, PhsicalUp);
|
addTransitionHandler(DownDebouncing, Downing);
|
||||||
addTransitionHandler(DownDebouncing, DelayCount3);
|
addDelayHandler(DownDebouncing, Downing);
|
||||||
addTransitionHandler(Downing, PhsicalUp);
|
|
||||||
addTransitionHandler(Downing, HoldCount4);
|
|
||||||
addTransitionHandler(UpDebouncing, PhsicalDown);
|
|
||||||
addTransitionHandler(UpDebouncing, DelayCount3);
|
|
||||||
addTransitionHandler(Holding, PhsicalUp);
|
|
||||||
addTransitionHandler(MultiDownWaiting, PhsicalDown);
|
|
||||||
addTransitionHandler(MultiDownWaiting, DelayCount3);
|
|
||||||
addTransitionHandler(MultiDowning, PhsicalUp);
|
|
||||||
addTransitionHandler(HoldUpDebouncing, PhsicalDown);
|
|
||||||
addTransitionHandler(HoldUpDebouncing, DelayCount3);
|
|
||||||
addTransitionHandler(MultiDownDebouncing, DelayCount3);
|
|
||||||
addTransitionHandler(MultiDownDebouncing, PhsicalUp);
|
|
||||||
|
|
||||||
addDelayHandler(DelayCount3);
|
addTransitionHandler(UpDebouncing, MultiDownWaiting);
|
||||||
|
addTransitionHandler(MultiDownDebouncing, MultiDowning);
|
||||||
|
addDelayHandler(MultiDownDebouncing, MultiDowning);
|
||||||
|
|
||||||
|
addTransitionHandler(Downing, Holding);
|
||||||
|
addTransitionHandler(MultiDownWaiting, Waiting);
|
||||||
|
|
||||||
|
|
||||||
|
fcns->transitionGeneralAction = (Avoid_WARNING_Delay_General_Handlers)transitionGeneralAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -87,16 +96,17 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
KeyFSM *createKeyFSM(){
|
KeyFSM *createKeyFSM(){
|
||||||
|
|
||||||
KeyFSM *pFSM;
|
KeyFSM *pFSM;
|
||||||
pFSM = (KeyFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
|
pFSM = (KeyFSM *)newBaseFSM(Count_State, DEFAULT_STATE);
|
||||||
|
|
||||||
#ifndef DSP28377
|
#ifndef DSP28377
|
||||||
pFSM->base.vtbl.step = (Avoid_WARNING_Overrider_Fcns)step;
|
pFSM->base.vtbl.step = (Avoid_WARNING_Overrider_Fcns)step;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pFSM->base.vtbl.selectEvent = (Avoid_WARNING_SelectEvent)selectEvent;
|
|
||||||
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
|
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
|
||||||
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
||||||
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
||||||
|
pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals;
|
||||||
|
pFSM->base.vtbl.resetSignals = (Avoid_WARNING_Overrider_Fcns)resetSignals;
|
||||||
|
|
||||||
constructFSM((FSM *)pFSM);
|
constructFSM((FSM *)pFSM);
|
||||||
|
|
||||||
|
|
|
@ -26,19 +26,119 @@ typedef enum _State
|
||||||
DownDebouncing,
|
DownDebouncing,
|
||||||
Downing,
|
Downing,
|
||||||
Holding,
|
Holding,
|
||||||
|
HoldUpDebouncing,
|
||||||
UpDebouncing,
|
UpDebouncing,
|
||||||
MultiDownWaiting,
|
MultiDownWaiting,
|
||||||
MultiDowning,
|
MultiDowning,
|
||||||
HoldUpDebouncing,
|
|
||||||
MultiDownDebouncing,
|
MultiDownDebouncing,
|
||||||
|
|
||||||
Count_State,
|
Count_State,
|
||||||
} State;
|
} State;
|
||||||
#define DEFAULT_STATE Waiting
|
#define DEFAULT_STATE Waiting
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* 下一个状态选择函数 */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
static State selectNextStateFcn(Waiting)(KeyFSMData *data){
|
||||||
|
if(data->in == Down){
|
||||||
|
FSM_LOG(" 物理按键按下 ");
|
||||||
|
return DownDebouncing;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(DownDebouncing)(KeyFSMData *data){
|
||||||
|
if(data->in == Up){
|
||||||
|
FSM_LOG(" 物理按键松开 ");
|
||||||
|
return Waiting;
|
||||||
|
}
|
||||||
|
else if(data->countDelay == 5){
|
||||||
|
return Downing;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(Downing)(KeyFSMData *data){
|
||||||
|
if(data->in == Up){
|
||||||
|
FSM_LOG(" 物理按键松开 ");
|
||||||
|
return UpDebouncing;
|
||||||
|
}
|
||||||
|
else if(data->countDelay == 10){
|
||||||
|
return Holding;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(Holding)(KeyFSMData *data){
|
||||||
|
if(data->in == Up){
|
||||||
|
FSM_LOG(" 物理按键松开 ");
|
||||||
|
return HoldUpDebouncing;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(HoldUpDebouncing)(KeyFSMData *data){
|
||||||
|
if(data->in == Down){
|
||||||
|
FSM_LOG(" 物理按键按下 ");
|
||||||
|
return Holding;
|
||||||
|
}
|
||||||
|
else if(data->countDelay == 5){
|
||||||
|
return Waiting;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(UpDebouncing)(KeyFSMData *data){
|
||||||
|
if(data->in == Down){
|
||||||
|
FSM_LOG(" 物理按键按下 ");
|
||||||
|
if(data->countMultiDown){
|
||||||
|
return MultiDowning;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return Downing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(data->countDelay == 5){
|
||||||
|
return MultiDownWaiting;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(MultiDownWaiting)(KeyFSMData *data){
|
||||||
|
if(data->in == Down){
|
||||||
|
FSM_LOG(" 物理按键按下 ");
|
||||||
|
return MultiDownDebouncing;
|
||||||
|
}
|
||||||
|
else if(data->countDelay == 5){
|
||||||
|
return Waiting;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(MultiDowning)(KeyFSMData *data){
|
||||||
|
if(data->in == Up){
|
||||||
|
FSM_LOG(" 物理按键松开 ");
|
||||||
|
return UpDebouncing;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(MultiDownDebouncing)(KeyFSMData *data){
|
||||||
|
if(data->in == Up){
|
||||||
|
FSM_LOG(" 物理按键松开 ");
|
||||||
|
return MultiDownWaiting;
|
||||||
|
}
|
||||||
|
else if(data->countDelay == 5){
|
||||||
|
return MultiDowning;
|
||||||
|
}
|
||||||
|
return Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* 对应的 action, exit, during 函数 */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
static void actionFcn(enter, Waiting)(KeyFSMData* data){
|
static void actionFcn(enter, Waiting)(KeyFSMData* data){
|
||||||
|
|
||||||
data->out = Idle;
|
data->out = Idle;
|
||||||
data->countDelay = 0;
|
data->countDelay = 0;
|
||||||
data->countMultiDown = 0;
|
data->countMultiDown = 0;
|
||||||
|
@ -101,143 +201,56 @@ static void actionFcn(during, MultiDownDebouncing)(KeyFSMData* data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* 转移函数 */
|
||||||
/*
|
/* -------------------------------------------------------------------------- */
|
||||||
事件和对应的转移函数
|
void transitionGeneralAction(KeyFSMData *data){
|
||||||
*/
|
|
||||||
|
|
||||||
typedef enum _Event{
|
|
||||||
Idle_Event,
|
|
||||||
PhsicalDown,
|
|
||||||
PhsicalUp,
|
|
||||||
DelayCount3,
|
|
||||||
HoldCount4,
|
|
||||||
|
|
||||||
Count_Event,
|
|
||||||
}Event;
|
|
||||||
|
|
||||||
static State transitionHandler(PhsicalDown)(KeyFSMData* data, State curState, int *isDelayExecuted)
|
|
||||||
{
|
|
||||||
FSM_LOG(" 物理按键按下 ");
|
|
||||||
data->countDelay = 0;
|
data->countDelay = 0;
|
||||||
|
|
||||||
switch (curState)
|
|
||||||
{
|
|
||||||
case Waiting:
|
|
||||||
return DownDebouncing;
|
|
||||||
|
|
||||||
case UpDebouncing:
|
|
||||||
if(data->countMultiDown)
|
|
||||||
return MultiDowning;
|
|
||||||
else
|
|
||||||
return Downing;
|
|
||||||
|
|
||||||
case HoldUpDebouncing:
|
|
||||||
return Holding;
|
|
||||||
|
|
||||||
case MultiDownWaiting:
|
|
||||||
return MultiDownDebouncing;
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
|
||||||
FSM_LOG("检查状态转移表设计,不应该到这里");
|
|
||||||
assert(0);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static State transitionHandler(PhsicalUp)(KeyFSMData* data, State curState, Event *delayedEvent)
|
static State transitionHandler(DownDebouncing, Downing)(KeyFSMData* data, int *delayedIndex){
|
||||||
{
|
data->out = Down;
|
||||||
FSM_LOG(" 物理按键松开 ");
|
*delayedIndex = index(DownDebouncing, Downing);
|
||||||
data->countDelay = 0;
|
|
||||||
|
|
||||||
switch (curState)
|
|
||||||
{
|
|
||||||
case DownDebouncing:
|
|
||||||
if(data->countMultiDown){
|
|
||||||
return MultiDownWaiting;
|
|
||||||
}
|
|
||||||
return Waiting;
|
|
||||||
|
|
||||||
case Downing:
|
|
||||||
return UpDebouncing;
|
|
||||||
case Holding:
|
|
||||||
return HoldUpDebouncing;
|
|
||||||
|
|
||||||
case MultiDowning:
|
|
||||||
return UpDebouncing;
|
|
||||||
|
|
||||||
default:
|
|
||||||
FSM_LOG("检查状态转移表设计,不应该到这里");
|
|
||||||
assert(0);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void delayHanlder(DelayCount3)(KeyFSMData* data){
|
static void delayHanlder(DownDebouncing, Downing)(KeyFSMData* data){
|
||||||
data->out = Idle;
|
data->out = Idle;
|
||||||
}
|
}
|
||||||
|
|
||||||
static State transitionHandler(DelayCount3)(KeyFSMData* data, State curState, Event *delayedEvent){
|
static State transitionHandler(UpDebouncing, MultiDownWaiting)(KeyFSMData* data, int *delayedIndex){
|
||||||
FSM_LOG(" 延迟计数到3 ");
|
data->out = Idle;
|
||||||
data->countDelay = 0;
|
data->countMultiDown++;
|
||||||
|
}
|
||||||
|
|
||||||
switch (curState)
|
static State transitionHandler(MultiDownDebouncing, MultiDowning)(KeyFSMData* data, int *delayedIndex){
|
||||||
|
switch (data->countMultiDown + 1)
|
||||||
{
|
{
|
||||||
case DownDebouncing:
|
case 2:
|
||||||
data->out = Down;
|
data->out = Down_2times;
|
||||||
*delayedEvent = DelayCount3;
|
break;
|
||||||
|
case 3:
|
||||||
FSM_LOG("按键按下");
|
data->out = Down_3times;
|
||||||
return Downing;
|
break;
|
||||||
|
|
||||||
case UpDebouncing:
|
|
||||||
data->out = Idle;
|
|
||||||
data->countMultiDown++;
|
|
||||||
|
|
||||||
FSM_LOG("按键松开");
|
|
||||||
return MultiDownWaiting;
|
|
||||||
|
|
||||||
case MultiDownWaiting:
|
|
||||||
return Waiting;
|
|
||||||
|
|
||||||
case HoldUpDebouncing:
|
|
||||||
return Waiting;
|
|
||||||
|
|
||||||
case MultiDownDebouncing:
|
|
||||||
switch (data->countMultiDown + 1)
|
|
||||||
{
|
|
||||||
case 2:
|
|
||||||
data->out = Down_2times;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
data->out = Down_3times;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("reach MultiDown Limit!\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
FSM_LOG(" 多击%d ", data->countMultiDown+1);
|
|
||||||
*delayedEvent = DelayCount3;
|
|
||||||
return MultiDowning;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FSM_LOG("检查状态转移表设计,不应该到这里");
|
printf("reach MultiDown Limit!\n");
|
||||||
assert(0);
|
break;
|
||||||
}
|
}
|
||||||
|
FSM_LOG(" 多击%d ", data->countMultiDown+1);
|
||||||
|
*delayedIndex = index(MultiDownDebouncing, MultiDowning);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void delayHanlder(MultiDownDebouncing, MultiDowning)(KeyFSMData* data){
|
||||||
|
data->out = Idle;
|
||||||
|
}
|
||||||
|
|
||||||
static State transitionHandler(HoldCount4)(KeyFSMData* data, State curState, int *isDelayExecuted){
|
static State transitionHandler(Downing, Holding)(KeyFSMData* data, int *delayedIndex){
|
||||||
FSM_LOG(" 计数到2进入长按模式 ");
|
|
||||||
data->countDelay = 0;
|
|
||||||
|
|
||||||
data->out = Hold;
|
data->out = Hold;
|
||||||
return Holding;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static State transitionHandler(MultiDownWaiting, Waiting)(KeyFSMData* data){
|
||||||
|
data->countMultiDown = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -250,23 +263,17 @@ const static char *stateStr[] = {
|
||||||
"DownDebouncing",
|
"DownDebouncing",
|
||||||
"Downing",
|
"Downing",
|
||||||
"Holding",
|
"Holding",
|
||||||
|
"HoldUpDebouncing",
|
||||||
"UpDebouncing",
|
"UpDebouncing",
|
||||||
"MultiDownWaiting",
|
"MultiDownWaiting",
|
||||||
"MultiDowning",
|
"MultiDowning",
|
||||||
"HoldUpDebouncing",
|
|
||||||
"MultiDownDebouncing",
|
"MultiDownDebouncing",
|
||||||
};
|
};
|
||||||
const static char *eventStr[] = {
|
|
||||||
"Idle",
|
|
||||||
"PhsicalDown",
|
|
||||||
"PhsicalUp",
|
|
||||||
"DelayCount3",
|
|
||||||
"HoldCount4",
|
|
||||||
};
|
|
||||||
static void printFSM(KeyFSM* pFSM){
|
static void printFSM(KeyFSM* pFSM){
|
||||||
KeyFSMData* data = pFSM->base.data;
|
KeyFSMData* data = pFSM->base.data;
|
||||||
FSM_LOG("KeyFSM: ");
|
FSM_LOG("KeyFSM: ");
|
||||||
FSM_LOG("%d, 当前状态:%s, \t当前事件:%s \t转移:", data->countDelay, stateStr[getFSMCurState((FSM *)pFSM)], eventStr[getFSMCurEvent((FSM *)pFSM)]);
|
FSM_LOG("%d, 当前状态:%s, \t上一个下次事件:%s \t转移:", data->countDelay, stateStr[getFSMCurState((FSM *)pFSM)], stateStr[getFSMNextState((FSM *)pFSM)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
/*
|
||||||
|
* @Author: godcreator02 qq974980621@gmail.com
|
||||||
|
* @Date: 2024-04-20 18:52:14
|
||||||
|
* @LastEditors: godcreator02 qq974980621@gmail.com
|
||||||
|
* @LastEditTime: 2024-04-20 20:26:40
|
||||||
|
* @FilePath: \vscode\FSM_OOP\template\main.c
|
||||||
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "templateFSM.h"
|
#include "templateFSM.h"
|
||||||
|
@ -19,11 +27,11 @@ int main(){
|
||||||
|
|
||||||
int ovflag = GetPreloaderOverFlag(pFSM);
|
int ovflag = GetPreloaderOverFlag(pFSM);
|
||||||
|
|
||||||
if(i == 10){
|
if(i == 3){
|
||||||
TemplateFSM_Signals(pFSM)->signalA = 1;
|
TemplateFSM_Signals(pFSM)->signalA = 1;
|
||||||
}
|
}
|
||||||
if(i == 11){
|
if(i == 4){
|
||||||
TemplateFSM_Signals(pFSM)->signalB = 1;
|
TemplateFSM_Signals(pFSM)->signalA = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%d, " ,i);
|
printf("%d, " ,i);
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
/*
|
||||||
|
* @Author: godcreator02 qq974980621@gmail.com
|
||||||
|
* @Date: 2024-04-20 20:08:03
|
||||||
|
* @LastEditors: godcreator02 qq974980621@gmail.com
|
||||||
|
* @LastEditTime: 2024-04-20 21:05:34
|
||||||
|
* @FilePath: \vscode\FSM_OOP\template\templateFSM.c
|
||||||
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -9,38 +17,11 @@
|
||||||
/*
|
/*
|
||||||
重载函数,有些是纯虚的必须重新实现,有些可以不重新实现直接用父类的
|
重载函数,有些是纯虚的必须重新实现,有些可以不重新实现直接用父类的
|
||||||
*/
|
*/
|
||||||
static Event ceventArr[20] = {
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
Idle2D,
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
D2E,
|
|
||||||
E2D,
|
|
||||||
D2E,
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
Idle_Event,
|
|
||||||
};
|
|
||||||
|
|
||||||
static Event selectEvent(TemplateFSMData *data, TemplateFSMSignals *signals){ // 必须重新实现
|
|
||||||
if(signals->signalA){
|
|
||||||
return E2D;
|
|
||||||
}
|
|
||||||
if(signals->signalB){
|
|
||||||
return D2E;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ceventArr[data->in.arrindex];
|
|
||||||
}
|
|
||||||
|
|
||||||
static void step(TemplateFSM* pFSM){
|
static void step(TemplateFSM* pFSM){
|
||||||
printFSM(pFSM);
|
printFSM(pFSM);
|
||||||
stepBaseFSM(BASE_FSM(pFSM));
|
stepBaseFSM(BASE_FSM(pFSM));
|
||||||
|
FSM_LOG("下次状态:%s", stateStr[getFSMNextState((FSM *)pFSM)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initData(TemplateFSM *pFSM){ // 必须重新实现
|
static void initData(TemplateFSM *pFSM){ // 必须重新实现
|
||||||
|
@ -83,7 +64,12 @@ static void initDataLoader(TemplateFSM *pFSM){ // 必须重新实现
|
||||||
|
|
||||||
|
|
||||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
|
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
||||||
|
addSelectNextStateFcn(D);
|
||||||
|
addSelectNextStateFcn(E);
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------- 添加状态中事件,action during exit ----------------------- */
|
||||||
addStateActionFcn(during, E);
|
addStateActionFcn(during, E);
|
||||||
addStateActionFcn(during, D);
|
addStateActionFcn(during, D);
|
||||||
addStateActionFcn(enter, E);
|
addStateActionFcn(enter, E);
|
||||||
|
@ -91,12 +77,15 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
addStateActionFcn(exit, E);
|
addStateActionFcn(exit, E);
|
||||||
addStateActionFcn(exit, D);
|
addStateActionFcn(exit, D);
|
||||||
|
|
||||||
addTransitionHandler(Idle, Idle2D);
|
/* --------------------------- 添加转移函数和转移函数对应的Delay -------------------------- */
|
||||||
addTransitionHandler(Idle, Idle2E);
|
addTransitionHandler(Idle, D);
|
||||||
addTransitionHandler(D, D2E);
|
addTransitionHandler(Idle, E);
|
||||||
addTransitionHandler(E, E2D);
|
addTransitionHandler(D, E);
|
||||||
|
addTransitionHandler(E, D);
|
||||||
|
|
||||||
addDelayHandler(Idle2D);
|
addDelayHandler(D, E);
|
||||||
|
|
||||||
|
fcns->transitionGeneralAction = &transitionGeneralAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -105,7 +94,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
|
|
||||||
TemplateFSM *createTemplateFSM(){
|
TemplateFSM *createTemplateFSM(){
|
||||||
TemplateFSM *pFSM;
|
TemplateFSM *pFSM;
|
||||||
pFSM = (TemplateFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
|
pFSM = (TemplateFSM *)newBaseFSM(Count_State, DEFAULT_STATE);
|
||||||
|
|
||||||
pFSM->base.vtbl.step = (Avoid_WARNING_Overrider_Fcns)step;
|
pFSM->base.vtbl.step = (Avoid_WARNING_Overrider_Fcns)step;
|
||||||
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
||||||
|
@ -113,7 +102,6 @@ TemplateFSM *createTemplateFSM(){
|
||||||
pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals;
|
pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals;
|
||||||
pFSM->base.vtbl.resetSignals = (Avoid_WARNING_Overrider_Fcns)resetSignals;
|
pFSM->base.vtbl.resetSignals = (Avoid_WARNING_Overrider_Fcns)resetSignals;
|
||||||
|
|
||||||
pFSM->base.vtbl.selectEvent = (Avoid_WARNING_SelectEvent)selectEvent;
|
|
||||||
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
|
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
|
||||||
|
|
||||||
constructFSM((FSM *)pFSM);
|
constructFSM((FSM *)pFSM);
|
||||||
|
|
|
@ -15,9 +15,11 @@ typedef struct _TemplateFSM
|
||||||
FSM base;
|
FSM base;
|
||||||
}TemplateFSM;
|
}TemplateFSM;
|
||||||
|
|
||||||
/*
|
|
||||||
状态和对应的 action, exit, during 函数
|
/* -------------------------------------------------------------------------- */
|
||||||
*/
|
/* 状态 */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
typedef enum _State
|
typedef enum _State
|
||||||
{
|
{
|
||||||
|
@ -29,6 +31,28 @@ typedef enum _State
|
||||||
} State;
|
} State;
|
||||||
#define DEFAULT_STATE E
|
#define DEFAULT_STATE E
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* 下一个状态选择函数 */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
static State selectNextStateFcn(D)(TemplateFSMData *data, TemplateFSMSignals *signals){
|
||||||
|
if(signals->signalA){
|
||||||
|
return E;
|
||||||
|
}
|
||||||
|
return Idle;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(E)(TemplateFSMData *data, TemplateFSMSignals *signals){
|
||||||
|
if(signals->signalA){
|
||||||
|
return D;
|
||||||
|
}
|
||||||
|
return Idle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* 对应的 action, exit, during 函数 */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
static void actionFcn(enter, D)()
|
static void actionFcn(enter, D)()
|
||||||
{
|
{
|
||||||
FSM_LOG(" enterD ");
|
FSM_LOG(" enterD ");
|
||||||
|
@ -55,47 +79,38 @@ static void actionFcn(exit, E)()
|
||||||
FSM_LOG(" exitE ");
|
FSM_LOG(" exitE ");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
事件和对应的转移函数
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef enum _Event{
|
|
||||||
Idle_Event,
|
|
||||||
Idle2D,
|
|
||||||
Idle2E,
|
|
||||||
D2E,
|
|
||||||
E2D,
|
|
||||||
|
|
||||||
Count_Event,
|
|
||||||
}Event;
|
|
||||||
|
|
||||||
|
|
||||||
static State transitionHandler(Idle2D)()
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* 转移函数 */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void transitionGeneralAction(TemplateFSMData *data){
|
||||||
|
FSM_LOG("general");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void transitionHandler(Idle, D)()
|
||||||
{
|
{
|
||||||
FSM_LOG(" Idle2D ");
|
FSM_LOG(" Idle2D ");
|
||||||
return D;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void delayHanlder(Idle2D)(TemplateFSMData *data){
|
static void delayHanlder(D, E)(TemplateFSMData *data){
|
||||||
FSM_LOG(" DelayIdle2D");
|
FSM_LOG(" DelayD2E");
|
||||||
}
|
}
|
||||||
|
|
||||||
static State transitionHandler(Idle2E)()
|
static State transitionHandler(Idle, E)()
|
||||||
{
|
{
|
||||||
FSM_LOG(" Idle2E ");
|
FSM_LOG(" Idle2E ");
|
||||||
return E;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static State transitionHandler(D2E)()
|
static State transitionHandler(D, E)(TemplateFSMData *data, int *delayedIndex)
|
||||||
{
|
{
|
||||||
|
*delayedIndex = index(D, E);
|
||||||
FSM_LOG(" D2E ");
|
FSM_LOG(" D2E ");
|
||||||
return E;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static State transitionHandler(E2D)()
|
static State transitionHandler(E, D)()
|
||||||
{
|
{
|
||||||
FSM_LOG(" E2D ");
|
FSM_LOG(" E2D ");
|
||||||
return D;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,17 +123,11 @@ const static char *stateStr[] = {
|
||||||
"Idle",
|
"Idle",
|
||||||
"D",
|
"D",
|
||||||
"E",
|
"E",
|
||||||
};
|
|
||||||
const static char *eventStr[] = {
|
|
||||||
"Idle",
|
|
||||||
"Idle2D",
|
|
||||||
"Idle2E",
|
|
||||||
"D2E",
|
|
||||||
"E2D",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void printFSM(TemplateFSM* pFSM){
|
static void printFSM(TemplateFSM* pFSM){
|
||||||
FSM_LOG(" \tTemplateFSM: ");
|
FSM_LOG(" \tTemplateFSM: ");
|
||||||
FSM_LOG("上次事件:%s, 当前状态:%s, 预装载器溢出:%d ,动作:", eventStr[getFSMCurEvent((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)], _getPreloaderOverFlag((FSM *)pFSM));
|
FSM_LOG("预装载器溢出:%d, 当前状态:%s, 动作:", _getPreloaderOverFlag((FSM *)pFSM), stateStr[getFSMCurState((FSM *)pFSM)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue