Compare commits

...

25 Commits

Author SHA1 Message Date
c9d2c05b73 add event sequence diagram 2023-10-22 17:05:30 +02:00
c07c47385e add timeout sequence diagram 2023-10-21 18:29:00 +02:00
68fd8440fc somme comments 2023-10-21 18:28:47 +02:00
c1b4baeb2e fix image link 2023-10-21 16:07:53 +02:00
09ea237a13 convert link image on html 2023-10-21 16:03:35 +02:00
26ef097d86 test image with html 2023-10-21 15:58:28 +02:00
9b56357770 add time algorithme activity diagram in png 2023-10-21 15:49:48 +02:00
57720e50f7 test for result test picture 2023-10-21 15:45:01 +02:00
05f186188f clean algo (work for all tests) 2023-10-21 15:42:56 +02:00
20fd0631c6 algo work on test 1 2023-10-21 13:25:40 +02:00
268c270a4d some update for test algoritm 2023-10-19 14:48:10 +02:00
9059d77b3e start an non-fonctionnal algoritm 2023-10-19 11:46:19 +02:00
92c2faa858 some exemple for plantuml 2023-10-19 11:44:15 +02:00
2ee12ca042 test for plantuml 2023-10-19 11:33:18 +02:00
3d5f026a94 test for flow and sequence 2023-10-19 11:31:28 +02:00
54265d70d1 start time algoritm diagram 2023-10-19 10:42:58 +02:00
f26d9803ac ignore .idea 2023-10-19 10:39:54 +02:00
a327899e11 add result of STM 2023-10-19 10:39:31 +02:00
0978fdb7a5 init readme 2023-10-19 10:21:13 +02:00
5c889da959 move result picture 2023-10-19 09:03:53 +02:00
a1960d7f3b all test done on STM 2023-10-18 18:02:03 +02:00
a86d9b1dfc fix qt part schouldn't change before add algo) 2023-10-18 17:08:56 +02:00
e302dab670 test result 2023-10-18 17:08:20 +02:00
f809d4f647 implement STM not tested 2023-10-18 16:57:06 +02:00
208ab5ec63 remove some comments 2023-10-17 17:10:20 +02:00
33 changed files with 421 additions and 181 deletions

8
.gitignore vendored
View File

@ -53,3 +53,11 @@ compile_commands.json
*_qmlcache.qrc
*.user
test-bench/test1/ide-cubeide-test1-idf/Debug
test-bench/test5/ide-cubeide-test5-idf/.settings/language.settings.xml
test-bench/test1/ide-cubeide-test1-idf/.settings/language.settings.xml
test-bench/test2/ide-cubeide-test2-idf/.settings/language.settings.xml
test-bench/test2/ide-cubeide-test2-idf/Debug
test-bench/test4/ide-cubeide-test4-idf/.settings/language.settings.xml
test-bench/test3/ide-cubeide-test3-idf/.settings/language.settings.xml
.idea

BIN
UML/event.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

55
UML/event.puml Normal file
View File

@ -0,0 +1,55 @@
@startuml
participant Behavior as b
participant Dispatcher as d
entity Event as e
participant EventQueue as eq
queue "EventQueue::queue_" as q
== Create an Event ==
|||
?->> b ++ : GEN
b -> e ** : new
b -> b --++ : pushEvent
e -> b : getBehavior
b --> e ++: setBehavior
e --> b --
b -> d ++ : getDispatcher
d --> b
b -> d -- : pushEvent
d ->? -- : push
|||
|||
== Push Event ==
|||
?->> d ++: pushEvent
d -> eq--++: push
eq -> q ++
q --> eq
eq -> q -- : pushEndQueue
|||
|||
== Dispatch ==
|||
?->> d ++: executeOnce
d -> q : getFront
q -> e ++
e --> q
q --> d : event
d -> q : pop
deactivate q
d -> d --++ : dispatchEvent
d -> b ++ : getBehavior
b --> d
d -> b -- : process
b -> b--: processEvent
destroy e
@enduml

BIN
UML/timeAlgorithme.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

27
UML/timeAlgorithme.puml Normal file
View File

