This commit is contained in:
QL 2019-04-15 21:45:52 -04:00
parent 4bcf22e87b
commit fcf6fdc6b7
53 changed files with 395 additions and 393 deletions

View File

@ -9,7 +9,7 @@
License Type: Windows Single User License
Licensed To : Quantum Leaps, LLC
License No. : WS2975 License Date: Dec 15, 2013
Build Date : Sep 2 2009 Run Date: Mar 28, 2019
Build Date : Sep 2 2009 Run Date: Apr 11, 2019
(C)1996-2009 M Squared Technologies LLC
________________________________________________________________________

View File

@ -93,7 +93,7 @@ Hierarchical state machines are represented in QP/C++ as subclasses of the @ref
<div class="separate"></div>
@subsection sm_state_decl The Q_STATE_DECL() Macro
The Q_STATE_DECL() macro declares **two** functions for every state: the "state-caller" **static member** function and the"state-handler" **regular member** function. So, for example, the declaration of the "on" state Q_STATE_DECL(on) expands to the following two declarations within the `Calc` class:
The Q_STATE_DECL() macro declares **two** functions for every state: the "state-handler" **regular member** function and the "state-caller" **static member** function. So, for example, the declaration of the "on" state Q_STATE_DECL(on) expands to the following two declarations within the `Calc` class:
@code{cpp}
[1] QP::QState on_h(QP::QEvt const * const e); // "state-handler"
@ -103,9 +103,9 @@ The Q_STATE_DECL() macro declares **two** functions for every state: the "state-
The two functions have each a different purpose.
<ul class="tag">
<li><span class="tag">1</span> The "state-caller" **static member** function is used as a unique "handle" for a state. Internally, the QEP event processor uses **function pointers** to state-callers, which are simple objects (e.g. 32-bit addresses in ARM Cortex-M CPUs). These simple function pointers can be compared quickly and stored efficiently inside the state machine objects.
<li><span class="tag">1</span> The "state-handler" `on_h()` is a **regular member** function used to implement the state behavior. As a regular class member, it has convenient, direct access to the state machine class attributes. The "state-handler" is called by the "state-caller".
</li>
<li><span class="tag">2</span> The "state-handler" **regular member** function is used to implement the state behavior. As a regular class member, it has convenient, direct access to the state machine class attributes. The "state-handler" is called by the "state-caller".
<li><span class="tag">2</span> The "state-caller" `on()` is a **static member** function that has a simple job to call the state-handler member function on the specified instance of the class. Internally, the QEP event processor uses "state-callers" as unique "handles" for the states. Specifically, the QEP event processor uses the simple **function pointers** to these `state-callers`, which are simple objects (e.g. 32-bit addresses in ARM Cortex-M CPUs), because they don't use the `this` calling convention. These simple function pointers can be stored very efficiently inside the state machine objects and can be compared quickly inside the QEP algorithm that implements the UML semantics of hierarchical state machines.
</li>
</ul>
@ -113,7 +113,7 @@ The two functions have each a different purpose.
@ref sm_call
@remark
Because the state-handler functions are regular members of the state machine class, they can be `virtual`, which allows them to be overridden in the subclasses of a given state machine class. Such **inheritance of entire sate machines** is an advanced feature, which should be used only in very special circumstances and with great caution. To declare a `virtual` state-handler, you simply prepend `virtual` in front of the Q_STATE_DECL() macro, as in the following examples:
Because the state-handler functions are regular members of the state machine class, they can be `virtual`, which allows them to be overridden in the subclasses of a given state machine class. Such **inheritance of entire sate machines** is an advanced concept, which should be used only in very special circumstances and with great caution. To declare a `virtual` state-handler, you simply prepend `virtual` in front of the Q_STATE_DECL() macro, as in the following examples:
@code{cpp}
virtual Q_STATE_DECL(on);
virtual Q_STATE_DECL(ready);
@ -134,15 +134,15 @@ Every state that has been declared with the @ref sm_decl "Q_STATE_DECL()" macro
@code{cpp}
[1] QP::QState Calc::ready(void * const me, QP::QEvt const * const e) {
return static_cast<Calc *>(me)->on_h(e);
return static_cast<Calc *>(me)->ready_h(e);
}
[2] QP::QState Calc::ready_h(QP::QEvt const * const e)
@endcode
<ul class="tag">
<li><span class="tag">1</span> The static `Calc::on()` state-caller function is fully defined to call the "state-handler" function on the provided `me` pointer, which is explicitly cast to the class instance.
<li><span class="tag">1</span> The static `Calc::ready()` state-caller function is fully defined to call the "state-handler" function on the provided `me` pointer, which is explicitly cast to the class instance.
</li>
<li><span class="tag">2</span> The signature of the `Calc::on_h()` "state-handler" member function is provided, which needs to be followed by the body (`{...}`) of the "state-handler" member function.
<li><span class="tag">2</span> The signature of the `Calc::ready_h()` "state-handler" member function is provided, which needs to be followed by the body (`{...}`) of the "state-handler" member function.
</li>
</ul>

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -234,7 +234,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -234,7 +234,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -231,7 +231,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QV kernel, GNU-ARM
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-03-31
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -231,7 +231,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,9 +1,9 @@
//$file${.::dpp.h} ###########################################################
//$file${.::dpp.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: dpp.qm
// File: ${.::dpp.h}
//
// This code has been generated by QM 4.3.1 (https://www.state-machine.com/qm).
// This code has been generated by QM 4.5.0 (https://www.state-machine.com/qm).
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This program is open source software: you can redistribute it and/or
@ -15,7 +15,7 @@
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
//$endhead${.::dpp.h} ########################################################
//$endhead${.::dpp.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#ifndef dpp_h
#define dpp_h
@ -35,7 +35,7 @@ enum DPPSignals {
} // namespace DPP
//$declare${Events::TableEvt} ################################################
//$declare${Events::TableEvt} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
//${Events::TableEvt} ........................................................
@ -45,42 +45,42 @@ public:
};
} // namespace DPP
//$enddecl${Events::TableEvt} ################################################
//$enddecl${Events::TableEvt} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// number of philosophers
#define N_PHILO ((uint8_t)5)
//$declare${AOs::AO_Philo[N_PHILO]} ##########################################
//$declare${AOs::AO_Philo[N_PHILO]} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
extern QP::QActive * const AO_Philo[N_PHILO];
} // namespace DPP
//$enddecl${AOs::AO_Philo[N_PHILO]} ##########################################
//$enddecl${AOs::AO_Philo[N_PHILO]} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${AOs::AO_Table} ###################################################
//$declare${AOs::AO_Table} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
extern QP::QActive * const AO_Table;
} // namespace DPP
//$enddecl${AOs::AO_Table} ###################################################
//$enddecl${AOs::AO_Table} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#ifdef qxk_h
//$declare${AOs::XT_Test1} ###################################################
//$declare${AOs::XT_Test1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
extern QP::QXThread * const XT_Test1;
} // namespace DPP
//$enddecl${AOs::XT_Test1} ###################################################
//$declare${AOs::XT_Test2} ###################################################
//$enddecl${AOs::XT_Test1} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${AOs::XT_Test2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
extern QP::QXThread * const XT_Test2;
} // namespace DPP
//$enddecl${AOs::XT_Test2} ###################################################
//$enddecl${AOs::XT_Test2} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#endif // qxk_h
#endif // dpp_h

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<model version="4.3.1" links="1">
<model version="4.5.0" links="1">
<documentation>Dining Philosopher Problem example with MSM state machines</documentation>
<!--${qpcpp}-->
<framework name="qpcpp"/>
@ -23,14 +23,14 @@
m_timeEvt(this, TIMEOUT_SIG, 0U)</code>
</operation>
<!--${AOs::Philo::SM}-->
<statechart>
<statechart properties="0x00">
<!--${AOs::Philo::SM::initial}-->
<initial target="../1">
<action>static bool registered = false; // starts off with 0, per C-standard
(void)e; // suppress the compiler warning about unused parameter
me-&gt;subscribe(EAT_SIG);
me-&gt;subscribe(TEST_SIG);
subscribe(EAT_SIG);
subscribe(TEST_SIG);
if (!registered) {
registered = true;
@ -47,16 +47,16 @@ if (!registered) {
QS_FUN_DICTIONARY(&amp;eating);
}
QS_SIG_DICTIONARY(HUNGRY_SIG, me); // signal for each Philos
QS_SIG_DICTIONARY(TIMEOUT_SIG, me); // signal for each Philos</action>
QS_SIG_DICTIONARY(HUNGRY_SIG, this); // signal for each Philos
QS_SIG_DICTIONARY(TIMEOUT_SIG, this); // signal for each Philos</action>
<initial_glyph conn="2,3,5,1,20,5,-3">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<!--${AOs::Philo::SM::thinking}-->
<state name="thinking">
<entry>me-&gt;m_timeEvt.armX(think_time(), 0U);</entry>
<exit>(void)me-&gt;m_timeEvt.disarm();</exit>
<entry>m_timeEvt.armX(think_time(), 0U);</entry>
<exit>(void)m_timeEvt.disarm();</exit>
<!--${AOs::Philo::SM::thinking::TIMEOUT}-->
<tran trig="TIMEOUT" target="../../2">
<tran_glyph conn="2,13,3,1,20,12,-3">
@ -65,8 +65,8 @@ QS_SIG_DICTIONARY(TIMEOUT_SIG, me); // signal for each Philos</action>
</tran>
<!--${AOs::Philo::SM::thinking::EAT, DONE}-->
<tran trig="EAT, DONE">
<action>/* EAT or DONE must be for other Philos than this one */
Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(me));</action>
<action>// EAT or DONE must be for other Philos than this one
Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(this));</action>
<tran_glyph conn="2,16,3,-1,13">
<action box="0,-2,14,2"/>
</tran_glyph>
@ -85,13 +85,13 @@ Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(me));</action>
<!--${AOs::Philo::SM::hungry}-->
<state name="hungry">
<entry>TableEvt *pe = Q_NEW(TableEvt, HUNGRY_SIG);
pe-&gt;philoNum = PHILO_ID(me);
AO_Table-&gt;POST(pe, me);</entry>
pe-&gt;philoNum = PHILO_ID(this);
AO_Table-&gt;POST(pe, this);</entry>
<!--${AOs::Philo::SM::hungry::EAT}-->
<tran trig="EAT">
<!--${AOs::Philo::SM::hungry::EAT::[Q_EVT_CAST(TableEvt)->philoNum=~}-->
<choice target="../../../3">
<guard>Q_EVT_CAST(TableEvt)-&gt;philoNum == PHILO_ID(me)</guard>
<guard>Q_EVT_CAST(TableEvt)-&gt;philoNum == PHILO_ID(this)</guard>
<choice_glyph conn="15,30,5,1,7,13,-3">
<action box="1,0,19,4"/>
</choice_glyph>
@ -103,7 +103,7 @@ AO_Table-&gt;POST(pe, me);</entry>
<!--${AOs::Philo::SM::hungry::DONE}-->
<tran trig="DONE">
<action>/* DONE must be for other Philos than this one */
Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(me));</action>
Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(this));</action>
<tran_glyph conn="2,36,3,-1,14">
<action box="0,-2,14,2"/>
</tran_glyph>
@ -114,11 +114,11 @@ Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(me));</action>
</state>
<!--${AOs::Philo::SM::eating}-->
<state name="eating">
<entry>me-&gt;m_timeEvt.armX(eat_time(), 0U);</entry>
<entry>m_timeEvt.armX(eat_time(), 0U);</entry>
<exit>TableEvt *pe = Q_NEW(TableEvt, DONE_SIG);
pe-&gt;philoNum = PHILO_ID(me);
QP::QF::PUBLISH(pe, me);
(void)me-&gt;m_timeEvt.disarm();</exit>
pe-&gt;philoNum = PHILO_ID(this);
QP::QF::PUBLISH(pe, this);
(void)m_timeEvt.disarm();</exit>
<!--${AOs::Philo::SM::eating::TIMEOUT}-->
<tran trig="TIMEOUT" target="../../1">
<tran_glyph conn="2,51,3,1,22,-41,-5">
@ -127,8 +127,8 @@ QP::QF::PUBLISH(pe, me);
</tran>
<!--${AOs::Philo::SM::eating::EAT, DONE}-->
<tran trig="EAT, DONE">
<action>/* EAT or DONE must be for other Philos than this one */
Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(me));</action>
<action>// EAT or DONE must be for other Philos than this one
Q_ASSERT(Q_EVT_CAST(TableEvt)-&gt;philoNum != PHILO_ID(this));</action>
<tran_glyph conn="2,55,3,-1,13">
<action box="0,-2,14,2"/>
</tran_glyph>
@ -157,19 +157,19 @@ for (uint8_t n = 0U; n &lt; N_PHILO; ++n) {
}</code>
</operation>
<!--${AOs::Table::SM}-->
<statechart properties="QS_FUN_DICT">
<statechart properties="0x02">
<!--${AOs::Table::SM::initial}-->
<initial target="../1/2">
<action>(void)e; // suppress the compiler warning about unused parameter
me-&gt;subscribe(DONE_SIG);
me-&gt;subscribe(PAUSE_SIG);
me-&gt;subscribe(SERVE_SIG);
me-&gt;subscribe(TEST_SIG);
subscribe(DONE_SIG);
subscribe(PAUSE_SIG);
subscribe(SERVE_SIG);
subscribe(TEST_SIG);
for (uint8_t n = 0U; n &lt; N_PHILO; ++n) {
me-&gt;m_fork[n] = FREE;
me-&gt;m_isHungry[n] = false;
m_fork[n] = FREE;
m_isHungry[n] = false;
BSP::displayPhilStat(n, THINKING);
}
@ -181,7 +181,7 @@ QS_SIG_DICTIONARY(SERVE_SIG, (void *)0);
QS_SIG_DICTIONARY(TEST_SIG, (void *)0);
// signals just for this AO...
QS_SIG_DICTIONARY(HUNGRY_SIG, me);</action>
QS_SIG_DICTIONARY(HUNGRY_SIG, this);</action>
<initial_glyph conn="3,3,5,1,45,18,-10">
<action box="0,-2,6,2"/>
</initial_glyph>
@ -204,16 +204,16 @@ QS_SIG_DICTIONARY(HUNGRY_SIG, me);</action>
<!--${AOs::Table::SM::active::serving}-->
<state name="serving">
<entry brief="give pending permitions to eat">for (uint8_t n = 0U; n &lt; N_PHILO; ++n) { // give permissions to eat...
if (me-&gt;m_isHungry[n]
&amp;&amp; (me-&gt;m_fork[LEFT(n)] == FREE)
&amp;&amp; (me-&gt;m_fork[n] == FREE))
if (m_isHungry[n]
&amp;&amp; (m_fork[LEFT(n)] == FREE)
&amp;&amp; (m_fork[n] == FREE))
{
me-&gt;m_fork[LEFT(n)] = USED;
me-&gt;m_fork[n] = USED;
m_fork[LEFT(n)] = USED;
m_fork[n] = USED;
TableEvt *te = Q_NEW(TableEvt, EAT_SIG);
te-&gt;philoNum = n;
QP::QF::PUBLISH(te, me);
me-&gt;m_isHungry[n] = false;
QP::QF::PUBLISH(te, this);
m_isHungry[n] = false;
BSP::displayPhilStat(n, EATING);
}
}</entry>
@ -221,18 +221,18 @@ QS_SIG_DICTIONARY(HUNGRY_SIG, me);</action>
<tran trig="HUNGRY">
<action>uint8_t n = Q_EVT_CAST(TableEvt)-&gt;philoNum;
// phil ID must be in range and he must be not hungry
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!me-&gt;m_isHungry[n]));
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!m_isHungry[n]));
BSP::displayPhilStat(n, HUNGRY);
uint8_t m = LEFT(n);</action>
<!--${AOs::Table::SM::active::serving::HUNGRY::[bothfree]}-->
<choice>
<guard brief="both free">(me-&gt;m_fork[m] == FREE) &amp;&amp; (me-&gt;m_fork[n] == FREE)</guard>
<action>me-&gt;m_fork[m] = USED;
me-&gt;m_fork[n] = USED;
<guard brief="both free">(m_fork[m] == FREE) &amp;&amp; (m_fork[n] == FREE)</guard>
<action>m_fork[m] = USED;
m_fork[n] = USED;
TableEvt *pe = Q_NEW(TableEvt, EAT_SIG);
pe-&gt;philoNum = n;
QP::QF::PUBLISH(pe, me);
QP::QF::PUBLISH(pe, this);
BSP::displayPhilStat(n, EATING);</action>
<choice_glyph conn="19,26,5,-1,10">
<action box="1,0,10,2"/>
@ -241,7 +241,7 @@ BSP::displayPhilStat(n, EATING);</action>
<!--${AOs::Table::SM::active::serving::HUNGRY::[else]}-->
<choice>
<guard>else</guard>
<action>me-&gt;m_isHungry[n] = true;</action>
<action>m_isHungry[n] = true;</action>
<choice_glyph conn="19,26,4,-1,5,10">
<action box="1,5,6,2"/>
</choice_glyph>
@ -254,35 +254,35 @@ BSP::displayPhilStat(n, EATING);</action>
<tran trig="DONE">
<action>uint8_t n = Q_EVT_CAST(TableEvt)-&gt;philoNum;
// phil ID must be in range and he must be not hungry
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!me-&gt;m_isHungry[n]));
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!m_isHungry[n]));
BSP::displayPhilStat(n, THINKING);
uint8_t m = LEFT(n);
// both forks of Phil[n] must be used
Q_ASSERT((me-&gt;m_fork[n] == USED) &amp;&amp; (me-&gt;m_fork[m] == USED));
Q_ASSERT((m_fork[n] == USED) &amp;&amp; (m_fork[m] == USED));
me-&gt;m_fork[m] = FREE;
me-&gt;m_fork[n] = FREE;
m_fork[m] = FREE;
m_fork[n] = FREE;
m = RIGHT(n); // check the right neighbor
if (me-&gt;m_isHungry[m] &amp;&amp; (me-&gt;m_fork[m] == FREE)) {
me-&gt;m_fork[n] = USED;
me-&gt;m_fork[m] = USED;
me-&gt;m_isHungry[m] = false;
if (m_isHungry[m] &amp;&amp; (m_fork[m] == FREE)) {
m_fork[n] = USED;
m_fork[m] = USED;
m_isHungry[m] = false;
TableEvt *pe = Q_NEW(TableEvt, EAT_SIG);
pe-&gt;philoNum = m;
QP::QF::PUBLISH(pe, me);
QP::QF::PUBLISH(pe, this);
BSP::displayPhilStat(m, EATING);
}
m = LEFT(n); // check the left neighbor
n = LEFT(m); // left fork of the left neighbor
if (me-&gt;m_isHungry[m] &amp;&amp; (me-&gt;m_fork[n] == FREE)) {
me-&gt;m_fork[m] = USED;
me-&gt;m_fork[n] = USED;
me-&gt;m_isHungry[m] = false;
if (m_isHungry[m] &amp;&amp; (m_fork[n] == FREE)) {
m_fork[m] = USED;
m_fork[n] = USED;
m_isHungry[m] = false;
TableEvt *pe = Q_NEW(TableEvt, EAT_SIG);
pe-&gt;philoNum = m;
QP::QF::PUBLISH(pe, me);
QP::QF::PUBLISH(pe, this);
BSP::displayPhilStat(m, EATING);
}</action>
<tran_glyph conn="4,34,3,-1,15">
@ -320,8 +320,8 @@ if (me-&gt;m_isHungry[m] &amp;&amp; (me-&gt;m_fork[n] == FREE)) {
<tran trig="HUNGRY">
<action>uint8_t n = Q_EVT_CAST(TableEvt)-&gt;philoNum;
// philo ID must be in range and he must be not hungry
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!me-&gt;m_isHungry[n]));
me-&gt;m_isHungry[n] = true;
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!m_isHungry[n]));
m_isHungry[n] = true;
BSP::displayPhilStat(n, HUNGRY);</action>
<tran_glyph conn="4,60,3,-1,15">
<action box="0,-2,6,2"/>
@ -331,15 +331,15 @@ BSP::displayPhilStat(n, HUNGRY);</action>
<tran trig="DONE">
<action>uint8_t n = Q_EVT_CAST(TableEvt)-&gt;philoNum;
// phil ID must be in range and he must be not hungry
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!me-&gt;m_isHungry[n]));
Q_ASSERT((n &lt; N_PHILO) &amp;&amp; (!m_isHungry[n]));
BSP::displayPhilStat(n, THINKING);
uint8_t m = LEFT(n);
/* both forks of Phil[n] must be used */
Q_ASSERT((me-&gt;m_fork[n] == USED) &amp;&amp; (me-&gt;m_fork[m] == USED));
Q_ASSERT((m_fork[n] == USED) &amp;&amp; (m_fork[m] == USED));
me-&gt;m_fork[m] = FREE;
me-&gt;m_fork[n] = FREE;</action>
m_fork[m] = FREE;
m_fork[n] = FREE;</action>
<tran_glyph conn="4,63,3,-1,15">
<action box="0,-2,6,2"/>
</tran_glyph>
@ -431,9 +431,9 @@ inline QP::QTimeEvtCtr eat_time() {
+ BSP::TICKS_PER_SEC);
}
// helper function to provide the ID of Philo &quot;me&quot;
inline uint8_t PHILO_ID(Philo const * const me) {
return static_cast&lt;uint8_t&gt;(me - l_philo);
// helper function to provide the ID of Philo
inline uint8_t PHILO_ID(Philo const * const philo) {
return static_cast&lt;uint8_t&gt;(philo - l_philo);
}
enum InternalSignals { // internal signals

View File

@ -1,9 +1,9 @@
//$file${.::philo.cpp} #######################################################
//$file${.::philo.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: dpp.qm
// File: ${.::philo.cpp}
//
// This code has been generated by QM 4.3.1 (https://www.state-machine.com/qm).
// This code has been generated by QM 4.5.0 (https://www.state-machine.com/qm).
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This program is open source software: you can redistribute it and/or
@ -15,7 +15,7 @@
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
//$endhead${.::philo.cpp} ####################################################
//$endhead${.::philo.cpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#include "qpcpp.h"
#include "dpp.h"
#include "bsp.h"
@ -23,7 +23,7 @@
Q_DEFINE_THIS_FILE
// Active object class -------------------------------------------------------
//$declare${AOs::Philo} ######################################################
//$declare${AOs::Philo} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
//${AOs::Philo} ..............................................................
@ -35,14 +35,14 @@ public:
Philo();
protected:
static QP::QState initial(Philo * const me, QP::QEvt const * const e);
static QP::QState thinking(Philo * const me, QP::QEvt const * const e);
static QP::QState hungry(Philo * const me, QP::QEvt const * const e);
static QP::QState eating(Philo * const me, QP::QEvt const * const e);
Q_STATE_DECL(initial);
Q_STATE_DECL(thinking);
Q_STATE_DECL(hungry);
Q_STATE_DECL(eating);
};
} // namespace DPP
//$enddecl${AOs::Philo} ######################################################
//$enddecl${AOs::Philo} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
namespace DPP {
@ -61,9 +61,9 @@ inline QP::QTimeEvtCtr eat_time() {
+ BSP::TICKS_PER_SEC);
}
// helper function to provide the ID of Philo "me"
inline uint8_t PHILO_ID(Philo const * const me) {
return static_cast<uint8_t>(me - l_philo);
// helper function to provide the ID of Philo
inline uint8_t PHILO_ID(Philo const * const philo) {
return static_cast<uint8_t>(philo - l_philo);
}
enum InternalSignals { // internal signals
@ -82,12 +82,13 @@ QP::QActive * const AO_Philo[N_PHILO] = { // "opaque" pointers to Philo AO
} // namespace DPP
// Philo definition ----------------------------------------------------------
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 630U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpcpp version 6.3.0 or higher required
#if (QP_VERSION < 650U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpcpp version 6.5.0 or higher required
#endif
//$define${AOs::Philo} #######################################################
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${AOs::Philo} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
//${AOs::Philo} ..............................................................
@ -98,13 +99,13 @@ Philo::Philo()
{}
//${AOs::Philo::SM} ..........................................................
QP::QState Philo::initial(Philo * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Philo, initial) {
//${AOs::Philo::SM::initial}
static bool registered = false; // starts off with 0, per C-standard
(void)e; // suppress the compiler warning about unused parameter
me->subscribe(EAT_SIG);
me->subscribe(TEST_SIG);
subscribe(EAT_SIG);
subscribe(TEST_SIG);
if (!registered) {
registered = true;
@ -121,122 +122,122 @@ QP::QState Philo::initial(Philo * const me, QP::QEvt const * const e) {
QS_FUN_DICTIONARY(&eating);
}
QS_SIG_DICTIONARY(HUNGRY_SIG, me); // signal for each Philos
QS_SIG_DICTIONARY(TIMEOUT_SIG, me); // signal for each Philos
return Q_TRAN(&thinking);
QS_SIG_DICTIONARY(HUNGRY_SIG, this); // signal for each Philos
QS_SIG_DICTIONARY(TIMEOUT_SIG, this); // signal for each Philos
return tran(&thinking);
}
//${AOs::Philo::SM::thinking} ................................................
QP::QState Philo::thinking(Philo * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Philo, thinking) {
QP::QState status_;
switch (e->sig) {
//${AOs::Philo::SM::thinking}
case Q_ENTRY_SIG: {
me->m_timeEvt.armX(think_time(), 0U);
status_ = Q_HANDLED();
m_timeEvt.armX(think_time(), 0U);
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Philo::SM::thinking}
case Q_EXIT_SIG: {
(void)me->m_timeEvt.disarm();
status_ = Q_HANDLED();
(void)m_timeEvt.disarm();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Philo::SM::thinking::TIMEOUT}
case TIMEOUT_SIG: {
status_ = Q_TRAN(&hungry);
status_ = tran(&hungry);
break;
}
//${AOs::Philo::SM::thinking::EAT, DONE}
case EAT_SIG: // intentionally fall through
case DONE_SIG: {
/* EAT or DONE must be for other Philos than this one */
Q_ASSERT(Q_EVT_CAST(TableEvt)->philoNum != PHILO_ID(me));
status_ = Q_HANDLED();
// EAT or DONE must be for other Philos than this one
Q_ASSERT(Q_EVT_CAST(TableEvt)->philoNum != PHILO_ID(this));
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Philo::SM::thinking::TEST}
case TEST_SIG: {
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
default: {
status_ = Q_SUPER(&top);
status_ = super(&top);
break;
}
}
return status_;
}
//${AOs::Philo::SM::hungry} ..................................................
QP::QState Philo::hungry(Philo * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Philo, hungry) {
QP::QState status_;
switch (e->sig) {
//${AOs::Philo::SM::hungry}
case Q_ENTRY_SIG: {
TableEvt *pe = Q_NEW(TableEvt, HUNGRY_SIG);
pe->philoNum = PHILO_ID(me);
AO_Table->POST(pe, me);
status_ = Q_HANDLED();
pe->philoNum = PHILO_ID(this);
AO_Table->POST(pe, this);
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Philo::SM::hungry::EAT}
case EAT_SIG: {
//${AOs::Philo::SM::hungry::EAT::[Q_EVT_CAST(TableEvt)->philoNum=~}
if (Q_EVT_CAST(TableEvt)->philoNum == PHILO_ID(me)) {
status_ = Q_TRAN(&eating);
if (Q_EVT_CAST(TableEvt)->philoNum == PHILO_ID(this)) {
status_ = tran(&eating);
}
else {
status_ = Q_UNHANDLED();
status_ = Q_RET_UNHANDLED;
}
break;
}
//${AOs::Philo::SM::hungry::DONE}
case DONE_SIG: {
/* DONE must be for other Philos than this one */
Q_ASSERT(Q_EVT_CAST(TableEvt)->philoNum != PHILO_ID(me));
status_ = Q_HANDLED();
Q_ASSERT(Q_EVT_CAST(TableEvt)->philoNum != PHILO_ID(this));
status_ = Q_RET_HANDLED;
break;
}
default: {
status_ = Q_SUPER(&top);
status_ = super(&top);
break;
}
}
return status_;
}
//${AOs::Philo::SM::eating} ..................................................
QP::QState Philo::eating(Philo * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Philo, eating) {
QP::QState status_;
switch (e->sig) {
//${AOs::Philo::SM::eating}
case Q_ENTRY_SIG: {
me->m_timeEvt.armX(eat_time(), 0U);
status_ = Q_HANDLED();
m_timeEvt.armX(eat_time(), 0U);
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Philo::SM::eating}
case Q_EXIT_SIG: {
TableEvt *pe = Q_NEW(TableEvt, DONE_SIG);
pe->philoNum = PHILO_ID(me);
QP::QF::PUBLISH(pe, me);
(void)me->m_timeEvt.disarm();
status_ = Q_HANDLED();
pe->philoNum = PHILO_ID(this);
QP::QF::PUBLISH(pe, this);
(void)m_timeEvt.disarm();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Philo::SM::eating::TIMEOUT}
case TIMEOUT_SIG: {
status_ = Q_TRAN(&thinking);
status_ = tran(&thinking);
break;
}
//${AOs::Philo::SM::eating::EAT, DONE}
case EAT_SIG: // intentionally fall through
case DONE_SIG: {
/* EAT or DONE must be for other Philos than this one */
Q_ASSERT(Q_EVT_CAST(TableEvt)->philoNum != PHILO_ID(me));
status_ = Q_HANDLED();
// EAT or DONE must be for other Philos than this one
Q_ASSERT(Q_EVT_CAST(TableEvt)->philoNum != PHILO_ID(this));
status_ = Q_RET_HANDLED;
break;
}
default: {
status_ = Q_SUPER(&top);
status_ = super(&top);
break;
}
}
@ -244,4 +245,4 @@ QP::QState Philo::eating(Philo * const me, QP::QEvt const * const e) {
}
} // namespace DPP
//$enddef${AOs::Philo} #######################################################
//$enddef${AOs::Philo} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -236,7 +236,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -237,7 +237,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QXK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -241,7 +241,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QXK kernel, GNU-ARM + RTTI
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -241,7 +241,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS) -lsupc++

View File

@ -1,9 +1,9 @@
//$file${.::table.cpp} #######################################################
//$file${.::table.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: dpp.qm
// File: ${.::table.cpp}
//
// This code has been generated by QM 4.3.1 (https://www.state-machine.com/qm).
// This code has been generated by QM 4.5.0 (https://www.state-machine.com/qm).
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This program is open source software: you can redistribute it and/or
@ -15,7 +15,7 @@
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
//$endhead${.::table.cpp} ####################################################
//$endhead${.::table.cpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#include "qpcpp.h"
#include "dpp.h"
#include "bsp.h"
@ -23,7 +23,7 @@
Q_DEFINE_THIS_FILE
// Active object class -------------------------------------------------------
//$declare${AOs::Table} ######################################################
//$declare${AOs::Table} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
//${AOs::Table} ..............................................................
@ -36,14 +36,14 @@ public:
Table();
protected:
static QP::QState initial(Table * const me, QP::QEvt const * const e);
static QP::QState active(Table * const me, QP::QEvt const * const e);
static QP::QState serving(Table * const me, QP::QEvt const * const e);
static QP::QState paused(Table * const me, QP::QEvt const * const e);
Q_STATE_DECL(initial);
Q_STATE_DECL(active);
Q_STATE_DECL(serving);
Q_STATE_DECL(paused);
};
} // namespace DPP
//$enddecl${AOs::Table} ######################################################
//$enddecl${AOs::Table} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
namespace DPP {
@ -73,12 +73,13 @@ QP::QActive * const AO_Table = &l_table; // "opaque" AO pointer
} // namespace DPP
//............................................................................
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 630U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpcpp version 6.3.0 or higher required
#if (QP_VERSION < 650U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpcpp version 6.5.0 or higher required
#endif
//$define${AOs::Table} #######################################################
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${AOs::Table} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace DPP {
//${AOs::Table} ..............................................................
@ -93,18 +94,18 @@ Table::Table()
}
//${AOs::Table::SM} ..........................................................
QP::QState Table::initial(Table * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Table, initial) {
//${AOs::Table::SM::initial}
(void)e; // suppress the compiler warning about unused parameter
me->subscribe(DONE_SIG);
me->subscribe(PAUSE_SIG);
me->subscribe(SERVE_SIG);
me->subscribe(TEST_SIG);
subscribe(DONE_SIG);
subscribe(PAUSE_SIG);
subscribe(SERVE_SIG);
subscribe(TEST_SIG);
for (uint8_t n = 0U; n < N_PHILO; ++n) {
me->m_fork[n] = FREE;
me->m_isHungry[n] = false;
m_fork[n] = FREE;
m_isHungry[n] = false;
BSP::displayPhilStat(n, THINKING);
}
@ -116,81 +117,81 @@ QP::QState Table::initial(Table * const me, QP::QEvt const * const e) {
QS_SIG_DICTIONARY(TEST_SIG, (void *)0);
// signals just for this AO...
QS_SIG_DICTIONARY(HUNGRY_SIG, me);
QS_SIG_DICTIONARY(HUNGRY_SIG, this);
QS_FUN_DICTIONARY(&active);
QS_FUN_DICTIONARY(&serving);
QS_FUN_DICTIONARY(&paused);
return Q_TRAN(&serving);
return tran(&serving);
}
//${AOs::Table::SM::active} ..................................................
QP::QState Table::active(Table * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Table, active) {
QP::QState status_;
switch (e->sig) {
//${AOs::Table::SM::active::TEST}
case TEST_SIG: {
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Table::SM::active::EAT}
case EAT_SIG: {
Q_ERROR();
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
default: {
status_ = Q_SUPER(&top);
status_ = super(&top);
break;
}
}
return status_;
}
//${AOs::Table::SM::active::serving} .........................................
QP::QState Table::serving(Table * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Table, serving) {
QP::QState status_;
switch (e->sig) {
//${AOs::Table::SM::active::serving}
case Q_ENTRY_SIG: {
for (uint8_t n = 0U; n < N_PHILO; ++n) { // give permissions to eat...
if (me->m_isHungry[n]
&& (me->m_fork[LEFT(n)] == FREE)
&& (me->m_fork[n] == FREE))
if (m_isHungry[n]
&& (m_fork[LEFT(n)] == FREE)
&& (m_fork[n] == FREE))
{
me->m_fork[LEFT(n)] = USED;
me->m_fork[n] = USED;
m_fork[LEFT(n)] = USED;
m_fork[n] = USED;
TableEvt *te = Q_NEW(TableEvt, EAT_SIG);
te->philoNum = n;
QP::QF::PUBLISH(te, me);
me->m_isHungry[n] = false;
QP::QF::PUBLISH(te, this);
m_isHungry[n] = false;
BSP::displayPhilStat(n, EATING);
}
}
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Table::SM::active::serving::HUNGRY}
case HUNGRY_SIG: {
uint8_t n = Q_EVT_CAST(TableEvt)->philoNum;
// phil ID must be in range and he must be not hungry
Q_ASSERT((n < N_PHILO) && (!me->m_isHungry[n]));
Q_ASSERT((n < N_PHILO) && (!m_isHungry[n]));
BSP::displayPhilStat(n, HUNGRY);
uint8_t m = LEFT(n);
//${AOs::Table::SM::active::serving::HUNGRY::[bothfree]}
if ((me->m_fork[m] == FREE) && (me->m_fork[n] == FREE)) {
me->m_fork[m] = USED;
me->m_fork[n] = USED;
if ((m_fork[m] == FREE) && (m_fork[n] == FREE)) {
m_fork[m] = USED;
m_fork[n] = USED;
TableEvt *pe = Q_NEW(TableEvt, EAT_SIG);
pe->philoNum = n;
QP::QF::PUBLISH(pe, me);
QP::QF::PUBLISH(pe, this);
BSP::displayPhilStat(n, EATING);
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
}
//${AOs::Table::SM::active::serving::HUNGRY::[else]}
else {
me->m_isHungry[n] = true;
status_ = Q_HANDLED();
m_isHungry[n] = true;
status_ = Q_RET_HANDLED;
}
break;
}
@ -198,107 +199,107 @@ QP::QState Table::serving(Table * const me, QP::QEvt const * const e) {
case DONE_SIG: {
uint8_t n = Q_EVT_CAST(TableEvt)->philoNum;
// phil ID must be in range and he must be not hungry
Q_ASSERT((n < N_PHILO) && (!me->m_isHungry[n]));
Q_ASSERT((n < N_PHILO) && (!m_isHungry[n]));
BSP::displayPhilStat(n, THINKING);
uint8_t m = LEFT(n);
// both forks of Phil[n] must be used
Q_ASSERT((me->m_fork[n] == USED) && (me->m_fork[m] == USED));
Q_ASSERT((m_fork[n] == USED) && (m_fork[m] == USED));
me->m_fork[m] = FREE;
me->m_fork[n] = FREE;
m_fork[m] = FREE;
m_fork[n] = FREE;
m = RIGHT(n); // check the right neighbor
if (me->m_isHungry[m] && (me->m_fork[m] == FREE)) {
me->m_fork[n] = USED;
me->m_fork[m] = USED;
me->m_isHungry[m] = false;
if (m_isHungry[m] && (m_fork[m] == FREE)) {
m_fork[n] = USED;
m_fork[m] = USED;
m_isHungry[m] = false;
TableEvt *pe = Q_NEW(TableEvt, EAT_SIG);
pe->philoNum = m;
QP::QF::PUBLISH(pe, me);
QP::QF::PUBLISH(pe, this);
BSP::displayPhilStat(m, EATING);
}
m = LEFT(n); // check the left neighbor
n = LEFT(m); // left fork of the left neighbor
if (me->m_isHungry[m] && (me->m_fork[n] == FREE)) {
me->m_fork[m] = USED;
me->m_fork[n] = USED;
me->m_isHungry[m] = false;
if (m_isHungry[m] && (m_fork[n] == FREE)) {
m_fork[m] = USED;
m_fork[n] = USED;
m_isHungry[m] = false;
TableEvt *pe = Q_NEW(TableEvt, EAT_SIG);
pe->philoNum = m;
QP::QF::PUBLISH(pe, me);
QP::QF::PUBLISH(pe, this);
BSP::displayPhilStat(m, EATING);
}
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Table::SM::active::serving::EAT}
case EAT_SIG: {
Q_ERROR();
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Table::SM::active::serving::PAUSE}
case PAUSE_SIG: {
status_ = Q_TRAN(&paused);
status_ = tran(&paused);
break;
}
default: {
status_ = Q_SUPER(&active);
status_ = super(&active);
break;
}
}
return status_;
}
//${AOs::Table::SM::active::paused} ..........................................
QP::QState Table::paused(Table * const me, QP::QEvt const * const e) {
Q_STATE_DEF(Table, paused) {
QP::QState status_;
switch (e->sig) {
//${AOs::Table::SM::active::paused}
case Q_ENTRY_SIG: {
BSP::displayPaused(1U);
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Table::SM::active::paused}
case Q_EXIT_SIG: {
BSP::displayPaused(0U);
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Table::SM::active::paused::SERVE}
case SERVE_SIG: {
status_ = Q_TRAN(&serving);
status_ = tran(&serving);
break;
}
//${AOs::Table::SM::active::paused::HUNGRY}
case HUNGRY_SIG: {
uint8_t n = Q_EVT_CAST(TableEvt)->philoNum;
// philo ID must be in range and he must be not hungry
Q_ASSERT((n < N_PHILO) && (!me->m_isHungry[n]));
me->m_isHungry[n] = true;
Q_ASSERT((n < N_PHILO) && (!m_isHungry[n]));
m_isHungry[n] = true;
BSP::displayPhilStat(n, HUNGRY);
status_ = Q_HANDLED();
status_ = Q_RET_HANDLED;
break;
}
//${AOs::Table::SM::active::paused::DONE}
case DONE_SIG: {
uint8_t n = Q_EVT_CAST(TableEvt)->philoNum;
// phil ID must be in range and he must be not hungry
Q_ASSERT((n < N_PHILO) && (!me->m_isHungry[n]));
Q_ASSERT((n < N_PHILO) && (!m_isHungry[n]));
BSP::displayPhilStat(n, THINKING);
uint8_t m = LEFT(n);
/* both forks of Phil[n] must be used */
Q_ASSERT((me->m_fork[n] == USED) && (me->m_fork[m] == USED));
Q_ASSERT((m_fork[n] == USED) && (m_fork[m] == USED));
me->m_fork[m] = FREE;
me->m_fork[n] = FREE;
status_ = Q_HANDLED();
m_fork[m] = FREE;
m_fork[n] = FREE;
status_ = Q_RET_HANDLED;
break;
}
default: {
status_ = Q_SUPER(&active);
status_ = super(&active);
break;
}
}
@ -306,4 +307,4 @@ QP::QState Table::paused(Table * const me, QP::QEvt const * const e) {
}
} // namespace DPP
//$enddef${AOs::Table} #######################################################
//$enddef${AOs::Table} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QXK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -236,7 +236,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on mbed-LPC1768, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on mbed-LPC1768, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on NUCLEO-H743ZI, QXK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -246,7 +246,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32F746G-Discovery, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -246,7 +246,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on NUCLEO-H743ZI, QXK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -250,7 +250,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32 NUCLEO-L053R8, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32 NUCLEO-L053R8, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on NUCLEO-L053R8, QXK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -236,7 +236,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32 NUCLEO-L152RE, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32 NUCLEO-L152RE, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32F4-Discovery, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -237,7 +237,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32F4-Discovery, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -237,7 +237,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32F4-Discovery, QXK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -241,7 +241,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32F746G-Discovery, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -245,7 +245,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for DPP on STM32F746G-Discovery, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -245,7 +245,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32F746G-Discovery, QXK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -250,7 +250,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -246,7 +246,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EMF32-SLSTK3401A, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -246,7 +246,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QK kernel, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-23
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2010 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QV kernel, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-23
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -232,7 +232,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, QXK kernel, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-23
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -235,7 +235,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, FreeRTOS kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -242,7 +242,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on NUCLEO-H743ZI, FreeRTOS, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -255,7 +255,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32F746G-Discovery, FreeRTOS, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -255,7 +255,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for QP/C++ on NUCLEO-H743ZI, FreeRTOS, GNU-ARM
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-03-22
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -255,7 +255,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++, lwIP on EK-LM3S6965, QK kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -239,7 +239,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++, lwIP on EK-LM3S6965, QV kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -239,7 +239,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for EMF32, QUTEST, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-24
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -218,7 +218,7 @@ CPPFLAGS = -c -g $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)
ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS)))

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on TM4C123, QUTEST, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-24
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -216,7 +216,7 @@ CPPFLAGS = -c -g $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)
ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS)))

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for EMF32, QUTEST, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-24
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -220,7 +220,7 @@ CPPFLAGS = -c -g $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)
ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS)))

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for TM4C123, QUTEST, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-24
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -218,7 +218,7 @@ CPPFLAGS = -c -g $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)
ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS)))

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for TM4C123, QUTEST, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-24
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -215,7 +215,7 @@ CPPFLAGS = -c -g $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)
ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS)))

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for TM4C123, QUTEST, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-24
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -215,7 +215,7 @@ CPPFLAGS = -c -g $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)
ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS)))

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for TM4C123, QUTEST, GNU-ARM
# Last Updated for Version: 6.4.0
# Date of the Last Update: 2019-02-24
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
@ -215,7 +215,7 @@ CPPFLAGS = -c -g $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)
ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS)))

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on EK-TM4C123GXL, uC/OS-II kernel, GNU-ARM
# Last Updated for Version: 6.3.8
# Date of the Last Update: 2018-12-26
# Last Updated for Version: 6.5.0
# Date of the Last Update: 2019-04-15
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
@ -247,7 +247,7 @@ endif # ......................................................................
LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \
-specs=nosys.specs \
-specs=nosys.specs -specs=nano.specs \
-Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS)