modbus: recreate static lib with correct hooks
This commit is contained in:
parent
0cbf3c7038
commit
b8dbe681fa
231
Modbus/.cproject
231
Modbus/.cproject
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
<cconfiguration id="com.crt.advproject.config.lib.debug.1243980727">
|
<cconfiguration id="com.crt.advproject.config.lib.debug.796503394">
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.debug.1243980727" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.debug.796503394" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
||||||
<externalSettings>
|
<externalSettings>
|
||||||
<externalSetting>
|
<externalSetting>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Modbus"/>
|
<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Modbus"/>
|
||||||
@ -21,50 +21,76 @@
|
|||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Debug build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.debug.1243980727" name="Debug" parent="com.crt.advproject.config.lib.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Debug build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.debug.796503394" name="Debug" parent="com.crt.advproject.config.lib.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
||||||
<folderInfo id="com.crt.advproject.config.lib.debug.1243980727." name="/" resourcePath="">
|
<folderInfo id="com.crt.advproject.config.lib.debug.796503394." name="/" resourcePath="">
|
||||||
<toolChain id="com.crt.advproject.toolchain.lib.debug.1747277720" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.debug">
|
<toolChain id="com.crt.advproject.toolchain.lib.debug.488159270" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.debug">
|
||||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.debug.1818998794" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.debug"/>
|
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.debug.2139523672" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.debug"/>
|
||||||
<builder buildPath="${workspace_loc:/Modbus}/Debug" id="com.crt.advproject.builder.lib.debug.1542146393" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.debug"/>
|
<builder buildPath="${workspace_loc:/Modbus}/Debug" id="com.crt.advproject.builder.lib.debug.1579116261" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.debug"/>
|
||||||
<tool id="com.crt.advproject.cpp.lib.debug.619745829" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.debug">
|
<tool id="com.crt.advproject.cpp.lib.debug.209035710" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.debug">
|
||||||
<option id="com.crt.advproject.cpp.hdrlib.1940415426" name="Library headers" superClass="com.crt.advproject.cpp.hdrlib" useByScannerDiscovery="false"/>
|
<option id="com.crt.advproject.cpp.thumb.259697205" name="Thumb mode" superClass="com.crt.advproject.cpp.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
<option id="com.crt.advproject.cpp.fpu.893968908" name="Floating point" superClass="com.crt.advproject.cpp.fpu" useByScannerDiscovery="true"/>
|
<option id="com.crt.advproject.cpp.specs.514010321" name="Specs" superClass="com.crt.advproject.cpp.specs" useByScannerDiscovery="false" value="com.crt.advproject.cpp.specs.newlib" valueType="enumerated"/>
|
||||||
</tool>
|
<option id="com.crt.advproject.cpp.arch.1146076479" name="Architecture" superClass="com.crt.advproject.cpp.arch" useByScannerDiscovery="true" value="com.crt.advproject.cpp.target.cm3" valueType="enumerated"/>
|
||||||
<tool id="com.crt.advproject.gcc.lib.debug.284142615" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.debug">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.1225522102" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
<option id="com.crt.advproject.gcc.thumb.1769631408" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
|
||||||
<option id="com.crt.advproject.gcc.arch.1802329931" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.1874114209" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="DEBUG"/>
|
<listOptionValue builtIn="false" value="DEBUG"/>
|
||||||
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||||
<listOptionValue builtIn="false" value="__REDLIB__"/>
|
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||||
<listOptionValue builtIn="false" value="CORE_M3"/>
|
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||||
|
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||||
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||||
</option>
|
</option>
|
||||||
<option id="gnu.c.compiler.option.misc.other.1372819195" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
<option id="gnu.cpp.compiler.option.other.other.124292613" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" valueType="string"/>
|
||||||
<option id="gnu.c.compiler.option.optimization.flags.933521341" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
<option id="gnu.cpp.compiler.option.optimization.flags.1921314613" name="Other optimization flags" superClass="gnu.cpp.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||||
<option id="com.crt.advproject.gcc.hdrlib.727060650" name="Library headers" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/>
|
<option id="com.crt.advproject.cpp.hdrlib.1590569765" name="Library headers" superClass="com.crt.advproject.cpp.hdrlib" useByScannerDiscovery="false" value="Newlib" valueType="enumerated"/>
|
||||||
<option id="com.crt.advproject.gcc.fpu.1031944818" name="Floating point" superClass="com.crt.advproject.gcc.fpu" useByScannerDiscovery="true"/>
|
<option id="com.crt.advproject.cpp.fpu.1729598885" name="Floating point" superClass="com.crt.advproject.cpp.fpu" useByScannerDiscovery="true"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.2142704447" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1740150318" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.crt.advproject.c.misc.dialect.1244882132" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
<option id="com.crt.advproject.cpp.misc.dialect.747855378" superClass="com.crt.advproject.cpp.misc.dialect" value="com.crt.advproject.misc.dialect.c++11" valueType="enumerated"/>
|
||||||
<inputType id="com.crt.advproject.compiler.input.1577047141" superClass="com.crt.advproject.compiler.input"/>
|
<inputType id="com.crt.advproject.compiler.cpp.input.1385489560" superClass="com.crt.advproject.compiler.cpp.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.crt.advproject.gas.lib.debug.1255319619" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.debug">
|
<tool id="com.crt.advproject.gcc.lib.debug.1137532337" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.debug">
|
||||||
<option id="com.crt.advproject.gas.thumb.2090111823" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
<option id="com.crt.advproject.gcc.thumb.1945489176" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
<option id="com.crt.advproject.gas.arch.286411657" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
<option id="com.crt.advproject.gcc.arch.216012255" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
||||||
<option id="gnu.both.asm.option.flags.crt.1889634062" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -D__REDLIB__ -DDEBUG -D__CODE_RED -DCORE_M3 -D__LPC15XX__" valueType="string"/>
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.562043933" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
<option id="com.crt.advproject.gas.hdrlib.1568322710" name="Library headers" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/>
|
<listOptionValue builtIn="false" value="DEBUG"/>
|
||||||
<option id="com.crt.advproject.gas.fpu.457683638" name="Floating point" superClass="com.crt.advproject.gas.fpu"/>
|
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1321781434" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||||
|
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||||
|
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||||
|
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||||
|
</option>
|
||||||
|
<option id="gnu.c.compiler.option.misc.other.241461042" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
||||||
|
<option id="gnu.c.compiler.option.optimization.flags.2103709436" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1053265155" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||||
</option>
|
</option>
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1466535826" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
<option id="com.crt.advproject.c.misc.dialect.879255695" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
||||||
<inputType id="com.crt.advproject.assembler.input.1240443838" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
<option id="com.crt.advproject.gcc.hdrlib.481939904" superClass="com.crt.advproject.gcc.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||||
|
<option id="com.crt.advproject.gcc.specs.1921096932" superClass="com.crt.advproject.gcc.specs" value="com.crt.advproject.gcc.specs.newlib" valueType="enumerated"/>
|
||||||
|
<inputType id="com.crt.advproject.compiler.input.1261574351" superClass="com.crt.advproject.compiler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.crt.advproject.ar.lib.debug.279077506" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.debug"/>
|
<tool id="com.crt.advproject.gas.lib.debug.1508409768" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.debug">
|
||||||
|
<option id="com.crt.advproject.gas.thumb.1166910110" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
||||||
|
<option id="com.crt.advproject.gas.arch.1242237185" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
||||||
|
<option id="gnu.both.asm.option.flags.crt.623048910" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DDEBUG -D__CODE_RED -DCORE_M3 -D__USE_LPCOPEN -D__LPC15XX__ -D__NEWLIB__" valueType="string"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1819424271" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||||
|
</option>
|
||||||
|
<option id="com.crt.advproject.gas.hdrlib.754991651" superClass="com.crt.advproject.gas.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||||
|
<option id="com.crt.advproject.gas.specs.1411945783" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.newlib" valueType="enumerated"/>
|
||||||
|
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.792255883" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||||
|
<inputType id="com.crt.advproject.assembler.input.64420305" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.crt.advproject.ar.lib.debug.460749273" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.debug"/>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
@ -75,8 +101,8 @@
|
|||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
<cconfiguration id="com.crt.advproject.config.lib.release.1542215730">
|
<cconfiguration id="com.crt.advproject.config.lib.release.1641992972">
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.release.1542215730" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.release.1641992972" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
||||||
<externalSettings>
|
<externalSettings>
|
||||||
<externalSetting>
|
<externalSetting>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Modbus"/>
|
<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Modbus"/>
|
||||||
@ -95,45 +121,75 @@
|
|||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Release build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.release.1542215730" name="Release" parent="com.crt.advproject.config.lib.release" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Release build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.release.1641992972" name="Release" parent="com.crt.advproject.config.lib.release" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
||||||
<folderInfo id="com.crt.advproject.config.lib.release.1542215730." name="/" resourcePath="">
|
<folderInfo id="com.crt.advproject.config.lib.release.1641992972." name="/" resourcePath="">
|
||||||
<toolChain id="com.crt.advproject.toolchain.lib.release.517404726" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.release">
|
<toolChain id="com.crt.advproject.toolchain.lib.release.661726016" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.release">
|
||||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.release.1949021336" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.release"/>
|
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.release.1397461883" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.release"/>
|
||||||
<builder buildPath="${workspace_loc:/Modbus}/Release" id="com.crt.advproject.builder.lib.release.4446171" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.release"/>
|
<builder buildPath="${workspace_loc:/Modbus}/Release" id="com.crt.advproject.builder.lib.release.2022185850" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.release"/>
|
||||||
<tool id="com.crt.advproject.cpp.lib.release.20616150" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.release"/>
|
<tool id="com.crt.advproject.cpp.lib.release.1346216254" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.release">
|
||||||
<tool id="com.crt.advproject.gcc.lib.release.2019613487" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.release">
|
<option id="com.crt.advproject.cpp.thumb.704134014" name="Thumb mode" superClass="com.crt.advproject.cpp.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
<option id="com.crt.advproject.gcc.thumb.1320467727" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
<option id="com.crt.advproject.cpp.specs.1631764716" name="Specs" superClass="com.crt.advproject.cpp.specs" useByScannerDiscovery="false" value="com.crt.advproject.cpp.specs.newlib" valueType="enumerated"/>
|
||||||
<option id="com.crt.advproject.gcc.arch.689637409" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
<option id="com.crt.advproject.cpp.arch.1972156308" name="Architecture" superClass="com.crt.advproject.cpp.arch" useByScannerDiscovery="true" value="com.crt.advproject.cpp.target.cm3" valueType="enumerated"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.2111725943" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.154862246" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
<listOptionValue builtIn="false" value="NDEBUG"/>
|
<listOptionValue builtIn="false" value="NDEBUG"/>
|
||||||
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||||
<listOptionValue builtIn="false" value="__REDLIB__"/>
|
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||||
<listOptionValue builtIn="false" value="CORE_M3"/>
|
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||||
|
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||||
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||||
</option>
|
</option>
|
||||||
<option id="gnu.c.compiler.option.misc.other.1628159777" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
<option id="gnu.cpp.compiler.option.other.other.97112883" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" valueType="string"/>
|
||||||
<option id="gnu.c.compiler.option.optimization.flags.181489377" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
<option id="gnu.cpp.compiler.option.optimization.flags.75707207" name="Other optimization flags" superClass="gnu.cpp.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common -Os" valueType="string"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.253607500" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.386692672" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.crt.advproject.c.misc.dialect.878054737" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
<option id="com.crt.advproject.cpp.misc.dialect.1026125528" superClass="com.crt.advproject.cpp.misc.dialect" value="com.crt.advproject.misc.dialect.c++11" valueType="enumerated"/>
|
||||||
<option id="com.crt.advproject.gcc.hdrlib.1522606341" superClass="com.crt.advproject.gcc.hdrlib" value="Redlib" valueType="enumerated"/>
|
<option id="com.crt.advproject.cpp.hdrlib.1575397547" superClass="com.crt.advproject.cpp.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||||
<inputType id="com.crt.advproject.compiler.input.1105768945" superClass="com.crt.advproject.compiler.input"/>
|
<inputType id="com.crt.advproject.compiler.cpp.input.1551890212" superClass="com.crt.advproject.compiler.cpp.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.crt.advproject.gas.lib.release.315184569" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.release">
|
<tool id="com.crt.advproject.gcc.lib.release.651316468" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.release">
|
||||||
<option id="com.crt.advproject.gas.thumb.497126066" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
<option id="com.crt.advproject.gcc.thumb.1038937887" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
<option id="com.crt.advproject.gas.arch.1254846099" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
<option id="com.crt.advproject.gcc.arch.1939097864" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
||||||
<option id="gnu.both.asm.option.flags.crt.920976125" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -D__REDLIB__ -DNDEBUG -D__CODE_RED -DCORE_M3 -D__LPC15XX__" valueType="string"/>
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.1167588143" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.302350239" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
<listOptionValue builtIn="false" value="NDEBUG"/>
|
||||||
|
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||||
|
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||||
|
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||||
|
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||||
|
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||||
|
</option>
|
||||||
|
<option id="gnu.c.compiler.option.misc.other.2101559284" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
||||||
|
<option id="gnu.c.compiler.option.optimization.flags.1015749175" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1725679522" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||||
</option>
|
</option>
|
||||||
<option id="com.crt.advproject.gas.hdrlib.1403546165" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/>
|
<option id="com.crt.advproject.c.misc.dialect.1534134428" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1343706223" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
<option id="com.crt.advproject.gcc.hdrlib.781606191" superClass="com.crt.advproject.gcc.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||||
<inputType id="com.crt.advproject.assembler.input.1776905299" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
<option id="com.crt.advproject.gcc.specs.1937017826" superClass="com.crt.advproject.gcc.specs" value="com.crt.advproject.gcc.specs.newlib" valueType="enumerated"/>
|
||||||
|
<inputType id="com.crt.advproject.compiler.input.773190247" superClass="com.crt.advproject.compiler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.crt.advproject.ar.lib.release.297408706" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.release"/>
|
<tool id="com.crt.advproject.gas.lib.release.297243120" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.release">
|
||||||
|
<option id="com.crt.advproject.gas.thumb.1919799426" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
||||||
|
<option id="com.crt.advproject.gas.arch.129562775" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
||||||
|
<option id="gnu.both.asm.option.flags.crt.701710812" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DNDEBUG -D__CODE_RED -DCORE_M3 -D__USE_LPCOPEN -D__LPC15XX__ -D__NEWLIB__" valueType="string"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.438433668" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||||
|
</option>
|
||||||
|
<option id="com.crt.advproject.gas.hdrlib.951500934" superClass="com.crt.advproject.gas.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||||
|
<option id="com.crt.advproject.gas.specs.1455244390" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.newlib" valueType="enumerated"/>
|
||||||
|
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1609791713" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||||
|
<inputType id="com.crt.advproject.assembler.input.2140703805" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.crt.advproject.ar.lib.release.259759157" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.release"/>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
@ -146,40 +202,41 @@
|
|||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<project id="Modbus.com.crt.advproject.projecttype.lib.310838571" name="Static Library" projectType="com.crt.advproject.projecttype.lib"/>
|
<project id="Modbus.com.crt.advproject.projecttype.lib.1018194361" name="Static Library" projectType="com.crt.advproject.projecttype.lib"/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="scannerConfiguration">
|
<storageModule moduleId="scannerConfiguration">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
<storageModule moduleId="com.crt.config">
|
<storageModule moduleId="com.crt.config">
|
||||||
<projectStorage><?xml version="1.0" encoding="UTF-8"?>
|
<projectStorage><?xml version="1.0" encoding="UTF-8"?>
|
||||||
<TargetConfig>
|
<TargetConfig>
|
||||||
<Properties property_2="LPC15xx_256K.cfx" property_3="NXP" property_4="LPC1549" property_count="5" version="100300"/>
|
<Properties property_2="LPC15xx_256K.cfx" property_3="NXP" property_4="LPC1549" property_count="5" version="100300"/>
|
||||||
<infoList vendor="NXP">
|
<infoList vendor="NXP">
|
||||||
<info chip="LPC1549" connectscript="LPC15RunBootRomConnect.scp" flash_driver="LPC15xx_256K.cfx" match_id="0x0" name="LPC1549" resetscript="LPC15RunBootRomReset.scp" stub="crt_emu_cm3_gen">
|
<info chip="LPC1549" connectscript="LPC15RunBootRomConnect.scp" flash_driver="LPC15xx_256K.cfx" match_id="0x0" name="LPC1549" resetscript="LPC15RunBootRomReset.scp" stub="crt_emu_cm3_gen">
|
||||||
<chip>
|
<chip>
|
||||||
<name>LPC1549</name>
|
<name>LPC1549</name>
|
||||||
<family>LPC15xx</family>
|
<family>LPC15xx</family>
|
||||||
<vendor>NXP (formerly Philips)</vendor>
|
<vendor>NXP (formerly Philips)</vendor>
|
||||||
<reset board="None" core="Real" sys="Real"/>
|
<reset board="None" core="Real" sys="Real"/>
|
||||||
<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/>
|
<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/>
|
||||||
<memory can_program="true" id="Flash" is_ro="true" type="Flash"/>
|
<memory can_program="true" id="Flash" is_ro="true" type="Flash"/>
|
||||||
<memory id="RAM" type="RAM"/>
|
<memory id="RAM" type="RAM"/>
|
||||||
<memory id="Periph" is_volatile="true" type="Peripheral"/>
|
<memory id="Periph" is_volatile="true" type="Peripheral"/>
|
||||||
<memoryInstance derived_from="Flash" id="MFlash256" location="0x0" size="0x40000"/>
|
<memoryInstance derived_from="Flash" id="MFlash256" location="0x0" size="0x40000"/>
|
||||||
<memoryInstance derived_from="RAM" id="Ram0_16" location="0x2000000" size="0x4000"/>
|
<memoryInstance derived_from="RAM" id="Ram0_16" location="0x2000000" size="0x4000"/>
|
||||||
<memoryInstance derived_from="RAM" id="Ram1_16" location="0x2004000" size="0x4000"/>
|
<memoryInstance derived_from="RAM" id="Ram1_16" location="0x2004000" size="0x4000"/>
|
||||||
<memoryInstance derived_from="RAM" id="Ram2_4" location="0x2008000" size="0x1000"/>
|
<memoryInstance derived_from="RAM" id="Ram2_4" location="0x2008000" size="0x1000"/>
|
||||||
</chip>
|
</chip>
|
||||||
<processor>
|
<processor>
|
||||||
<name gcc_name="cortex-m3">Cortex-M3</name>
|
<name gcc_name="cortex-m3">Cortex-M3</name>
|
||||||
<family>Cortex-M</family>
|
<family>Cortex-M</family>
|
||||||
</processor>
|
</processor>
|
||||||
</info>
|
</info>
|
||||||
</infoList>
|
</infoList>
|
||||||
</TargetConfig></projectStorage>
|
</TargetConfig></projectStorage>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
|
<storageModule moduleId="refreshScope"/>
|
||||||
<storageModule moduleId="com.crt.advproject">
|
<storageModule moduleId="com.crt.advproject">
|
||||||
<boardId>LPCXpresso1549</boardId>
|
<boardId>LPCXpresso1549</boardId>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
<name>Modbus</name>
|
<name>Modbus</name>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
<projects>
|
<projects>
|
||||||
|
<project>lpc_chip_15xx</project>
|
||||||
</projects>
|
</projects>
|
||||||
<buildSpec>
|
<buildSpec>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
@ -20,6 +21,7 @@
|
|||||||
</buildSpec>
|
</buildSpec>
|
||||||
<natures>
|
<natures>
|
||||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
|
|
||||||
>>>>>>> bada194ebe7490c25ca7589366224d4ae0f80eab
|
|
||||||
#ifndef SERIALPORT_H_
|
#ifndef SERIALPORT_H_
|
||||||
#define SERIALPORT_H_
|
#define SERIALPORT_H_
|
||||||
|
|
||||||
|
|||||||
@ -51,11 +51,9 @@ obtain a copy.
|
|||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
POSSIBILITY OF SUCH DAMAGE. */
|
POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
|
|
||||||
#ifndef _UTIL_CRC16_H_
|
#ifndef _UTIL_CRC16_H_
|
||||||
#define _UTIL_CRC16_H_
|
#define _UTIL_CRC16_H_
|
||||||
|
|
||||||
|
|
||||||
/** @ingroup util_crc16
|
/** @ingroup util_crc16
|
||||||
Processor-independent CRC-16 calculation.
|
Processor-independent CRC-16 calculation.
|
||||||
|
|
||||||
@ -68,7 +66,8 @@ obtain a copy.
|
|||||||
@param uint8_t a (0x00..0xFF)
|
@param uint8_t a (0x00..0xFF)
|
||||||
@return calculated CRC (0x0000..0xFFFF)
|
@return calculated CRC (0x0000..0xFFFF)
|
||||||
*/
|
*/
|
||||||
static uint16_t crc16_update(uint16_t crc, uint8_t a)
|
static uint16_t
|
||||||
|
crc16_update (uint16_t crc, uint8_t a)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -84,5 +83,4 @@ static uint16_t crc16_update(uint16_t crc, uint8_t a)
|
|||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* _UTIL_CRC16_H_ */
|
#endif /* _UTIL_CRC16_H_ */
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
Arduino library for communicating with Modbus slaves over RS232/485 (via RTU protocol).
|
Arduino library for communicating with Modbus slaves over RS232/485 (via RTU
|
||||||
|
protocol).
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -27,24 +28,26 @@ Arduino library for communicating with Modbus slaves over RS232/485 (via RTU pro
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* _____PROJECT INCLUDES_____________________________________________________
|
||||||
/* _____PROJECT INCLUDES_____________________________________________________ */
|
*/
|
||||||
#include "ModbusMaster.h"
|
#include "ModbusMaster.h"
|
||||||
#include "crc16.h"
|
#include "crc16.h"
|
||||||
|
|
||||||
|
/* _____GLOBAL VARIABLES_____________________________________________________
|
||||||
/* _____GLOBAL VARIABLES_____________________________________________________ */
|
*/
|
||||||
#if defined(ARDUINO_ARCH_AVR)
|
#if defined(ARDUINO_ARCH_AVR)
|
||||||
HardwareSerial *MBSerial = &Serial; ///< Pointer to Serial class object
|
HardwareSerial *MBSerial = &Serial; ///< Pointer to Serial class object
|
||||||
#elif defined(ARDUINO_ARCH_SAM)
|
#elif defined(ARDUINO_ARCH_SAM)
|
||||||
UARTClass *MBSerial = &Serial; ///< Pointer to Serial class object
|
UARTClass *MBSerial = &Serial; ///< Pointer to Serial class object
|
||||||
#else
|
#else
|
||||||
// In the case of undefined Serial the code should still function
|
// In the case of undefined Serial the code should still function
|
||||||
// #error "This library only supports boards with an AVR or SAM processor. Please open an issue at https://github.com/4-20ma/ModbusMaster/issues and indicate which processor/platform you're using."
|
// #error "This library only supports boards with an AVR or SAM processor.
|
||||||
|
// Please open an issue at https://github.com/4-20ma/ModbusMaster/issues and
|
||||||
|
// indicate which processor/platform you're using."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* _____PUBLIC FUNCTIONS_____________________________________________________
|
||||||
/* _____PUBLIC FUNCTIONS_____________________________________________________ */
|
*/
|
||||||
/**
|
/**
|
||||||
Constructor.
|
Constructor.
|
||||||
|
|
||||||
@ -59,7 +62,6 @@ ModbusMaster::ModbusMaster(void)
|
|||||||
_u16BaudRate = 0;
|
_u16BaudRate = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Constructor.
|
Constructor.
|
||||||
|
|
||||||
@ -76,13 +78,13 @@ ModbusMaster::ModbusMaster(uint8_t u8MBSlave)
|
|||||||
_u16BaudRate = 0;
|
_u16BaudRate = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Constructor.
|
Constructor.
|
||||||
|
|
||||||
Creates class object using specified serial port, Modbus slave ID.
|
Creates class object using specified serial port, Modbus slave ID.
|
||||||
|
|
||||||
@overload void ModbusMaster::ModbusMaster(uint8_t u8SerialPort, uint8_t u8MBSlave)
|
@overload void ModbusMaster::ModbusMaster(uint8_t u8SerialPort, uint8_t
|
||||||
|
u8MBSlave)
|
||||||
@param u8SerialPort serial port (Serial, Serial1..Serial3)
|
@param u8SerialPort serial port (Serial, Serial1..Serial3)
|
||||||
@param u8MBSlave Modbus slave ID (1..255)
|
@param u8MBSlave Modbus slave ID (1..255)
|
||||||
@ingroup setup
|
@ingroup setup
|
||||||
@ -94,7 +96,6 @@ ModbusMaster::ModbusMaster(uint8_t u8SerialPort, uint8_t u8MBSlave)
|
|||||||
_u16BaudRate = 0;
|
_u16BaudRate = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initialize class object.
|
Initialize class object.
|
||||||
|
|
||||||
@ -103,12 +104,12 @@ Call once class has been instantiated, typically within setup().
|
|||||||
|
|
||||||
@ingroup setup
|
@ingroup setup
|
||||||
*/
|
*/
|
||||||
void ModbusMaster::begin(void)
|
void
|
||||||
|
ModbusMaster::begin (void)
|
||||||
{
|
{
|
||||||
begin (19200);
|
begin (19200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initialize class object.
|
Initialize class object.
|
||||||
|
|
||||||
@ -119,7 +120,8 @@ Call once class has been instantiated, typically within setup().
|
|||||||
@param u16BaudRate baud rate, in standard increments (300..115200)
|
@param u16BaudRate baud rate, in standard increments (300..115200)
|
||||||
@ingroup setup
|
@ingroup setup
|
||||||
*/
|
*/
|
||||||
void ModbusMaster::begin(uint16_t u16BaudRate)
|
void
|
||||||
|
ModbusMaster::begin (uint16_t u16BaudRate)
|
||||||
{
|
{
|
||||||
// txBuffer = (uint16_t*) calloc(ku8MaxBufferSize, sizeof(uint16_t));
|
// txBuffer = (uint16_t*) calloc(ku8MaxBufferSize, sizeof(uint16_t));
|
||||||
_u8TransmitBufferIndex = 0;
|
_u8TransmitBufferIndex = 0;
|
||||||
@ -153,8 +155,10 @@ void ModbusMaster::begin(uint16_t u16BaudRate)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(MBSerial == NULL) MBSerial = new SerialPort;
|
if (MBSerial == NULL)
|
||||||
if(u16BaudRate != _u16BaudRate) {
|
MBSerial = new SerialPort;
|
||||||
|
if (u16BaudRate != _u16BaudRate)
|
||||||
|
{
|
||||||
_u16BaudRate = u16BaudRate;
|
_u16BaudRate = u16BaudRate;
|
||||||
MBSerial->begin (u16BaudRate);
|
MBSerial->begin (u16BaudRate);
|
||||||
}
|
}
|
||||||
@ -166,8 +170,8 @@ void ModbusMaster::begin(uint16_t u16BaudRate)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
void ModbusMaster::beginTransmission(uint16_t u16Address)
|
ModbusMaster::beginTransmission (uint16_t u16Address)
|
||||||
{
|
{
|
||||||
_u16WriteAddress = u16Address;
|
_u16WriteAddress = u16Address;
|
||||||
_u8TransmitBufferIndex = 0;
|
_u8TransmitBufferIndex = 0;
|
||||||
@ -175,10 +179,12 @@ void ModbusMaster::beginTransmission(uint16_t u16Address)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// eliminate this function in favor of using existing MB request functions
|
// eliminate this function in favor of using existing MB request functions
|
||||||
uint8_t ModbusMaster::requestFrom(uint16_t address, uint16_t quantity)
|
uint8_t
|
||||||
|
ModbusMaster::requestFrom (uint16_t address, uint16_t quantity)
|
||||||
{
|
{
|
||||||
uint8_t read;
|
uint8_t read;
|
||||||
read = 1; // krl: added this to prevent warning. This method is not called anywhere...
|
read = 1; // krl: added this to prevent warning. This method is not called
|
||||||
|
// anywhere...
|
||||||
// clamp to buffer length
|
// clamp to buffer length
|
||||||
if (quantity > ku8MaxBufferSize)
|
if (quantity > ku8MaxBufferSize)
|
||||||
{
|
{
|
||||||
@ -191,8 +197,8 @@ uint8_t ModbusMaster::requestFrom(uint16_t address, uint16_t quantity)
|
|||||||
return read;
|
return read;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
void ModbusMaster::sendBit(bool data)
|
ModbusMaster::sendBit (bool data)
|
||||||
{
|
{
|
||||||
uint8_t txBitIndex = u16TransmitBufferLength % 16;
|
uint8_t txBitIndex = u16TransmitBufferLength % 16;
|
||||||
if ((u16TransmitBufferLength >> 4) < ku8MaxBufferSize)
|
if ((u16TransmitBufferLength >> 4) < ku8MaxBufferSize)
|
||||||
@ -207,8 +213,8 @@ void ModbusMaster::sendBit(bool data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
void ModbusMaster::send(uint16_t data)
|
ModbusMaster::send (uint16_t data)
|
||||||
{
|
{
|
||||||
if (_u8TransmitBufferIndex < ku8MaxBufferSize)
|
if (_u8TransmitBufferIndex < ku8MaxBufferSize)
|
||||||
{
|
{
|
||||||
@ -217,34 +223,27 @@ void ModbusMaster::send(uint16_t data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
void ModbusMaster::send(uint32_t data)
|
ModbusMaster::send (uint32_t data)
|
||||||
{
|
{
|
||||||
send (lowWord (data));
|
send (lowWord (data));
|
||||||
send (highWord (data));
|
send (highWord (data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
void ModbusMaster::send(uint8_t data)
|
ModbusMaster::send (uint8_t data)
|
||||||
{
|
{
|
||||||
send (word (data));
|
send (word (data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t
|
||||||
|
ModbusMaster::available (void)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t ModbusMaster::available(void)
|
|
||||||
{
|
{
|
||||||
return _u8ResponseBufferLength - _u8ResponseBufferIndex;
|
return _u8ResponseBufferLength - _u8ResponseBufferIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t
|
||||||
uint16_t ModbusMaster::receive(void)
|
ModbusMaster::receive (void)
|
||||||
{
|
{
|
||||||
if (_u8ResponseBufferIndex < _u8ResponseBufferLength)
|
if (_u8ResponseBufferIndex < _u8ResponseBufferLength)
|
||||||
{
|
{
|
||||||
@ -256,13 +255,6 @@ uint16_t ModbusMaster::receive(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Set idle time callback function (cooperative multitasking).
|
Set idle time callback function (cooperative multitasking).
|
||||||
|
|
||||||
@ -273,12 +265,12 @@ serial ports, etc. is permitted within callback function.
|
|||||||
|
|
||||||
@see ModbusMaster::ModbusMasterTransaction()
|
@see ModbusMaster::ModbusMasterTransaction()
|
||||||
*/
|
*/
|
||||||
void ModbusMaster::idle(void (*idle)())
|
void
|
||||||
|
ModbusMaster::idle (void (*idle) ())
|
||||||
{
|
{
|
||||||
_idle = idle;
|
_idle = idle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Retrieve data from response buffer.
|
Retrieve data from response buffer.
|
||||||
|
|
||||||
@ -287,7 +279,8 @@ Retrieve data from response buffer.
|
|||||||
@return value in position u8Index of response buffer (0x0000..0xFFFF)
|
@return value in position u8Index of response buffer (0x0000..0xFFFF)
|
||||||
@ingroup buffer
|
@ingroup buffer
|
||||||
*/
|
*/
|
||||||
uint16_t ModbusMaster::getResponseBuffer(uint8_t u8Index)
|
uint16_t
|
||||||
|
ModbusMaster::getResponseBuffer (uint8_t u8Index)
|
||||||
{
|
{
|
||||||
if (u8Index < ku8MaxBufferSize)
|
if (u8Index < ku8MaxBufferSize)
|
||||||
{
|
{
|
||||||
@ -299,14 +292,14 @@ uint16_t ModbusMaster::getResponseBuffer(uint8_t u8Index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Clear Modbus response buffer.
|
Clear Modbus response buffer.
|
||||||
|
|
||||||
@see ModbusMaster::getResponseBuffer(uint8_t u8Index)
|
@see ModbusMaster::getResponseBuffer(uint8_t u8Index)
|
||||||
@ingroup buffer
|
@ingroup buffer
|
||||||
*/
|
*/
|
||||||
void ModbusMaster::clearResponseBuffer()
|
void
|
||||||
|
ModbusMaster::clearResponseBuffer ()
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
@ -316,17 +309,18 @@ void ModbusMaster::clearResponseBuffer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Place data in transmit buffer.
|
Place data in transmit buffer.
|
||||||
|
|
||||||
@see ModbusMaster::clearTransmitBuffer()
|
@see ModbusMaster::clearTransmitBuffer()
|
||||||
@param u8Index index of transmit buffer array (0x00..0x3F)
|
@param u8Index index of transmit buffer array (0x00..0x3F)
|
||||||
@param u16Value value to place in position u8Index of transmit buffer (0x0000..0xFFFF)
|
@param u16Value value to place in position u8Index of transmit buffer
|
||||||
|
(0x0000..0xFFFF)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup buffer
|
@ingroup buffer
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::setTransmitBuffer(uint8_t u8Index, uint16_t u16Value)
|
uint8_t
|
||||||
|
ModbusMaster::setTransmitBuffer (uint8_t u8Index, uint16_t u16Value)
|
||||||
{
|
{
|
||||||
if (u8Index < ku8MaxBufferSize)
|
if (u8Index < ku8MaxBufferSize)
|
||||||
{
|
{
|
||||||
@ -339,14 +333,14 @@ uint8_t ModbusMaster::setTransmitBuffer(uint8_t u8Index, uint16_t u16Value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Clear Modbus transmit buffer.
|
Clear Modbus transmit buffer.
|
||||||
|
|
||||||
@see ModbusMaster::setTransmitBuffer(uint8_t u8Index, uint16_t u16Value)
|
@see ModbusMaster::setTransmitBuffer(uint8_t u8Index, uint16_t u16Value)
|
||||||
@ingroup buffer
|
@ingroup buffer
|
||||||
*/
|
*/
|
||||||
void ModbusMaster::clearTransmitBuffer()
|
void
|
||||||
|
ModbusMaster::clearTransmitBuffer ()
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
@ -356,7 +350,6 @@ void ModbusMaster::clearTransmitBuffer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x01 Read Coils.
|
Modbus function 0x01 Read Coils.
|
||||||
|
|
||||||
@ -380,14 +373,14 @@ order end of the word).
|
|||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup discrete
|
@ingroup discrete
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::readCoils(uint16_t u16ReadAddress, uint16_t u16BitQty)
|
uint8_t
|
||||||
|
ModbusMaster::readCoils (uint16_t u16ReadAddress, uint16_t u16BitQty)
|
||||||
{
|
{
|
||||||
_u16ReadAddress = u16ReadAddress;
|
_u16ReadAddress = u16ReadAddress;
|
||||||
_u16ReadQty = u16BitQty;
|
_u16ReadQty = u16BitQty;
|
||||||
return ModbusMasterTransaction (ku8MBReadCoils);
|
return ModbusMasterTransaction (ku8MBReadCoils);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x02 Read Discrete Inputs.
|
Modbus function 0x02 Read Discrete Inputs.
|
||||||
|
|
||||||
@ -407,19 +400,19 @@ bits in the final data word will be padded with zeros (toward the high
|
|||||||
order end of the word).
|
order end of the word).
|
||||||
|
|
||||||
@param u16ReadAddress address of first discrete input (0x0000..0xFFFF)
|
@param u16ReadAddress address of first discrete input (0x0000..0xFFFF)
|
||||||
@param u16BitQty quantity of discrete inputs to read (1..2000, enforced by remote device)
|
@param u16BitQty quantity of discrete inputs to read (1..2000, enforced by
|
||||||
|
remote device)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup discrete
|
@ingroup discrete
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::readDiscreteInputs(uint16_t u16ReadAddress,
|
uint8_t
|
||||||
uint16_t u16BitQty)
|
ModbusMaster::readDiscreteInputs (uint16_t u16ReadAddress, uint16_t u16BitQty)
|
||||||
{
|
{
|
||||||
_u16ReadAddress = u16ReadAddress;
|
_u16ReadAddress = u16ReadAddress;
|
||||||
_u16ReadQty = u16BitQty;
|
_u16ReadQty = u16BitQty;
|
||||||
return ModbusMasterTransaction (ku8MBReadDiscreteInputs);
|
return ModbusMasterTransaction (ku8MBReadDiscreteInputs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x03 Read Holding Registers.
|
Modbus function 0x03 Read Holding Registers.
|
||||||
|
|
||||||
@ -432,11 +425,13 @@ The register data in the response buffer is packed as one word per
|
|||||||
register.
|
register.
|
||||||
|
|
||||||
@param u16ReadAddress address of the first holding register (0x0000..0xFFFF)
|
@param u16ReadAddress address of the first holding register (0x0000..0xFFFF)
|
||||||
@param u16ReadQty quantity of holding registers to read (1..125, enforced by remote device)
|
@param u16ReadQty quantity of holding registers to read (1..125, enforced by
|
||||||
|
remote device)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup register
|
@ingroup register
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::readHoldingRegisters(uint16_t u16ReadAddress,
|
uint8_t
|
||||||
|
ModbusMaster::readHoldingRegisters (uint16_t u16ReadAddress,
|
||||||
uint16_t u16ReadQty)
|
uint16_t u16ReadQty)
|
||||||
{
|
{
|
||||||
_u16ReadAddress = u16ReadAddress;
|
_u16ReadAddress = u16ReadAddress;
|
||||||
@ -444,7 +439,6 @@ uint8_t ModbusMaster::readHoldingRegisters(uint16_t u16ReadAddress,
|
|||||||
return ModbusMasterTransaction (ku8MBReadHoldingRegisters);
|
return ModbusMasterTransaction (ku8MBReadHoldingRegisters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x04 Read Input Registers.
|
Modbus function 0x04 Read Input Registers.
|
||||||
|
|
||||||
@ -457,19 +451,19 @@ The register data in the response buffer is packed as one word per
|
|||||||
register.
|
register.
|
||||||
|
|
||||||
@param u16ReadAddress address of the first input register (0x0000..0xFFFF)
|
@param u16ReadAddress address of the first input register (0x0000..0xFFFF)
|
||||||
@param u16ReadQty quantity of input registers to read (1..125, enforced by remote device)
|
@param u16ReadQty quantity of input registers to read (1..125, enforced by
|
||||||
|
remote device)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup register
|
@ingroup register
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::readInputRegisters(uint16_t u16ReadAddress,
|
uint8_t
|
||||||
uint8_t u16ReadQty)
|
ModbusMaster::readInputRegisters (uint16_t u16ReadAddress, uint8_t u16ReadQty)
|
||||||
{
|
{
|
||||||
_u16ReadAddress = u16ReadAddress;
|
_u16ReadAddress = u16ReadAddress;
|
||||||
_u16ReadQty = u16ReadQty;
|
_u16ReadQty = u16ReadQty;
|
||||||
return ModbusMasterTransaction (ku8MBReadInputRegisters);
|
return ModbusMasterTransaction (ku8MBReadInputRegisters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x05 Write Single Coil.
|
Modbus function 0x05 Write Single Coil.
|
||||||
|
|
||||||
@ -484,14 +478,14 @@ address of the coil to be forced. Coils are addressed starting at zero.
|
|||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup discrete
|
@ingroup discrete
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::writeSingleCoil(uint16_t u16WriteAddress, uint8_t u8State)
|
uint8_t
|
||||||
|
ModbusMaster::writeSingleCoil (uint16_t u16WriteAddress, uint8_t u8State)
|
||||||
{
|
{
|
||||||
_u16WriteAddress = u16WriteAddress;
|
_u16WriteAddress = u16WriteAddress;
|
||||||
_u16WriteQty = (u8State ? 0xFF00 : 0x0000);
|
_u16WriteQty = (u8State ? 0xFF00 : 0x0000);
|
||||||
return ModbusMasterTransaction (ku8MBWriteSingleCoil);
|
return ModbusMasterTransaction (ku8MBWriteSingleCoil);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x06 Write Single Register.
|
Modbus function 0x06 Write Single Register.
|
||||||
|
|
||||||
@ -504,7 +498,8 @@ written. Registers are addressed starting at zero.
|
|||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup register
|
@ingroup register
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::writeSingleRegister(uint16_t u16WriteAddress,
|
uint8_t
|
||||||
|
ModbusMaster::writeSingleRegister (uint16_t u16WriteAddress,
|
||||||
uint16_t u16WriteValue)
|
uint16_t u16WriteValue)
|
||||||
{
|
{
|
||||||
_u16WriteAddress = u16WriteAddress;
|
_u16WriteAddress = u16WriteAddress;
|
||||||
@ -513,7 +508,6 @@ uint8_t ModbusMaster::writeSingleRegister(uint16_t u16WriteAddress,
|
|||||||
return ModbusMasterTransaction (ku8MBWriteSingleRegister);
|
return ModbusMasterTransaction (ku8MBWriteSingleRegister);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x0F Write Multiple Coils.
|
Modbus function 0x0F Write Multiple Coils.
|
||||||
|
|
||||||
@ -526,24 +520,25 @@ buffer. A logical '1' in a bit position of the buffer requests the
|
|||||||
corresponding output to be ON. A logical '0' requests it to be OFF.
|
corresponding output to be ON. A logical '0' requests it to be OFF.
|
||||||
|
|
||||||
@param u16WriteAddress address of the first coil (0x0000..0xFFFF)
|
@param u16WriteAddress address of the first coil (0x0000..0xFFFF)
|
||||||
@param u16BitQty quantity of coils to write (1..2000, enforced by remote device)
|
@param u16BitQty quantity of coils to write (1..2000, enforced by remote
|
||||||
|
device)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup discrete
|
@ingroup discrete
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::writeMultipleCoils(uint16_t u16WriteAddress,
|
uint8_t
|
||||||
uint16_t u16BitQty)
|
ModbusMaster::writeMultipleCoils (uint16_t u16WriteAddress, uint16_t u16BitQty)
|
||||||
{
|
{
|
||||||
_u16WriteAddress = u16WriteAddress;
|
_u16WriteAddress = u16WriteAddress;
|
||||||
_u16WriteQty = u16BitQty;
|
_u16WriteQty = u16BitQty;
|
||||||
return ModbusMasterTransaction (ku8MBWriteMultipleCoils);
|
return ModbusMasterTransaction (ku8MBWriteMultipleCoils);
|
||||||
}
|
}
|
||||||
uint8_t ModbusMaster::writeMultipleCoils()
|
uint8_t
|
||||||
|
ModbusMaster::writeMultipleCoils ()
|
||||||
{
|
{
|
||||||
_u16WriteQty = u16TransmitBufferLength;
|
_u16WriteQty = u16TransmitBufferLength;
|
||||||
return ModbusMasterTransaction (ku8MBWriteMultipleCoils);
|
return ModbusMasterTransaction (ku8MBWriteMultipleCoils);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x10 Write Multiple Registers.
|
Modbus function 0x10 Write Multiple Registers.
|
||||||
|
|
||||||
@ -554,11 +549,13 @@ The requested written values are specified in the transmit buffer. Data
|
|||||||
is packed as one word per register.
|
is packed as one word per register.
|
||||||
|
|
||||||
@param u16WriteAddress address of the holding register (0x0000..0xFFFF)
|
@param u16WriteAddress address of the holding register (0x0000..0xFFFF)
|
||||||
@param u16WriteQty quantity of holding registers to write (1..123, enforced by remote device)
|
@param u16WriteQty quantity of holding registers to write (1..123, enforced by
|
||||||
|
remote device)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup register
|
@ingroup register
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::writeMultipleRegisters(uint16_t u16WriteAddress,
|
uint8_t
|
||||||
|
ModbusMaster::writeMultipleRegisters (uint16_t u16WriteAddress,
|
||||||
uint16_t u16WriteQty)
|
uint16_t u16WriteQty)
|
||||||
{
|
{
|
||||||
_u16WriteAddress = u16WriteAddress;
|
_u16WriteAddress = u16WriteAddress;
|
||||||
@ -567,13 +564,13 @@ uint8_t ModbusMaster::writeMultipleRegisters(uint16_t u16WriteAddress,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// new version based on Wire.h
|
// new version based on Wire.h
|
||||||
uint8_t ModbusMaster::writeMultipleRegisters()
|
uint8_t
|
||||||
|
ModbusMaster::writeMultipleRegisters ()
|
||||||
{
|
{
|
||||||
_u16WriteQty = _u8TransmitBufferIndex;
|
_u16WriteQty = _u8TransmitBufferIndex;
|
||||||
return ModbusMasterTransaction (ku8MBWriteMultipleRegisters);
|
return ModbusMasterTransaction (ku8MBWriteMultipleRegisters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x16 Mask Write Register.
|
Modbus function 0x16 Mask Write Register.
|
||||||
|
|
||||||
@ -596,8 +593,9 @@ Result = (Current Contents && And_Mask) || (Or_Mask && (~And_Mask))
|
|||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup register
|
@ingroup register
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::maskWriteRegister(uint16_t u16WriteAddress,
|
uint8_t
|
||||||
uint16_t u16AndMask, uint16_t u16OrMask)
|
ModbusMaster::maskWriteRegister (uint16_t u16WriteAddress, uint16_t u16AndMask,
|
||||||
|
uint16_t u16OrMask)
|
||||||
{
|
{
|
||||||
_u16WriteAddress = u16WriteAddress;
|
_u16WriteAddress = u16WriteAddress;
|
||||||
_u16TransmitBuffer[0] = u16AndMask;
|
_u16TransmitBuffer[0] = u16AndMask;
|
||||||
@ -605,7 +603,6 @@ uint8_t ModbusMaster::maskWriteRegister(uint16_t u16WriteAddress,
|
|||||||
return ModbusMasterTransaction (ku8MBMaskWriteRegister);
|
return ModbusMasterTransaction (ku8MBMaskWriteRegister);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x17 Read Write Multiple Registers.
|
Modbus function 0x17 Read Write Multiple Registers.
|
||||||
|
|
||||||
@ -620,14 +617,19 @@ holding registers. The data to be written is specified in the transmit
|
|||||||
buffer.
|
buffer.
|
||||||
|
|
||||||
@param u16ReadAddress address of the first holding register (0x0000..0xFFFF)
|
@param u16ReadAddress address of the first holding register (0x0000..0xFFFF)
|
||||||
@param u16ReadQty quantity of holding registers to read (1..125, enforced by remote device)
|
@param u16ReadQty quantity of holding registers to read (1..125, enforced by
|
||||||
|
remote device)
|
||||||
@param u16WriteAddress address of the first holding register (0x0000..0xFFFF)
|
@param u16WriteAddress address of the first holding register (0x0000..0xFFFF)
|
||||||
@param u16WriteQty quantity of holding registers to write (1..121, enforced by remote device)
|
@param u16WriteQty quantity of holding registers to write (1..121, enforced by
|
||||||
|
remote device)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
@ingroup register
|
@ingroup register
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::readWriteMultipleRegisters(uint16_t u16ReadAddress,
|
uint8_t
|
||||||
uint16_t u16ReadQty, uint16_t u16WriteAddress, uint16_t u16WriteQty)
|
ModbusMaster::readWriteMultipleRegisters (uint16_t u16ReadAddress,
|
||||||
|
uint16_t u16ReadQty,
|
||||||
|
uint16_t u16WriteAddress,
|
||||||
|
uint16_t u16WriteQty)
|
||||||
{
|
{
|
||||||
_u16ReadAddress = u16ReadAddress;
|
_u16ReadAddress = u16ReadAddress;
|
||||||
_u16ReadQty = u16ReadQty;
|
_u16ReadQty = u16ReadQty;
|
||||||
@ -635,7 +637,8 @@ uint8_t ModbusMaster::readWriteMultipleRegisters(uint16_t u16ReadAddress,
|
|||||||
_u16WriteQty = u16WriteQty;
|
_u16WriteQty = u16WriteQty;
|
||||||
return ModbusMasterTransaction (ku8MBReadWriteMultipleRegisters);
|
return ModbusMasterTransaction (ku8MBReadWriteMultipleRegisters);
|
||||||
}
|
}
|
||||||
uint8_t ModbusMaster::readWriteMultipleRegisters(uint16_t u16ReadAddress,
|
uint8_t
|
||||||
|
ModbusMaster::readWriteMultipleRegisters (uint16_t u16ReadAddress,
|
||||||
uint16_t u16ReadQty)
|
uint16_t u16ReadQty)
|
||||||
{
|
{
|
||||||
_u16ReadAddress = u16ReadAddress;
|
_u16ReadAddress = u16ReadAddress;
|
||||||
@ -644,8 +647,8 @@ uint8_t ModbusMaster::readWriteMultipleRegisters(uint16_t u16ReadAddress,
|
|||||||
return ModbusMasterTransaction (ku8MBReadWriteMultipleRegisters);
|
return ModbusMasterTransaction (ku8MBReadWriteMultipleRegisters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* _____PRIVATE FUNCTIONS____________________________________________________
|
||||||
/* _____PRIVATE FUNCTIONS____________________________________________________ */
|
*/
|
||||||
/**
|
/**
|
||||||
Modbus transaction engine.
|
Modbus transaction engine.
|
||||||
Sequence:
|
Sequence:
|
||||||
@ -659,7 +662,8 @@ Sequence:
|
|||||||
@param u8MBFunction Modbus function (0x01..0xFF)
|
@param u8MBFunction Modbus function (0x01..0xFF)
|
||||||
@return 0 on success; exception number on failure
|
@return 0 on success; exception number on failure
|
||||||
*/
|
*/
|
||||||
uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
uint8_t
|
||||||
|
ModbusMaster::ModbusMasterTransaction (uint8_t u8MBFunction)
|
||||||
{
|
{
|
||||||
uint8_t u8ModbusADU[256];
|
uint8_t u8ModbusADU[256];
|
||||||
uint8_t u8ModbusADUSize = 0;
|
uint8_t u8ModbusADUSize = 0;
|
||||||
@ -715,18 +719,21 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
|||||||
case ku8MBWriteMultipleCoils:
|
case ku8MBWriteMultipleCoils:
|
||||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16WriteQty);
|
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16WriteQty);
|
||||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16WriteQty);
|
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16WriteQty);
|
||||||
u8Qty = (_u16WriteQty % 8) ? ((_u16WriteQty >> 3) + 1) : (_u16WriteQty >> 3);
|
u8Qty = (_u16WriteQty % 8) ? ((_u16WriteQty >> 3) + 1)
|
||||||
|
: (_u16WriteQty >> 3);
|
||||||
u8ModbusADU[u8ModbusADUSize++] = u8Qty;
|
u8ModbusADU[u8ModbusADUSize++] = u8Qty;
|
||||||
for (i = 0; i < u8Qty; i++)
|
for (i = 0; i < u8Qty; i++)
|
||||||
{
|
{
|
||||||
switch (i % 2)
|
switch (i % 2)
|
||||||
{
|
{
|
||||||
case 0: // i is even
|
case 0: // i is even
|
||||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16TransmitBuffer[i >> 1]);
|
u8ModbusADU[u8ModbusADUSize++]
|
||||||
|
= lowByte (_u16TransmitBuffer[i >> 1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // i is odd
|
case 1: // i is odd
|
||||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16TransmitBuffer[i >> 1]);
|
u8ModbusADU[u8ModbusADUSize++]
|
||||||
|
= highByte (_u16TransmitBuffer[i >> 1]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -764,7 +771,8 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
|||||||
u8ModbusADU[u8ModbusADUSize] = 0;
|
u8ModbusADU[u8ModbusADUSize] = 0;
|
||||||
|
|
||||||
// flush receive buffer before transmitting request
|
// flush receive buffer before transmitting request
|
||||||
while (MBSerial->read() != -1);
|
while (MBSerial->read () != -1)
|
||||||
|
;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// transmit request
|
// transmit request
|
||||||
@ -822,14 +830,16 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify response is for correct Modbus function code (mask exception bit 7)
|
// verify response is for correct Modbus function code (mask
|
||||||
|
// exception bit 7)
|
||||||
if ((u8ModbusADU[1] & 0x7F) != u8MBFunction)
|
if ((u8ModbusADU[1] & 0x7F) != u8MBFunction)
|
||||||
{
|
{
|
||||||
u8MBStatus = ku8MBInvalidFunction;
|
u8MBStatus = ku8MBInvalidFunction;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check whether Modbus exception occurred; return Modbus Exception Code
|
// check whether Modbus exception occurred; return Modbus Exception
|
||||||
|
// Code
|
||||||
if (bitRead (u8ModbusADU[1], 7))
|
if (bitRead (u8ModbusADU[1], 7))
|
||||||
{
|
{
|
||||||
u8MBStatus = u8ModbusADU[2];
|
u8MBStatus = u8ModbusADU[2];
|
||||||
@ -876,8 +886,9 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// verify CRC
|
// verify CRC
|
||||||
if (!u8MBStatus && (lowByte(u16CRC) != u8ModbusADU[u8ModbusADUSize - 2] ||
|
if (!u8MBStatus
|
||||||
highByte(u16CRC) != u8ModbusADU[u8ModbusADUSize - 1]))
|
&& (lowByte (u16CRC) != u8ModbusADU[u8ModbusADUSize - 2]
|
||||||
|
|| highByte (u16CRC) != u8ModbusADU[u8ModbusADUSize - 1]))
|
||||||
{
|
{
|
||||||
u8MBStatus = ku8MBInvalidCRC;
|
u8MBStatus = ku8MBInvalidCRC;
|
||||||
}
|
}
|
||||||
@ -896,13 +907,15 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
|||||||
{
|
{
|
||||||
if (i < ku8MaxBufferSize)
|
if (i < ku8MaxBufferSize)
|
||||||
{
|
{
|
||||||
_u16ResponseBuffer[i] = word(u8ModbusADU[2 * i + 4], u8ModbusADU[2 * i + 3]);
|
_u16ResponseBuffer[i]
|
||||||
|
= word (u8ModbusADU[2 * i + 4], u8ModbusADU[2 * i + 3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
_u8ResponseBufferLength = i;
|
_u8ResponseBufferLength = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
// in the event of an odd number of bytes, load last byte into zero-padded word
|
// in the event of an odd number of bytes, load last byte into
|
||||||
|
// zero-padded word
|
||||||
if (u8ModbusADU[2] % 2)
|
if (u8ModbusADU[2] % 2)
|
||||||
{
|
{
|
||||||
if (i < ku8MaxBufferSize)
|
if (i < ku8MaxBufferSize)
|
||||||
@ -922,7 +935,8 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
|||||||
{
|
{
|
||||||
if (i < ku8MaxBufferSize)
|
if (i < ku8MaxBufferSize)
|
||||||
{
|
{
|
||||||
_u16ResponseBuffer[i] = word(u8ModbusADU[2 * i + 3], u8ModbusADU[2 * i + 4]);
|
_u16ResponseBuffer[i]
|
||||||
|
= word (u8ModbusADU[2 * i + 3], u8ModbusADU[2 * i + 4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
_u8ResponseBufferLength = i;
|
_u8ResponseBufferLength = i;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user