OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5079|回复: 4

第四章 UOL之线程

[复制链接]

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
679
金钱
679
注册时间
2013-9-23
在线时间
95 小时
发表于 2014-5-11 04:25:45 | 显示全部楼层 |阅读模式
线程在单片机操作系统中又可以称作任务。在UOL语言中,线程是一种可以被中断的一段程序或者方法,该线程脱离main程序独立运行。每个线程都拥有自己的栈空间,这样如果当两个线程同时运行同一个方法的时候不会发生资源冲突。在UOL语言中,如果一个方法被interrupt这个关键字所定义,那么这个方法就是一个线程。例如:

public class Foo
{
     public interrupt void thread1()
    {
        while(true)
       {
          System.out.printString("thread 1");
          System.out.newLine();
          System.sleep(1000);
       }
    }

    public interrupt void thread2()
    {
        while(true)
        {
               System.out.printString("thread 2");
               System.out.newLine();
               System.sleep(1000);
        }
    }
}

在Foo类中,我们可以看到thread1和thread2方法被关键字interrupt所修饰。那么在调用这两个方法的时候,相当于创建了两个独立运行的线程,例如:

public class Test
{
     public static void main()
    {
         //创建Foo的对象
         Foo foo = new Foo();
         //调用Foo中的线程
         foo.thread1();
         foo.thread2();
         while(true)
         {

         }
     }
}
上面代码我们可以看到,在main方法中,我们分别调用了thread1和thread2各一次,相当于创建了2个线程。编译上述代码后,我们可以在串口助手中看到“thread 1”和“thread 2”这两个字符串间隔一秒显示。如图



当线程方法声明周期结束后,即退出方法,线程自动销毁。

线程的实现需要单片机上运行操作系统。在mini stm32中,我使用了FreeRTOS作为提供线程的操作系统。在UOL语言上实现线程需要掌握如何使用操作系统,同时需要掌握如何在虚拟机上移植操作系统。后续章节中会详细介绍如何在虚拟机中实现线程和事件机制。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-5-11 17:13:01 | 显示全部楼层
这样还是不是同时运行的哦.
这种多线程我感觉要CPU支持才行,光通过软件,是没法做到的.
CPU只能单一进程的执行代码,怎么可以同时支持2个线程?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
679
金钱
679
注册时间
2013-9-23
在线时间
95 小时
 楼主| 发表于 2014-5-11 22:28:23 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
可能我没说清楚,我说的是创建了两个线程。一次是只能运行一个线程。mian函数本身也是一个线程
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-5-11 22:37:49 | 显示全部楼层
回复【3楼】edmund:
---------------------------------
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-2-5
在线时间
13 小时
发表于 2016-2-10 21:02:38 | 显示全部楼层
很好啊.谢谢楼主啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 13:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表