tests/genericmake/plc.xml
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Tue, 12 Sep 2017 16:49:35 +0300
changeset 1800 1711339585ce
parent 1542 0535a6b50534
child 2296 a2ab363f9e90
permissions -rw-r--r--
make possible to turn off at compile time online debugging, logging
and external sync functionality

Defines TARGET_DEBUG_DISABLE, TARGET_LOGGING_DISABLE, TARGET_EXT_SYNC_DISABLE
allow to use generated PLC code in low-cost microcontrollers,
integrate into external programs and so on.

main.c:
extern void __run(void);
int main(void)
{
for(;;) {
__run();
// sleep common_ticktime__ ns
// add common_ticktime__ ns to __CURRENT_TIME
}
return 0;
}

Compile for example for arm bare-metal:
../build$ arm-none-eabi-gcc \
-DTARGET_DEBUG_DISABLE -DTARGET_LOGGER_DISABLE
-DTARGET_EXT_SYNC_DISABLE \
-flto -ffunction-sections -fdata-sections -I../../../../matiec/lib/C \
*.c \
-nodefaultlibs --specs=nano.specs -Wl,--static -Wl,--gc-section -Wl,--start-group -lc -lm -lnosys -lgcc -Wl,--end-group
<?xml version='1.0' encoding='utf-8'?>
<project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201">
  <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2014-01-19T11:14:47" contentDescription="This example shows how you can customize build process by using 'make'.&#10;"/>
  <contentHeader name="Makefile Example" modificationDateTime="2016-10-14T14:00:01">
    <coordinateInfo>
      <fbd>
        <scaling x="0" y="0"/>
      </fbd>
      <ld>
        <scaling x="0" y="0"/>
      </ld>
      <sfc>
        <scaling x="0" y="0"/>
      </sfc>
    </coordinateInfo>
  </contentHeader>
  <types>
    <dataTypes/>
    <pous>
      <pou name="program0" pouType="program">
        <interface>
          <localVars>
            <variable name="LocalVara">
              <type>
                <INT/>
              </type>
            </variable>
            <variable name="LocalVarb">
              <type>
                <INT/>
              </type>
            </variable>
          </localVars>
        </interface>
        <body>
          <FBD>
            <inVariable localId="1" executionOrderId="0" height="27" width="77" negated="false">
              <position x="52" y="368"/>
              <connectionPointOut>
                <relPosition x="77" y="13"/>
              </connectionPointOut>
              <expression>LocalVara</expression>
            </inVariable>
            <outVariable localId="2" executionOrderId="0" height="27" width="77" negated="false">
              <position x="167" y="368"/>
              <connectionPointIn>
                <relPosition x="0" y="13"/>
                <connection refLocalId="1">
                  <position x="167" y="381"/>
                  <position x="129" y="381"/>
                </connection>
              </connectionPointIn>
              <expression>LocalVarb</expression>
            </outVariable>
            <comment localId="3" height="310" width="760">
              <position x="32" y="23"/>
              <content>
                <xhtml:p><![CDATA[This example shows how you can customize build process by using 'make'.

Sometimes special steps need to be done to build entire project.
But it's not necessary to create another target in Beremiz every time you need to customize something in build process.  Just use for that 'Generic' target and describe all necessary steps in Makefile. 

For example, you can 
 - preprocess generated by Beremiz C source files, 
 - do some fancy source code transformation using any tools you want, 
 - use any compiler you want,
 - call static analyzers,
 - run integration tests on the project,
 - upload source code to external build server,
 - upload to the target and compile it there,
 - flash/transfer your compiled binary to the target,
 and much much more.
]]></xhtml:p>
              </content>
            </comment>
          </FBD>
        </body>
      </pou>
    </pous>
  </types>
  <instances>
    <configurations>
      <configuration name="config">
        <resource name="resource1">
          <task name="Tsk" priority="0" interval="T#100ms">
            <pouInstance name="Inst" typeName="program0"/>
          </task>
        </resource>
      </configuration>
    </configurations>
  </instances>
</project>