1 /*
2 * main.c
3 * To demonstrate APIs related to mbf
4 */
5
6 #include <basic.h>
7 #include <tk/tkernel.h>
8 #include <stdio.h>
9 #ifdef DEBUG
10 #include <util/tmonitor.h>
11 #endif
12
13 IMPORT void task1 (INT, VP);
14 ID taskid1 = -1;
15 ID taskid2 = -1;
16 ID mbf_id = -1;
17
18 /*****************************************************************************
19 task1
20 ******************************************************************************/
21 IMPORT void
22 task1 (INT stacd, VP exinf)
23 {
24 ER ercd = 0;
25 T_RMBF mbf;
26 UINT Msg;
27
28 printf ("This is task %d waiting for mbf\n", taskid1);
29
30 ercd = tk_ref_mbf (mbf_id, &mbf);
31 if (ercd < 0)
32 {
33 printf ("ref mbf error %x\n", ercd);
34 tk_del_mbf (mbf_id);
35 goto exit;
36 }
37 printf ("msg sz = %d free size = %d\n", mbf.msgsz, mbf.frbufsz);
38 printf ("wait for msg buf %d\n\n", mbf_id);
39 ercd = tk_rcv_mbf (mbf_id, (VP) & Msg, TMO_FEVR);
40 if (ercd < 0)
41 {
42 printf ("rcv mbf error %x\n", ercd);
43 tk_del_mbf (mbf_id);
44 goto exit;
45 }
46 printf ("data rcv = %x\n", Msg);
47 ercd = tk_del_mbf (mbf_id);
48 if (ercd < 0)
49 printf ("del mbf error %x\n", ercd);
50 exit:
51 printf ("task 1 exit and del task, msg buf now\n");
52 taskid1 = -1;
53 mbf_id = -1;
54 tk_exd_tsk ();
55 }
56
57
58 /******************************************************************************
59 task2
60 *****************************************************************************/
61 IMPORT void
62 task2 (INT stacd, VP exinf)
63 {
64 UW buf = 0;
65 ER ercd = 0;
66
67 buf = 0xAA55AA55;
68 printf ("\ttask %d snd msg buf %d, data = %x\n", taskid2, mbf_id, buf);
69 ercd = tk_snd_mbf (mbf_id, (VP) & buf, 4, TMO_FEVR);
70 if (ercd < 0)
71 {
72 printf ("\tsnd mbf fails error %x\n", ercd);
73 tk_del_mbf (mbf_id);
74 }
75 printf ("\ttask 2 exit and del task now\n");
76 taskid2 = -1;
77 tk_exd_tsk ();
78 }
79
80
81 /******************************************************************************
82 main
83 ******************************************************************************/
84 EXPORT ER
85 main (INT ac, UB * av[])
86 {
87 T_CTSK ctsk;
88 T_CMBF _mbf;
89
90 #ifdef DEBUG
91 tm_monitor ();
92 #endif
93 printf ("main: (ac = %d)\n", ac);
94
95 if (ac < 0)
96 {
97 if (taskid1 >= 0)
98 {
99 tk_ter_tsk (taskid1);
100 tk_del_tsk (taskid1);
101 }
102 if (taskid2 >= 0)
103 {
104 tk_ter_tsk (taskid2);
105 tk_del_tsk (taskid2);
106 }
107 goto ext;
108 }
109 _mbf.exinf = (VP) 0x00000000;
110 _mbf.mbfatr = TA_TFIFO;
111 _mbf.bufsz = 0;
112 _mbf.maxmsz = sizeof (UW);
113 mbf_id = tk_cre_mbf (&_mbf);
114 printf ("tk_cre_mbf: (mbf id = %d)\n", mbf_id);
115 if (mbf_id < E_OK)
116 {
117 printf ("cre mbx fails = %x\n", mbf_id);
118 goto ext;
119 }
120
121 ctsk.exinf = (VP) 0x74736574;
122 ctsk.tskatr = TA_HLNG | TA_RNG0;
123 ctsk.task = task1;
124 ctsk.itskpri = 80;
125 ctsk.stksz = 1024 * 4;
126 taskid1 = tk_cre_tsk (&ctsk);
127 printf ("tk_cre_tsk: (task1id = %d)\n", taskid1);
128 if (taskid1 < E_OK)
129 {
130 tk_del_mbf (mbf_id);
131 printf ("cre tsk 1 fails = %x\n", taskid1);
132 goto ext;
133 }
134
135 ctsk.exinf = (VP) 0x74736574;
136 ctsk.tskatr = TA_HLNG | TA_RNG0;
137 ctsk.task = task2;
138 ctsk.itskpri = 80;
139 ctsk.stksz = 1024 * 4;
140 taskid2 = tk_cre_tsk (&ctsk);
141 printf ("tk_cre_tsk: (task2id = %d)\n", taskid2);
142 if (taskid2 < E_OK)
143 {
144 tk_del_mbf (mbf_id);
145 tk_del_tsk (taskid1);
146 printf ("cre tsk 2 fails = %x\n", taskid2);
147 goto ext;
148 }
149
150 printf ("start tasks now\n");
151 tk_sta_tsk (taskid1, 0);
152
153 tk_sta_tsk (taskid2, 0);
154
155 tk_dly_tsk (4000);
156 /*end */
157 ext:
158 printf ("main ended\n\n");
159 return 0;
160 }
Comments
Click here to Post a Comment