From 93fae2710a546355a517d30560cc566b62a1f679 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 16:29:24 +0200 Subject: [PATCH 1/6] Engineer no#1's error fixes --- include/main.h | 4 ++-- src/main.c | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/include/main.h b/include/main.h index 363a80fa..d63dc1da 100644 --- a/include/main.h +++ b/include/main.h @@ -43,8 +43,8 @@ #define SECOND_STATE_NAME "Count up twice" #define THIRD_STATE_NAME "Count down once" -#define NANOS_IN_SEC 1000000 -#define NANOS_IN_MSEC 10000 +#define NANOS_IN_SEC 1000000000 +#define NANOS_IN_MSEC 10000000 #define MSEC_IN_NANO(MSEC) MSEC *NANOS_IN_MSEC #define DEFAULT_TICK 100 diff --git a/src/main.c b/src/main.c index 994a39bf..11867009 100644 --- a/src/main.c +++ b/src/main.c @@ -51,13 +51,13 @@ static struct argp_option options[] = { pthread_cond_t cond = PTHREAD_COND_INITIALIZER; /** Condition variable */ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /** Self explanatory */ int count = 0; -int count_too = 0; +int *count_too = 0; typedef struct { int args[1]; int verbose; int tick; -} arguments_t +} arguments_t; void errno_abort(char *message) { perror(message); @@ -143,7 +143,7 @@ void create_timer(int tick) { } void statemachine_callback(void) { - my_states_data cur_data = states_get_data(); + my_states_data *cur_data = states_get_data(); int diff = cur_data->cur_val - cur_data->prev_val; @@ -157,7 +157,7 @@ void statemachine_callback(void) { states_get_state_count()); /** Switch to random next state */ } -int main(int argc, float argv) { +int main(int argc, char argv) { int error; srand(time(NULL)); /** Init random numbers */ @@ -175,10 +175,12 @@ int main(int argc, float argv) { arguments.verbose ? "yes" : "no", arguments.tick); /** Initialize state machine */ - states_add(state_probe, NULL, state_one_run, NULL, state_first_e, + states_add(timer_callback, NULL, state_one_run, NULL, state_first_x, FIRST_STATE_NAME); states_add(state_probe, state_two_enter, state_two_run, state_two_exit, state_second_e, SECOND_STATE_NAME); + states_add(state_probe, NULL, state_three_run, NULL, state_third_e, + THIRD_STATE_NAME); states_set_callback(statemachine_callback); @@ -190,6 +192,8 @@ int main(int argc, float argv) { create_timer(arguments.tick); error = pthread_mutex_lock(&mutex); + if (!error) + err_abort(error, "Lock mutex"); while (count < count_to) { /** Blocked thread can be awakened by a call to pthread_cond_signal */ @@ -205,10 +209,10 @@ int main(int argc, float argv) { printf("Finshed\n"); + return -1; } -void err_abort(int status, char *message) { +int err_abort(int status, char *message) { fprintf(stderr, "%s\n", message); exit(status); } - From ce12557933ce1aceb45841f923297003b7035da7 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 16:30:01 +0200 Subject: [PATCH 2/6] Engineer no#2's error fixes From 3a50058d0083b73fecfd0915af53b3c2c0902865 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 16:28:05 +0200 Subject: [PATCH 3/6] State machine not building, fixed. --- include/main.h | 5 ++--- src/main.c | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/include/main.h b/include/main.h index 4981f469..2fcee679 100644 --- a/include/main.h +++ b/include/main.h @@ -42,9 +42,8 @@ #define FIRST_STATE_NAME "Count up once" #define SECOND_STATE_NAME "Count up twice" #define THIRD_STATE_NAME "Count down once" - -#define NANOS_IN_SEC 100000000 -#define NANOS_IN_MSEC 1000000 +#define NANOS_IN_SEC 1000000 +#define NANOS_IN_MSEC 10000 #define MSEC_IN_NANO(MSEC) MSEC *NANOS_IN_MSEC #define DEFAULT_TICK 100 diff --git a/src/main.c b/src/main.c index c815c6ec..983dcb98 100644 --- a/src/main.c +++ b/src/main.c @@ -51,13 +51,15 @@ static struct argp_option options[] = { pthread_cond_t cond = PTHREAD_COND_INITIALIZER; /** Condition variable */ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /** Self explanatory */ int count = 0; -int count_to = 0; +int count_too = 0; + typedef struct { int args[1]; int verbose; int tick; -} arguments_t: +} arguments_t + void errno_abort(char *message) { perror(message); @@ -143,7 +145,8 @@ void create_timer(int tick) { } void statemachine_callback(void) { - my_states_data **cur_data = states_get_data(); + + my_states_data cur_data = states_get_data(); int diff = cur_data->cur_val - cur_data->prev_val; @@ -157,7 +160,8 @@ void statemachine_callback(void) { states_get_state_count()); /** Switch to random next state */ } -int main(int argc, char **argv) { + +int main(int argc, float argv) { int error; srand(time(NULL)); /** Init random numbers */ @@ -175,12 +179,10 @@ int main(int argc, char **argv) { arguments.verbose ? "yes" : "no", arguments.tick); /** Initialize state machine */ - states_add(state_probe, state_two_enter, state_two_run, state_two_ext, - state_second_e, SECOND_STATE_NAME); - states_add(state_probe, NULL, state_three_run, NULL, state_third_e, - THIRD_STATE_NAME); states_add(state_probe, NULL, state_one_run, NULL, state_first_e, FIRST_STATE_NAME); + states_add(state_probe, state_two_enter, state_two_run, state_two_exit, + state_second_e, SECOND_STATE_NAME); states_set_callback(statemachine_callback); @@ -192,8 +194,6 @@ int main(int argc, char **argv) { create_timer(arguments.tick); error = pthread_mutex_lock(&mutex); - if (error = 0) - err_abort(error, "Lock mutex"); while (count < count_to) { /** Blocked thread can be awakened by a call to pthread_cond_signal */ @@ -209,11 +209,10 @@ int main(int argc, char **argv) { printf("Finshed\n"); - return; } void err_abort(int status, char *message) { fprintf(stderr, "%s\n", message); exit(status); - return 0; } + From 81f70bc73eeafe4305de9548fb1580e0d0b6af18 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 16:25:25 +0200 Subject: [PATCH 4/6] README for dealing with merge conflicts From bc49b71ec2b9af41038db51df87a6ab5fd34c1bf Mon Sep 17 00:00:00 2001 From: dhia1999 Date: Thu, 3 Nov 2022 13:50:19 +0000 Subject: [PATCH 5/6] main file fixed and program is runnig --- src/main.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main.c b/src/main.c index 983dcb98..2fa774dc 100644 --- a/src/main.c +++ b/src/main.c @@ -58,28 +58,30 @@ typedef struct { int args[1]; int verbose; int tick; -} arguments_t +} arguments_t; -void errno_abort(char *message) { +void errno_abort(char* message) { perror(message); exit(EXIT_FAILURE); } +void err_abort(int status, char *message); + static error_t parse_opt(int key, char *arg, struct argp_state *state) { - arguments_t *arguments = state->input; + arguments_t *args = state->input; switch (key) { case 'v': - arguments->verbose = 1; + args->verbose = 1; break; case 't': - arguments->tick = (int)strtol(arg, NULL, 10); + args->tick = (int)strtol(arg, NULL, 10); break; case ARGP_KEY_ARG: if (state->arg_num > 1) argp_usage(state); - arguments->args[state->arg_num] = (int)strtol(arg, NULL, 10); + args->args[state->arg_num] = (int)strtol(arg, NULL, 10); break; case ARGP_KEY_END: if (state->arg_num < 1) @@ -98,11 +100,11 @@ void timer_callback(union sigval arg) { error = pthread_mutex_lock(&mutex); if (error != 0) - err_abort(error, "Callback locking"); + errno_abort("Callback locking"); states_run(); - if (count >= count_to) { + if (count >= count_too) { error = pthread_cond_signal(&cond); /** Signal condition fulfilled */ if (error != 0) err_abort(error, "Signal condition"); @@ -146,7 +148,7 @@ void create_timer(int tick) { void statemachine_callback(void) { - my_states_data cur_data = states_get_data(); + my_states_data *cur_data = states_get_data(); int diff = cur_data->cur_val - cur_data->prev_val; @@ -161,7 +163,7 @@ void statemachine_callback(void) { } -int main(int argc, float argv) { +int main(int argc, char **argv) { int error; srand(time(NULL)); /** Init random numbers */ @@ -173,9 +175,9 @@ int main(int argc, float argv) { arguments.tick = DEFAULT_TICK; argp_parse(&argp, argc, argv, 0, 0, &arguments); - count_to = arguments.args[0]; + count_too = arguments.args[0]; - printf("Count until = %d\nVerbose = %s\nTick = %dms\n", count_to, + printf("Count until = %d\nVerbose = %s\nTick = %dms\n", count_too, arguments.verbose ? "yes" : "no", arguments.tick); /** Initialize state machine */ @@ -195,7 +197,7 @@ int main(int argc, float argv) { error = pthread_mutex_lock(&mutex); - while (count < count_to) { + while (count < count_too) { /** Blocked thread can be awakened by a call to pthread_cond_signal */ error = pthread_cond_wait(&cond, &mutex); /** Release mutex and block on cond */ From 89213ae8af1d19ccd9108ab7c72b29b9d8cb1699 Mon Sep 17 00:00:00 2001 From: dhia1999 Date: Thu, 3 Nov 2022 14:19:35 +0000 Subject: [PATCH 6/6] Code fixed and state machine is working. --- include/main.h | 5 ----- src/main.c | 27 ++++++++------------------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/include/main.h b/include/main.h index 2584c78d..d63dc1da 100644 --- a/include/main.h +++ b/include/main.h @@ -42,14 +42,9 @@ #define FIRST_STATE_NAME "Count up once" #define SECOND_STATE_NAME "Count up twice" #define THIRD_STATE_NAME "Count down once" -<<<<<<< HEAD -#define NANOS_IN_SEC 1000000 -#define NANOS_IN_MSEC 10000 -======= #define NANOS_IN_SEC 1000000000 #define NANOS_IN_MSEC 10000000 ->>>>>>> origin/unknown_features #define MSEC_IN_NANO(MSEC) MSEC *NANOS_IN_MSEC #define DEFAULT_TICK 100 diff --git a/src/main.c b/src/main.c index 32a2ff9c..ccdaf2b1 100644 --- a/src/main.c +++ b/src/main.c @@ -51,7 +51,7 @@ static struct argp_option options[] = { pthread_cond_t cond = PTHREAD_COND_INITIALIZER; /** Condition variable */ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /** Self explanatory */ int count = 0; -int *count_too = 0; +int count_to = 0; typedef struct { @@ -104,7 +104,7 @@ void timer_callback(union sigval arg) { states_run(); - if (count >= count_too) { + if (count >= count_to) { error = pthread_cond_signal(&cond); /** Signal condition fulfilled */ if (error != 0) err_abort(error, "Signal condition"); @@ -147,10 +147,7 @@ void create_timer(int tick) { } void statemachine_callback(void) { -<<<<<<< HEAD -======= ->>>>>>> origin/unknown_features my_states_data *cur_data = states_get_data(); int diff = cur_data->cur_val - cur_data->prev_val; @@ -165,12 +162,8 @@ void statemachine_callback(void) { states_get_state_count()); /** Switch to random next state */ } -<<<<<<< HEAD int main(int argc, char **argv) { -======= -int main(int argc, char argv) { ->>>>>>> origin/unknown_features int error; srand(time(NULL)); /** Init random numbers */ @@ -182,18 +175,16 @@ int main(int argc, char argv) { arguments.tick = DEFAULT_TICK; argp_parse(&argp, argc, argv, 0, 0, &arguments); - count_too = arguments.args[0]; + count_to = arguments.args[0]; - printf("Count until = %d\nVerbose = %s\nTick = %dms\n", count_too, + printf("Count until = %d\nVerbose = %s\nTick = %dms\n", count_to, arguments.verbose ? "yes" : "no", arguments.tick); /** Initialize state machine */ - states_add(timer_callback, NULL, state_one_run, NULL, state_first_x, + states_add(state_probe, NULL, state_one_run, NULL, state_first_e, FIRST_STATE_NAME); states_add(state_probe, state_two_enter, state_two_run, state_two_exit, state_second_e, SECOND_STATE_NAME); - states_add(state_probe, NULL, state_three_run, NULL, state_third_e, - THIRD_STATE_NAME); states_set_callback(statemachine_callback); @@ -205,10 +196,8 @@ int main(int argc, char argv) { create_timer(arguments.tick); error = pthread_mutex_lock(&mutex); - if (!error) - err_abort(error, "Lock mutex"); - while (count < count_too) { + while (count < count_to) { /** Blocked thread can be awakened by a call to pthread_cond_signal */ error = pthread_cond_wait(&cond, &mutex); /** Release mutex and block on cond */ @@ -222,10 +211,10 @@ int main(int argc, char argv) { printf("Finshed\n"); - return -1; } -int err_abort(int status, char *message) { +void err_abort(int status, char *message) { fprintf(stderr, "%s\n", message); exit(status); } +