mani bhatti wrote: > Hi friends > i want to create two aperiodic tasks .I have made a small example and created > two tasks and set their priority equal.i have removed rt_task_setPeriodic > function from the code but problem is that the task which is started first > only it works and the second task which is started later never shows up.If > some one tells me the cause of this problem i would be very grateful.The > source code is given below.
First of all, please post such requests for help to the xenomai-help
list (I already changed the address in this reply). Xenomai-core is
intended for discussions about the internals of Xenomai.
>
> void zaehler1_task(void *cookie){
> int ret;
>
> // ************************* Xenomai-Krempel
> ********************************************************************
> // ret = rt_task_set_periodic(NULL, TM_NOW,
> rt_timer_ns2ticks(task_period_ns1));
> // if (ret) {
> // printf("error while set periodic, code %d\n",ret);
> // return;
> // }
> // ************************* Ende Xenomai-Krempel
> ****************************************************************
Well, by commenting out this "Xenomai-Krempel" (be careful, people on
these lists may understand German ;)), your real-time task below enters
an infinite loop without any delays (except for the printing).
rt_task_wait_period always fails if you do not switch periodic mode on.
Therefore, the second task never gets a chance to be started.
What was your motivation behind this? You need some clocking for the
real-time task, either periodical timer-driven or some explicit
rt_task_sleep, or you pend it on an external event (provided by a driver
or whatever).
>
>
> // ********************** Beginn des wiederholt ausgefuehrten Codes
> **********************************************
> while(!end){
> ret = rt_task_set_mode(0, T_PRIMARY, NULL);
> if (ret) {
> printf("error while rt_task_set_mode, code %d\n",ret);
> return;
> }
> ret = rt_task_wait_period();
> printf("T1:Start\n");
>
> if (ret) {
> // printf("error while rt_task_wait_period, code
> %d\n",ret);
> // return;
> }
> count1++;
>
> printf("T1:Ende:%d\n", count1);
>
> fflush(NULL);
> }
> // ********************** Ende des wiederholt ausgefuehrten Codes
> ***********************************************
> }
>
> void zaehler2_task(void *cookie){
> int ret;
> long ii;
> long jj;
> double a;
>
> // ************************* Xenomai-Krempel
> ********************************************************************
> // ret = rt_task_set_periodic(NULL, TM_NOW,
> rt_timer_ns2ticks(task_period_ns2));
> // if (ret) {
> // printf("error while set periodic, code %d\n",ret);
> // return;
> // }
> // ************************* Ende Xenomai-Krempel
> ****************************************************************
>
> // ********************** Beginn des wiederholt ausgefuehrten Codes
> **********************************************
> while(!end){
> ret = rt_task_set_mode(0, T_PRIMARY, NULL);
> if (ret) {
> printf("error while rt_task_set_mode, code %d\n",ret);
> return;
> }
> ret = rt_task_wait_period();
>
> printf("\t\tT2:Start\n");
>
> if (ret) {
> // printf("error while rt_task_wait_period, code
> %d\n",ret);
> // return;
> }
>
> // for(ii=0; ii<200; ii++) {
> // for(jj=0; jj<1000000; jj++) {
> // a = (double)ii * (double)jj;
> // }
> // }
>
> count2++;
> printf("\t\tT2:Ende:%d\n", count2++);
>
> fflush(NULL);
> }
> // ********************** Ende des wiederholt ausgefuehrten Codes **
>
>
> int main(int argc, char *argv[]) {
> int err, ret;
> printf("start\n");
> // install signal handler
> signal(SIGTERM, clean_exit);
> signal(SIGINT, clean_exit);
> // start timer
> ret = rt_timer_start(TM_ONESHOT);
> switch (ret) {
> case 0: printf("Mit dem Fahrrad nich inn ersten
> Wagen\n\n");
> break;
> case -EBUSY: printf("timer is running\n");
> break;
> case -ENOSYS: printf("can't start timer\n");
> return ret;
> }
>
> /* create zaehler1_task */
> err =
> rt_task_create(&zaehler1_task_ptr,"Zaehler_1",STACK_SIZE,STD_PRIO1,0);
> /* create zaehler2_task */
> err =
> rt_task_create(&zaehler2_task_ptr,"Zaehler_2",STACK_SIZE,STD_PRIO2,0);
>
> /* start zaehler1_task */
> err = rt_task_start(&zaehler1_task_ptr,&zaehler1_task,NULL);
>
> /* start zaehler2_task */
> err = rt_task_start(&zaehler2_task_ptr,&zaehler2_task,NULL);
>
> // wait for signal & return of signal handler
> pause();
> fflush(NULL);
> }
>
Jan
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Xenomai-help mailing list [email protected] https://mail.gna.org/listinfo/xenomai-help
