XMOS软件开发入门(4) - xc语言(2)之并发机制

本篇目的

继续XMOS的程序开发-xc语言的并发机制。

开发环境

  • 硬件平台使用官方评估板"xCORE VOCAL FUSION XP-VF3100-BASE"
  • IDE开发环境win10 下的 xTIMEcomposer

XC和C的区别简单说明

XC对C做了扩展,多个一些C没有的东西;有些则和C有区别。但是基本上C能用的,XC上都能用,除了不支持这几点:

  • goto语句
  • 位域
  • 函数指针
  • C99风格的指定初始化

比如C支持结构这样定义

struct test
{
  int a:1;
  int b:31
  int c;    
};

但是xc不支持a和b这样的位域;

C99风格的指定初始化可以对上面的结构变量这样初始化,指定初始化c

struct test t = 
{
  .c = 123;  
};

但是xc不支持

xc和c不一样的以及扩展的则比较多,后面的描述都是对xc特有的描述。

并发执行机制

xC最基本的,不同于C的就是并发的执行机制。

使用par结构来指定(parallel的缩写)。比如下面的程序:

#include <stdio.h>
#include <platform.h>

int main () {
    par {
        printf("11111111111\n");
        printf("22222222222\n");
    }
    return 0;
}

这两台printf语句不是顺序执行,而是并发执行的,具体系统使用那个tile,那个core,由系统自动分配。

编译后执行结果如下:

22222222222
11111111111

程序改为如下:

#include <stdio.h>
#include <platform.h>

int main () {
    par {
        printf("11111111111\n");
        printf("22222222222\n");
    }
    par {
        printf("333333333333\n");
        printf("444444444444\n");
    }
    return 0;
}

执行结果为:

22222222222
11111111111
444444444444
333333333333

通常并发的任务,里面都是while(1)循环的,程序改为执行两个任务如下:

#include <stdio.h>
#include <platform.h>

void task(const int id)
{
    while(1){
        printf("task id: %d\n", id);
    }
}

int main () {
    par {
        task(1);
        task(2);
    }
    par {
        printf("333333333333\n");
        printf("444444444444\n");
    }
    return 0;
}

执行结果是永久打印如下内容:

task id: 1
task id: 2
task id: 1
task id: 2
task id: 1
task id: 2

并不会执行第2个par中的内容,因为,par中的并行任务块,没执行完是不会往下执行的。

如下的par结构块

par {
    task(1);
    task(2);
}

可以写成

par (int i=1; i<=2; ++i) {
	task(i);
}

的并行任务块,没执行完是不会往下执行的。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值