Skip to content

Commit 09e8ba9

Browse files
committed
Begin to support the static scheduler
1 parent e0e4121 commit 09e8ba9

File tree

9 files changed

+90
-18
lines changed

9 files changed

+90
-18
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
cmake_minimum_required(VERSION 3.20.0)
2+
project(reactor-uc-posix-hello)
3+
4+
set(PLATFORM "POSIX" CACHE STRING "Platform to target")
5+
set(SCHEDULER "STATIC" CACHE STRING "Scheduler to use")
6+
add_subdirectory(reactor-uc)
7+
8+
add_executable(app timer_test.c)
9+
target_link_libraries(app PRIVATE reactor-uc)

examples/posix/static/static_schedule.c

Whitespace-only changes.

examples/posix/static/timer_test.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include "reactor-uc/reactor-uc.h"
2+
#include "reactor-uc/schedulers/static/scheduler.h"
3+
#include "static_schedule.c"
4+
5+
LF_DEFINE_TIMER_STRUCT(TimerTest, t, 1, 0)
6+
LF_DEFINE_TIMER_CTOR(TimerTest, t, 1, 0)
7+
LF_DEFINE_REACTION_STRUCT(TimerTest, reaction, 0)
8+
LF_DEFINE_REACTION_CTOR(TimerTest, reaction, 0)
9+
10+
typedef struct {
11+
Reactor super;
12+
LF_REACTION_INSTANCE(TimerTest, reaction);
13+
LF_TIMER_INSTANCE(TimerTest, t);
14+
LF_REACTOR_BOOKKEEPING_INSTANCES(1,1,0);
15+
int cnt;
16+
} TimerTest;
17+
18+
LF_DEFINE_REACTION_BODY(TimerTest, reaction) {
19+
LF_SCOPE_SELF(TimerTest);
20+
LF_SCOPE_ENV();
21+
printf("Hello World @ %lld\n", env->get_elapsed_logical_time(env));
22+
self->cnt++;
23+
}
24+
25+
LF_REACTOR_CTOR_SIGNATURE(TimerTest) {
26+
LF_REACTOR_CTOR_PREAMBLE();
27+
LF_REACTOR_CTOR(TimerTest);
28+
LF_INITIALIZE_REACTION(TimerTest, reaction);
29+
LF_INITIALIZE_TIMER(TimerTest, t, MSEC(0), MSEC(1));
30+
LF_TIMER_REGISTER_EFFECT(self->t, self->reaction);
31+
}
32+
33+
TimerTest my_reactor;
34+
Environment env;
35+
void test_simple() {
36+
Environment_ctor(&env, (Reactor *)&my_reactor);
37+
env.scheduler->duration = MSEC(100);
38+
((StaticScheduler*)env.scheduler)->static_schedule = NULL; // FIXME: register schedule here.
39+
TimerTest_ctor(&my_reactor, NULL, &env);
40+
env.assemble(&env);
41+
env.start(&env);
42+
Environment_free(&env);
43+
}
44+
45+
int main() {
46+
test_simple();
47+
return 0;
48+
}

include/reactor-uc/environment.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "reactor-uc/scheduler.h"
1010

1111
typedef struct Environment Environment;
12+
typedef struct Scheduler Scheduler;
1213

