XMOS学习笔记之xC语言

本文详细介绍了XC语言,一种基于C的多核编程语言。XC支持任务并行、通信机制和精确时钟,不支持C语言的某些特性如goto。文章分别阐述了xC的概念、语法、任务调用关系以及多核运行机制,包括任务间的通信方式(显式通信、基于事件的通信)、底层硬件结构(Tiles、Cores、Timers、Communication fabric、I/O)、平行任务和通信、定时器以及事件处理。此外,还讨论了数据处理和内存安全,如指针类型的受限、别名、可移动和不安全指针的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、xC概念

xC作为一种多核语言,是在C语言的基础上进行的扩展。扩展的部分有基于任务的并行机制、通信机制、精确的时钟、I/O以及安全的存储空间管理功能。xC与C语言之间可以交叉编程,只不过,xC不支持goto、位域、函数指针等功能。编译平台为xTIME Studio ,由XMOS官网免费提供。

二、xC语法

这里只是介绍与C语言不同的部分,其他大部分特征与C语言相同。

  1. <:用于给端口赋值、发送数据;:>接收数据。
  2. 通过par{}语句建立平行任务。
    par ( size_t i = 0; i < 4; i ++)
        task (i);
    等价于
    par {
        task (0) ;
        task (1) ;
        task (2) ;
        task (3) ;
        }

     

  3. 任务可以对事件做出中断响应,其关键字为select{case xxx:   break; . . .},其语法类似于C语言中的switch语句。该结构同一时间只能执行一个event。
  4. xC只支持整数算术类型,所以要用到小数就直接化成分数的形式比如0.25就是1/4,需要同时传递两个整数。

三、调用关系

  1. xC调用C中的函数时候,需要在xC中申明其函数:
    extern "c" {
        extern int f(); // 这个函数是在某个C文件中定义的
    }
    
    void g() {
        par {
            f();
            f();
            }
    }

     

  2. 当从C调用到xC时,xC中的一些新类型在C中不可用,但是可以使用在编译链接时能够转换为xC类型的C类型。               例如,可以将一个xC中的chanend传递给一个C中接受int或unsigned int参数的函数。xTIMEcomposer套件中包含的xccompat.h头文件包含有用的宏和typedef,它们在其他语言中可自动扩展为正确的类型。

四、多核的运行机制

多任务在main函数中以平行的方式定义:

int main ( void ) {
    par {
        task1 (... 参数 ...) ;
        task2 (... 参数 ...) ;
        task3 (... 参数 ...) ;
        }
}

其中task1、task2等函数名可以任意命名,一般这些任务函数无返回值,其基本结构如下:

void task1 (... 参数 ...) {
    ... 初始化代码...
    while (1) {
    ... 主循环 ...
    }
}

1. 任务间的通信方式

a.显式通信:

(1)一般的通信方式:task1准备通信→task2进入查询task1状态→task2接受task1传递过来的数据→传递完成→task1和task2各自运行各自的程序。

(2)共享存储空间:task之间不能通过共享公共变量来通信(比如全局变量),所以那些互锁、互斥、信号量之类的就不能使用了。所以,当task1和task3之间需要同步信号或者通信,就需要一个“中介任务”——task2,task2中有一段data,可以同时让task1和task3访问,这种访问方式和共享内存一样快。

(3)异步通信:通过buffer可以实现异步通信,task1将要通信的数据放入buffer中,无阻塞的执行其它工作去了,task2需要的时候从buffer中提取数据即可。实现的具体方法有两种:内部通知机制,task1向task2发出notifications(“通知”)后,干其他事去了,一旦task2收到通知,会给task1一个回馈;“中介任务”方式,使用task3作为一个管理FIFO的任务,task1、task2都与task3通信。

b.基于事件的通信

2. 底层硬件结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值