@ -0,0 +1,27 @@
@startuml
start
:newTime = 0
totalTime = 0
isEnd = it == list.end()
lastTime = 0;
#tomato:if (!isEnd) then (not end)
#tomato:totalTime += it.getRelTicks();
endif
while ( !isEnd && (totalTime <= newTime) ) is (goForward)
:isEnd = (++it == list.end());
:lastTime = totalTime;
#tomato:if (!isEnd) then (not end)
#tomato:totalTime += it.getRelTicks();
endif
endwhile
#tomato:if (!isEnd) then (not end)
#tomato:subRelTicks(newTime- lastTime);
endif
:it.setRelTicks(newTime - lastTime);
:insert(it, newTimeout);
@enduml

BIN
UML/timeout.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

62
UML/timeout.puml Normal file
View File

@ -0,0 +1,62 @@
@startuml
participant "Behavior::StateMachine" as sm
participant Dispatcher as d
participant TimeoutManager as tm
entity "Event::Timeout" as t
queue "TimeoutManager::timeouts_" as timeouts
autoactivate off
|||
|||
== Schedule timeout ==
|||
sm -> sm++ : scheduleTimeout
sm -> d ++: getDispatcher
d --> sm --: dispatcher
sm -> d --++ : scheduleTimeout
d -> tm ++: getTimeoutManager
tm --> d --: timeoutManager
d -> tm --++ : scheduleTimeout
tm -> t ** : new
t --> tm
tm -> timeouts --++: insert
|||
|||
== Decrement timeout (and dispatch) ==
|||
loop every tickInterval
?->> tm ++: tick
tm -> timeouts : getFront
timeouts -> t ++
t --> timeouts
timeouts --> tm : timeout
tm -> t --: decrement
end
|||
note left t
When timeout is 0,
dispatch event
end note
t -> timeouts : pop
deactivate timeouts
t ->? --: pushEvent
|||
|||
== Unschedule timeout ==
|||
sm -> sm++ : unscheduleTimeout
sm -> d ++: getDispatcher
d --> sm --: dispatcher
sm -> d --++ : unscheduleTimeout
d -> tm ++: getTimeoutManager
tm --> d --: timeoutManager
d -> tm --++ : unscheduleTimeout
tm -> timeouts --: erase
timeouts -> t !!
@enduml

119
readme.md Normal file
View File

@ -0,0 +1,119 @@
# Goal of this project
- Design an algorithm which lets the `XFTimeoutManager` behave in the same timely manner independent of whether it handles one or nn timeouts
- Implement the core classes of the XF
- Implement the port classes for following ports: *common*, *idf-qt*, *idf-stm32*
- Test and comment the code of the XF
- The tests provided need to run using Qt and on the *Embedded System* platform
- Demonstrate the right functioning of the XF by comparing and documenting the output created by the tests running on the *Embedded System*
# Time Algorithm
<img src="./UML/timeAlgorithme.png">
# Sequence Diagrams
## Timeout
<img src="./UML/timeout.png">
## Event
<img src="./UML/event.png">
# Tests
## Test 1
This test launches an instance of the Task01Tm class and produces some output. Optionally, multiple instances of Task01Tm can be created to test the XF.
The Test Factory (TestFactory01) instantiates 2 objects:
- An object of Task01Tm which outputs the text "Say Hello" every second
- An object of Task01Tm which outputs the text "Echo" every half second
<details>
<summary>QT result ✅</summary>
<img src="./test-bench/test1/ide-qtcreator-test1-idf/result.PNG">
This test is successfully passed
</details>
<details>
<summary>STM result ✅</summary>
<img src="./test-bench/test1/ide-cubeide-test1-idf/result.png">
</details>
## Test 2
This test checks again timeout handling and proper termination of a state machine. In case the state machine was statically/globally created, the XF must not delete the object, when requested to terminate the behavior. If the state-machine was created on the heap (dynamic allocation), the XF must delete the state machine upon request to terminate.
Weather or not the state machine should be deleted is handled with the 'deleteOnTerminate()' method provided by the XFReactive interface.
<details>
<summary>QT result ✅</summary>
<img src="./test-bench/test2/ide-qtcreator-test2-idf/result.PNG">
This test is successfully passed
</details>
<details>
<summary>STM result ✅</summary>
<img src="./test-bench/test2/ide-cubeide-test2-idf/result.png">
</details>
## Test 3
This test checks basic event handling in state machines. In this example the StateMachine03 class sends itself an evRestart event to change from one state to another.
<details>
<summary>QT result ✅</summary>
<img src="./test-bench/test3/ide-qtcreator-test3-idf/result.PNG">
This test is successfully passed
</details>
<details>
<summary>STM result ✅</summary>
<img src="./test-bench/test3/ide-cubeide-test3-idf/result.png">
</details>
## Test 4
Tests if timeouts are correctly cancelled. When leaving a state with a transition having a timeout, without the timeout raises, the timeout must be cancelled (unscheduled).
<details>
<summary>QT result ✅</summary>
<img src="./test-bench/test4/ide-qtcreator-test4-idf/result.PNG">
This test is successfully passed
</details>
<details>
<summary>STM result ✅</summary>
<img src="./test-bench/test4/ide-cubeide-test4-idf/result.png">
</details>
## Test 5
With this test multiple timeouts are added to the XFTimeoutManager list at the same time. This tests the way how new timeouts are added in relation to other timeouts (with the same timeout value) already added to the list. For more details how the objects are created, please refere to the implementation of the TestFactory05 class.
<details>
<summary>QT result ✅</summary>
<img src="./test-bench/test5/ide-qtcreator-test5-idf/result.PNG">
This test is successfully passed
</details>
<details>
<summary>STM result ✅</summary>
<img src="./test-bench/test5/ide-cubeide-test5-idf/result.png">
</details>

