OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [ecos-2.0/] [examples/] [twothreads.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1254 phoenix
#include <cyg/kernel/kapi.h>
2
 
3
#include <stdio.h>
4
#include <math.h>
5
#include <stdlib.h>
6
 
7
/* now declare (and allocate space for) some kernel objects,
8
   like the two threads we will use */
9
cyg_thread thread_s[2];         /* space for two thread objects */
10
 
11
char stack[2][4096];            /* space for two 4K stacks */
12
 
13
/* now the handles for the threads */
14
cyg_handle_t simple_threadA, simple_threadB;
15
 
16
/* and now variables for the procedure which is the thread */
17
cyg_thread_entry_t simple_program;
18
 
19
/* and now a mutex to protect calls to the C library */
20
cyg_mutex_t cliblock;
21
 
22
/* we install our own startup routine which sets up threads */
23
void cyg_user_start(void)
24
{
25
  printf("Entering twothreads' cyg_user_start() function\n");
26
 
27
  cyg_mutex_init(&cliblock);
28
 
29
  cyg_thread_create(4, simple_program, (cyg_addrword_t) 0,
30
                    "Thread A", (void *) stack[0], 4096,
31
                    &simple_threadA, &thread_s[0]);
32
  cyg_thread_create(4, simple_program, (cyg_addrword_t) 1,
33
                    "Thread B", (void *) stack[1], 4096,
34
                    &simple_threadB, &thread_s[1]);
35
 
36
  cyg_thread_resume(simple_threadA);
37
  cyg_thread_resume(simple_threadB);
38
}
39
 
40
/* this is a simple program which runs in a thread */
41
void simple_program(cyg_addrword_t data)
42
{
43
  int message = (int) data;
44
  int delay;
45
 
46
  printf("Beginning execution; thread data is %d\n", message);
47
 
48
  cyg_thread_delay(200);
49
 
50
  for (;;) {
51
    delay = 200 + (rand() % 50);
52
 
53
    /* note: printf() must be protected by a
54
       call to cyg_mutex_lock() */
55
    cyg_mutex_lock(&cliblock); {
56
      printf("Thread %d: and now a delay of %d clock ticks\n",
57
             message, delay);
58
    }
59
    cyg_mutex_unlock(&cliblock);
60
    cyg_thread_delay(delay);
61
  }
62
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.