rtems_task_wake_after

Fabio Degiovanni - Eicas degiovanni at eicas.it
Fri Jun 20 11:44:39 UTC 2003


 Dear Jarry Needell,
                                thank you very much. First of all, as I 
said I'm new with RTEM. What are sis/gdb and tsim-simulator? I'm using 
the sparc-rtems-gdb (within it I state "sim target", then "load", then 
"run" as I read on the "Getting Started with RTEMS for C/C++ Users").
If I have well understood, you said that in your simulator if you expect 
10s of blocking, you find more that 10s and not as on my Pentium4 2,0Ghz 
nearly 1s. Is it true? If my problem at 30th iteration is an overflow of 
the simulator clock after 2^32 clock  cycles, what could I do to avoid 
this overflow? Does not the clock restart from 0 automatically when it 
reaches its maximum value? Do I have to reset manually the clock?
Thank you very much

Fabio Degiovanni
 
Jerry Needell wrote:

>
> On Friday, Jun 20, 2003, at 06:20 US/Eastern, Fabio Degiovanni - 
> Eicas  wrote:
>
>> Dear Sirs,
>>                I'm new with RTEMS; I installed it on a Linux RedHat  
>> 7.3, my target is SPARC ERC32. I run my application using the ERC32  
>> simulatoror within sparc-rtems-gdb.
>>
>> I tried with this simple example (see code below). I set up  
>> CONFIGURE_MICROSECONDS_PER_TICK 1000 and I ask  
>> rtems_task_wake_after(10000) whitch for me means that the task 
>> should  be blocked for 10s.
>> I have two problems:
>> -rtems_task_wake_after instead of waking after 10s wakes after 1s
>> -after 30 iteration the process doesn't go on; in the debugger I saw  
>> that it
>
>
> On my 500 Mhz system, it runs with sis/gdb, but is much slower than  
> "real time".
> It does stop after 30 iterations as you reported, but I think this is  
> due to a
> limitation of the simulator.
> I also ran it under Jiri Gaislers (www.gaisler.com) tsim - simulator.  
> It runs a lot faster - nearer to "real time" and also stops after 30  
> itereations due to an overflow of the simulator clock after 2^32 
> clock  cycles. I am using the "personal" version which is limited by 
> design. I  expect that sis has the same limitation.
>
>
>
> - Jerry
>
>> is in the funtion _CPU_Thread_Idle_body ()
>>
>> If I askrtems_task_wake_after(1000) rhe process doesn't freeze, but  
>> the time scale is still wrong.
>> Can anyone of you help me?
>>
>> Thank you very much in advance
>>
>> Fabio Degiovanni
>>
>>
>> my code:
>>
>> #include <bsp.h>
>>
>> #include <stdio.h>
>>
>> #include <rtems.h>
>>
>> rtems_task user_application(rtems_task_argument argument);
>>
>> rtems_task Init(
>>  rtems_task_argument ignored
>> )
>> {
>> rtems_id tid;
>> rtems_status_code status;
>> rtems_name name;
>>
>>
>>
>>    name=rtems_build_name('A','P','P','1');
>>
>>     
>> status=rtems_task_create(name,10,RTEMS_MINIMUM_STACK_SIZE,RTEMS_DEFAULT 
>> _MODES,RTEMS_DEFAULT_ATTRIBUTES,&tid);
>>
>>    if(status!=RTEMS_SUCCESSFUL){
>>        printf("rtems_task_create failed with status of %d.\n",status);
>>        exit(1);
>>    }
>>
>>    status=rtems_task_start(tid,user_application,0);
>>
>>
>>    if(status!=RTEMS_SUCCESSFUL){
>>        printf("rtems_task_start failed with status of %d.\n",status);
>>        exit(1);
>>    }
>>
>>    status=rtems_task_delete(RTEMS_SELF);
>>
>>    printf("rtems_task_delete returned with status of %d.\n",status);
>>    exit(1);
>> }
>>
>> rtems_task user_application(rtems_task_argument argument){
>> rtems_interval inter=10000;
>> int i=0;
>>    while(1){
>>        printf("user_application %d\n",i);
>>
>>        rtems_task_wake_after(inter);
>>
>>        i++;
>>        if(i==100){
>>            rtems_shutdown_executive(0);
>>        }
>>    }
>>
>> }
>>
>> /* configuration information */
>>
>> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER /*for stdio*/
>> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER    /*for time  
>> services*/
>>
>> #define CONFIGURE_MICROSECONDS_PER_TICK 1000
>>
>> #define CONFIGURE_MAXIMUM_TASKS 2
>>
>> #define CONFIGURE_INIT_TASK_NAME rtems_build_name('E','X','A','M')
>> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
>>
>> #define CONFIGURE_INIT
>>
>> #include <confdefs.h>
>>
>> /* end of file */
>>
>>
>>
>>
>> my makefile:
>>
>> #
>> #  Makefile
>> #
>>
>> #
>> #  RTEMS_MAKEFILE_PATH is typically set in an environment variable
>> #
>>
>> EXEC=hello.exe
>> PGM=${ARCH}/$(EXEC)
>>
>> # optional managers required
>> MANAGERS=io
>>
>> # C source names
>> CSRCS = test.c
>> COBJS_ = $(CSRCS:.c=.o)
>> COBJS = $(COBJS_:%=${ARCH}/%)
>>
>> # C++ source names
>> CXXSRCS =
>> CXXOBJS_ = $(CXXSRCS:.cc=.o)
>> CXXOBJS = $(CXXOBJS_:%=${ARCH}/%)
>>
>> # AS source names
>> ASSRCS =
>> ASOBJS_ = $(ASSRCS:.s=.o)
>> ASOBJS = $(ASOBJS_:%=${ARCH}/%)
>>
>> # Libraries
>> LIBS = -lrtemsall -lc
>>
>> include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
>>
>> include $(RTEMS_CUSTOM)
>> include $(PROJECT_ROOT)/make/leaf.cfg
>>
>> OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
>>
>> all:    ${ARCH} $(PGM)
>>
>> $(PGM): $(OBJS)
>>    $(make-exe)
>>
>> -- 
>> Dott. Ing. Degiovanni Fabio
>> Eicas Automazione
>> Via Vincenzo Vela, 27 10128 Torino (ITALIA)
>> Telefoni +39-11-562.37.98/562.3088 Fax +39-11-436.06.79
>>
>


-- 
Dott. Ing. Degiovanni Fabio
Eicas Automazione
Via Vincenzo Vela, 27 10128 Torino (ITALIA)
Telefoni +39-11-562.37.98/562.3088 Fax +39-11-436.06.79






More information about the users mailing list