Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173908
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-01 12:35
个人简介

不断超越自己,将更强大!

文章分类

全部博文(35)

文章存档

2022年(1)

2017年(5)

2016年(29)

我的朋友

分类: 嵌入式

2016-03-28 15:55:07

在嵌入式Linux下如何实现用户程序的多任务呢?可以用多线程来实现。

注意:如果线程创建后,主函数应该为一个while(1)的循环,而不能退出,否则,所有的线程全部退出了。。。
也就是主函数不能返回。


测试程序如下:


  1. /*thread.c*/
  2. #include <stdio.h>
  3. #include <pthread.h>

  4. /*线程1*/
  5. void thread_1(void)
  6. {
  7.     while(1)
  8.     {
  9.         printf("thread 1 running!\n");
  10.         sleep(1);
  11.     }
  12. }

  13. /*线程2*/
  14. void thread_2(void)
  15. {
  16.     while(1)
  17.     {
  18.         printf("thread 2 running!\n");
  19.         sleep(1);
  20.     }
  21. }
  22. /*线程3*/
  23. void thread_3(void)
  24. {
  25.     while(1)
  26.     {
  27.         printf("thread 3 running!\n");
  28.         sleep(1);
  29.     }
  30. }

  31. /*线程4*/
  32. void thread_4(void)
  33. {
  34.     while(1)
  35.     {
  36.         printf("thread 4 running!\n");
  37.         sleep(1);
  38.     }
  39. }

  40. int main(void)
  41. {
  42.         pthread_t id_1,id_2,id_3,id_4;
  43.         int i,ret;
  44.     printf("thread test!!!\n");

  45. /*创建线程一*/
  46.         ret=pthread_create(&id_1,NULL,(void *) thread_1,NULL);
  47.         if(ret!=0)
  48.         {
  49.             printf("Create pthread 1 error!\n");
  50.             return -1;
  51.         }
  52.     else
  53.     {
  54.         printf("thread 1 OK!\n");
  55.     }

  56. /*创建线程二*/
  57.          ret=pthread_create(&id_2,NULL,(void *) thread_2,NULL);
  58.         if(ret!=0)
  59.         {
  60.             printf("Create pthread 2 error!\n");
  61.             return -1;
  62.         }
  63.     else
  64.     {
  65.         printf("thread 2 OK!\n");
  66.     }

  67. /*创建线程三*/
  68.         ret=pthread_create(&id_3,NULL,(void *) thread_3,NULL);
  69.         if(ret!=0)
  70.         {
  71.             printf("Create pthread 3 error!\n");
  72.             return -1;
  73.         }
  74.     else
  75.     {
  76.         printf("thread 3 OK!\n");
  77.     }

  78. /*创建线程四*/
  79.         ret=pthread_create(&id_4,NULL,(void *) thread_4,NULL);
  80.         if(ret!=0)
  81.         {
  82.             printf("Create pthread 4 error!\n");
  83.             return -1;
  84.         }
  85.     else
  86.     {
  87.         printf("thread 4 OK!\n");
  88.     }

  89.     while(1)
  90.     {
  91.         sleep(1);        //do something or delay
  92.         printf("main thread!\n");
  93.     }

  94.     return 0;
  95. }

Makefile文件如下:


点击(此处)折叠或打开

  1. all:
  2.     gcc thread.c -o thread_test -lpthread
  3. clean:
  4.     rm -rf thread_test *.o

嵌入式Linux下需要使用交叉编译器编译:Makefile如下:


点击(此处)折叠或打开

  1. all:
  2.     arm-none-linux-gnueabi-gcc thread.c -o thread_test -lpthread
  3. clean:
  4.     rm -rf thread_test *.o

运行效果如下:


各个任务交替的运行,因为延时是一样的,次序,可能一致,也可能不一致!!

可能还有优先级或是调度的问题,每个任务都是while(1)的死循环,因此,实现了简单的多任务(独立的任务)的实现。
至于多任务间的通信,还需要进一步实现。


阅读(3591) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~