51 #include "qs_dummy.hpp"
56Q_DEFINE_THIS_MODULE(
"qf_time")
61#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
62#error qpcpp version 7.3.0 or higher required
76 std::uint_fast8_t
const tickRate) noexcept
92 refCtr_ =
static_cast<std::uint8_t
>(tickRate);
103 std::uint_fast8_t
const qsId =
104 static_cast<QActive const *
>(m_act)->m_prio;
121 m_interval = interval;
127 if (
static_cast<std::uint_fast8_t
>(
128 static_cast<std::uint_fast8_t
>(refCtr_) &
TE_IS_LINKED) == 0U)
131 refCtr_ =
static_cast<std::uint8_t
>(refCtr_ |
TE_IS_LINKED);
139 m_next = timeEvtHead_[tickRate].toTimeEvt();
140 timeEvtHead_[tickRate].m_act =
this;
148 QS_TEC_PRE_(interval);
149 QS_U8_PRE_(tickRate);
159 std::uint_fast8_t
const qsId =
static_cast<QActive *
>(
m_act)->m_prio;
186 &
static_cast<std::uint8_t
>(~TE_WAS_DISARMED));
207 std::uint_fast8_t
const qsId =
static_cast<QActive *
>(m_act)->m_prio;
230 if (
static_cast<std::uint8_t
>(refCtr_ &
TE_IS_LINKED) == 0U) {
232 refCtr_ =
static_cast<std::uint8_t
>(refCtr_ |
TE_IS_LINKED);
240 m_next = timeEvtHead_[tickRate].toTimeEvt();
241 timeEvtHead_[tickRate].m_act =
this;
254 QS_TEC_PRE_(m_interval);
255 QS_2U8_PRE_(tickRate, (wasArmed ? 1U : 0U));
276 return isDisarmed != 0U;
281 std::uint_fast8_t
const tickRate,
282 void const *
const sender)
noexcept
294 QTimeEvt *prev = &timeEvtHead_[tickRate];
298 QS_TEC_PRE_(prev->
m_ctr);
299 QS_U8_PRE_(tickRate);
304 for (; limit > 0U; --limit) {
310 if (timeEvtHead_[tickRate].m_act !=
nullptr) {
315 timeEvtHead_[tickRate].
m_act =
nullptr;
326 if (e->
m_ctr == 0U) {
330 &
static_cast<std::uint8_t
>(~TE_IS_LINKED));
348 if (e->
m_ctr == 0U) {
360 &
static_cast<std::uint8_t
>(~TE_IS_LINKED));
366 QS_U8_PRE_(tickRate);
375 QS_U8_PRE_(tickRate);
389 act->POST(e, sender);
396 act->POST(e, sender);
426 if (timeEvtHead_[tickRate].m_next !=
nullptr) {
429 else if (timeEvtHead_[tickRate].m_act !=
nullptr) {
Active object class (based on the QHsm implementation strategy)
std::uint8_t volatile refCtr_
static bool verify_(QEvt const *const e) noexcept
static QTimeEvt timeEvtHead_[QF_MAX_TICK_RATE]
static bool noActive(std::uint_fast8_t const tickRate) noexcept
QTimeEvt * toTimeEvt() noexcept
QTimeEvt *volatile m_next
static void tick(std::uint_fast8_t const tickRate, void const *const sender) noexcept
QTimeEvtCtr volatile m_ctr
bool wasDisarmed() noexcept
QActive * toActive() noexcept
bool rearm(QTimeEvtCtr const nTicks) noexcept
void armX(QTimeEvtCtr const nTicks, QTimeEvtCtr const interval=0U) noexcept
static void timeout_(QActive *const act)
constexpr enum_t Q_USER_SIG
constexpr std::uint8_t TE_IS_LINKED
constexpr std::uint8_t TE_WAS_DISARMED
std::uint32_t QTimeEvtCtr
constexpr std::uint8_t TE_TICK_RATE
@ QS_QF_TICK
QTimeEvt tick was called.
@ QS_QF_TIMEEVT_ARM
a time event was armed
@ QS_QF_TIMEEVT_POST
a time event posted itself directly to an AO
@ QS_QF_TIMEEVT_AUTO_DISARM
a time event expired and was disarmed
@ QS_QF_TIMEEVT_REARM
rearming of a time event
@ QS_QF_TIMEEVT_DISARM
true disarming of an armed time event
@ QS_QF_TIMEEVT_DISARM_ATTEMPT
attempt to disarm a disarmed QTimeEvt
#define Q_UNUSED_PAR(par_)
#define QF_CRIT_EXIT_NOP()
Internal (package scope) QP/C++ interface.
QS/C++ package-scope interface.
QS/C++ port to a 32-bit CPU, generic C++ compiler.
QP Functional Safety (FuSa) Subsystem.
#define Q_ASSERT_INCRIT(id_, expr_)
#define Q_ENSURE_INCRIT(id_, expr_)
#define Q_REQUIRE_INCRIT(id_, expr_)