diff --git a/0814/led.h b/0814/led.h new file mode 100644 index 0000000000000000000000000000000000000000..4ff400b3817acfc37f555063ff230d924c7a4f31 --- /dev/null +++ b/0814/led.h @@ -0,0 +1,7 @@ +#include <stdio.h> +#include <stdlib.h> +#include <wiringPi.h> +#include <pthread.h> + +extern void *led_blue_task(void *); +extern void *led_orange_task(void *); diff --git a/0814/led_blue.c b/0814/led_blue.c new file mode 100644 index 0000000000000000000000000000000000000000..1500f96de057bd6aab1126f46cae6baccfb0db45 --- /dev/null +++ b/0814/led_blue.c @@ -0,0 +1,21 @@ +#include "led.h" + +void *led_blue_task(void *arg) +{ + printf("led blue task start\n"); + int i, count = 0; + pinMode(4, OUTPUT); + + for (i = 0; i < (int)arg; i++, count++) + { + digitalWrite(4, HIGH); + printf("blue ON\n"); + delay(2000); + digitalWrite(4, LOW); + printf("blue OFF\n"); + delay(2000); + } + + printf("led blue task end\n"); + pthread_exit((void *)count); +} diff --git a/0814/led_main b/0814/led_main new file mode 100755 index 0000000000000000000000000000000000000000..225a6c3db96572c63eb7c85a7111c0991d5342b8 Binary files /dev/null and b/0814/led_main differ diff --git a/0814/led_main.c b/0814/led_main.c new file mode 100644 index 0000000000000000000000000000000000000000..ef1f7472662109db2c2778be554c43c63a0d59c0 --- /dev/null +++ b/0814/led_main.c @@ -0,0 +1,87 @@ +#include "led.h" + +void *led_main_task(); + +int main(int argc, char *argv[]) +{ + int i, task_mode = 0, task_repeat; + pthread_t red, blue, orange; + void *main_result = NULL, *blue_result = NULL, *orange_result = NULL; + + if(argc != 1 && argc != 3) + { + printf("Usage : %s GPIO_NO\n", argv[0]); + exit(1); + } + if (argc == 3) + { + task_mode = atoi(argv[1]); + task_repeat = atoi(argv[2]); + } + for (i = 0; argv[i]; i++) + { + printf("%s ", argv[i]); + } + printf("\n"); + + wiringPiSetup(); + + if (task_mode == 0) + { + pthread_create(&red, NULL, led_main_task, NULL); + pthread_join(red, &main_result); + printf("led red blinked %d times\n", (int)main_result); + } + else if (task_mode == 1) + { + pthread_create(&red, NULL, led_main_task, NULL); + pthread_create(&blue, NULL, led_blue_task, (void *)task_repeat); + pthread_join(red, &main_result); + printf("led red blinked %d times\n", (int)main_result); + pthread_join(blue, &blue_result); + printf("led blue blinked %d times\n", (int)blue_result); + } + else if (task_mode == 2) + { + pthread_create(&red, NULL, led_main_task, NULL); + pthread_create(&orange, NULL, led_orange_task, (void *)task_repeat); + pthread_join(red, &main_result); + printf("led red blinked %d times\n", (int)main_result); + pthread_join(orange, &orange_result); + printf("led orange blinked %d times\n", (int)orange_result); + } + else if (task_mode == 3) + { + pthread_create(&red, NULL, led_main_task, NULL); + pthread_create(&blue, NULL, led_blue_task, (void *)task_repeat); + pthread_create(&orange, NULL, led_orange_task, (void *)task_repeat); + pthread_join(red, &main_result); + printf("led red blinked %d times\n", (int)main_result); + pthread_join(blue, &blue_result); + printf("led blue blinked %d times\n", (int)blue_result); + pthread_join(orange, &orange_result); + printf("led orange blinked %d times\n", (int)orange_result); + } + + return 0; +} + +void *led_main_task() +{ + printf("led main task start\n"); + int i, count = 0; + pinMode(1, OUTPUT); + + for (i = 0; i < 10; i++, count++) + { + digitalWrite(1, HIGH); + printf("red ON\n"); + delay(1000); + digitalWrite(1, LOW); + printf("red OFF\n"); + delay(1000); + } + + printf("led main task end\n"); + pthread_exit((void *)count); +} diff --git a/0814/led_main.txt b/0814/led_main.txt new file mode 100644 index 0000000000000000000000000000000000000000..1b414cbef27d806f23685785f1ef8640b718e06b --- /dev/null +++ b/0814/led_main.txt @@ -0,0 +1,24 @@ +./led_main +led main task start +red ON +red OFF +red ON +red OFF +red ON +red OFF +red ON +red OFF +red ON +red OFF +red ON +red OFF +red ON +red OFF +red ON +red OFF +red ON +red OFF +red ON +red OFF +led main task end +led red blinked 10 times diff --git a/0814/led_main_1_5.txt b/0814/led_main_1_5.txt new file mode 100644 index 0000000000000000000000000000000000000000..4fb519c9a2997858ea8a58825dad1ebb47fae57b --- /dev/null +++ b/0814/led_main_1_5.txt @@ -0,0 +1,37 @@ +./led_main 1 5 +led main task start +red ON +led blue task start +blue ON +red OFF +blue OFF +red ON +red OFF +blue ON +red ON +red OFF +blue OFF +red ON +red OFF +blue ON +red ON +red OFF +blue OFF +red ON +red OFF +blue ON +red ON +red OFF +blue OFF +red ON +red OFF +blue ON +red ON +red OFF +blue OFF +red ON +red OFF +led blue task end +led main task end +led red blinked 10 times +led blue blinked 5 times diff --git a/0814/led_main_2_3.txt b/0814/led_main_2_3.txt new file mode 100644 index 0000000000000000000000000000000000000000..afdc4758a797e18a7fed75b59f5602f54aff9e41 --- /dev/null +++ b/0814/led_main_2_3.txt @@ -0,0 +1,33 @@ +./led_main 2 3 +led main task start +red ON +led orange task start +orange ON +red OFF +red ON +orange OFF +red OFF +red ON +red OFF +orange ON +red ON +red OFF +red ON +orange OFF +red OFF +red ON +red OFF +orange ON +red ON +red OFF +red ON +orange OFF +red OFF +red ON +red OFF +led orange task end +red ON +red OFF +led main task end +led red blinked 10 times +led orange blinked 3 times diff --git a/0814/led_main_3_3.txt b/0814/led_main_3_3.txt new file mode 100644 index 0000000000000000000000000000000000000000..cdf3c675d3c0b899f4675ac980ca5ed9d80c752b --- /dev/null +++ b/0814/led_main_3_3.txt @@ -0,0 +1,42 @@ +./led_main 3 3 +led main task start +red ON +led orange task start +orange ON +led blue task start +blue ON +red OFF +red ON +blue OFF +orange OFF +red OFF +blue ON +red ON +red OFF +orange ON +blue OFF +red ON +red OFF +blue ON +red ON +orange OFF +red OFF +blue OFF +red ON +red OFF +orange ON +led blue task end +red ON +red OFF +red ON +orange OFF +red OFF +red ON +red OFF +led orange task end +red ON +red OFF +led main task end +led red blinked 10 times +led blue blinked 3 times +led orange blinked 3 times diff --git a/0814/led_orange.c b/0814/led_orange.c new file mode 100644 index 0000000000000000000000000000000000000000..7952f6de05d309dd36e3f8adb37cf339f42b4e43 --- /dev/null +++ b/0814/led_orange.c @@ -0,0 +1,21 @@ +#include "led.h" + +void *led_orange_task(void *arg) +{ + printf("led orange task start\n"); + int i, count = 0; + pinMode(5, OUTPUT); + + for (i = 0; i < (int)arg; i++, count++) + { + digitalWrite(5, HIGH); + printf("orange ON\n"); + delay(3000); + digitalWrite(5, LOW); + printf("orange OFF\n"); + delay(3000); + } + + printf("led orange task end\n"); + pthread_exit((void *)count); +}