#include <native/timer.h>
#include <native/sem.h>
-#include <rtdk.h>
+#include <rtdk.h>
+RT_TASK task[5];
+RT_SEM sem;
-#define ITER 10
-
-static RT_TASK t1;
-static RT_TASK t2;
-
-int global = 0;
-
-void taskOne(void *arg)
-{
- int i;
- for (i=0; i < ITER; i++)
- {
- rt_printf("I am taskOne and global = %d................\n", ++global);
- }
-}
-
-void taskTwo(void *arg)
+void demo(void *arg)
{
- int i;
- for (i=0; i < ITER; i++)
- {
- rt_printf("I am taskTwo and global = %d----------------\n", --global);
- }
+ int num = * (int *)arg;
+ RT_TASK *curtask;
+ RT_TASK_INFO curtaskinfo;
+ curtask=rt_task_self();
+ rt_task_inquire(curtask, &curtaskinfo);
+ rt_sem_p(&sem, TM_INFINITE);
+ rt_printf("Task name: %s - Argument %d\n", curtaskinfo.name, num);
+ rt_sem_v(&sem);
}
int main(int argc, char* argv[])
{
- /* Perform auto-init of rt_print buffers if the task doesn't do so */
- rt_print_auto_init(1);
-
- /* Avoids memory swapping for this program */
- mlockall(MCL_CURRENT|MCL_FUTURE);
-
- /* create the two tasks */
- rt_task_create(&t1, "task1", 0, 1, 0);
- rt_task_create(&t2, "task2", 0, 1, 0);
-
- /* start the two tasks */
- rt_task_start(&t1, &taskOne, 0);
- rt_task_start(&t2, &taskTwo, 0);
-
- return 0;
+ char str[10] ;
+ int i;
+
+ rt_print_auto_init(1);
+ mlockall(MCL_CURRENT | MCL_FUTURE);
+ rt_printf("start task\n");
+
+ rt_sem_create(&sem, "sem", 0, S_FIFO);
+
+ for (i=0; i<5; i++)
+ {
+ sprintf(str, "hello-%d", i);
+ rt_task_create(&task[i], str, 0, 50+i, 0);
+ rt_task_start(&task[i], &demo, &i);
+ }
+// rt_sem_v(&sem);
+ rt_sem_broadcast(&sem);
}
-
-