<span class="Apple-style-span" style="color:rgb(0,0,0);font-family:tahoma,'new york',times,serif;font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline!important;float:none">According to RTEMS POSIX API User’s Guide</span><span style="background-color:rgb(255,255,255);color:rgb(0,0,0)"> "</span><span class="Apple-style-span" style="color:rgb(0,0,0);font-family:tahoma,'new york',times,serif;font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline!important;float:none">RTEMS provides no memory protection"! so what does this</span><span style="background-color:rgb(255,255,255);color:rgb(0,0,0)"> mean?</span><br>
<br><div class="gmail_quote">On Wed, Jul 18, 2012 at 8:46 PM, Gedare Bloom <span dir="ltr"><<a href="mailto:gedare@rtems.org" target="_blank">gedare@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
You are right to have some concern because your global variables will<br>
need to be locked somehow (posix mutex/semaphore) since they are<br>
accessed by both your 'main' task and the pthread that is created.<br>
This is a correctness problem; without locking this program's behavior<br>
is poorly defined I would guess. I assume that sharing the global<br>
variables between 'main' and the spawned thread is the desired<br>
behavior.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Gedare<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Wed, Jul 18, 2012 at 11:58 AM, m.shahverdi <<a href="mailto:sspardis2@gmail.com">sspardis2@gmail.com</a>> wrote:<br>
> This is my application that is written in C,I write the main code till now.<br>
> this app is an elevator that goes up and down in a 4 floors building:<br>
><br>
><br>
> #include<stdio.h><br>
> #include<stdlib.h><br>
> #include<string.h><br>
> #include<stdbool.h><br>
> #include<time.h><br>
> #include <sys/time.h><br>
> #include <sys/types.h><br>
> #include <unistd.h><br>
><br>
><br>
> #include <signal.h><br>
><br>
> void handler(int signo)<br>
> {<br>
>   return;<br>
> }<br>
><br>
><br>
> typedef struct person prs;<br>
> int elevator_run();<br>
> struct person<br>
> {<br>
>     int place;<br>
>     int distination;<br>
>     char direction;<br>
>     bool inout;// in:true,out:false<br>
>     bool exit;//if person exits true<br>
>     prs * next;<br>
> };<br>
> int stage[5];///////to know stop in which level<br>
> int up_down;///////to know direct  1 for up 0 for down  2 for none<br>
> int stop_move;/////to know if elevator is stop or no stop 0 move 1<br>
> int current_place;<br>
> int distination;<br>
> time_t base;<br>
> int xx;<br>
> int main()<br>
>       {<br>
>     int place;<br>
>     int direct;<br>
>     int counter_in=0;<br>
>     int counter_out=0;<br>
>     int in_out;////in=1;out=0<br>
>     int dis;///to get distination of person in elevator<br>
>     prs* headin;<br>
>     prs* headout;<br>
>     prs*newnode;<br>
>     prs*nextnode;<br>
>     prs*node;<br>
>     headin=(prs*)malloc(sizeof(prs));<br>
>     headout=(prs*)malloc(sizeof(prs));<br>
>     pthread_t thread_id;<br>
><br>
>         pthread_create(&thread_id, NULL,  elevator_run, NULL);<br>
>           struct sigaction sa;<br>
><br>
>   sa.sa_handler = handler;<br>
>   sigemptyset(&sa.sa_mask);<br>
>   sa.sa_flags = 0;<br>
>   sigaction(SIGALRM, &sa, NULL);<br>
><br>
><br>
><br>
>     if(headin==NULL)<br>
>     {<br>
>         printf("\nError in memory allocation!\n ");<br>
>         return 1;<br>
>     }<br>
>     if(headout==NULL)<br>
>     {<br>
>         printf("\nError in memory allocation!\n ");<br>
>         return 1;<br>
>     }<br>
>     int update;<br>
>     printf("This is elevator stopped at ground \n tell us your place and<br>
> distination ");<br>
>     while(1)<br>
>     {<br>
>         update=0;<br>
>         alarm(1);<br>
><br>
>   if (scanf("%d", &in_out) == 1)<br>
>   {<br>
>     alarm(0); // cancel the alarm<br>
>   }<br>
>   else<br>
>   {<br>
>     continue;<br>
>   }<br>
>          //   scanf("% d", & in_out);<br>
><br>
><br>
><br>
>         if (in_out==1)<br>
>         {<br>
>           scanf("%d",& dis);<br>
>               if(current_place==distination)<br>
>           {<br>
>               update=1;<br>
>               distination=dis;<br>
>           }<br>
>               else if((up_down==1 && distination<dis) ||(up_down==0 &&<br>
> distination>dis))<br>
>               {<br>
>                   update=1;<br>
>                   stage[distination]=1;<br>
>                 distination=dis;<br>
>               }<br>
>               else if((up_down==1 && current_place<dis<distination)<br>
> ||(up_down==0 && distination<dis<current_place))<br>
>                        stage[dis]=1;<br>
>                     else<br>
>                     {<br>
>                        newnode=(prs*)malloc(sizeof(prs));<br>
>                        if(newnode==NULL)<br>
>                           {<br>
>                         printf("\nError in memory allocation!\n ");<br>
>                         return 1;<br>
>                           }<br>
>                        counter_in++;<br>
>                        newnode->exit=false;<br>
>                        newnode->distination=dis;<br>
>                           newnode->next=headin->next;<br>
>                           headin->next=newnode;<br>
><br>
>             }<br>
>            }<br>
>          else {<br>
>             scanf("%d %d",& place,& direct);<br>
>             if(direct=='q')<br>
>             return 1;<br>
>         if(stop_move==0){<br>
>           distination = place;<br>
>           printf("/////");}<br>
>           else {<br>
>         if(direct==up_down &&((up_down==1&&<br>
> current_place<=place<=distination) ||(up_down==0&&<br>
> current_place>=place>=distination)))<br>
>            stage[place]=1;<br>
>         if(direct==up_down && ((up_down==1 && place > distination) ||<br>
> (up_down==0 && place < distination)))<br>
>            {<br>
>                stage[distination]=1;<br>
>                distination=place;<br>
>                update=1;<br>
>            }<br>
>         else<br>
>          {<br>
>            newnode=(prs*)malloc(sizeof(prs));<br>
>            if(newnode==NULL)<br>
>              {<br>
>             printf("\nError in memory allocation!\n ");<br>
>             return 1;<br>
>          }<br>
>            counter_out++;<br>
>            newnode->exit=false;<br>
>            newnode->next=headin->next;<br>
>            headin->next=newnode;<br>
>            newnode->place=place;<br>
>          }<br>
><br>
>           }<br>
>           }<br>
>     }<br>
> }<br>
><br>
><br>
> int elevator_run()<br>
> {<br>
><br>
>    time_t current;<br>
>    int i;<br>
>    int y=0;<br>
>    //float x=1;<br>
>    for(i=0;i<5;i++)<br>
>    stage[i]=0;<br>
>    up_down=1;<br>
>    stop_move=0;/////to know if elevator is stop or no<br>
>    current_place=0;<br>
>    distination=0;<br>
><br>
>    while(1)<br>
>    {<br>
><br>
>       if(stop_move==1)<br>
>       {<br>
>         if(up_down==1)<br>
>     {<br>
><br>
>       current=time(NULL);<br>
><br>
>       if(current==base + 5)<br>
>       {<br>
>       base=current;<br>
>       y=y+1;<br>
>       }<br>
>     //  printf("y = %f" ,y);<br>
>       }<br>
>     else<br>
>      {<br>
>      current=time(NULL);<br>
><br>
>      if(current==base + 5)<br>
>       {<br>
>       base=current;<br>
>       y=y-1;<br>
>       }<br>
>     }<br>
>     }<br>
>     if(stop_move==0 && distination > current_place)<br>
>     {<br>
>         stop_move=1;<br>
>         base=time(NULL);<br>
>         up_down=1;<br>
>         printf("salam");<br>
>     }<br>
>     if(stop_move==0 && distination < current_place)<br>
>     {<br>
>         stop_move=1;<br>
>         base=time(NULL);<br>
>         up_down=0;<br>
>     }<br>
><br>
>       if(y == 0) {current_place=0;if(distination==0) stop_move=0;}<br>
>       if(y == 1 && current_place !=1) { printf("place1"); current_place=1;<br>
> if(distination==1) stop_move=0;}<br>
>       if(y == 2 && current_place != 2)<br>
> {current_place=2;printf("place2");if(distination==2) stop_move=0;}<br>
>       if(y == 3 && current_place != 3)<br>
> {current_place=3;printf("place3");if(distination==3) stop_move=0;}<br>
>       if(y == 4 && current_place != 4)<br>
> {current_place=4;printf("place4");if(distination==4) stop_move=0;}<br>
><br>
><br>
>    }<br>
> }<br>
><br>
> On Wed, Jul 18, 2012 at 8:11 PM, Till Straumann <<a href="mailto:strauman@slac.stanford.edu">strauman@slac.stanford.edu</a>><br>
> wrote:<br>
>><br>
>> Maybe you could share some example code so that we understand<br>
>> what exactly you're trying to do?<br>
>><br>
>> T.<br>
>><br>
>><br>
>> On 07/18/2012 10:37 AM, m.shahverdi wrote:<br>
>><br>
>> These two threads have some common fields that I use mutex on these fields<br>
>> but in general I read in c_user document of RTEMS that this OS has a flat<br>
>> memory and I'm worry about unsafe access to memory that each thread allocate<br>
>> in the beginning of execution.<br>
>><br>
>> On Wed, Jul 18, 2012 at 7:42 PM, Thomas Doerfler<br>
>> <<a href="mailto:Thomas.Doerfler@embedded-brains.de">Thomas.Doerfler@embedded-brains.de</a>> wrote:<br>
>>><br>
>>> Hi,<br>
>>><br>
>>> funny topic: one question, many different answers, none of them is<br>
>>> wrong ;-)<br>
>>><br>
>>> Maybe you can specify, what you expect from a "memory protection"<br>
>>> mechanism:<br>
>>> - A way to synchronize two threads, so only one is allowed to<br>
>>> access/write to a memory area?<br>
>>> - A way to detect, when a thread inadvertedly tries to access/write to<br>
>>> another thread's private area?<br>
>>> - Something different?<br>
>>><br>
>>> wkr,<br>
>>><br>
>>> Thomas.<br>
>>><br>
>>> Am 18.07.2012 16:20, schrieb m.shahverdi:<br>
>>> > Hi, I have an application with two threads but I don't know how to<br>
>>> > protect memory of each thread against other thread.please help me.<br>
>>> ><br>
>>> > thanks<br>
>>> ><br>
>>> ><br>
>>> ><br>
>>> > _______________________________________________ rtems-users mailing<br>
>>> > list <a href="mailto:rtems-users@rtems.org">rtems-users@rtems.org</a><br>
>>> > <a href="http://www.rtems.org/mailman/listinfo/rtems-users" target="_blank">http://www.rtems.org/mailman/listinfo/rtems-users</a><br>
>>> ><br>
>>><br>
>>><br>
>>> --<br>
>>> IMD Ingenieurbuero fuer Microcomputertechnik<br>
>>> Thomas Doerfler           Herbststrasse 8<br>
>>> D-82178 Puchheim          Germany<br>
>>> email:    <a href="mailto:Thomas.Doerfler@imd-systems.de">Thomas.Doerfler@imd-systems.de</a><br>
>>> PGP public key available on request<br>
>>><br>
>>><br>
>>> --<br>
>>> --------------------------------------------<br>
>>> embedded brains GmbH<br>
>>> Thomas Doerfler<br>
>>> Obere Lagerstrasse 30<br>
>>> D-82178 Puchheim<br>
>>> Germany<br>
>>> email: <a href="mailto:Thomas.Doerfler@embedded-brains.de">Thomas.Doerfler@embedded-brains.de</a><br>
>>> Phone: +49-89-18908079-2<br>
>>> Fax: +49-89-18908079-9<br>
>>> PGP: Public key available on request.<br>
>>><br>
>>> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
>>><br>
>>> _______________________________________________<br>
>>> rtems-users mailing list<br>
>>> <a href="mailto:rtems-users@rtems.org">rtems-users@rtems.org</a><br>
>>> <a href="http://www.rtems.org/mailman/listinfo/rtems-users" target="_blank">http://www.rtems.org/mailman/listinfo/rtems-users</a><br>
>><br>
>><br>
>><br>
>><br>
>> --<br>
>><br>
>> به "هوالحی" زنده می کند؛<br>
>><br>
>> آنسان که می میراند به "هوالممیت"..<br>
>><br>
>> ما را به "هوالشهید" است که مدام می میراند و زنده می کند..<br>
>><br>
>><br>
>><br>
>><br>
><br>
><br>
><br>
> --<br>
><br>
> به "هوالحی" زنده می کند؛<br>
><br>
> آنسان که می میراند به "هوالممیت"..<br>
><br>
> ما را به "هوالشهید" است که مدام می میراند و زنده می کند..<br>
><br>
><br>
><br>
> _______________________________________________<br>
> rtems-users mailing list<br>
> <a href="mailto:rtems-users@rtems.org">rtems-users@rtems.org</a><br>
> <a href="http://www.rtems.org/mailman/listinfo/rtems-users" target="_blank">http://www.rtems.org/mailman/listinfo/rtems-users</a><br>
><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><p align="right"><font size="3"><span lang="FA">به "هوالحی" زنده می کند؛</span></font></p><p style="margin:0in 0in 10pt;text-align:right;direction:rtl" dir="RTL">
<span lang="FA"><font size="3">آنسان که می میراند به "هوالممیت"..</font></span></p><p style="margin:0in 0in 10pt;text-align:right;direction:rtl" dir="RTL"><span lang="FA"><font size="3">ما را به "هوالشهید" است که مدام می
میراند و زنده می کند..</font></span></p><p align="right"><font face="Times New Roman" size="3">

</font></p><br>