Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMahmoud Bazzal2019-08-22 15:36:17 +0000
committerMahmoud Bazzal2019-08-22 18:22:17 +0000
commit69a0a24f120bb0d79cbd688081ca697368e252f7 (patch)
tree36457dbba2464beb5524eb270928ad809908ade6
parent191c1034a99a0fde1290de156dca91e69e325f1e (diff)
downloadorg.eclipse.app4mc.examples-69a0a24f120bb0d79cbd688081ca697368e252f7.tar.gz
org.eclipse.app4mc.examples-69a0a24f120bb0d79cbd688081ca697368e252f7.tar.xz
org.eclipse.app4mc.examples-69a0a24f120bb0d79cbd688081ca697368e252f7.zip
RTFParallella initial commit
Signed-off-by: Mahmoud Bazzal <mahmood1994ha@gmail.com>
-rwxr-xr-xRTFParallella/.cproject63
-rwxr-xr-xRTFParallella/.project26
-rwxr-xr-xRTFParallella/.settings/language.settings.xml15
-rw-r--r--RTFParallella/.settings/org.eclipse.cdt.codan.core.prefs89
-rw-r--r--RTFParallella/.settings/org.eclipse.cdt.core.prefs171
-rw-r--r--RTFParallella/README.md39
-rwxr-xr-xRTFParallella/parallellaDeploy.sh50
-rwxr-xr-xRTFParallella/parallellaRun.sh34
-rw-r--r--RTFParallella/patch_init.sh50
-rw-r--r--RTFParallella/port_patch.patch375
-rw-r--r--RTFParallella/portasm.patch45
-rwxr-xr-xRTFParallella/src/parallella/.gitignore6
-rwxr-xr-xRTFParallella/src/parallella/AmaltheaConverter.c87
-rwxr-xr-xRTFParallella/src/parallella/AmaltheaConverter.h81
-rwxr-xr-xRTFParallella/src/parallella/FreeRTOSConfig.h58
-rwxr-xr-xRTFParallella/src/parallella/Makefile51
-rwxr-xr-xRTFParallella/src/parallella/ParallellaUtils.c26
-rwxr-xr-xRTFParallella/src/parallella/ParallellaUtils.h39
-rwxr-xr-xRTFParallella/src/parallella/armcode.c151
-rwxr-xr-xRTFParallella/src/parallella/c2c.c106
-rwxr-xr-xRTFParallella/src/parallella/c2c.h67
-rwxr-xr-xRTFParallella/src/parallella/core0_main.c48
-rwxr-xr-xRTFParallella/src/parallella/core1_main.c44
-rwxr-xr-xRTFParallella/src/parallella/debugFlags.c72
-rwxr-xr-xRTFParallella/src/parallella/debugFlags.h72
-rw-r--r--RTFParallella/src/parallella/host_main_example1.c135
-rwxr-xr-xRTFParallella/src/parallella/host_utils.c127
-rw-r--r--RTFParallella/src/parallella/host_utils.h64
-rw-r--r--RTFParallella/src/parallella/model_enumerations.c88
-rw-r--r--RTFParallella/src/parallella/model_enumerations.h69
-rwxr-xr-xRTFParallella/src/parallella/shared_comms.c58
-rwxr-xr-xRTFParallella/src/parallella/shared_comms.h57
-rwxr-xr-xRTFParallella/src/parallella/taskCode.c121
-rwxr-xr-xRTFParallella/src/parallella/taskCode.h47
34 files changed, 2631 insertions, 0 deletions
diff --git a/RTFParallella/.cproject b/RTFParallella/.cproject
new file mode 100755
index 0000000..d09a4a3
--- /dev/null
+++ b/RTFParallella/.cproject
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="cdt.managedbuild.toolchain.gnu.cross.base.1605716264">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.cross.base.1605716264" moduleId="org.eclipse.cdt.core.settings" name="Default">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.cross.base.1605716264" name="Default" optionalBuildProperties="" parent="org.eclipse.cdt.build.core.emptycfg">
+ <folderInfo id="cdt.managedbuild.toolchain.gnu.cross.base.1605716264.813184079" name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.cross.base.1547314808" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.base">
+ <option id="cdt.managedbuild.option.gnu.cross.prefix.429924673" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix"/>
+ <option id="cdt.managedbuild.option.gnu.cross.path.1993404401" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path"/>
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1813206941" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
+ <builder buildPath="${workspace_loc:/org.eclipse.app4mc.examples.rtfp/src/parallella}" enabledIncrementalBuild="true" id="cdt.managedbuild.builder.gnu.cross.65220641" incrementalBuildTarget="example1" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/>
+ <tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.175109054" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1925296426" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.2040290889" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"/>
+ <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1912907076" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker">
+ <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.774684393" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1355407963" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"/>
+ <tool id="cdt.managedbuild.tool.gnu.cross.archiver.416866046" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/>
+ <tool id="cdt.managedbuild.tool.gnu.cross.assembler.1563842933" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.403113861" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="org.eclipse.rtfp.null.1987513852" name="org.eclipse.rtfp"/>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="refreshScope" versionNumber="2">
+ <configuration configurationName="Default">
+ <resource resourceType="PROJECT" workspacePath="/org.eclipse.rtfp"/>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1605716264;cdt.managedbuild.toolchain.gnu.cross.base.1605716264.813184079;cdt.managedbuild.tool.gnu.cross.c.compiler.175109054;cdt.managedbuild.tool.gnu.c.compiler.input.1925296426">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+</cproject>
diff --git a/RTFParallella/.project b/RTFParallella/.project
new file mode 100755
index 0000000..5570539
--- /dev/null
+++ b/RTFParallella/.project
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.app4mc.examples.rtfp</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+</projectDescription>
diff --git a/RTFParallella/.settings/language.settings.xml b/RTFParallella/.settings/language.settings.xml
new file mode 100755
index 0000000..73ec64b
--- /dev/null
+++ b/RTFParallella/.settings/language.settings.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project>
+ <configuration id="cdt.managedbuild.toolchain.gnu.cross.base.1605716264" name="Default">
+ <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
+ <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+ <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
+ <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="(g?cc)|([gc]\+\+)|(clang)" prefer-non-shared="true"/>
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1378115495018860532" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <language-scope id="org.eclipse.cdt.core.gcc"/>
+ <language-scope id="org.eclipse.cdt.core.g++"/>
+ </provider>
+ <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
+ </extension>
+ </configuration>
+</project>
diff --git a/RTFParallella/.settings/org.eclipse.cdt.codan.core.prefs b/RTFParallella/.settings/org.eclipse.cdt.codan.core.prefs
new file mode 100644
index 0000000..9a577d2
--- /dev/null
+++ b/RTFParallella/.settings/org.eclipse.cdt.codan.core.prefs
@@ -0,0 +1,89 @@
+eclipse.preferences.version=1
+org.eclipse.cdt.codan.checkers.errnoreturn=Warning
+org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false}
+org.eclipse.cdt.codan.checkers.errreturnvalue=Error
+org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"}
+org.eclipse.cdt.codan.checkers.nocommentinside=-Error
+org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"}
+org.eclipse.cdt.codan.checkers.nolinecomment=-Error
+org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"}
+org.eclipse.cdt.codan.checkers.noreturn=Error
+org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false}
+org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error
+org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"}
+org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error
+org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"}
+org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"}
+org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error
+org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"}
+org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"}
+org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false}
+org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning
+org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
+org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"}
+org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning
+org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true}
+org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"}
+org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error
+org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"}
+org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"}
+org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"}
+org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"}
+org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error
+org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"}
+org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error
+org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"}
+org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error
+org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"}
+org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error
+org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"}
+org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"}
+org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"}
+org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false}
+org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info
+org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"}
+org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error
+org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"}
+org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error
+org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"}
+org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"}
+org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"}
+org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"}
+org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false}
+org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false}
+org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"}
+org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true}
+org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true}
+org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")}
+org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"}
+org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"}
+org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error
+org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"}
+org.eclipse.cdt.qt.core.qtproblem=Warning
+org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null}
diff --git a/RTFParallella/.settings/org.eclipse.cdt.core.prefs b/RTFParallella/.settings/org.eclipse.cdt.core.prefs
new file mode 100644
index 0000000..9b32d95
--- /dev/null
+++ b/RTFParallella/.settings/org.eclipse.cdt.core.prefs
@@ -0,0 +1,171 @@
+eclipse.preferences.version=1
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/CINNAMON_VERSION/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/CINNAMON_VERSION/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/CINNAMON_VERSION/value=3.6.7
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/CLUTTER_IM_MODULE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/CLUTTER_IM_MODULE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/CLUTTER_IM_MODULE/value=xim
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DBUS_SESSION_BUS_ADDRESS/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DBUS_SESSION_BUS_ADDRESS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DBUS_SESSION_BUS_ADDRESS/value=unix\:path\=/run/user/1000/bus
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DESKTOP_SESSION/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DESKTOP_SESSION/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DESKTOP_SESSION/value=cinnamon
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DISPLAY/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DISPLAY/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/DISPLAY/value=\:0
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GDK_CORE_DEVICE_EVENTS/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GDK_CORE_DEVICE_EVENTS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GDK_CORE_DEVICE_EVENTS/value=1
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GDMSESSION/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GDMSESSION/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GDMSESSION/value=cinnamon
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GIO_LAUNCHED_DESKTOP_FILE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GIO_LAUNCHED_DESKTOP_FILE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GIO_LAUNCHED_DESKTOP_FILE/value=/usr/share/applications/nemo.desktop
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GIO_LAUNCHED_DESKTOP_FILE_PID/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GIO_LAUNCHED_DESKTOP_FILE_PID/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GIO_LAUNCHED_DESKTOP_FILE_PID/value=2854
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GJS_DEBUG_OUTPUT/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GJS_DEBUG_OUTPUT/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GJS_DEBUG_OUTPUT/value=stderr
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GJS_DEBUG_TOPICS/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GJS_DEBUG_TOPICS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GJS_DEBUG_TOPICS/value=JS ERROR;JS LOG
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GNOME_DESKTOP_SESSION_ID/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GNOME_DESKTOP_SESSION_ID/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GNOME_DESKTOP_SESSION_ID/value=this-is-deprecated
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GPG_AGENT_INFO/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GPG_AGENT_INFO/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GPG_AGENT_INFO/value=/run/user/1000/gnupg/S.gpg-agent\:0\:1
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_IM_MODULE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_IM_MODULE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_IM_MODULE/value=ibus
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_MODULES/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_MODULES/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_MODULES/value=gail\:atk-bridge
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_OVERLAY_SCROLLING/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_OVERLAY_SCROLLING/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/GTK_OVERLAY_SCROLLING/value=0
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/HOME/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/HOME/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/HOME/value=/home/mahmoud
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LANG/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LANG/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LANG/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_ADDRESS/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_ADDRESS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_ADDRESS/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_IDENTIFICATION/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_IDENTIFICATION/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_IDENTIFICATION/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_MEASUREMENT/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_MEASUREMENT/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_MEASUREMENT/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_MONETARY/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_MONETARY/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_MONETARY/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_NAME/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_NAME/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_NAME/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_NUMERIC/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_NUMERIC/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_NUMERIC/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_PAPER/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_PAPER/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_PAPER/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_TELEPHONE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_TELEPHONE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_TELEPHONE/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_TIME/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_TIME/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LC_TIME/value=en_US.UTF-8
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LIBOVERLAY_SCROLLBAR/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LIBOVERLAY_SCROLLBAR/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LIBOVERLAY_SCROLLBAR/value=0
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LOGNAME/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LOGNAME/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/LOGNAME/value=mahmoud
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/OXYGEN_DISABLE_INNER_SHADOWS_HACK/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/OXYGEN_DISABLE_INNER_SHADOWS_HACK/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/OXYGEN_DISABLE_INNER_SHADOWS_HACK/value=1
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PAPERSIZE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PAPERSIZE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PAPERSIZE/value=letter
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PATH/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PATH/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PATH/value=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/usr/games\:/usr/local/games\:/snap/bin
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PWD/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PWD/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/PWD/value=/home/mahmoud
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT4_IM_MODULE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT4_IM_MODULE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT4_IM_MODULE/value=xim
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_ACCESSIBILITY/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_ACCESSIBILITY/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_ACCESSIBILITY/value=1
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_IM_MODULE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_IM_MODULE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_IM_MODULE/value=ibus
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_QPA_PLATFORMTHEME/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_QPA_PLATFORMTHEME/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/QT_QPA_PLATFORMTHEME/value=gtk2
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SESSION_MANAGER/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SESSION_MANAGER/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SESSION_MANAGER/value=local/mahmoud-ThinkPad-E480\:@/tmp/.ICE-unix/1427,unix/mahmoud-ThinkPad-E480\:/tmp/.ICE-unix/1427
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SHELL/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SHELL/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SHELL/value=/bin/bash
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SHLVL/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SHLVL/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SHLVL/value=0
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SSH_AGENT_PID/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SSH_AGENT_PID/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SSH_AGENT_PID/value=1495
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SSH_AUTH_SOCK/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SSH_AUTH_SOCK/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/SSH_AUTH_SOCK/value=/run/user/1000/keyring/ssh
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/USER/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/USER/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/USER/value=mahmoud
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/USERNAME/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/USERNAME/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/USERNAME/value=mahmoud
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/WINDOWPATH/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/WINDOWPATH/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/WINDOWPATH/value=2
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XAUTHORITY/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XAUTHORITY/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XAUTHORITY/value=/run/user/1000/gdm/Xauthority
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_CONFIG_DIRS/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_CONFIG_DIRS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_CONFIG_DIRS/value=/etc/xdg/xdg-cinnamon\:/etc/xdg
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_CURRENT_DESKTOP/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_CURRENT_DESKTOP/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_CURRENT_DESKTOP/value=X-Cinnamon
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_DATA_DIRS/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_DATA_DIRS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_DATA_DIRS/value=/usr/share/gnome\:/usr/share/cinnamon\:/usr/local/share\:/usr/share\:/var/lib/snapd/desktop
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_RUNTIME_DIR/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_RUNTIME_DIR/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_RUNTIME_DIR/value=/run/user/1000
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SEAT/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SEAT/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SEAT/value=seat0
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_DESKTOP/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_DESKTOP/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_DESKTOP/value=cinnamon
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_ID/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_ID/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_ID/value=2
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_TYPE/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_TYPE/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_SESSION_TYPE/value=x11
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_VTNR/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_VTNR/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XDG_VTNR/value=2
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XMODIFIERS/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XMODIFIERS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/XMODIFIERS/value=@im\=ibus
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/append=true
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1605716264/appendContributed=true
diff --git a/RTFParallella/README.md b/RTFParallella/README.md
new file mode 100644
index 0000000..33b40f9
--- /dev/null
+++ b/RTFParallella/README.md
@@ -0,0 +1,39 @@
+# RTFParallella
+> RTFP is a framework to implement multi core real time embedded applications on the Adapteva Parallella platform.
+RTFParallella uses FreeRTOS to implement amalthea models for verification.
+
+## Installation
+
+```sh
+sh patch_init.sh
+```
+
+## Usage example
+
+RTFParallella can be used with code generation tools to implement Amalthea tasks.
+RTFParallella can be used as a quik start tool to test the viability of a multi-core real-time system
+
+_For more examples and usage, please refer to the [documentation][documentation]._
+
+
+## Release History
+
+* 1.0
+ * Initial release of RTFParallella and examples.
+
+## Contributers
+
+* Mahmoud Bazzal – [@mahmood1994has](https://twitter.com/mahmood1994has) – mahmood1994ha@gmail.com
+
+Distributed under EPL license.
+
+## Contributing
+
+1. Fork it
+2. Create your feature branch
+3. Commit your changes
+4. Push to the branch
+5. Create a new Pull Request
+
+<!-- Markdown link & img dfn's -->
+[documentation]: https://rtfparallella.readthedocs.io/en/latest/
diff --git a/RTFParallella/parallellaDeploy.sh b/RTFParallella/parallellaDeploy.sh
new file mode 100755
index 0000000..e0c84da
--- /dev/null
+++ b/RTFParallella/parallellaDeploy.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+#*******************************************************************************
+# Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+#
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Dortmund University of Applied Sciences and Arts - initial API and implementation
+#*******************************************************************************
+echo "Parallella Deployment Script version 1.0"
+echo "welcome to the world of tomorrow"
+
+#Board connection parameters
+HOST_NAME=172.22.167.10
+HOST_USER=parallella
+PORT=22
+HOST_OFFLOAD_PATH="~/boardExec"
+
+#SSH key file
+KEY=~/.ssh/id_rsa
+#path and file name inputs
+DEPOLYMENT_BINARY=${1?Error: no host binary given}
+
+#proper ssh, use this to open an ssh connection to parallella for execution
+#sudo ssh parallella@idial.institute -p 32767 -i ~/.ssh/key
+
+#clear hostOfflad path before copying new files
+#ssh $HOST_NAME -p$PORT -l$HOST_USER -i$KEY "cd $HOST_OFFLOAD_PATH "
+
+#transfer host and device binaries to parallella board
+echo "---------------------------------------"
+echo "copying binaries to remote board..."
+scp -4 -C -P $PORT -i $KEY $DEPOLYMENT_BINARY $HOST_USER@$HOST_NAME:$HOST_OFFLOAD_PATH
+if [[ $? != 0 ]]; then
+ echo "Transfer failed!"
+ exit 1
+else
+ echo "Transfer complete."
+fi
+echo "---------------------------------------"
+echo "Running program $HOST_BINARY"
+echo "***************************************"
+#run the binaries remotely on parallella
+#ssh $HOST_NAME -p$PORT -l$HOST_USER -i$KEY "EPIPHANY_HOME=/opt/adapteva/esdk && . $EPIPHANY_HOME/setup.sh && cd $HOST_OFFLOAD_PATH && ./$DEPOLYMENT_BINARY"
+echo "***************************************"
+echo "done"
diff --git a/RTFParallella/parallellaRun.sh b/RTFParallella/parallellaRun.sh
new file mode 100755
index 0000000..16989b9
--- /dev/null
+++ b/RTFParallella/parallellaRun.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+#*******************************************************************************
+# Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+#
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Dortmund University of Applied Sciences and Arts - initial API and implementation
+#*******************************************************************************
+echo "Parallella remote Script version 1.0"
+echo "welcome to the world of tomorrow"
+
+#Board connection parameters
+HOST_NAME=172.22.167.10
+HOST_USER=parallella
+PORT=22
+HOST_OFFLOAD_PATH="~/boardExec"
+
+#SSH key file
+KEY=~/.ssh/key
+#path and file name inputs
+DEPOLYMENT_BINARY=${1?Error: no host binary given}
+
+echo "---------------------------------------"
+echo "Running program $HOST_BINARY"
+echo "***************************************"
+#run the binaries remotely on parallella
+ssh $HOST_NAME -p$PORT -l$HOST_USER -i$KEY "EPIPHANY_HOME=/opt/adapteva/esdk && . $EPIPHANY_HOME/setup.sh && cd $HOST_OFFLOAD_PATH && ./$DEPOLYMENT_BINARY"
+echo "***************************************"
+echo "done"
diff --git a/RTFParallella/patch_init.sh b/RTFParallella/patch_init.sh
new file mode 100644
index 0000000..1d2113e
--- /dev/null
+++ b/RTFParallella/patch_init.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+#*******************************************************************************
+# Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+#
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Dortmund University of Applied Sciences and Arts - initial API and implementation
+#*******************************************************************************
+echo "Parallella Deployment Script version 1.0"
+echo "welcome to the world of tomorrow"
+
+#Board connection parameters
+HOST_NAME=172.22.167.10
+HOST_USER=parallella
+PORT=22
+HOST_OFFLOAD_PATH="~/boardExec"
+
+#SSH key file
+KEY=~/.ssh/id_rsa
+#path and file name inputs
+DEPOLYMENT_BINARY=${1?Error: no host binary given}
+
+#proper ssh, use this to open an ssh connection to parallella for execution
+#sudo ssh parallella@idial.institute -p 32767 -i ~/.ssh/key
+
+#clear hostOfflad path before copying new files
+#ssh $HOST_NAME -p$PORT -l$HOST_USER -i$KEY "cd $HOST_OFFLOAD_PATH "
+
+#transfer host and device binaries to parallella board
+echo "---------------------------------------"
+echo "copying binaries to remote board..."
+scp -4 -C -P $PORT -i $KEY $DEPOLYMENT_BINARY $HOST_USER@$HOST_NAME:$HOST_OFFLOAD_PATH
+if [[ $? != 0 ]]; then
+ echo "Transfer failed!"
+ exit 1
+else
+ echo "Transfer complete."
+fi
+echo "---------------------------------------"
+echo "Running program $HOST_BINARY"
+echo "***************************************"
+#run the binaries remotely on parallella
+#ssh $HOST_NAME -p$PORT -l$HOST_USER -i$KEY "EPIPHANY_HOME=/opt/adapteva/esdk && . $EPIPHANY_HOME/setup.sh && cd $HOST_OFFLOAD_PATH && ./$DEPOLYMENT_BINARY"
+echo "***************************************"
+echo "done" \ No newline at end of file
diff --git a/RTFParallella/port_patch.patch b/RTFParallella/port_patch.patch
new file mode 100644
index 0000000..95e1b4b
--- /dev/null
+++ b/RTFParallella/port_patch.patch
@@ -0,0 +1,375 @@
+3a4
+> #include <stdlib.h>
+5c6
+< #define CyclesForTick (configCPU_CLOCK_HZ/configTICK_RATE_HZ - 50)
+---
+> #include "debugFlags.h"
+6a8,10
+> #define CyclesForTick (configCPU_CLOCK_HZ/configTICK_RATE_HZ - 50)
+> //debugging
+> //TODO core to core comms will use this
+8,10c12,14
+<
+< /*-----------------------------------------------------------*/
+<
+---
+> //---------------------------------------------------
+> int globalDelta;
+> //---------------------------------------------------
+16d19
+<
+18d20
+<
+32c34,35
+< StackType_t *pxStackStart;
+---
+> StackType_t *pxStackStart;
+>
+34,38c37,40
+<
+< //align to double-word boundary
+< pxStackStart = (StackType_t *)(( StackType_t ) pxTopOfStack & ~(0x4));
+<
+< /* To ensure asserts in tasks.c don't fail, although in this case the assert
+---
+> //align to double-word boundary
+> pxStackStart = (StackType_t *)(( StackType_t ) pxTopOfStack & ~(0x4));
+>
+> /* To ensure asserts in tasks.c don't fail, although in this case the assert
+40c42
+< pxTopOfStack--;
+---
+> pxTopOfStack--;
+42,43c44,45
+< /* for alignment */
+< pxTopOfStack--;
+---
+> /* for alignment */
+> pxTopOfStack--;
+45c47
+< /* Setup the initial stack of the task. The stack is set exactly as
+---
+> /* Setup the initial stack of the task. The stack is set exactly as
+48c50
+< /* First on the stack is the return address - which in this case is the
+---
+> /* First on the stack is the return address - which in this case is the
+51,94c53,96
+< *pxTopOfStack = ( StackType_t ) 0xdeadaffe;
+< pxTopOfStack--;
+< pxTopOfStack--;
+< pxTopOfStack--;
+<
+<
+< int i;
+<
+< for(i=63;i>14;i--) {
+< *pxTopOfStack = ( StackType_t ) i<<8; /* higher registers */
+< pxTopOfStack--;
+< }
+<
+<
+< *pxTopOfStack = ( StackType_t ) 0xaaaaaaaa; /* R14 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x51aac4de; /* Stack used when task starts goes in R13. */
+< pxStackStart = pxTopOfStack;
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x12121212; /* R12 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x11111111; /* R11 */
+< //*pxTopOfStack = ( StackType_t ) pxOriginalTOS; /* frame pointer to stack address. */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x10101010; /* R10 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x09090909; /* R9 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x08080808; /* R8 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x07070707; /* R7 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x06060606; /* R6 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x05050505; /* R5 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x04040404; /* R4 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x03030303; /* R3 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x02020202; /* R2 */
+< pxTopOfStack--;
+< *pxTopOfStack = ( StackType_t ) 0x01010101; /* R1 */
+< pxTopOfStack--;
+---
+> *pxTopOfStack = ( StackType_t ) 0xdeadaffe;
+> pxTopOfStack--;
+> pxTopOfStack--;
+> pxTopOfStack--;
+>
+>
+> int i;
+>
+> for(i=63;i>14;i--) {
+> *pxTopOfStack = ( StackType_t ) i<<8; /* higher registers */
+> pxTopOfStack--;
+> }
+>
+>
+> *pxTopOfStack = ( StackType_t ) 0xaaaaaaaa; /* R14 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x51aac4de; /* Stack used when task starts goes in R13. */
+> pxStackStart = pxTopOfStack;
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x12121212; /* R12 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x11111111; /* R11 */
+> //*pxTopOfStack = ( StackType_t ) pxOriginalTOS; /* frame pointer to stack address. */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x10101010; /* R10 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x09090909; /* R9 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x08080808; /* R8 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x07070707; /* R7 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x06060606; /* R6 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x05050505; /* R5 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x04040404; /* R4 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x03030303; /* R3 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x02020202; /* R2 */
+> pxTopOfStack--;
+> *pxTopOfStack = ( StackType_t ) 0x01010101; /* R1 */
+> pxTopOfStack--;
+96c98
+< /* When the task starts is will expect to find the function parameter in
+---
+> /* When the task starts is will expect to find the function parameter in
+98,103c100,103
+< *pxTopOfStack-- = ( StackType_t ) pvParameters; /* R0 */
+<
+< // second last thing: program counter, no normal register on epiphany!
+< *pxTopOfStack-- = ( StackType_t ) pxCode; /* Stack used when task starts goes in R13. */
+<
+<
+---
+> *pxTopOfStack-- = ( StackType_t ) pvParameters; /* R0 */
+>
+> // second last thing: program counter, no normal register on epiphany!
+> *pxTopOfStack-- = ( StackType_t ) pxCode; /* Stack used when task starts goes in R13. */
+105c105,107
+< /* The last thing onto the stack is the status register, which is set for
+---
+>
+>
+> /* The last thing onto the stack is the status register, which is set for
+107c109,110
+< *pxTopOfStack = ( StackType_t ) 0x03;
+---
+> *pxTopOfStack = ( StackType_t ) 0x03;
+>
+109d111
+<
+111c113
+< /* Some optimisation levels use the stack differently to others. This
+---
+> /* Some optimisation levels use the stack differently to others. This
+115,117c117,119
+< //*pxTopOfStack = 0;
+< //return pxOriginalTOS;
+< return pxTopOfStack;
+---
+> //*pxTopOfStack = 0;
+> //return pxOriginalTOS;
+> return pxTopOfStack;
+120c122
+<
+---
+> /*-----THE PROBLEM FUNCTION---------------*/
+122c124
+< unsigned memprotectregister = e_reg_read(E_REG_MEMPROTECT);
+---
+> unsigned memprotectregister = e_reg_read(E_REG_MEMPROTECT);
+124,127c126,129
+< //clear last 8 bits
+< memprotectregister &= 0xffffff00;
+< //sets it to the specified value
+< memprotectregister |= mask;
+---
+> //clear last 8 bits
+> memprotectregister &= 0xffffff00;
+> //sets it to the specified value
+> memprotectregister |= mask;
+129c131
+< e_reg_write(E_REG_MEMPROTECT, memprotectregister);
+---
+> e_reg_write(E_REG_MEMPROTECT, memprotectregister);
+131c133
+<
+---
+> /*-----------------------------------------------------------*/
+140,141c142,143
+< e_irq_attach(E_USER_INT, handlers[E_USER_INT]);
+< e_irq_mask(E_USER_INT, E_FALSE);
+---
+> e_irq_attach(E_USER_INT, handlers[E_USER_INT]);
+> e_irq_mask(E_USER_INT, E_FALSE);
+143,144c145,146
+< e_irq_attach(E_TIMER0_INT, handlers[E_TIMER0_INT]);
+< e_irq_mask(E_TIMER0_INT, E_FALSE);
+---
+> e_irq_attach(E_TIMER0_INT, handlers[E_TIMER0_INT]);
+> e_irq_mask(E_TIMER0_INT, E_FALSE);
+146,147c148,149
+< e_irq_attach(E_MEM_FAULT, handlers[E_MEM_FAULT]);
+< e_irq_mask(E_MEM_FAULT, E_FALSE);
+---
+> e_irq_attach(E_MEM_FAULT, handlers[E_MEM_FAULT]);
+> e_irq_mask(E_MEM_FAULT, E_FALSE);
+149,150c151,152
+< e_irq_attach(E_SW_EXCEPTION, handlers[E_SW_EXCEPTION]);
+< e_irq_mask(E_SW_EXCEPTION, E_FALSE);
+---
+> e_irq_attach(E_SW_EXCEPTION, handlers[E_SW_EXCEPTION]);
+> e_irq_mask(E_SW_EXCEPTION, E_FALSE);
+152,153c154,155
+< e_irq_attach(E_MESSAGE_INT, handlers[E_MESSAGE_INT]);
+< e_irq_mask(E_MESSAGE_INT, E_FALSE);
+---
+> e_irq_attach(E_MESSAGE_INT, handlers[E_MESSAGE_INT]);
+> e_irq_mask(E_MESSAGE_INT, E_FALSE);
+155c157,159
+< setMemprotectMask(0x0f);
+---
+> vSetupTimer();
+> //condition left for debugging
+> if(globalDelta == 0){
+157c161
+< vSetupTimer();
+---
+> }else{
+158a163
+> }
+161d165
+<
+170c174
+< e_irq_mask(E_TIMER1_INT, E_TRUE);
+---
+> e_irq_mask(E_TIMER1_INT, E_TRUE);
+180,184c184,188
+< // There seems to be no working software interrupt, so we send a user-interrupt to ourself
+< e_coreid_t thiscore = e_get_coreid();
+< unsigned row, col;
+< e_coords_from_coreid(thiscore, &row, &col);
+< e_irq_set(row,col,E_USER_INT);
+---
+> // There seems to be no working software interrupt, so we send a user-interrupt to ourself
+> e_coreid_t thiscore = e_get_coreid();
+> unsigned row, col;
+> e_coords_from_coreid(thiscore, &row, &col);
+> e_irq_set(row,col,E_USER_INT);
+193,199c197,208
+< unsigned int cyclesForTick = CyclesForTick;
+< int delta = E_CTIMER_MAX - e_ctimer_get(E_CTIMER_1) - cyclesForTick; //How much off are we this time?
+< e_ctimer_set(E_CTIMER_1, E_CTIMER_MAX);
+<
+< //We are never to early, case is taken on startup
+< if(delta < 0)
+< delta=0;
+---
+> unsigned int cyclesForTick = CyclesForTick;
+> int delta = E_CTIMER_MAX - e_ctimer_get(E_CTIMER_1) - cyclesForTick; //How much off are we this time?
+> e_ctimer_set(E_CTIMER_1, E_CTIMER_MAX);
+>
+> //We are never to early, case is taken on startup
+>
+> //debugging
+> if(delta < 0){
+>
+> delta=0;
+> }
+> globalDelta = delta;
+201,202c210,211
+< e_ctimer_set(E_CTIMER_0, cyclesForTick-delta);
+< e_ctimer_start(E_CTIMER_0, E_CTIMER_CLK);
+---
+> e_ctimer_set(E_CTIMER_0, cyclesForTick-delta);
+> e_ctimer_start(E_CTIMER_0, E_CTIMER_CLK);
+208,210c217,219
+< volatile int status;
+< volatile int pc;
+< volatile int no[64]; //collection of all the registers as stored onto the stack
+---
+> volatile int status;
+> volatile int pc;
+> volatile int no[64]; //collection of all the registers as stored onto the stack
+217,224c226,233
+< TaskHandle_t runningTask = xTaskGetCurrentTaskHandle();
+< TCB_t **tcb = runningTask;
+< struct layout* reg = *tcb;
+<
+< int bitmask = 1 << (rand()%32);
+< int failreg = rand()%64;
+< reg->no[failreg] ^= bitmask;
+< M[4]++;
+---
+> TaskHandle_t runningTask = xTaskGetCurrentTaskHandle();
+> TCB_t **tcb = runningTask;
+> struct layout* reg = *tcb;
+>
+> int bitmask = 1 << (rand()%32);
+> int failreg = rand()%64;
+> reg->no[failreg] ^= bitmask;
+> M[4]++;
+230,251c239,263
+< switch (interrupt_mode) {
+< case E_TIMER0_INT:
+< vSetupTimer();
+< if( xTaskIncrementTick() != pdFALSE ) {
+< vTaskSwitchContext();
+< }
+< break;
+< case E_SW_EXCEPTION: //triggered extrenally for error injection. Must be that high prority
+< injectErrors();
+< break;
+< case E_USER_INT:
+< vTaskSwitchContext();
+< break;
+< case E_MESSAGE_INT: //message, triggered externally for message transmission
+< irqMsg();
+< break;
+< case E_MEM_FAULT: // written to read-only memory
+< while(1);
+< break;
+< default:
+< break;
+< }
+---
+> switch (interrupt_mode) {
+> case E_TIMER0_INT:
+> vSetupTimer();
+> updateTick();
+> xTaskIncrementTick();
+> vTaskSwitchContext();
+> break;
+> case E_SW_EXCEPTION: //triggered extrenally for error injection. Must be that high prority
+> injectErrors();
+> break;
+> case E_USER_INT:
+> vTaskSwitchContext();
+> break;
+> case E_MESSAGE_INT: //message, triggered externally for message transmission
+> //a message received
+> updateDebugFlag(404);
+> //irqMsg();
+> break;
+> case E_MEM_FAULT: // written to read-only memory
+> updateDebugFlag(2222);
+> //while(1);
+> break;
+> default:
+> break;
+> }
diff --git a/RTFParallella/portasm.patch b/RTFParallella/portasm.patch
new file mode 100644
index 0000000..9850b51
--- /dev/null
+++ b/RTFParallella/portasm.patch
@@ -0,0 +1,45 @@
+7,8c7,8
+< mov r0,%low(_interrupt_mode)
+< movt r0,%high(_interrupt_mode)
+---
+> mov r0,%low(interrupt_mode)
+> movt r0,%high(interrupt_mode)
+13c13
+< b _common_interrupt_handler
+---
+> b common_interrupt_handler
+26,27c26,27
+< _handlers:
+< .global _handlers
+---
+> .global handlers
+> handlers:
+30,31c30,31
+< _common_interrupt_handler:
+< .global _common_interrupt_handler
+---
+> .global common_interrupt_handler
+> common_interrupt_handler:
+111,112c111,112
+< mov fp,%low(_pxCurrentTCB)
+< movt fp,%high(_pxCurrentTCB)
+---
+> mov fp,%low(pxCurrentTCB)
+> movt fp,%high(pxCurrentTCB)
+121,122c121,122
+< mov r0,%low(_vInterruptCentral)
+< movt r0,%high(_vInterruptCentral)
+---
+> mov r0,%low(vInterruptCentral)
+> movt r0,%high(vInterruptCentral)
+128,132c128,131
+<
+< _portRESTORE_CONTEXT:
+< .global _portRESTORE_CONTEXT
+< mov fp,%low(_pxCurrentTCB)
+< movt fp,%high(_pxCurrentTCB)
+---
+> .global portRESTORE_CONTEXT
+> portRESTORE_CONTEXT:
+> mov fp,%low(pxCurrentTCB)
+> movt fp,%high(pxCurrentTCB)
diff --git a/RTFParallella/src/parallella/.gitignore b/RTFParallella/src/parallella/.gitignore
new file mode 100755
index 0000000..baace69
--- /dev/null
+++ b/RTFParallella/src/parallella/.gitignore
@@ -0,0 +1,6 @@
+*.o
+*.srec
+*.elf
+armcode
+.gdbinit
+/host_main_example1
diff --git a/RTFParallella/src/parallella/AmaltheaConverter.c b/RTFParallella/src/parallella/AmaltheaConverter.c
new file mode 100755
index 0000000..fa880e2
--- /dev/null
+++ b/RTFParallella/src/parallella/AmaltheaConverter.c
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+#include "AmaltheaConverter.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include <stdarg.h>
+#include "debugFlags.h"
+
+
+
+
+AmaltheaTask createAmaltheaTask(void *taskHandler,void *cInHandler,void *cOutHandler,unsigned int period,unsigned int deadline, unsigned int WCET){
+ if (WCET >= period){
+ AmaltheaTask retValNull = {0,0,NULL,0,0,0,NULL,NULL};
+ return retValNull;
+ }else{
+ AmaltheaTask retVal = {0,0,taskHandler,WCET,deadline,period,cInHandler,cOutHandler};
+ return retVal;
+ }
+}
+
+unsigned int calculateStackSize(int labelBitCount, int labelCount){
+ return ((labelBitCount*labelCount)/PLATFORM_WORD_LENGTH);
+}
+
+void createRTOSTask(AmaltheaTask* task, int priority, int argCount, ...){
+ //cycle through the stack arguments and add the needed numbers to the stack
+ int stack_size = 0;
+ for (int i=3;i<=argCount+2;i+=2){
+ stack_size = calculateStackSize(i,i+1);
+ }
+ //make sure the stack size is at least big enough to run the task.
+ stack_size += configMINIMAL_STACK_SIZE;
+ //create the RTOS task with the generalized form
+ xTaskCreate(generalizedRTOSTask ,"Task" ,stack_size, &(*task) ,priority,NULL);
+}
+
+
+#ifdef use_LET_COMM_SEMANTICS
+void generalizedRTOSTask(AmaltheaTask task){
+ TickType_t xLastWakeTime = xTaskGetTickCount();
+ //task.cInHandler();
+ for (;;){
+ //execute cIn
+ task.cInHandler();
+ task.taskHandler();
+ vTaskDelayUntil( &xLastWakeTime, task.period);
+ task.cOutHandler();
+ }
+}
+#else
+
+void generalizedRTOSTask(AmaltheaTask task){
+ TickType_t xLastWakeTime = xTaskGetTickCount();
+ //task.cInHandler();
+ for (;;){
+ //execute cIn
+ task.cInHandler();
+ task.taskHandler();
+ task.cOutHandler();
+ vTaskDelayUntil( &xLastWakeTime, task.period);
+ }
+}
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
diff --git a/RTFParallella/src/parallella/AmaltheaConverter.h b/RTFParallella/src/parallella/AmaltheaConverter.h
new file mode 100755
index 0000000..1f41f05
--- /dev/null
+++ b/RTFParallella/src/parallella/AmaltheaConverter.h
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_AMALTHEACONVERTER_H_
+#define SRC_PARALLELLA_AMALTHEACONVERTER_H_
+
+#define PLATFORM_WORD_LENGTH 32
+
+#define numTasks 3
+
+/**
+ * Structure to hold tasks according to amalthea model
+ */
+typedef struct{
+ unsigned isDone;
+ unsigned isReady;
+ void(* taskHandler)();
+ unsigned executionTime;//in ticks
+ unsigned deadline; //in ticks
+ unsigned period; //in ticks
+ void(* cInHandler)();
+ void(* cOutHandler)();
+}AmaltheaTask;
+
+
+/**
+ * communication semantics of tasks
+ * if use_LET_COMM_SEMANTICS is defined, the tasks will behave in LET semantics else it will use implicit by default
+ */
+//#define use_LET_COMM_SEMANTICS
+
+AmaltheaTask createAmaltheaTask(void *taskHandler,void *cInHandler,void *cOutHandler,unsigned int period,unsigned int deadline, unsigned int WCET);
+
+/**
+ * Create the RTOS task that represents a given Amalthea task.
+ * This function can have multiple arguments for all label types used by the task and the number of labels of each type.
+ *
+ * Arguments:
+ * task : pointer to the AmaltheaTask struct
+ * priority : priority of the task (according to RMS, lowesrt perio has highest priority)
+ * argCount : number of different types of labels used by this task
+ * label_type_size : size (in bits) of label type.
+ * label_type_count: number of labels associated with that type.
+ *
+ *
+ */
+void createRTOSTask(AmaltheaTask* task, int priority, int argCount, ...);
+
+/**
+ * This function returns the additional stack size (in words) needed for the task to andle its labels
+ *
+ * Arguments:
+ * labelBitCount : label size in bits
+ * labelCount : number of labels
+ *
+ */
+unsigned int calculateStackSize(int labelBitCount, int labelCount);
+
+/**
+ *
+ *This RTOS task invokes the task handlers and realizes periodic task execution according to
+ * Amalthea model
+ *
+ * Arguments:
+ * task : instance of AmaltheaTask structure to be invoked
+ *
+ */
+void generalizedRTOSTask(AmaltheaTask task);
+
+
+#endif /* SRC_PARALLELLA_AMALTHEACONVERTER_H_ */
diff --git a/RTFParallella/src/parallella/FreeRTOSConfig.h b/RTFParallella/src/parallella/FreeRTOSConfig.h
new file mode 100755
index 0000000..d8514d6
--- /dev/null
+++ b/RTFParallella/src/parallella/FreeRTOSConfig.h
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+
+#define configCALL_STACK_SIZE 0x50
+
+#define configUSE_PREEMPTION 1
+#define configUSE_TIME_SLICING 0
+
+#define configUSE_IDLE_HOOK 0
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ ( ( unsigned long ) 700000000 )
+#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
+#define configMAX_PRIORITIES ( 5 )
+#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 0x200) //512 words
+#define configTOTAL_HEAP_SIZE ( (size_t ) ( 10450 ) )
+#define configMAX_TASK_NAME_LEN ( 128 )
+#define configUSE_TRACE_FACILITY 0
+#define configUSE_16_BIT_TICKS 1
+#define configIDLE_SHOULD_YIELD 0
+
+
+
+#define configUSE_ALTERNATIVE_API 0
+
+/* Co-routine definitions. */
+#define configUSE_CO_ROUTINES 0
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+
+/* Set the following definitions to 1 to include the API function, or zero
+to exclude the API function. */
+
+#define INCLUDE_vTaskPrioritySet 0
+#define INCLUDE_uxTaskPriorityGet 0
+#define INCLUDE_vTaskDelete 0
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_pcTaskGetTaskName 1
+
+#define C2C_MSG_TYPE int
+
+
+#endif /* FREERTOS_CONFIG_H */
diff --git a/RTFParallella/src/parallella/Makefile b/RTFParallella/src/parallella/Makefile
new file mode 100755
index 0000000..15c1fba
--- /dev/null
+++ b/RTFParallella/src/parallella/Makefile
@@ -0,0 +1,51 @@
+EPIPHANY_HOME=/opt/adapteva/esdk
+#host compiler path
+LCC=/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
+#device compiler path
+CC=e-gcc
+#FreeRTOS dependencies
+CFLAGS=-I.
+FREERTOSSRC=../../RTFP_RTOS_KERNEL_PATCHED/FreeRTOS/Source
+INCLUDES= -g -I$(FREERTOSSRC)/include -I$(FREERTOSSRC)/portable/GCC/Epiphany -I.
+DEPS = $(FREERTOSSRC)/portable/GCC/Epiphany/portmacro.h Makefile FreeRTOSConfig.h c2c.h debugFlags.h AmaltheaConverter.h taskCode.h ParallellaUtils.h
+DEPSHOST = c2c.h debugFlags.h AmaltheaConverter.h shared_comms.h model_enumerations.h
+#Epiphany SDK dependencies
+ESDK=${EPIPHANY_HOME}
+ELIBS=${ESDK}/tools/host.armv7l/lib
+EINCS=${ESDK}/tools/host.armv7l/include
+ELDF=${ESDK}/bsps/current/fast.ldf
+EHDF=${EPIPHANY_HDF}
+#search paths for C source code files
+vpath %.c .:$(FREERTOSSRC)/:$(FREERTOSSRC)/portable/MemMang:$(FREERTOSSRC)/portable/GCC/Epiphany:/
+#search path for assembly listings
+vpath %.s $(FREERTOSSRC)/portable/GCC/Epiphany
+#main target
+all: host_main_example1 armcode core0_main.elf core1_main.elf
+ @echo build status : successful
+run: armcode core0_main.elf core1_main.elf
+ @echo build status : successful
+
+example1: host_main_example1 core0_main.elf core1_main.elf
+ @echo build status : successful
+
+#rule for every device target
+%.elf: $(ELDF) tasks.o queue.o list.o portasm.o port.o heap_1.o c2c.o debugFlags.o AmaltheaConverter.o taskCode.o ParallellaUtils.o shared_comms.o %.o
+ $(CC) -g -T$< -Wl,--gc-sections -o $@ $(filter-out $<,$^) -le-lib
+
+#host target
+armcode: armcode.c $(DEPSHOST)
+ $(LCC) $< -o $@ host_utils.c model_enumerations.c -I ${EINCS} -L ${ELIBS} -lpal -le-hal -le-loader -lpthread
+host_main_example1: host_main_example1.c $(DEPSHOST)
+ $(LCC) $< -o $@ host_utils.c model_enumerations.c -I ${EINCS} -L ${ELIBS} -lpal -le-hal -le-loader -lpthread
+
+#clean target
+clean:
+ rm -f *.o *.srec *.elf armcode host_main_example1
+
+.SECONDARY:
+%.o: %.c $(DEPS)
+ $(CC) -fdata-sections -ffunction-sections -c -o $@ $< $(INCLUDES)
+
+%.o: %.s $(DEPS)
+ $(CC) -c -o $@ $< $(INCLUDES)
+
diff --git a/RTFParallella/src/parallella/ParallellaUtils.c b/RTFParallella/src/parallella/ParallellaUtils.c
new file mode 100755
index 0000000..ae8f393
--- /dev/null
+++ b/RTFParallella/src/parallella/ParallellaUtils.c
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include "ParallellaUtils.h"
+
+void sleepTimerMs(int ticks, int taskNum){
+ updateDebugFlag(ticks*10);
+ int i;
+ for (i=0;i<ticks;i++){
+ taskENTER_CRITICAL();
+ traceRunningTask(taskNum);
+ e_wait(E_CTIMER_0,_1MS);
+ taskEXIT_CRITICAL();
+ }
+}
+
diff --git a/RTFParallella/src/parallella/ParallellaUtils.h b/RTFParallella/src/parallella/ParallellaUtils.h
new file mode 100755
index 0000000..5cc2d7f
--- /dev/null
+++ b/RTFParallella/src/parallella/ParallellaUtils.h
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_PARALLELLAUTILS_H_
+#define SRC_PARALLELLA_PARALLELLAUTILS_H_
+
+#include "debugFlags.h"
+#include "e_lib.h"
+//freeRTOS imports
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+//time units in processor cycles
+#define _1MS 700000
+#define _1US 700
+
+/**
+ * sleep for a multiple of milliseconds
+ *
+ * Arguments:
+ * ticks : number of milliseconds to sleep
+ * taskNum : index of task invoking this function (used for tracing during sleep)
+ *
+ */
+void sleepTimerMs(int ticks,int taskNum);
+
+
+#endif /* SRC_PARALLELLA_PARALLELLAUTILS_H_ */
diff --git a/RTFParallella/src/parallella/armcode.c b/RTFParallella/src/parallella/armcode.c
new file mode 100755
index 0000000..e7d3b1c
--- /dev/null
+++ b/RTFParallella/src/parallella/armcode.c
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <e-hal.h> //hardware abstraction library
+#include <time.h> /* Needed for struct timespec */
+
+#include "c2c.h"
+#include "debugFlags.h"
+#include "shared_comms.h"
+#include "host_utils.h"
+#include "model_enumerations.h"
+
+unsigned int shared_label_to_read[10];
+unsigned int shared_label_core_00[dstr_mem_sec_1_label_count];
+unsigned int shared_label_core_10[dstr_mem_sec_1_label_count];
+
+int main()
+{
+ int label_enable_count_core0 = 0;
+ printf("RTFP demo host code\n");
+ //setup visualization config for the first core
+ unsigned index_array1[dstr_mem_sec_1_label_count];
+ unsigned index_array1_prv_val[dstr_mem_sec_1_label_count];
+ array_init(index_array1,dstr_mem_sec_1_label_count);
+ array_init(index_array1_prv_val,dstr_mem_sec_1_label_count);
+ LabelVisual core1 = get_user_input(index_array1);
+ //setup visualization config for the first core
+ unsigned index_array2[dstr_mem_sec_1_label_count];
+ unsigned index_array2_prv_val[dstr_mem_sec_1_label_count];
+ array_init(index_array2,dstr_mem_sec_1_label_count);
+ array_init(index_array2_prv_val,dstr_mem_sec_1_label_count);
+ LabelVisual core2 = get_user_input(index_array2);
+ //steup visualization for shared memeory
+ unsigned index_array_DRAM[shared_mem_section1_label_count];
+ unsigned index_array_prv_DRAM[shared_mem_section1_label_count];
+ array_init(index_array_DRAM,shared_mem_section1_label_count);
+ array_init(index_array_prv_DRAM,shared_mem_section1_label_count);
+ unsigned dram_indices = get_user_input_DRAM(index_array_DRAM);
+
+ //counters for row and column, cored id and loop counter
+ unsigned row_loop,col_loop;
+ // this will contain the epiphany platform configuration
+ e_platform_t epiphany;
+ e_epiphany_t dev;
+ e_return_stat_t result;
+ unsigned int message[9];
+ unsigned int message2[9];
+ int loop;
+ int addr;
+ e_mem_t emem;
+ e_init(NULL); // initialise the system establish connection to the Device
+ //initial ecore is set to 0,0
+ /*
+ * reserve shared mem sections
+ * one section for each shared label in the model
+ * shared mem address space starts at 0x0100_0000
+ * and ends at 0x3FFF_FFFF
+ *
+ */
+ e_alloc(&emem, shared_mem_section , sizeof(shared_label_to_read));
+ e_reset_system(); // reset the epiphnay chip
+ e_get_platform_info(&epiphany);//gets the configuration info for the parallella platofrm
+ //debug flag
+ //------------------------------------------------
+ //one core within the parallella work group is 1 x 1 i.e single core
+ e_open(&dev,0,0,2,1); //2 rows one column rectangle size 2*1
+ //reset the group
+ e_reset_group(&dev);
+ e_return_stat_t result1;
+ e_return_stat_t result2;
+ //load the group
+ result1 = e_load("core0_main.elf",&dev,0,0,E_FALSE);
+ result2 = e_load("core1_main.elf",&dev,1,0,E_FALSE);
+ if (result1 != E_OK || result2 != E_OK){
+ fprintf(stderr,"Error Loading the Epiphany Application 1 %i\n", result);
+ }
+ e_start_group(&dev);
+ fprintf(stderr,"Legend: \n");
+ fprintf(stderr,"--------\n");
+ fprintf(stderr," Tick -> RTOS tick \n");
+ fprintf(stderr," Core 1 -> (0,0) \n");
+ fprintf(stderr," Core 2 -> (1,0) \n");
+ fprintf(stderr," THC -> Task Holding Core(row, column) \n");
+ fprintf(stderr," L -> Local core memory \n");
+ fprintf(stderr," F -> Foreign memory (DRAM) \n");
+ fprintf(stderr,"(L,row,column,indx) -> Label of index _indx_ on Local core memory(row, column) \n");
+ fprintf(stderr,"----------------------------------------------\n");
+
+ fprintf(stderr,"RFTP demo started \n");
+ addr = cnt_address;
+ int pollLoopCounter = 0;
+ int taskMessage;
+ int prevtaskMessage;
+ int prevpollLoopCounter = 0;
+ unsigned int chainLatencyEndIndicator = 0;
+ unsigned int chainLatencyStartIndicator = 10e6;
+ unsigned int lat1 = 0;
+ int label_to_feed_in = 97;
+ fprintf(stderr,"===========================================================================\n");
+ fprintf(stderr," | Tasks being executed| Shared labels' values |\n");
+ fprintf(stderr,"tick | Core 1 | Core 2 |");
+ user_config_print_legend(core1,index_array1);
+ user_config_print_legend(core2,index_array2);
+ user_config_print_legend_auto(dram_indices,index_array_DRAM);
+
+ fprintf(stderr,"\n");
+ fprintf(stderr,"===========================================================================\n");
+
+ int prev1,prev2,prev3;
+ for (pollLoopCounter=0;pollLoopCounter<=40;pollLoopCounter++){
+ message[3] = 0;
+ e_read(&dev,0,0,addr, &message, sizeof(message));
+ e_read(&dev,0,0,dstr_mem_offset_sec_1, &shared_label_core_00, sizeof(shared_label_core_00));
+ e_read(&dev,1,0,addr, &message2, sizeof(message2));
+ e_read(&dev,1,0,dstr_mem_offset_sec_1, &shared_label_core_10, sizeof(shared_label_core_10));
+ e_read(&emem,0,0,0x00, &shared_label_to_read, sizeof(shared_label_to_read));
+ if (message[8]!= message2[8] ){
+ //fprintf(stderr,"NIS->");
+ }
+ fprintf(stderr, "%4d |",message[8]+1);
+ fprintf(stderr," %4u |", message[6]);
+ fprintf(stderr," %4u |", message2[6]);
+ user_config_print_values(core1,index_array1,shared_label_core_00,index_array1_prv_val);
+ user_config_print_values(core2,index_array2,shared_label_core_10,index_array2_prv_val);
+ user_config_print_values_auto(dram_indices,index_array_DRAM,shared_label_to_read,index_array_prv_DRAM);
+ fprintf(stderr,"\n");
+ nsleep(1);
+ }
+ fprintf(stderr,"----------------------------------------------\n");
+ e_close(&dev);
+ e_finalize();
+ //----------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
+ fprintf(stderr,"RFTP demo complete \n ");
+ return 0;
+}
+
diff --git a/RTFParallella/src/parallella/c2c.c b/RTFParallella/src/parallella/c2c.c
new file mode 100755
index 0000000..3045c04
--- /dev/null
+++ b/RTFParallella/src/parallella/c2c.c
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include "c2c.h"
+
+#include "e-lib.h"
+
+dstr_mem_sec_1_label_type *outbuf_dstr_shared[10];
+//e_mem_t emem_dst[16];
+int core_write_mutex=0;
+
+void shared_labels_init_core(){
+ //shared buffer in core memory
+ outbuf_dstr_shared[0] = (dstr_mem_sec_1_label_type *) dstr_mem_offset_sec_1;
+ /*for (int i=1;i<dstr_mem_sec_1_label_count;i++){
+ outbuf_dstr_shared[i] = outbuf_dstr_shared[i-1] + 1;
+ }
+ outbuf_dstr_shared[1] = outbuf_dstr_shared[0] + 1;
+ outbuf_dstr_shared[2] = outbuf_dstr_shared[1] + 1;
+ outbuf_dstr_shared[3] = outbuf_dstr_shared[2] + 1;
+ outbuf_dstr_shared[4] = outbuf_dstr_shared[3] + 1;
+ outbuf_dstr_shared[5] = outbuf_dstr_shared[4] + 1;
+ outbuf_dstr_shared[6] = outbuf_dstr_shared[5] + 1;
+ outbuf_dstr_shared[7] = outbuf_dstr_shared[6] + 1;
+ outbuf_dstr_shared[8] = outbuf_dstr_shared[7] + 1;*/
+ //initialize buffer
+ int i;
+ for (i=0;i<9;i++){
+ *outbuf_dstr_shared[i] =0;
+ }
+ /*int emem;
+ //define distributed memory section in Epi range
+ e_alloc(&emem[1], dstr_mem_offset_sec_1 , sizeof(outbuf_dstr_shared));*/
+
+}
+
+uint8_t shared_label_write_core (unsigned row,unsigned col,int label_indx,int payload){
+ unsigned int *addr;
+ unsigned int* addr_base;
+ addr_base = get_base_address_core(row,col);
+ addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)outbuf_dstr_shared[label_indx]);
+ *addr = payload;
+}
+
+unsigned int shared_label_read_core (unsigned row, unsigned col, int label_indx){
+ unsigned int *addr;
+ unsigned int* addr_base;
+ addr_base = get_base_address_core(row,col);
+ addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)outbuf_dstr_shared[label_indx]);
+ return *addr;
+}
+
+
+unsigned int get_base_address_core(int row, int col){
+ if(row ==0 ){
+ if (col == 0){
+ return 0x80800000;
+ } else if (col ==1){
+ return 0x80900000;
+ }else if (col == 2){
+ return 0x80A00000;
+ }else if (col == 3){
+ return 0x80B00000;
+ }
+ } else if(row ==1 ){
+ if (col == 0){
+ return 0x84800000;
+ } else if (col ==1){
+ return 0x84900000;
+ }else if (col == 2){
+ return 0x84A00000;
+ }else if (col == 3){
+ return 0x84B00000;
+ }
+ } else if(row ==2 ){
+ if (col == 0){
+ return 0x88800000;
+ } else if (col ==1){
+ return 0x88900000;
+ }else if (col == 2){
+ return 0x88A00000;
+ }else if (col == 3){
+ return 0x88B00000;
+ }
+ } else if(row ==3 ){
+ if (col == 0){
+ return 0x8C800000;
+ } else if (col ==1){
+ return 0x8C900000;
+ }else if (col == 2){
+ return 0x8CA00000;
+ }else if (col == 3){
+ return 0x8CB00000;
+ }
+ }
+}
diff --git a/RTFParallella/src/parallella/c2c.h b/RTFParallella/src/parallella/c2c.h
new file mode 100755
index 0000000..7b44987
--- /dev/null
+++ b/RTFParallella/src/parallella/c2c.h
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef C2C_H
+#define C2C_H
+
+
+#include <stdint.h>
+#define dstr_mem_offset_sec_1 0x4000
+#define dstr_mem_sec_1_label_count 10
+#define dstr_mem_sec_1_label_type unsigned int
+
+/**
+ * Initiate the shared label section, this funcion will assign addresses to labels in a section,
+ * and initialize those labels to 0
+ *
+ * Arguments:
+ *
+ */
+void shared_labels_init_core();
+
+/**
+ * write a value to a label in a distributed shared memory section
+ *
+ * Arguments:
+ * row : absolute row number of the core
+ * col : absolute column number of the core
+ * label_indx : index of the target shared label
+ * payload : value to write
+ *
+ */
+uint8_t shared_label_write_core (unsigned row,unsigned col,int label_indx,int payload);
+
+/**
+ * read a value of a label in a distributed shared memory section
+ *
+ * Arguments:
+ * row : absolute row number of the core
+ * col : absolute column number of the core
+ * label_indx : index of the target shared label
+ *
+ */
+unsigned int shared_label_read_core(unsigned row, unsigned col, int label_indx);
+
+/**
+ * get the absolute base memory address of a core
+ *
+ * Arguments:
+ * row : absolute row number of the core
+ * col : absolute column number of the core
+ *
+ */
+unsigned int get_base_address_core(int row, int col);
+
+
+
+#endif
diff --git a/RTFParallella/src/parallella/core0_main.c b/RTFParallella/src/parallella/core0_main.c
new file mode 100755
index 0000000..8a58f9d
--- /dev/null
+++ b/RTFParallella/src/parallella/core0_main.c
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+//epiphany imports
+#include <stdlib.h>
+
+#include "AmaltheaConverter.h"
+#include "c2c.h"
+#include "debugFlags.h"
+#include "shared_comms.h"
+#include "taskCode.h"
+#include "e_lib.h"
+//freeRTOS imports
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+//utility imports
+
+//---------------------------------------------
+int main(void) {
+ //initialize output buffer for debug messages
+ outbuf_init();
+ shared_labels_init();
+ shared_labels_init_core();
+ //create Amalthea task objects
+ AmaltheaTask t5ms = createAmaltheaTask(handler5ms,cIn5ms,cOut5ms,5,5,2);
+ AmaltheaTask t10ms = createAmaltheaTask(handler10ms,cIn10ms,cOut10ms,10,10,3);
+ AmaltheaTask t20ms = createAmaltheaTask(handler20ms,cIn20ms,cOut20ms,20,20,5);
+ //create RTOS task from templates
+ createRTOSTask(&t5ms,3,0);
+ createRTOSTask(&t10ms,2,0);
+ createRTOSTask(&t20ms,1,0);
+ //start RTOS scheduler
+ vTaskStartScheduler();
+ return EXIT_SUCCESS;
+}
+//---------------------------------------------
+//end of file
diff --git a/RTFParallella/src/parallella/core1_main.c b/RTFParallella/src/parallella/core1_main.c
new file mode 100755
index 0000000..82a1009
--- /dev/null
+++ b/RTFParallella/src/parallella/core1_main.c
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+//epiphany imports
+#include <stdlib.h>
+
+#include "AmaltheaConverter.h"
+#include "c2c.h"
+#include "debugFlags.h"
+#include "shared_comms.h"
+#include "taskCode.h"
+#include "e_lib.h"
+//freeRTOS imports
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+//utility imports
+//---------------------------------------------
+int main(void) {
+ //initialize output buffer for debug messages
+ outbuf_init();
+ shared_labels_init();
+ shared_labels_init_core();
+ //create Amalthea task objects
+ AmaltheaTask t20ms = createAmaltheaTask(handler10msCore2,cIn10msCore2,cOut10msCore2,10,10,7);
+ AmaltheaTask t40ms = createAmaltheaTask(handler20msCore2,cIn20msCore2,cOut20msCore2,20,20,10);
+ //create RTOS task from templates
+ createRTOSTask(&t20ms,2,0);
+ createRTOSTask(&t40ms,1,0);
+ vTaskStartScheduler();
+ return EXIT_SUCCESS;
+}
+//---------------------------------------------
+//end of file
diff --git a/RTFParallella/src/parallella/debugFlags.c b/RTFParallella/src/parallella/debugFlags.c
new file mode 100755
index 0000000..9172a6e
--- /dev/null
+++ b/RTFParallella/src/parallella/debugFlags.c
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include "debugFlags.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+
+unsigned int *outbuf[10];
+
+/*
+ * initialize output buffer with the addresses to array elements
+ */
+void outbuf_init(void ){
+ //This will be the same on each core
+ //debug interface in shared memory
+ outbuf[0] = (unsigned int *) cnt_address;
+ outbuf[1] = outbuf[0] + 1;
+ outbuf[2] = outbuf[1] + 1;
+ outbuf[3] = outbuf[2] + 1;
+ outbuf[4] = outbuf[3] + 1;
+ outbuf[5] = outbuf[4] + 1;
+ outbuf[6] = outbuf[5] + 1;
+ outbuf[7] = outbuf[6] + 1;
+ outbuf[8] = outbuf[7] + 1;
+ *outbuf[1] = 200;
+ //initialize buffer
+ int i;
+ //timer1init();
+ for (i=0;i<9;i++){
+ *outbuf[i] =0;
+ }
+}
+
+void traceRunningTask(unsigned taskNum){
+ *outbuf[RUNNINGTASK_FLAG] = taskNum;
+}
+
+void traceTaskPasses(unsigned taskNum, int currentPasses){
+ if (taskNum == 1){
+ *outbuf[TASK1_FLAG] = currentPasses;
+ }else if (taskNum == 2){
+ *outbuf[TASK2_FLAG] = currentPasses;
+ }else if (taskNum == 3){
+ *outbuf[TASK3_FLAG] = currentPasses;
+ }
+}
+
+void updateTick(void){
+ *outbuf[TICK_FLAG] = xTaskGetTickCount();
+}
+
+void updateDebugFlag(int debugMessage){
+ *outbuf[DEBUG_FLAG] = debugMessage;
+}
+
+
+
+
+
+
diff --git a/RTFParallella/src/parallella/debugFlags.h b/RTFParallella/src/parallella/debugFlags.h
new file mode 100755
index 0000000..9db71ec
--- /dev/null
+++ b/RTFParallella/src/parallella/debugFlags.h
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_DEBUGFLAGS_H_
+#define SRC_PARALLELLA_DEBUGFLAGS_H_
+
+#define cnt_address 0x3000
+
+#define TASK1_FLAG 2
+#define TASK2_FLAG 0
+#define TASK3_FLAG 4
+#define TASK4_FLAG 0
+#define TASK5_FLAG 4
+#define RUNNINGTASK_FLAG 6
+#define DEBUG_FLAG 7
+#define TICK_FLAG 8
+
+/**
+ * initialize output buffer in core memory
+ *
+ * Arguments:
+ *
+ */
+void outbuf_init(void );
+
+/**
+ * write the index of the running task to output buffer
+ *
+ * Arguments:
+ * taskNum : index of the task
+ *
+ */
+void traceRunningTask(unsigned taskNum);
+
+/**
+ * write the task instance (job) to output buffer
+ *
+ * Arguments:
+ * taskNum : index of the task
+ * currentPasses : instance of task (job number)
+ *
+ */
+void traceTaskPasses(unsigned taskNum, int currentPasses);
+
+/**
+ * update RTOS tick value in output buffer
+ *
+ * Arguments:
+ *
+ */
+void updateTick(void);
+
+/**
+ * Write a custom value to the output buffer for code coverage debugging
+ *
+ * Arguments:
+ * debugMessage : message to be written
+ *
+ */
+void updateDebugFlag(int debugMessage);
+
+#endif /* SRC_PARALLELLA_DEBUGFLAGS_H_ */
diff --git a/RTFParallella/src/parallella/host_main_example1.c b/RTFParallella/src/parallella/host_main_example1.c
new file mode 100644
index 0000000..595211b
--- /dev/null
+++ b/RTFParallella/src/parallella/host_main_example1.c
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <e-hal.h> //hardware abstraction library
+#include <time.h> /* Needed for struct timespec */
+
+#include "c2c.h"
+#include "debugFlags.h"
+#include "shared_comms.h"
+#include "host_utils.h"
+#include "model_enumerations.h"
+
+unsigned int shared_label_to_read[10];
+unsigned int shared_label_core_00[dstr_mem_sec_1_label_count];
+unsigned int shared_label_core_10[dstr_mem_sec_1_label_count];
+unsigned int shared_label_core[core_count][dstr_mem_sec_1_label_count];
+int main()
+{
+ int label_enable_count_core0 = 0;
+ unsigned labelVisual_perCore[core_count][DSHM_visible_label_count];
+ unsigned int prv_val_preCore[core_count][DSHM_visible_label_count];
+ for (int i=0;i<core_count;i++){
+ get_visible_label_index(labelVisual_perCore[i],MEM_TYPE_DSHM);
+ }
+ unsigned labelVisual_SHM[SHM_visible_label_count];
+ unsigned int prv_val_SHM[SHM_visible_label_count];
+ get_visible_label_index(labelVisual_SHM,MEM_TYPE_SHM);
+ for (int i=0;i<core_count;i++){
+ printf ("@%d : ",i);
+ for (int j=0;j<DSHM_visible_label_count;j++){
+ printf("L%d ",labelVisual_perCore[i][j]);
+ }
+ printf("\n");
+ }
+ fprintf(stderr,"===========================================================================\n");
+ fprintf(stderr," | Tasks being executed | observed labels values |\n");
+ fprintf(stderr,"%6s|%12s|%12s|"," tick "," Core 1 "," Core 2 ");
+ for (int i=0;i<core_count;i++){
+ print_legend_enum(DSHM_visible_label_count,labelVisual_perCore[i],MEM_TYPE_DSHM);
+ }
+ print_legend_enum(SHM_visible_label_count,labelVisual_SHM,MEM_TYPE_SHM);
+ fprintf(stderr,"\n");
+ fprintf(stderr,"===========================================================================\n");
+ //counters for row and column, cored id and loop counter
+ unsigned row_loop,col_loop;
+ // this will contain the epiphany platform configuration
+ e_platform_t epiphany;
+ e_epiphany_t dev;
+ e_return_stat_t result;
+ unsigned int message[9];
+ unsigned int message2[9];
+ int loop;
+ int addr;
+ e_mem_t emem;
+ e_init(NULL);
+ /*
+ * reserve shared mem sections
+ * one section for each shared label in the model
+ * shared mem address space starts at 0x0100_0000
+ * and ends at 0x3FFF_FFFF
+ *
+ */
+ e_alloc(&emem, shared_mem_section , sizeof(shared_label_to_read));
+ e_reset_system(); // reset the epiphnay chip
+ e_get_platform_info(&epiphany);//gets the configuration info for the parallella platofrm
+ //debug flag
+ //------------------------------------------------
+ //one core within the parallella work group is 1 x 1 i.e single core
+ e_open(&dev,0,0,2,1); //2 rows one column rectangle size 2*1
+ //reset the group
+ e_reset_group(&dev);
+ e_return_stat_t result1;
+ e_return_stat_t result2;
+ //load the group
+ result1 = e_load("core0_main.elf",&dev,0,0,E_FALSE);
+ result2 = e_load("core1_main.elf",&dev,1,0,E_FALSE);
+ if (result1 != E_OK || result2 != E_OK){
+ fprintf(stderr,"Error Loading the Epiphany Application 1 %i\n", result);
+ }
+ e_start_group(&dev);
+ addr = cnt_address;
+ int pollLoopCounter = 0;
+ unsigned int chainLatencyEndIndicator = 0;
+ unsigned int chainLatencyStartIndicator = 10e6;
+ unsigned int lat1 = 0;
+ char buffer1[label_str_len];
+ array_init(buffer1,label_str_len);
+ char buffer2[label_str_len];
+ array_init(buffer2,label_str_len);
+
+
+ int prev1,prev2,prev3;
+ for (pollLoopCounter=0;pollLoopCounter<=40;pollLoopCounter++){
+ message[3] = 0;
+ e_read(&dev,0,0,addr, &message, sizeof(message));
+ e_read(&dev,0,0,dstr_mem_offset_sec_1, &shared_label_core[0], sizeof(shared_label_core_00));
+ e_read(&dev,1,0,addr, &message2, sizeof(message2));
+ e_read(&dev,1,0,dstr_mem_offset_sec_1, &shared_label_core[1], sizeof(shared_label_core_10));
+ e_read(&emem,0,0,0x00, &shared_label_to_read, sizeof(shared_label_core_10));
+ if (message[8]!= message2[8] ){
+ //fprintf(stderr,"NIS->");
+ }
+ get_task_name(message[6],buffer1);
+ get_task_name(message2[6],buffer2);
+ fprintf(stderr," %4d | %10s | %10s | ",message[8]+1,buffer1,buffer2);
+ for (int i=0;i<core_count;i++){
+ user_config_print_values_auto(DSHM_visible_label_count,labelVisual_perCore[i],shared_label_core[i],prv_val_preCore[i]);
+ }
+ user_config_print_values_auto(SHM_visible_label_count,labelVisual_SHM,shared_label_to_read,prv_val_SHM);
+ fprintf(stderr,"\n");
+ nsleep(1);
+ }
+ fprintf(stderr,"----------------------------------------------\n");
+ e_close(&dev);
+ e_finalize();
+ //----------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
+ fprintf(stderr,"RFTP demo complete \n ");
+ return 0;
+}
+
diff --git a/RTFParallella/src/parallella/host_utils.c b/RTFParallella/src/parallella/host_utils.c
new file mode 100755
index 0000000..d827db5
--- /dev/null
+++ b/RTFParallella/src/parallella/host_utils.c
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include "host_utils.h"
+
+void array_init(unsigned array[],unsigned array_size){
+ for (int i=0;i<array_size;i++){
+ array[i] = 0;
+ }
+}
+
+
+void user_config_print_legend(LabelVisual core_config,unsigned array[]){
+ for (int i=0;i<core_config.num_visible_labels;i++){
+ fprintf(stderr,"(L,%u,%u,%u)|",core_config.row,core_config.col,array[i]);
+ }
+}
+
+void user_config_print_values(LabelVisual core_config,unsigned array[],unsigned int values_array[],unsigned int prv_val_array[]){
+ for(int i=0;i<core_config.num_visible_labels;i++){
+ int val_ind = array[i];
+ unsigned int val_to_print = values_array[val_ind];
+ if (val_to_print == prv_val_array[val_ind]){
+ fprintf(stderr," ---- |");
+ }else {
+ fprintf(stderr," %4d |",val_to_print);
+ prv_val_array[val_ind] = val_to_print;
+ }
+
+ }
+}
+
+LabelVisual get_user_input(unsigned indices[]){
+ unsigned row_in,col_in,label_num;
+ printf("Enter row and column of core to read ");
+ scanf("%u,%u",&row_in,&col_in);
+ printf("Enter number of visible labels");
+ scanf("%u",&label_num);
+ unsigned visible_label_array[label_num];
+ printf("Enter indices of labels\n");
+ for (int i=0;i<label_num;i++){
+ scanf("%u",&indices[i]);
+ }
+ LabelVisual retVal;
+ retVal.row = row_in;
+ retVal.col = col_in;
+ retVal.num_visible_labels = label_num;
+ return retVal;
+}
+
+
+void user_config_print_legend_auto(unsigned array_length,unsigned array[]){
+ for (int i=0;i<array_length;i++){
+ fprintf(stderr,"(F,%u)|",array[i]);
+ }
+}
+
+void user_config_print_values_auto(unsigned visible_label_count,unsigned array[],unsigned int values_array[],unsigned int prv_val_array[]){
+ for(int i=0;i<visible_label_count;i++){
+ int val_ind = array[i];
+ unsigned int val_to_print = values_array[val_ind];
+ if (val_to_print == prv_val_array[val_ind]){
+ fprintf(stderr," |");
+ }else {
+ fprintf(stderr," %10d |",val_to_print);
+ prv_val_array[val_ind] = val_to_print;
+ }
+ }
+}
+
+unsigned get_user_input_DRAM(unsigned indices[]){
+ unsigned label_num;
+ printf("Enter number of visible labels( shared mem)");
+ scanf("%u",&label_num);
+ unsigned visible_label_array[label_num];
+ printf("Enter indices of labels\n");
+ for (int i=0;i<label_num;i++){
+ scanf("%u",&indices[i]);
+ }
+ return label_num;
+}
+
+void print_legend_enum (unsigned label_count,unsigned label_positions[], unsigned memory_type){
+ char buf[label_count*label_str_len];
+ for (int i=0;i<label_str_len;i++){
+ buf[i] = "";
+ }
+ char small_buf[label_str_len];
+ //array_init(buf,label_str_len);
+ if (memory_type==MEM_TYPE_SHM){
+ for (int i=0;i<label_count;i++){
+ get_SHM_label_name(i,small_buf);
+ fprintf(stderr,"| %s ",small_buf);
+ //fflush(stderr);
+ }
+ } else {
+ for (int i=0;i<label_count;i++){
+ get_DSHM_label_name(i,small_buf);
+ fprintf(stderr,"| %s ", small_buf);
+ }
+ }
+ //fprintf(stderr,"%s",buf);
+ //fflush(stderr);
+}
+
+
+int nsleep(long miliseconds){
+ struct timespec req, rem;
+ if(miliseconds > 999){
+ req.tv_sec = (int)(miliseconds / 1000); /* Must be Non-Negative */
+ req.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000)) * 1000000; /* Must be in range of 0 to 999999999 */
+ } else {
+ req.tv_sec = 0; /* Must be Non-Negative */
+ req.tv_nsec = miliseconds * 1000000; /* Must be in range of 0 to 999999999 */
+ }
+ return nanosleep(&req , &rem);
+}
diff --git a/RTFParallella/src/parallella/host_utils.h b/RTFParallella/src/parallella/host_utils.h
new file mode 100644
index 0000000..140336d
--- /dev/null
+++ b/RTFParallella/src/parallella/host_utils.h
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+//#include <e-hal.h> //hardware abstraction library
+#include <time.h> /* Needed for struct timespec */
+//rtfp imports
+#include "c2c.h"
+#include "debugFlags.h"
+#include "shared_comms.h"
+#include "model_enumerations.h"
+
+#define READ_PRECISION_US 1000
+
+#define MEM_TYPE_SHM 0
+#define MEM_TYPE_DSHM 1
+
+typedef struct{
+ unsigned row;
+ unsigned col;
+ unsigned num_visible_labels;
+}LabelVisual;
+
+/**
+ * read a value of a label in a distributed shared memory section
+ *
+ * Arguments:
+ * row : absolute row number of the core
+ * col : absolute column number of the core
+ * label_indx : index of the target shared label
+ *
+ */
+void array_init(unsigned array[],unsigned array_size);
+
+void user_config_print_legend(LabelVisual core_config,unsigned array[]);
+
+void user_config_print_values(LabelVisual core_config,unsigned array[],unsigned int values_array[],unsigned int prv_val_array[]);
+
+LabelVisual get_user_input(unsigned indices[]);
+
+void user_config_print_legend_auto(unsigned array_length,unsigned array[]);
+
+void user_config_print_values_auto(unsigned visible_label_count,unsigned array[],unsigned int values_array[],unsigned int prv_val_array[]);
+
+unsigned get_user_input_DRAM(unsigned indices[]);
+
+void print_legend_enum (unsigned label_count,unsigned label_positions[], unsigned memory_type);
+
+int nsleep(long miliseconds);
+
+
diff --git a/RTFParallella/src/parallella/model_enumerations.c b/RTFParallella/src/parallella/model_enumerations.c
new file mode 100644
index 0000000..dce7949
--- /dev/null
+++ b/RTFParallella/src/parallella/model_enumerations.c
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include "model_enumerations.h"
+
+
+char SHM_sec1_enum [SHM_section1_label_count][label_str_len] =
+{
+ "sh_label_a",
+ "sh_label_b",
+ "sh_label_c",
+ "sh_label_d",
+ "sh_label_e",
+ "sh_label_f",
+ "sh_label_g",
+ "sh_label_h",
+ "sh_label_i",
+ "sh_label_j"
+};
+
+char DSHM_sec1_enum [DSHM_section1_label_count][label_str_len] =
+{
+ "DSH_labelA",
+ "DSH_labelB",
+ "DSH_labelC",
+ "DSH_labelD",
+ "DSH_labelE",
+ "DSH_labelF",
+ "DSH_labelG",
+ "DSH_labelH",
+ "DSH_labelI",
+ "DSH_labelJ"
+};
+
+char task_enum [task_count +1][label_str_len] =
+{
+ "[idle]",
+ "Task5ms0",
+ "Task10ms0",
+ "Task20ms0",
+ "Task10ms1",
+ "Task20ms1"
+};
+
+unsigned DSHM_visible_labels [DSHM_visible_label_count] = {0,1};
+unsigned SHM_visible_labels [SHM_visible_label_count] = {0,1};
+
+
+
+void get_SHM_label_name (int index,char str[]){
+ for (int i=0;i<label_str_len;i++){
+ str[i] = SHM_sec1_enum[index][i];
+ }
+}
+
+void get_DSHM_label_name(int index,char str[]){
+ for (int i=0;i<label_str_len;i++){
+ str[i] = DSHM_sec1_enum[index][i];
+ }
+}
+
+void get_task_name(int index,char *str){
+ for (int i=0;i<label_str_len;i++){
+ str[i] = task_enum[index][i];
+ }
+}
+
+void get_visible_label_index(unsigned array[],unsigned mem_type){
+ if (mem_type==0){
+ for (int i=0; i<SHM_visible_label_count;i++){
+ array[i] = SHM_visible_labels[i];
+ }
+ }
+ for (int i=0; i<DSHM_visible_label_count;i++){
+ array[i] = DSHM_visible_labels[i];
+ }
+}
+
diff --git a/RTFParallella/src/parallella/model_enumerations.h b/RTFParallella/src/parallella/model_enumerations.h
new file mode 100644
index 0000000..5a32d0f
--- /dev/null
+++ b/RTFParallella/src/parallella/model_enumerations.h
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_MODEL_ENUMERATIONS_H_
+#define SRC_PARALLELLA_MODEL_ENUMERATIONS_H_
+
+
+#define SHM_section1_label_count 10
+
+#define DSHM_section1_label_count 10
+
+#define label_str_len 10
+
+#define task_count 5
+
+#define core_count 2
+
+#define SHM_visible_label_count 2
+
+#define DSHM_visible_label_count 2
+
+/**
+ * Get the string name of DRAM shared label
+ *
+ * Arguments:
+ * index : shared label index in the shared memory section
+ * *str : pointer to buffer string that holds the name
+ */
+void get_SHM_label_name (int index,char *str);
+
+/**
+ * Get the string name of distributed shared label (on a core)
+ *
+ * Arguments:
+ * index : shared label index in the memory section
+ * *str : pointer to buffer string that holds the name
+ */
+void get_DSHM_label_name(int index,char *str);
+
+/**
+ * Get the string name of the task being run
+ *
+ * Arguments:
+ * index : task index in the task_enum array
+ * *str : pointer to buffer string that holds the name
+ */
+void get_task_name(int index,char *str);
+
+/**
+ * Get the indices of required labels to show in either shared memory or distributed shared memory
+ *
+ * Arguments:
+ * array : array buffer that holds the indices
+ * mem_type : the memory type of indices requested (MEM_TYPE_SHM or MEM_TYPE_DSHM)
+ */
+void get_visible_label_index(unsigned array[],unsigned mem_type);
+
+
+#endif /* SRC_PARALLELLA_MODEL_ENUMERATIONS_H_ */
diff --git a/RTFParallella/src/parallella/shared_comms.c b/RTFParallella/src/parallella/shared_comms.c
new file mode 100755
index 0000000..b400623
--- /dev/null
+++ b/RTFParallella/src/parallella/shared_comms.c
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include "shared_comms.h"
+
+unsigned int *outbuf_shared[shared_mem_section1_label_count];
+
+void shared_labels_init(){
+ outbuf_shared[0] = (unsigned int *) shared_mem_section;
+ outbuf_shared[1] = outbuf_shared[0] + 1;
+ outbuf_shared[2] = outbuf_shared[1] + 1;
+ outbuf_shared[3] = outbuf_shared[2] + 1;
+ outbuf_shared[4] = outbuf_shared[3] + 1;
+ outbuf_shared[5] = outbuf_shared[4] + 1;
+ outbuf_shared[6] = outbuf_shared[5] + 1;
+ outbuf_shared[7] = outbuf_shared[6] + 1;
+ outbuf_shared[8] = outbuf_shared[7] + 1;
+ //initialize buffer
+ int i;
+ //timer1init();
+ for (i=0;i<shared_mem_section1_label_count;i++){
+ *outbuf_shared[i] =0;
+ }
+}
+
+/*void shared_labels_init_multi(){
+
+}*/
+
+
+
+uint8_t shared_label_write(int label_indx,int payload){
+ uint8_t retval=NULL;
+ *outbuf_shared[label_indx] = payload;
+ /*if (payload == *outbuf_shared[label_indx]){
+ retval = 1;
+ }*/
+ return retval;
+}
+
+
+unsigned int shared_label_read(int label_indx){
+ return *outbuf_shared[label_indx];
+}
+
+
+
+//-------------------end of file-------------------------//
diff --git a/RTFParallella/src/parallella/shared_comms.h b/RTFParallella/src/parallella/shared_comms.h
new file mode 100755
index 0000000..39eb8d7
--- /dev/null
+++ b/RTFParallella/src/parallella/shared_comms.h
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_SHARED_COMMS_H_
+#define SRC_PARALLELLA_SHARED_COMMS_H_
+
+#include <stdlib.h>
+#include <stdint.h>
+
+
+#define shared_mem_section 0x01000000
+
+#define shared_mem_section_2 0x01001000
+
+#define shared_mem_section1_label_count 10
+
+
+/**
+ * Initiate the shared label section, this funcion will assign addresses to labels in a section,
+ * and initialize those labels to 0
+ *
+ * Arguments:
+ *
+ */
+void shared_labels_init();
+
+/**
+ * write a value to a label in a shared memory(DRAM) section
+ *
+ * Arguments:
+ * label_indx : index of the target shared label
+ * payload : value to write
+ *
+ */
+uint8_t shared_label_write (int label_indx,int payload);
+
+/**
+ * read a value of a label in a shared memory(DRAM) section
+ *
+ * Arguments:
+ * label_indx : index of the target shared label
+ *
+ */
+unsigned int shared_label_read(int label_indx);
+
+
+#endif /* SRC_PARALLELLA_SHARED_COMMS_H_ */
diff --git a/RTFParallella/src/parallella/taskCode.c b/RTFParallella/src/parallella/taskCode.c
new file mode 100755
index 0000000..06c4ae0
--- /dev/null
+++ b/RTFParallella/src/parallella/taskCode.c
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include "taskCode.h"
+
+/* define global variables to be
+ * accessed through a specific task (context)
+ */
+//task recurrence counters
+int passes1 = 0;
+int passes2 = 0;
+int passes3 = 0;
+int passes4 = 0;
+int passes5 = 0;
+
+//extern unsigned int shared_label1;
+
+int label5_10_00;
+
+int label5_10_00_copy1;
+
+int shared_label_1;
+int shared_label_2 = 97;
+
+//define tasks and copy operations here
+//-------
+void handler5ms(){
+ int localLabel;
+ updateDebugFlag(700);
+ sleepTimerMs(2,1);
+ passes1++;
+ traceTaskPasses(1,passes1);
+ traceRunningTask(0);
+}
+
+void handler10ms(){
+ updateDebugFlag(800);
+ sleepTimerMs(3,2);
+ passes2++;
+ traceTaskPasses(2,passes2);
+ traceRunningTask(0);
+
+}
+
+void handler20ms(){
+ updateDebugFlag(899);
+ sleepTimerMs(5,3);
+ passes3++;
+ traceRunningTask(0);
+ traceTaskPasses(3,passes3);
+
+}
+
+void handler10msCore2(){
+ updateDebugFlag(899);
+ sleepTimerMs(3,4);
+ passes4++;
+ //shared_label1 = shared_label_to_read;
+ traceRunningTask(0);
+ traceTaskPasses(2,passes4);
+}
+
+void handler20msCore2(){
+ updateDebugFlag(899);
+ sleepTimerMs(7,5);
+ passes5++;
+ traceRunningTask(0);
+ traceTaskPasses(3,passes5);
+}
+
+
+
+
+
+//-------
+void cIn5ms(){
+ label5_10_00_copy1 = label5_10_00;
+ shared_label_2 = 97 + passes1;
+}
+void cIn10ms(){
+
+}
+void cIn20ms(){
+
+}
+
+void cIn10msCore2(){
+ shared_label_1 = shared_label_read_core(1,0,0);
+}
+void cIn20msCore2(){
+
+}
+
+//-------
+void cOut5ms(){
+ label5_10_00 = label5_10_00_copy1;
+ shared_label_write_core(1,0,0,shared_label_2);
+}
+void cOut10ms(){
+ shared_label_write(0,2);
+}
+void cOut20ms(){
+
+}
+void cOut10msCore2(){
+ shared_label_1++;
+ shared_label_write(1,shared_label_1);
+}
+void cOut20msCore2(){
+
+}
diff --git a/RTFParallella/src/parallella/taskCode.h b/RTFParallella/src/parallella/taskCode.h
new file mode 100755
index 0000000..817adff
--- /dev/null
+++ b/RTFParallella/src/parallella/taskCode.h
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_TASKCODE_H_
+#define SRC_PARALLELLA_TASKCODE_H_
+#include "c2c.h"
+#include "debugFlags.h"
+#include "ParallellaUtils.h"
+#include "shared_comms.h"
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+//declare taskHandler functions
+
+void handler5ms();
+void handler10ms();
+void handler20ms();
+void handler10msCore2();
+void handler20msCore2();
+//-------
+//declare cIn/Out operations
+//to be set up from the amalthea model during
+//code generation
+void cIn5ms();
+void cIn10ms();
+void cIn20ms();
+void cIn10msCore2();
+void cIn20msCore2();
+//-------
+void cOut5ms();
+void cOut10ms();
+void cOut20ms();
+void cOut10msCore2();
+void cOut20msCore2();
+
+#endif /* SRC_PARALLELLA_TASKCODE_H_ */

Back to the top