feat: add lab-rv32i-freertos-scheduler-states card

This commit is contained in:
user
2026-07-21 19:14:20 +02:00
commit 71ddd87301
66 changed files with 34187 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
#ifndef K04_HOST_FREERTOS_H
#define K04_HOST_FREERTOS_H
#include <stdint.h>
typedef int32_t BaseType_t;
typedef uint32_t UBaseType_t;
typedef uint32_t TickType_t;
typedef void * TaskHandle_t;
#endif
+31
View File
@@ -0,0 +1,31 @@
#ifndef K04_HOST_TASK_H
#define K04_HOST_TASK_H
#include "FreeRTOS.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef enum
{
eRunning = 0,
eReady,
eBlocked,
eSuspended,
eDeleted,
eInvalid
} eTaskState;
TickType_t xTaskGetTickCount( void );
TaskHandle_t xTaskGetCurrentTaskHandle( void );
eTaskState eTaskGetState( TaskHandle_t handle );
UBaseType_t uxTaskPriorityGet( TaskHandle_t handle );
void vTaskPrioritySet( TaskHandle_t handle, UBaseType_t priority );
#ifdef __cplusplus
}
#endif
#endif
+75
View File
@@ -0,0 +1,75 @@
#include <cassert>
#include <cstdint>
#include <type_traits>
#include "freertos/task_ref.hpp"
#include "freertos/ticks.hpp"
namespace
{
struct FakeTask
{
eTaskState state;
UBaseType_t priority;
};
FakeTask first { eReady, 2U };
FakeTask second { eRunning, 3U };
TaskHandle_t current = &second;
TickType_t tick = 41U;
} // namespace
extern "C" TickType_t xTaskGetTickCount()
{
return tick;
}
extern "C" TaskHandle_t xTaskGetCurrentTaskHandle()
{
return current;
}
extern "C" eTaskState eTaskGetState( TaskHandle_t handle )
{
return static_cast< FakeTask * >( handle )->state;
}
extern "C" UBaseType_t uxTaskPriorityGet( TaskHandle_t handle )
{
return static_cast< FakeTask * >( handle )->priority;
}
extern "C" void vTaskPrioritySet( TaskHandle_t handle,
UBaseType_t priority )
{
static_cast< FakeTask * >( handle )->priority = priority;
}
static_assert( std::is_trivially_copyable< freertos::TaskRef >::value );
static_assert( sizeof( freertos::TaskRef ) == sizeof( TaskHandle_t ) );
int main()
{
constexpr freertos::Ticks three { 3U };
static_assert( three.count() == 3U );
const auto now = freertos::TickPoint::now();
assert( now.count() == 41U );
assert( ( freertos::TickPoint { 1U } -
freertos::TickPoint { UINT32_MAX } ).count() == 2U );
freertos::TaskRef first_ref { &first };
assert( first_ref.native_handle() == &first );
assert( first_ref.state() == eReady );
assert( first_ref.priority() == 2U );
first_ref.set_priority( 4U );
assert( first.priority == 4U );
const freertos::TaskRef current_ref = freertos::TaskRef::current();
assert( current_ref.native_handle() == &second );
assert( current_ref.state() == eRunning );
return 0;
}