diff options
author | tcsullivan <tullivan99@gmail.com> | 2018-10-18 18:24:43 -0400 |
---|---|---|
committer | tcsullivan <tullivan99@gmail.com> | 2018-10-18 18:24:43 -0400 |
commit | f4149952ea4895356a3d4c0a9517893bb1e18cd2 (patch) | |
tree | 5620b42a4eb874a5b3a9679065c882066dca4f70 /src/user/user.c | |
parent | 6b5dfe3c09195118226180470eada4a51d8ec922 (diff) |
wip forking, added sash source
Diffstat (limited to 'src/user/user.c')
-rw-r--r-- | src/user/user.c | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/src/user/user.c b/src/user/user.c index 0bb2607..7a55678 100644 --- a/src/user/user.c +++ b/src/user/user.c @@ -2,9 +2,6 @@ #include "priv_gpio.h" #include <kernel/task.h> -void task1(void); -void task2(void); - void user_delay(uint32_t ms) { register uint32_t r1 asm("r1") = ms; @@ -16,29 +13,32 @@ void user_delay(uint32_t ms) " :: "r" (r1)); } -void user_main(void) +int fork(void) { - gpio(GPIO_MODE, 5, OUTPUT); - task_start(task1, 512); - - for (int i = 0; i < 8; i++) { - gpio(GPIO_OUT, 5, !(i & 1)); - user_delay(200); - } + int result; + asm("\ + mov r0, sp; \ + svc 3; \ + mov %0, r0; \ + " : "=r" (result)); + return result; } -void task1(void) +void user_main(void) { - user_delay(400); - task_start(task2, 1024); -} + gpio(GPIO_MODE, 5, OUTPUT); -void task2(void) -{ - int state = 0; - user_delay(2500); - while (1) { - gpio(GPIO_OUT, 5, state ^= 1); - user_delay(500); + if (fork() == 0) { + while (1) { + gpio(GPIO_OUT, 5, 1); + user_delay(1000); + } + } else { + while (1) { + gpio(GPIO_OUT, 5, 0); + user_delay(500); + } + } } + |