1314
struct Environment {
1415
Reactor *main; // The top-level reactor of the program.

include/reactor-uc/reactor-uc.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
#ifndef REACTOR_UC_REACTOR_UC_H
22
#define REACTOR_UC_REACTOR_UC_H
33

4-
#if defined(SCHEDULER_DYNAMIC)
5-
#include "./schedulers/dynamic/scheduler.h"
6-
#elif defined(SCHEDULER_STATIC)
7-
#include "schedulers/static/scheduler.h"
8-
#include "schedulers/static/instructions.h"
9-
#else
10-
#endif
11-
124
#include "reactor-uc/action.h"
135
#include "reactor-uc/builtin_triggers.h"
146
#include "reactor-uc/connection.h"

include/reactor-uc/scheduler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#ifndef REACTOR_UC_SCHEDULER_H
22
#define REACTOR_UC_SCHEDULER_H
33

4+
#include "reactor-uc/reactor-uc.h"
5+
46
typedef struct Scheduler Scheduler;
57
typedef struct Environment Environment;
68

include/reactor-uc/schedulers/static/scheduler.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
#include "reactor-uc/error.h"
88
#include "reactor-uc/queues.h"
99
#include "reactor-uc/scheduler.h"
10+
#include "reactor-uc/schedulers/static/scheduler_instructions.h"
1011

1112
typedef struct StaticScheduler StaticScheduler;
1213
typedef struct Environment Environment;
1314

1415
struct StaticScheduler {
15-
Scheduler *super;
16+
Scheduler super;
1617
Environment *env;
1718
const inst_t **static_schedule;
1819
size_t *pc;

src/scheduler.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
#include "schedulers/static/scheduler.c"
77
#include "schedulers/static/instructions.c"
88
#else
9+
#error "Unsupported scheduler macro"
910
#endif

src/schedulers/static/scheduler.c

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
static StaticScheduler scheduler;
1010

11-
Reaction *lf_sched_get_ready_reaction(StaticScheduler *scheduler, int worker_number) {
11+
void *interpret(StaticScheduler *scheduler, int worker_number) {
1212
LF_PRINT_DEBUG("Worker %d inside lf_sched_get_ready_reaction", worker_number);
1313

1414
const inst_t *current_schedule = scheduler->static_schedule[worker_number];
@@ -37,17 +37,35 @@ Reaction *lf_sched_get_ready_reaction(StaticScheduler *scheduler, int worker_num
3737
return returned_reaction;
3838
}
3939

40+
void StaticScheduler_run(Scheduler *untyped_self) {
41+
StaticScheduler *self = (StaticScheduler *)untyped_self;
42+
(void)self;
43+
// Environment *env = self->env;
44+
// lf_ret_t res;
45+
printf("Hello from the static scheduler\n");
46+
}
47+
48+
void StaticScheduler_acquire_and_schedule_start_tag(Scheduler *untyped_self) {
49+
StaticScheduler *self = (StaticScheduler *)untyped_self;
50+
(void)self;
51+
// Environment *env = self->env;
52+
// lf_ret_t res;
53+
}
54+
4055
void StaticScheduler_ctor(StaticScheduler *self, Environment *env, const inst_t **static_schedule) {
4156
self->env = env;
4257
self->static_schedule = static_schedule;
4358

44-
self->super->run = Scheduler_run;
45-
self->super->do_shutdown = Scheduler_do_shutdown;
46-
self->super->schedule_at = Scheduler_schedule_at;
47-
self->super->schedule_at_locked = Scheduler_schedule_at_locked;
48-
self->super->register_for_cleanup = Scheduler_register_for_cleanup;
49-
self->super->request_shutdown = Scheduler_request_shutdown;
50-
self->super->acquire_and_schedule_start_tag = Scheduler_acquire_and_schedule_start_tag;
59+
self->super.run = StaticScheduler_run;
60+
self->super.do_shutdown = NULL;
61+
self->super.schedule_at = NULL; // FIXME: Expect runtime exception.
62+
self->super.schedule_at_locked = NULL;
63+
self->super.register_for_cleanup = NULL;
64+
self->super.request_shutdown = NULL;
65+
self->super.acquire_and_schedule_start_tag = StaticScheduler_acquire_and_schedule_start_tag;
5166
}
5267

53-
Scheduler *Scheduler_new(void) { return (Scheduler *)&scheduler; }
68+
Scheduler *Scheduler_new(Environment *env) {
69+
StaticScheduler_ctor(&scheduler, env, NULL); // FIXME: Supply scheduler pointer.
70+
return (Scheduler *)&scheduler;
71+
}

0 commit comments

Comments
 (0)