source: soft/giet_vm/apps/router/main.c @ 160

Last change on this file since 160 was 160, checked in by karaoui, 12 years ago

giet-vm new version

File size: 3.8 KB
Line 
1#include "stdio.h"
2#include "srl.h"
3
4#define NMAX 200
5
6/////////////////////////////////////////////
7__attribute__ ((constructor)) void producer()
8{
9
10    unsigned int        n;
11    unsigned int        buf;
12    srl_mwmr_t      mwmr;
13
14    srl_log_printf( TRACE, "*** Starting task producer on processor %d", procid() );
15    srl_log_printf( TRACE, " at cycle %d ***\n\n", proctime() );
16
17    if( vobj_get_vbase( "router" , "mwmr_in", MWMR, (unsigned int*)&mwmr ) )
18    {
19        srl_log_printf( NONE, "\n[ERROR] in producer task :\n");
20        srl_log_printf( NONE, "          undefined <mwmr_in> channel: %d\n", mwmr);
21        srl_log_printf( TRACE, "*** &mwmr_in = %x\n\n", (unsigned int)mwmr );
22        exit();
23    }
24    else
25    {
26        srl_log_printf( TRACE, "*** &mwmr_in = %x\n\n", (unsigned int)mwmr );
27    }
28
29    // main loop : token value = departure index
30    for(n = 0 ; n < NMAX ; n++) 
31    { 
32        buf = n;
33        srl_mwmr_write( mwmr, &buf , 1 );
34        srl_log_printf( TRACE, "transmitted value : %d\n", buf);
35    }
36
37    srl_log_printf( TRACE, "\n*** Completing producer task at cycle %d ***\n", proctime());
38    exit();
39
40} // end producer()
41
42/////////////////////////////////////////////
43__attribute__ ((constructor)) void consumer()
44{
45    unsigned int        n;
46    unsigned int        buf[5];
47    srl_mwmr_t  mwmr;
48
49    srl_log_printf( TRACE, "*** Starting task consumer on processor %d", procid() );
50    srl_log_printf( TRACE, " at cycle %d ***\n\n", proctime() );
51
52    if ( vobj_get_vbase( "router" , "mwmr_out", MWMR, (unsigned int*)&mwmr ) )
53    {
54        srl_log_printf( NONE, "\n[ERROR] in consumer task :\n");
55        srl_log_printf( NONE, "          undefined <mwmr_out> channel\n");
56        exit();
57    }
58    else
59    {
60        srl_log_printf( TRACE, "*** &mwmr_out = %x\n\n", (unsigned int)mwmr );
61    }
62
63    // main loop : display token arrival index and value
64    for(n = 0 ; n < NMAX ; n = n+5 ) 
65    { 
66        srl_mwmr_read( mwmr, buf , 5 );
67        srl_log_printf( TRACE, "received token %d / value = %d\n", n  , buf[0]);
68        srl_log_printf( TRACE, "received token %d / value = %d\n", n+1, buf[1]);
69        srl_log_printf( TRACE, "received token %d / value = %d\n", n+2, buf[2]);
70        srl_log_printf( TRACE, "received token %d / value = %d\n", n+3, buf[3]);
71        srl_log_printf( TRACE, "received token %d / value = %d\n", n+4, buf[4]);
72    }
73
74    srl_log_printf( TRACE, "\n*** Completing consumer task at cycle %d ***\n", proctime());
75    exit();
76
77} // end consumer()
78
79///////////////////////////////////////////
80__attribute__ ((constructor)) void router()
81{
82    unsigned int        buf[2];
83    unsigned int        x;
84    unsigned int        tempo;
85    srl_mwmr_t          mwmr_in ;
86    srl_mwmr_t      mwmr_out ;
87
88   
89    srl_log_printf( TRACE, "*** Starting task router on processor %d at cycle %d ***\n\n", 
90                procid(), proctime() );
91
92    if ( vobj_get_vbase( "router" , "mwmr_out", MWMR, (unsigned int*)&mwmr_out ) )
93    {
94        srl_log( NONE, "\n[ERROR] in router task :\n");
95        srl_log( NONE, "          undefined <mwmr_in> channel\n");
96        exit();
97    }
98    else
99    {
100        srl_log_printf( TRACE, "*** &mwmr_out = %x\n\n", (unsigned int)mwmr_out );
101    }
102
103    if (  vobj_get_vbase( "router" , "mwmr_in", MWMR, (unsigned int*)&mwmr_in ) )
104    {
105        srl_log( NONE, "\n[ERROR] in router task :\n");
106        srl_log( NONE, "          undefined <mwmr_out> channel\n");
107        exit();
108    }
109    else
110    {
111        srl_log_printf( TRACE, "*** &mwmr_in = %x\n\n", (unsigned int)mwmr_out );
112    }
113
114    // main loop
115    while(1)
116    {
117        srl_mwmr_read( mwmr_in , buf , 2 );
118        tempo = rand() >> 6;
119        for ( x = 0 ; x < tempo ; x++ ) asm volatile ("");
120        srl_log_printf( TRACE, "token value : %d / temporisation = %d\n", buf[0], tempo);
121        srl_log_printf( TRACE, "token value : %d / temporisation = %d\n", buf[1], tempo);
122        srl_mwmr_write( mwmr_out, buf , 2 );
123    }
124}
Note: See TracBrowser for help on using the repository browser.