SPI HAL implemented and more (#207)
- Cleanup unused code and move ISR/IRQ checks to `Kernel.h` - Improve clang-format - Fix for LVGL lock transfer: ensure lock isn't activate when changing the lock - Implement SPI HAL - Remove `initHardware` HAL configuration entry - Fix `I2cScanner`: don't scan when port isn't started
This commit is contained in:
committed by
GitHub
parent
88b3bfbe3e
commit
c1f55429b6
@@ -2,36 +2,8 @@
|
||||
|
||||
#include "CoreExtraDefines.h"
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
#else
|
||||
#include "portmacro.h"
|
||||
#endif
|
||||
|
||||
#define TT_RETURNS_NONNULL __attribute__((returns_nonnull))
|
||||
|
||||
#define TT_WARN_UNUSED __attribute__((warn_unused_result))
|
||||
|
||||
#define TT_UNUSED __attribute__((unused))
|
||||
|
||||
#define TT_WEAK __attribute__((weak))
|
||||
|
||||
#define TT_PACKED __attribute__((packed))
|
||||
|
||||
#define TT_PLACE_IN_SECTION(x) __attribute__((section(x)))
|
||||
|
||||
#define TT_ALIGN(n) __attribute__((aligned(n)))
|
||||
|
||||
// Used by portENABLE_INTERRUPTS and portDISABLE_INTERRUPTS?
|
||||
#ifdef ESP_PLATFORM
|
||||
#define TT_IS_IRQ_MODE() (xPortInIsrContext() == pdTRUE)
|
||||
#else
|
||||
#define TT_IS_IRQ_MODE() false
|
||||
#endif
|
||||
|
||||
#define TT_IS_ISR() (TT_IS_IRQ_MODE())
|
||||
|
||||
#define TT_CHECK_RETURN __attribute__((__warn_unused_result__))
|
||||
|
||||
// region Variable arguments support
|
||||
|
||||
// Adapted from https://stackoverflow.com/a/78848701/3848666
|
||||
|
||||
@@ -37,13 +37,24 @@ public:
|
||||
ErrorISR = 0xFFFFFFFAU, ///< TtStatusErrorISR (-6).
|
||||
};
|
||||
|
||||
/** Set the bitmask for 1 or more flags that we might be waiting for */
|
||||
uint32_t set(uint32_t flags) const;
|
||||
|
||||
/** Clear the specified flags */
|
||||
uint32_t clear(uint32_t flags) const;
|
||||
|
||||
/** Get the currently set flags */
|
||||
uint32_t get() const;
|
||||
|
||||
/** Await for flags to be set
|
||||
* @param[in] flags the bitmask of the flags that we want to wait for
|
||||
* @param[in] options the trigger behaviour: WaitAny, WaitAll, NoClear (NoClear can be combined with either WaitAny or WaitAll)
|
||||
* @param[in] timeoutTicks the maximum amount of ticks to wait
|
||||
*/
|
||||
uint32_t wait(
|
||||
uint32_t flags,
|
||||
uint32_t options = WaitAny,
|
||||
uint32_t timeout = (uint32_t)portMAX_DELAY
|
||||
uint32_t timeoutTicks = (uint32_t)portMAX_DELAY
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
@@ -22,6 +22,6 @@ void log(LogLevel level, const char* tag, const char* format, ...);
|
||||
#define TT_LOG_D(tag, format, ...) \
|
||||
tt::log(tt::LogLevel::Debug, tag, format, ##__VA_ARGS__)
|
||||
#define TT_LOG_V(tag, format, ...) \
|
||||
tt::log(tt::LogLevel::Trace, tag, format, ##__VA_ARGS__)
|
||||
tt::log(tt::LogLevel::Verbose, tag, format, ##__VA_ARGS__)
|
||||
|
||||
#endif // ESP_PLATFORM
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "RtosCompatSemaphore.h"
|
||||
#include "Check.h"
|
||||
#include "Lockable.h"
|
||||
#include "kernel/Kernel.h"
|
||||
#include <memory>
|
||||
|
||||
namespace tt {
|
||||
@@ -29,7 +30,7 @@ private:
|
||||
|
||||
struct SemaphoreHandleDeleter {
|
||||
void operator()(QueueHandle_t handleToDelete) {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
vSemaphoreDelete(handleToDelete);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "kernel/Kernel.h"
|
||||
#include "Lockable.h"
|
||||
#include <cassert>
|
||||
#include <memory>
|
||||
@@ -24,7 +25,7 @@ private:
|
||||
|
||||
struct SemaphoreHandleDeleter {
|
||||
void operator()(QueueHandle_t handleToDelete) {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
vSemaphoreDelete(handleToDelete);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -42,6 +42,7 @@ std::string join(const std::vector<std::string>& input, const std::string& delim
|
||||
|
||||
/**
|
||||
* Returns the lowercase value of a string.
|
||||
* @warning This only works for strings with 1 byte per character
|
||||
* @param[in] the string with lower and/or uppercase characters
|
||||
* @return a string with only lowercase characters
|
||||
*/
|
||||
|
||||
@@ -14,6 +14,13 @@ typedef enum {
|
||||
PlatformSimulator
|
||||
} Platform;
|
||||
|
||||
/** Return true when called from an Interrupt Service Routine (~IRQ mode) */
|
||||
#ifdef ESP_PLATFORM
|
||||
inline constexpr bool isIsr() { return (xPortInIsrContext() == pdTRUE); }
|
||||
#else
|
||||
inline constexpr bool isIsr() { return false; }
|
||||
#endif
|
||||
|
||||
/** Check if kernel is running
|
||||
* @return true if the FreeRTOS kernel is running, false otherwise
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "Tactility/EventFlag.h"
|
||||
|
||||
#include "Tactility/Check.h"
|
||||
#include "Tactility/CoreDefines.h"
|
||||
#include "Tactility/kernel/Kernel.h"
|
||||
|
||||
#define TT_EVENT_FLAG_MAX_BITS_EVENT_GROUPS 24U
|
||||
#define TT_EVENT_FLAG_INVALID_BITS (~((1UL << TT_EVENT_FLAG_MAX_BITS_EVENT_GROUPS) - 1U))
|
||||
@@ -11,12 +11,12 @@ namespace tt {
|
||||
EventFlag::EventFlag() :
|
||||
handle(xEventGroupCreate())
|
||||
{
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
tt_check(handle);
|
||||
}
|
||||
|
||||
EventFlag::~EventFlag() {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
}
|
||||
|
||||
uint32_t EventFlag::set(uint32_t flags) const {
|
||||
@@ -26,7 +26,7 @@ uint32_t EventFlag::set(uint32_t flags) const {
|
||||
uint32_t rflags;
|
||||
BaseType_t yield;
|
||||
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
yield = pdFALSE;
|
||||
if (xEventGroupSetBitsFromISR(handle.get(), (EventBits_t)flags, &yield) == pdFAIL) {
|
||||
rflags = (uint32_t)ErrorResource;
|
||||
@@ -47,7 +47,7 @@ uint32_t EventFlag::clear(uint32_t flags) const {
|
||||
|
||||
uint32_t rflags;
|
||||
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
rflags = xEventGroupGetBitsFromISR(handle.get());
|
||||
|
||||
if (xEventGroupClearBitsFromISR(handle.get(), (EventBits_t)flags) == pdFAIL) {
|
||||
@@ -69,7 +69,7 @@ uint32_t EventFlag::clear(uint32_t flags) const {
|
||||
uint32_t EventFlag::get() const {
|
||||
uint32_t rflags;
|
||||
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
rflags = xEventGroupGetBitsFromISR(handle.get());
|
||||
} else {
|
||||
rflags = xEventGroupGetBits(handle.get());
|
||||
@@ -82,9 +82,9 @@ uint32_t EventFlag::get() const {
|
||||
uint32_t EventFlag::wait(
|
||||
uint32_t flags,
|
||||
uint32_t options,
|
||||
uint32_t timeout
|
||||
uint32_t timeoutTicksw
|
||||
) const {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
assert((flags & TT_EVENT_FLAG_INVALID_BITS) == 0U);
|
||||
|
||||
BaseType_t wait_all;
|
||||
@@ -94,11 +94,11 @@ uint32_t EventFlag::wait(
|
||||
if (options & WaitAll) {
|
||||
wait_all = pdTRUE;
|
||||
} else {
|
||||
wait_all = pdFAIL;
|
||||
wait_all = pdFALSE;
|
||||
}
|
||||
|
||||
if (options & NoClear) {
|
||||
exit_clear = pdFAIL;
|
||||
exit_clear = pdFALSE;
|
||||
} else {
|
||||
exit_clear = pdTRUE;
|
||||
}
|
||||
@@ -108,12 +108,12 @@ uint32_t EventFlag::wait(
|
||||
(EventBits_t)flags,
|
||||
exit_clear,
|
||||
wait_all,
|
||||
(TickType_t)timeout
|
||||
(TickType_t)timeoutTicksw
|
||||
);
|
||||
|
||||
if (options & WaitAll) {
|
||||
if ((flags & rflags) != flags) {
|
||||
if (timeout > 0U) {
|
||||
if (timeoutTicksw > 0U) {
|
||||
rflags = (uint32_t)ErrorTimeout;
|
||||
} else {
|
||||
rflags = (uint32_t)ErrorResource;
|
||||
@@ -121,7 +121,7 @@ uint32_t EventFlag::wait(
|
||||
}
|
||||
} else {
|
||||
if ((flags & rflags) == 0U) {
|
||||
if (timeout > 0U) {
|
||||
if (timeoutTicksw > 0U) {
|
||||
rflags = (uint32_t)ErrorTimeout;
|
||||
} else {
|
||||
rflags = (uint32_t)ErrorResource;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
namespace tt {
|
||||
|
||||
static inline QueueHandle_t createQueue(uint32_t capacity, uint32_t messageSize) {
|
||||
assert(!TT_IS_ISR() && (capacity > 0U) && (messageSize > 0U));
|
||||
assert(!kernel::isIsr() && (capacity > 0U) && (messageSize > 0U));
|
||||
return xQueueCreate(capacity, messageSize);
|
||||
}
|
||||
|
||||
@@ -14,14 +14,14 @@ MessageQueue::MessageQueue(uint32_t capacity, uint32_t messageSize) : handle(cre
|
||||
}
|
||||
|
||||
MessageQueue::~MessageQueue() {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
}
|
||||
|
||||
bool MessageQueue::put(const void* message, TickType_t timeout) {
|
||||
bool result = true;
|
||||
BaseType_t yield;
|
||||
|
||||
if (TT_IS_ISR()) {
|
||||
if (kernel::isIsr()) {
|
||||
if ((handle == nullptr) || (message == nullptr) || (timeout != 0U)) {
|
||||
result = false;
|
||||
} else {
|
||||
@@ -46,7 +46,7 @@ bool MessageQueue::get(void* msg_ptr, TickType_t timeout) {
|
||||
bool result = true;
|
||||
BaseType_t yield;
|
||||
|
||||
if (TT_IS_ISR()) {
|
||||
if (kernel::isIsr()) {
|
||||
if ((handle == nullptr) || (msg_ptr == nullptr) || (timeout != 0U)) {
|
||||
result = false;
|
||||
} else {
|
||||
@@ -92,7 +92,7 @@ uint32_t MessageQueue::getCount() const {
|
||||
|
||||
if (handle == nullptr) {
|
||||
count = 0U;
|
||||
} else if (TT_IS_ISR()) {
|
||||
} else if (kernel::isIsr()) {
|
||||
count = uxQueueMessagesWaitingFromISR(handle.get());
|
||||
} else {
|
||||
count = uxQueueMessagesWaiting(handle.get());
|
||||
@@ -109,7 +109,7 @@ uint32_t MessageQueue::getSpace() const {
|
||||
|
||||
if (mq == nullptr) {
|
||||
space = 0U;
|
||||
} else if (TT_IS_ISR()) {
|
||||
} else if (kernel::isIsr()) {
|
||||
isrm = taskENTER_CRITICAL_FROM_ISR();
|
||||
|
||||
/* space = pxQueue->uxLength - pxQueue->uxMessagesWaiting; */
|
||||
@@ -124,7 +124,7 @@ uint32_t MessageQueue::getSpace() const {
|
||||
}
|
||||
|
||||
bool MessageQueue::reset() {
|
||||
tt_check(!TT_IS_ISR());
|
||||
tt_check(!kernel::isIsr());
|
||||
if (handle == nullptr) {
|
||||
return false;
|
||||
} else {
|
||||
|
||||
@@ -39,7 +39,7 @@ Mutex::Mutex(Type type) : handle(createSemaphoreHandle(type)), type(type) {
|
||||
}
|
||||
|
||||
bool Mutex::lock(TickType_t timeout) const {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
assert(handle != nullptr);
|
||||
tt_mutex_info(mutex, "acquire");
|
||||
|
||||
@@ -54,7 +54,7 @@ bool Mutex::lock(TickType_t timeout) const {
|
||||
}
|
||||
|
||||
bool Mutex::unlock() const {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
assert(handle != nullptr);
|
||||
tt_mutex_info(mutex, "release");
|
||||
|
||||
@@ -69,7 +69,7 @@ bool Mutex::unlock() const {
|
||||
}
|
||||
|
||||
ThreadId Mutex::getOwner() const {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
assert(handle != nullptr);
|
||||
return (ThreadId)xSemaphoreGetMutexHolder(handle.get());
|
||||
}
|
||||
|
||||
@@ -22,16 +22,16 @@ static inline QueueHandle_t createHandle(uint32_t maxCount, uint32_t initialCoun
|
||||
}
|
||||
|
||||
Semaphore::Semaphore(uint32_t maxAvailable, uint32_t initialAvailable) : handle(createHandle(maxAvailable, initialAvailable)) {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
tt_check(handle != nullptr);
|
||||
}
|
||||
|
||||
Semaphore::~Semaphore() {
|
||||
assert(!TT_IS_IRQ_MODE());
|
||||
assert(!kernel::isIsr());
|
||||
}
|
||||
|
||||
bool Semaphore::acquire(TickType_t timeout) const {
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
if (timeout != 0U) {
|
||||
return false;
|
||||
} else {
|
||||
@@ -50,7 +50,7 @@ bool Semaphore::acquire(TickType_t timeout) const {
|
||||
}
|
||||
|
||||
bool Semaphore::release() const {
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
BaseType_t yield = pdFALSE;
|
||||
if (xSemaphoreGiveFromISR(handle.get(), &yield) != pdTRUE) {
|
||||
return false;
|
||||
@@ -64,7 +64,7 @@ bool Semaphore::release() const {
|
||||
}
|
||||
|
||||
uint32_t Semaphore::getAvailable() const {
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
// TODO: uxSemaphoreGetCountFromISR is not supported on esp-idf 5.1.2 - perhaps later on?
|
||||
#ifdef uxSemaphoreGetCountFromISR
|
||||
return uxSemaphoreGetCountFromISR(handle.get());
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "Tactility/StreamBuffer.h"
|
||||
|
||||
#include "Tactility/Check.h"
|
||||
#include "Tactility/CoreDefines.h"
|
||||
#include "Tactility/kernel/Kernel.h"
|
||||
|
||||
namespace tt {
|
||||
|
||||
@@ -23,7 +23,7 @@ size_t StreamBuffer::send(
|
||||
size_t length,
|
||||
uint32_t timeout
|
||||
) const {
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
BaseType_t yield;
|
||||
size_t result = xStreamBufferSendFromISR(handle.get(), data, length, &yield);
|
||||
portYIELD_FROM_ISR(yield);
|
||||
@@ -38,7 +38,7 @@ size_t StreamBuffer::receive(
|
||||
size_t length,
|
||||
uint32_t timeout
|
||||
) const {
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
BaseType_t yield;
|
||||
size_t result = xStreamBufferReceiveFromISR(handle.get(), data, length, &yield);
|
||||
portYIELD_FROM_ISR(yield);
|
||||
|
||||
@@ -206,7 +206,7 @@ uint32_t Thread::setFlags(ThreadId threadId, uint32_t flags) {
|
||||
} else {
|
||||
rflags = (uint32_t)EventFlag::Error;
|
||||
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
yield = pdFALSE;
|
||||
|
||||
(void)xTaskNotifyIndexedFromISR(hTask, THREAD_NOTIFY_INDEX, flags, eSetBits, &yield);
|
||||
@@ -228,7 +228,7 @@ uint32_t Thread::clearFlags(uint32_t flags) {
|
||||
TaskHandle_t hTask;
|
||||
uint32_t rflags, cflags;
|
||||
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
rflags = (uint32_t)EventFlag::ErrorISR;
|
||||
} else if ((flags & THREAD_FLAGS_INVALID_BITS) != 0U) {
|
||||
rflags = (uint32_t)EventFlag::ErrorParameter;
|
||||
@@ -257,7 +257,7 @@ uint32_t Thread::getFlags() {
|
||||
TaskHandle_t hTask;
|
||||
uint32_t rflags;
|
||||
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
rflags = (uint32_t)EventFlag::ErrorISR;
|
||||
} else {
|
||||
hTask = xTaskGetCurrentTaskHandle();
|
||||
@@ -277,7 +277,7 @@ uint32_t Thread::awaitFlags(uint32_t flags, uint32_t options, uint32_t timeout)
|
||||
TickType_t t0, td, tout;
|
||||
BaseType_t rval;
|
||||
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
rflags = (uint32_t)EventFlag::ErrorISR;
|
||||
} else if ((flags & THREAD_FLAGS_INVALID_BITS) != 0U) {
|
||||
rflags = (uint32_t)EventFlag::ErrorParameter;
|
||||
@@ -345,7 +345,7 @@ uint32_t Thread::getStackSpace(ThreadId threadId) {
|
||||
auto hTask = (TaskHandle_t)threadId;
|
||||
uint32_t sz;
|
||||
|
||||
if (TT_IS_IRQ_MODE() || (hTask == nullptr)) {
|
||||
if (kernel::isIsr() || (hTask == nullptr)) {
|
||||
sz = 0U;
|
||||
} else {
|
||||
sz = (uint32_t)(uxTaskGetStackHighWaterMark(hTask) * sizeof(StackType_t));
|
||||
@@ -361,7 +361,7 @@ void Thread::suspend(ThreadId threadId) {
|
||||
|
||||
void Thread::resume(ThreadId threadId) {
|
||||
auto hTask = (TaskHandle_t)threadId;
|
||||
if (TT_IS_IRQ_MODE()) {
|
||||
if (kernel::isIsr()) {
|
||||
xTaskResumeFromISR(hTask);
|
||||
} else {
|
||||
vTaskResume(hTask);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Tactility/Check.h"
|
||||
#include "Tactility/RtosCompat.h"
|
||||
#include "Tactility/kernel/Kernel.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
@@ -34,44 +35,44 @@ Timer::Timer(Type type, Callback callback, std::shared_ptr<void> callbackContext
|
||||
callbackContext(std::move(callbackContext)),
|
||||
handle(createTimer(type, this, onCallback))
|
||||
{
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
assert(handle != nullptr);
|
||||
}
|
||||
|
||||
Timer::~Timer() {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
}
|
||||
|
||||
bool Timer::start(TickType_t interval) {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
assert(interval < portMAX_DELAY);
|
||||
return xTimerChangePeriod(handle.get(), interval, portMAX_DELAY) == pdPASS;
|
||||
}
|
||||
|
||||
bool Timer::restart(TickType_t interval) {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
assert(interval < portMAX_DELAY);
|
||||
return xTimerChangePeriod(handle.get(), interval, portMAX_DELAY) == pdPASS &&
|
||||
xTimerReset(handle.get(), portMAX_DELAY) == pdPASS;
|
||||
}
|
||||
|
||||
bool Timer::stop() {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
return xTimerStop(handle.get(), portMAX_DELAY) == pdPASS;
|
||||
}
|
||||
|
||||
bool Timer::isRunning() {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
return xTimerIsTimerActive(handle.get()) == pdTRUE;
|
||||
}
|
||||
|
||||
TickType_t Timer::getExpireTime() {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
return xTimerGetExpiryTime(handle.get());
|
||||
}
|
||||
|
||||
bool Timer::setPendingCallback(PendingCallback callback, void* callbackContext, uint32_t callbackArg, TickType_t timeout) {
|
||||
if (TT_IS_ISR()) {
|
||||
if (kernel::isIsr()) {
|
||||
assert(timeout == 0);
|
||||
return xTimerPendFunctionCallFromISR(callback, callbackContext, callbackArg, nullptr) == pdPASS;
|
||||
} else {
|
||||
@@ -80,7 +81,7 @@ bool Timer::setPendingCallback(PendingCallback callback, void* callbackContext,
|
||||
}
|
||||
|
||||
void Timer::setThreadPriority(Thread::Priority priority) {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
|
||||
TaskHandle_t task_handle = xTimerGetTimerDaemonTaskHandle();
|
||||
assert(task_handle); // Don't call this method before timer task start
|
||||
|
||||
@@ -16,7 +16,7 @@ bool isRunning() {
|
||||
}
|
||||
|
||||
bool lock() {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
|
||||
int32_t lock;
|
||||
|
||||
@@ -39,7 +39,7 @@ bool lock() {
|
||||
}
|
||||
|
||||
bool unlock() {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
|
||||
switch (xTaskGetSchedulerState()) {
|
||||
case taskSCHEDULER_SUSPENDED:
|
||||
@@ -60,7 +60,7 @@ bool unlock() {
|
||||
}
|
||||
|
||||
bool restoreLock(bool lock) {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
|
||||
switch (xTaskGetSchedulerState()) {
|
||||
case taskSCHEDULER_SUSPENDED:
|
||||
@@ -89,7 +89,7 @@ uint32_t getTickFrequency() {
|
||||
}
|
||||
|
||||
void delayTicks(TickType_t ticks) {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
if (ticks == 0U) {
|
||||
taskYIELD();
|
||||
} else {
|
||||
@@ -98,7 +98,7 @@ void delayTicks(TickType_t ticks) {
|
||||
}
|
||||
|
||||
bool delayUntilTick(TickType_t tick) {
|
||||
assert(!TT_IS_ISR());
|
||||
assert(!kernel::isIsr());
|
||||
|
||||
TickType_t tcnt, delay;
|
||||
|
||||
@@ -118,7 +118,7 @@ bool delayUntilTick(TickType_t tick) {
|
||||
}
|
||||
|
||||
TickType_t getTicks() {
|
||||
if (TT_IS_ISR() != 0U) {
|
||||
if (kernel::isIsr() != 0U) {
|
||||
return xTaskGetTickCountFromISR();
|
||||
} else {
|
||||
return xTaskGetTickCount();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "Tactility/kernel/critical/Critical.h"
|
||||
|
||||
#include "Tactility/CoreDefines.h"
|
||||
#include "Tactility/RtosCompatTask.h"
|
||||
#include "Tactility/kernel/Kernel.h"
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
static portMUX_TYPE critical_mutex;
|
||||
@@ -15,7 +15,7 @@ namespace tt::kernel::critical {
|
||||
CriticalInfo enter() {
|
||||
CriticalInfo info = {
|
||||
.isrm = 0,
|
||||
.fromIsr = TT_IS_ISR(),
|
||||
.fromIsr = kernel::isIsr(),
|
||||
.kernelRunning = (xTaskGetSchedulerState() == taskSCHEDULER_RUNNING)
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user