aboutsummaryrefslogtreecommitdiffstats
path: root/src/user/user.c
diff options
context:
space:
mode:
authortcsullivan <tullivan99@gmail.com>2018-10-18 18:24:43 -0400
committertcsullivan <tullivan99@gmail.com>2018-10-18 18:24:43 -0400
commitf4149952ea4895356a3d4c0a9517893bb1e18cd2 (patch)
tree5620b42a4eb874a5b3a9679065c882066dca4f70 /src/user/user.c
parent6b5dfe3c09195118226180470eada4a51d8ec922 (diff)
wip forking, added sash source
Diffstat (limited to 'src/user/user.c')
-rw-r--r--src/user/user.c44
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);
+ }
+
}
}
+