annotate examples/twothreads.c @ 2992:a6dd6b83222a

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