View File

@ -4,7 +4,6 @@
#include "xf/behavior.h"
#include "trace/trace.h"
// TODO done: Implement code for XFBehavior class
XFBehavior::XFBehavior() {
this->deleteOnTerminate_ = false;
@ -17,6 +16,12 @@ void XFBehavior::startBehavior() {
GEN(XFInitialEvent());
}
/**
* @brief Pushes the given event to the dispatcher.
*
* If the event has no behavior assigned, the behavior of this object is assigned.
* @param pEvent Event to push to the dispatcher.
*/
void XFBehavior::pushEvent(XFEvent *pEvent) {
if(pEvent->getBehavior()==nullptr) {
pEvent->setBehavior(this);
@ -40,6 +45,13 @@ interface::XFDispatcher *XFBehavior::getDispatcher() {
return interface::XFDispatcher::getInstance();
}
/**
* @brief Returns a reference to the actually processed timeout.
*
* Will work only if the current event is of type IXFEvent::Timeout.
*
* @return Pointer to the currently processed timeout or nullptr if the current event is not a timeout.
*/
const XFTimeout *XFBehavior::getCurrentTimeout() {
if(pCurrentEvent_->getEventType() == XFEvent::Timeout) {
return (XFTimeout*) this->pCurrentEvent_;
@ -52,13 +64,33 @@ void XFBehavior::setCurrentEvent(const XFEvent *pEvent) {
this->pCurrentEvent_ = pEvent;
}
/**
* @brief Processes the given event.
*
* The dispatcher calls this method every time a new event
* or timeout arrives. The process method stores the actual
* event using the #_pCurrentEvent and then calls
* processEvent().
*
* In case you intend to call process() inside your state machine you
* are doing something wrong! Call GEN() or pushEvent() instead!
*
* @param pEvent Event to process
* @return if the behavior is terminated (basically a boolean)
*/
XFBehavior::TerminateBehavior XFBehavior::process(const XFEvent *pEvent) {
this->setCurrentEvent(pEvent);
// Get status of the event processing
XFEventStatus status = XFEventStatus::Unknown;
status = this->processEvent();
// Check if event was consumed and if it should be deleted
if(status == XFEventStatus::Consumed && pEvent->deleteAfterConsume()) {
delete pEvent;
}
// Check if the behavior is terminated and return the result
XFBehavior::TerminateBehavior terminateBehavior = false;
if(status == XFEventStatus::Terminate) {
terminateBehavior = true;

View File

@ -1,7 +1,5 @@
#include "xf/customevent.h"
// TODO done: Implement code for XFCustomEvent class
XFCustomEvent::XFCustomEvent(int id, interface::XFBehavior *pBehavior):
XFEvent(XFEventType::Event, id){

View File

@ -1,7 +1,5 @@
#include "xf/defaulttransition.h"
// TODO done: Implement code for XFDefaultTransition class
XFDefaultTransition::XFDefaultTransition():
XFEvent(XFEventType::DefaultTransition) {

View File

@ -1,7 +1,5 @@
#include "xf/initialevent.h"
// TODO done: Implement code for XFInitialEvent class
XFInitialEvent::XFInitialEvent():
XFEvent(XFEventType::Initial) {

View File

@ -1,7 +1,5 @@
#include "xf/timeout.h"
// TODO done: Implement code for XFTimeout class
XFTimeout::XFTimeout(int id, int interval, interface::XFBehavior *pBehavior):
XFEvent(XFEventType::Timeout, id), interval_(interval) {
this->setRelTicks(this->getInterval());

View File

@ -24,8 +24,6 @@ interface::XFDispatcher * interface::XFDispatcher::getInstance() {
return &dispatcher;
}
// TODO done: Implement code for XFDispatcher class
XFDispatcher::XFDispatcher() {
this->pMutex_ = interface::XFMutex::create();
}
@ -35,7 +33,6 @@ XFDispatcher::~XFDispatcher() {
}
void XFDispatcher::dispatchEvent(const XFEvent *pEvent) const {
//Trace::out("[DEBUG] - Dispatch Event");
XFBehavior::TerminateBehavior terminateBehavior;
terminateBehavior = pEvent->getBehavior()->process(pEvent);
if(terminateBehavior && pEvent->getBehavior()->deleteOnTerminate()) {
@ -47,7 +44,6 @@ void XFDispatcher::dispatchEvent(const XFEvent *pEvent) const {
}
void XFDispatcher::pushEvent(XFEvent *pEvent) {
//Trace::out("[DEBUG] - Push Event");
this->pMutex_->lock();
events_.push(pEvent, false);
this->pMutex_->unlock();

View File

@ -24,8 +24,6 @@ interface::XFTimeoutManager * interface::XFTimeoutManager::getInstance() {
return &timeoutManager;
}
// TODO done: Implement code for XFTimeoutManager class
XFTimeoutManager::XFTimeoutManager() {
this->pMutex_ = interface::XFMutex::create();
}
@ -35,8 +33,29 @@ XFTimeoutManager::~XFTimeoutManager() {
}
void XFTimeoutManager::addTimeout(XFTimeout *pNewTimeout) {
const int newTime = pNewTimeout->getInterval();
int totalTime = 0;
bool isEnd = true;
int lastTime = 0;
this->pMutex_->lock();
this->timeouts_.push_back(pNewTimeout);
TimeoutList::iterator it = this->timeouts_.begin();
isEnd = (it == this->timeouts_.end());
if(!isEnd) totalTime += (*it)->getRelTicks();
while(!isEnd && (totalTime <= newTime)) {
isEnd = (++it == this->timeouts_.end());
lastTime = totalTime;
if(!isEnd) totalTime += (*it)->getRelTicks();
}
if(!isEnd) (*it)->substractFromRelTicks(newTime-lastTime);
pNewTimeout->setRelTicks(newTime-lastTime);
this->timeouts_.insert(it, pNewTimeout);
this->pMutex_->unlock();
}
@ -53,17 +72,11 @@ void XFTimeoutManager::start(std::function<void (uint32_t)> startTimeoutManagerT
}
void XFTimeoutManager::scheduleTimeout(int32_t timeoutId, int32_t interval, interface::XFBehavior *pBehavior) {
string str = "[DEBUG] - Schedule Timeout: ";
str += to_string(timeoutId);
//Trace::out(str);
::XFTimeout* timeout = new XFTimeout(timeoutId, interval, pBehavior);
addTimeout(timeout);
}
void XFTimeoutManager::unscheduleTimeout(int32_t timeoutId, interface::XFBehavior *pBehavior) {
string str = "[DEBUG] - Unschedule Timeout: ";
str += to_string(timeoutId);
//Trace::out(str);
this->pMutex_->lock();
TimeoutList::iterator it;
for(it = this->timeouts_.begin(); it != this->timeouts_.end(); it++){
@ -77,22 +90,31 @@ void XFTimeoutManager::unscheduleTimeout(int32_t timeoutId, interface::XFBehavio
}
void XFTimeoutManager::tick() {
//Trace::out("[DEBUG] - Tick");
if(!this->timeouts_.empty()) {
TimeoutList::iterator it;
bool isEmpty = this->timeouts_.empty();
int rTime;
if(!isEmpty) {
this->pMutex_->lock();
for(it=this->timeouts_.begin(); it != this->timeouts_.end(); it++) {
if((*it)->getRelTicks() > 0) {
(*it)->substractFromRelTicks(this->tickInterval_);
} else {
XFEvent* ev = *(it);
XFDispatcher::getInstance()->pushEvent(ev);
it = this->timeouts_.erase(it);
it--;
}
XFTimeout* timeout = this->timeouts_.front();
timeout->substractFromRelTicks(tickInterval_);
rTime = timeout->getRelTicks();
while (!isEmpty && (rTime <= 0) ) {
XFDispatcher::getInstance()->pushEvent(timeout);
this->timeouts_.pop_front();
timeout = this->timeouts_.front();
isEmpty = this->timeouts_.empty();
if(!isEmpty) rTime = timeout->getRelTicks();
}
this->pMutex_->unlock();
}
}

View File

@ -5,10 +5,40 @@
#include <cassert>
#include "eventqueue.h"
// TODO: Implement code for XFEventQueue class
// TODO done: Implement code for XFEventQueue class
bool XFEventQueue::pend()
{
XFEventQueue::XFEventQueue(){
}
XFEventQueue::~XFEventQueue(){
}
bool XFEventQueue::empty() const {
return queue_.empty();
}
bool XFEventQueue::push(const XFEvent *pEvent, bool fromISR) {
(void) fromISR;
mutex_.lock();
queue_.push(pEvent);
mutex_.unlock();
return true;
}
const XFEvent* XFEventQueue::front() {
return queue_.front();
}
void XFEventQueue::pop() {
mutex_.lock();
queue_.pop();
mutex_.unlock();
}
bool XFEventQueue::pend() {
// Method cannot be used in an IDF! Waiting within
// this method would block the whole XF
return false;

View File

@ -8,17 +8,23 @@
/**
* @brief Implementation of interface::XFMutex::create method.
*/
interface::XFMutex * interface::XFMutex::create()
{
interface::XFMutex * interface::XFMutex::create() {
return new ::XFMutex;
}
void XFMutex::lock() {
enterCritical();
}
void XFMutex::unlock() {
exitCritical();
}
// TODO: Implement code for XFMutex class
bool XFMutex::tryLock(int32_t timeout) {
XFMutex::lock();
return true;
}
// TODO done: Implement code for XFMutex class
#endif // USE_XF_IDF_STM32_MUTEX_CLASS

View File

@ -9,21 +9,47 @@
using interface::XFTimeoutManager;
void XF_initialize(int timeInterval)
{
void XF_initialize(int timeInterval) {
XF::initialize(timeInterval);
}
void XF_exec()
{
void XF_exec() {
XF::exec();
}
void XF_execOnce()
{
void XF_execOnce() {
XF::execOnce();
}
// TODO: Implement code for XF class
bool XF::isInitialized_ = false;
bool XF::isRunning_ = false;
void XF::initialize(int timeInterval, int argc, char *argv[]){
if(!isInitialized_) {
interface::XFTimeoutManager::getInstance()->initialize(timeInterval);
isInitialized_ = true;
}
}
int XF::exec(){
int foo;
foo = interface::XFDispatcher::getInstance()->execute();
isRunning_ = true;
return foo;
}
int XF::execOnce() {
interface::XFDispatcher::getInstance()->executeOnce();
isRunning_ = true;
return 0;
}
bool XF::isRunning() {
return isRunning_;
}
#endif // USE_XF_IDF_STM32_XF_CLASS

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1635794078" name="Debug">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1441404980" name="Release">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
</project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.160913188" name="Debug">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1470338518" name="Release">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
</project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.192308827" name="Debug">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1342829208" name="Release">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
</project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.666965065" name="Debug">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.661535232" name="Release">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
</project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.912685179" name="Debug">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.856286833" name="Release">
<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-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1172803102310709121" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM 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>
</extension>
</configuration>
</project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB