Compare commits

...

4 Commits

Author SHA1 Message Date
08ad191f2e all test done 2023-10-17 15:52:38 +02:00
dd9498f38d test 1-3 done 2023-10-17 15:14:29 +02:00
4002757765 test 2 done 2023-10-17 15:12:51 +02:00
c1e65d41ee finish test 1 (succesfully) 2023-10-17 14:18:38 +02:00
11 changed files with 224 additions and 39 deletions

View File

@ -2,15 +2,15 @@
#include "xf/timeout.h" #include "xf/timeout.h"
#include "xf/initialevent.h" #include "xf/initialevent.h"
#include "xf/behavior.h" #include "xf/behavior.h"
#include "trace/trace.h"
// TODO done: Implement code for XFBehavior class // TODO done: Implement code for XFBehavior class
XFBehavior::XFBehavior() { XFBehavior::XFBehavior() {
this->deleteOnTerminate_ = false;
} }
XFBehavior::~XFBehavior() { XFBehavior::~XFBehavior() {
} }
void XFBehavior::startBehavior() { void XFBehavior::startBehavior() {
@ -18,20 +18,22 @@ void XFBehavior::startBehavior() {
} }
void XFBehavior::pushEvent(XFEvent *pEvent) { void XFBehavior::pushEvent(XFEvent *pEvent) {
pEvent->setBehavior(this); if(pEvent->getBehavior()==nullptr) {
pEvent->setBehavior(this);
}
this->getDispatcher()->pushEvent(pEvent); this->getDispatcher()->pushEvent(pEvent);
} }
bool XFBehavior::deleteOnTerminate() const { bool XFBehavior::deleteOnTerminate() const {
return deleteOnTerminate_; return this->deleteOnTerminate_;
} }
void XFBehavior::setDeleteOnTerminate(bool deleteBehaviour) { void XFBehavior::setDeleteOnTerminate(bool deleteBehaviour) {
deleteOnTerminate_ = deleteBehaviour; this->deleteOnTerminate_ = deleteBehaviour;
} }
const XFEvent *XFBehavior::getCurrentEvent() const { const XFEvent *XFBehavior::getCurrentEvent() const {
return pCurrentEvent_; return this->pCurrentEvent_;
} }
interface::XFDispatcher *XFBehavior::getDispatcher() { interface::XFDispatcher *XFBehavior::getDispatcher() {
@ -40,23 +42,26 @@ interface::XFDispatcher *XFBehavior::getDispatcher() {
const XFTimeout *XFBehavior::getCurrentTimeout() { const XFTimeout *XFBehavior::getCurrentTimeout() {
if(pCurrentEvent_->getEventType() == XFEvent::Timeout) { if(pCurrentEvent_->getEventType() == XFEvent::Timeout) {
return (XFTimeout*) pCurrentEvent_; return (XFTimeout*) this->pCurrentEvent_;
} else { } else {
return nullptr; return nullptr;
} }
} }
void XFBehavior::setCurrentEvent(const XFEvent *pEvent) { void XFBehavior::setCurrentEvent(const XFEvent *pEvent) {
pCurrentEvent_ = pEvent; this->pCurrentEvent_ = pEvent;
} }
XFBehavior::TerminateBehavior XFBehavior::process(const XFEvent *pEvent) { XFBehavior::TerminateBehavior XFBehavior::process(const XFEvent *pEvent) {
setCurrentEvent(pEvent); this->setCurrentEvent(pEvent);
XFEventStatus status = XFEventStatus::Unknown; XFEventStatus status = XFEventStatus::Unknown;
status = processEvent(); status = this->processEvent();
if(status == XFEventStatus::Consumed) { if(status == XFEventStatus::Consumed && pEvent->deleteAfterConsume()) {
return deleteOnTerminate_; delete pEvent;
} else {
return false;
} }
XFBehavior::TerminateBehavior terminateBehavior = false;
if(status == XFEventStatus::Terminate) {
terminateBehavior = true;
}
return terminateBehavior;
} }

View File

@ -4,7 +4,7 @@
XFCustomEvent::XFCustomEvent(int id, interface::XFBehavior *pBehavior): XFCustomEvent::XFCustomEvent(int id, interface::XFBehavior *pBehavior):
XFEvent(XFEventType::Unknown, id){ XFEvent(XFEventType::Event, id){
setBehavior(pBehavior); setBehavior(pBehavior);
} }

View File

@ -4,6 +4,7 @@
XFTimeout::XFTimeout(int id, int interval, interface::XFBehavior *pBehavior): XFTimeout::XFTimeout(int id, int interval, interface::XFBehavior *pBehavior):
XFEvent(XFEventType::Timeout, id), interval_(interval) { XFEvent(XFEventType::Timeout, id), interval_(interval) {
this->setRelTicks(this->getInterval());
setBehavior(pBehavior); setBehavior(pBehavior);
} }

View File

@ -24,10 +24,10 @@ interface::XFDispatcher * interface::XFDispatcher::getInstance() {
return &dispatcher; return &dispatcher;
} }
// TODO: Implement code for XFDispatcher class // TODO done: Implement code for XFDispatcher class
XFDispatcher::XFDispatcher() { XFDispatcher::XFDispatcher() {
this->pMutex_ = interface::XFMutex::create();
} }
XFDispatcher::~XFDispatcher() { XFDispatcher::~XFDispatcher() {
@ -35,14 +35,22 @@ XFDispatcher::~XFDispatcher() {
} }
void XFDispatcher::dispatchEvent(const XFEvent *pEvent) const { void XFDispatcher::dispatchEvent(const XFEvent *pEvent) const {
if(pEvent->getBehavior()->process(pEvent)) { // TODO look weird //Trace::out("[DEBUG] - Dispatch Event");
//events_.pop(); XFBehavior::TerminateBehavior terminateBehavior;
delete pEvent; terminateBehavior = pEvent->getBehavior()->process(pEvent);
if(terminateBehavior && pEvent->getBehavior()->deleteOnTerminate()) {
delete pEvent->getBehavior();
if(pEvent->deleteAfterConsume()) {
delete pEvent;
}
} }
} }
void XFDispatcher::pushEvent(XFEvent *pEvent) { void XFDispatcher::pushEvent(XFEvent *pEvent) {
events_.push(pEvent); //Trace::out("[DEBUG] - Push Event");
this->pMutex_->lock();
events_.push(pEvent, false);
this->pMutex_->unlock();
} }
void XFDispatcher::scheduleTimeout(int timeoutId, int interval, interface::XFBehavior *pBehavior) { void XFDispatcher::scheduleTimeout(int timeoutId, int interval, interface::XFBehavior *pBehavior) {
@ -54,15 +62,22 @@ void XFDispatcher::unscheduleTimeout(int timeoutId, interface::XFBehavior *pBeha
} }
void XFDispatcher::executeOnce() { void XFDispatcher::executeOnce() {
//XFEvent* event; if(!this->events_.empty()) {
dispatchEvent(events_.front());
events_.pop(); this->pMutex_->lock();
const XFEvent *ev = this->events_.front();
this->events_.pop();
this->pMutex_->unlock();
dispatchEvent(ev);
}
} }
int XFDispatcher::execute(const void *param) { int XFDispatcher::execute(const void *param) {
(void) param;
while(true){ while(true){
executeOnce(); this->executeOnce();
} }
} }

View File

@ -8,6 +8,9 @@
#include "xf/interface/behavior.h" #include "xf/interface/behavior.h"
#include "xf/interface/mutex.h" #include "xf/interface/mutex.h"
#include "timeoutmanager.h" #include "timeoutmanager.h"
#if defined(XF_TRACE_EVENT_PUSH_POP) && (XF_TRACE_EVENT_PUSH_POP != 0)
#include "trace/trace.h"
#endif // XF_TRACE_EVENT_PUSH_POP
using Mutex = interface::XFMutex; // Rename XFMutex interface class to Mutex for easier use. using Mutex = interface::XFMutex; // Rename XFMutex interface class to Mutex for easier use.
@ -24,6 +27,7 @@ interface::XFTimeoutManager * interface::XFTimeoutManager::getInstance() {
// TODO done: Implement code for XFTimeoutManager class // TODO done: Implement code for XFTimeoutManager class
XFTimeoutManager::XFTimeoutManager() { XFTimeoutManager::XFTimeoutManager() {
this->pMutex_ = interface::XFMutex::create();
} }
XFTimeoutManager::~XFTimeoutManager() { XFTimeoutManager::~XFTimeoutManager() {
@ -31,41 +35,64 @@ XFTimeoutManager::~XFTimeoutManager() {
} }
void XFTimeoutManager::addTimeout(XFTimeout *pNewTimeout) { void XFTimeoutManager::addTimeout(XFTimeout *pNewTimeout) {
pMutex_->lock(); this->pMutex_->lock();
timeouts_.push_front(pNewTimeout); this->timeouts_.push_back(pNewTimeout);
pMutex_->unlock(); this->pMutex_->unlock();
} }
void XFTimeoutManager::returnTimeout(XFTimeout *pTimeout) { void XFTimeoutManager::returnTimeout(XFTimeout *pTimeout) {
pMutex_->lock(); this->pMutex_->lock();
XFDispatcher::getInstance()->pushEvent(pTimeout); XFDispatcher::getInstance()->pushEvent(pTimeout);
timeouts_.remove(pTimeout); this->timeouts_.remove(pTimeout);
pMutex_->unlock(); this->pMutex_->unlock();
} }
void XFTimeoutManager::start(std::function<void (uint32_t)> startTimeoutManagerTimer) { void XFTimeoutManager::start(std::function<void (uint32_t)> startTimeoutManagerTimer) {
startTimeoutManagerTimer(tickInterval_); startTimeoutManagerTimer(this->tickInterval_);
} }
void XFTimeoutManager::scheduleTimeout(int32_t timeoutId, int32_t interval, interface::XFBehavior *pBehavior) { 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); ::XFTimeout* timeout = new XFTimeout(timeoutId, interval, pBehavior);
addTimeout(timeout); addTimeout(timeout);
} }
void XFTimeoutManager::unscheduleTimeout(int32_t timeoutId, interface::XFBehavior *pBehavior) { void XFTimeoutManager::unscheduleTimeout(int32_t timeoutId, interface::XFBehavior *pBehavior) {
for(XFTimeout* timeout : timeouts_) { string str = "[DEBUG] - Unschedule Timeout: ";
bool id = ( timeout->getId() == timeoutId ); str += to_string(timeoutId);
bool behavior = ( timeout->getBehavior() == pBehavior); //Trace::out(str);
if( id && behavior ) { this->pMutex_->lock();
timeouts_.remove(timeout); TimeoutList::iterator it;
for(it = this->timeouts_.begin(); it != this->timeouts_.end(); it++){
if((*it)->getId()==timeoutId && (*it)->getBehavior() == pBehavior) {
it = this->timeouts_.erase(it);
} }
} }
this->pMutex_->unlock();
} }
void XFTimeoutManager::tick() { void XFTimeoutManager::tick() {
for(XFTimeout* timeout : timeouts_) { //Trace::out("[DEBUG] - Tick");
timeout->substractFromRelTicks(tickInterval_); if(!this->timeouts_.empty()) {
TimeoutList::iterator it;
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--;
}
}
this->pMutex_->unlock();
} }
} }

View File

@ -11,6 +11,8 @@
#define USE_XF_IDF_QT_EVENT_QUEUE_CLASS 1 #define USE_XF_IDF_QT_EVENT_QUEUE_CLASS 1
#define USE_XF_IDF_QT_MUTEX_CLASS 1 #define USE_XF_IDF_QT_MUTEX_CLASS 1
#define XF_TRACE_EVENT_PUSH_POP 1
#include "idf-qt/eventqueue.h" #include "idf-qt/eventqueue.h"
#endif // PORT_IDF_QT #endif // PORT_IDF_QT

View File

@ -0,0 +1,27 @@
<?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>

View File

@ -0,0 +1,27 @@
<?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>

View File

@ -0,0 +1,27 @@
<?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>

View File

@ -0,0 +1,27 @@
<?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>

View File

@ -0,0 +1,27 @@
<?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>