3. 双核数据交换

双核数据交换 学习卡片

任务说明

本案例使用 XMOS xCORE 的两个逻辑核(Tile 0 上的 Core 0 与 Core 1),通过通道(channel)完成一次单向数据交换:发送端核产生递增计数(0~9),通过通道发送给接收端核;接收端核接收数据并通过 printintln 打印到控制台。目标是验证 xCORE 通道通信机制的正确性与基本用法。

硬件连接与通道拓扑

Tile 0 Core 0 发送端 Core 1 接收端 chan c 数据流: 0,1,2,...,9

代码实现

以下代码定义了一个全局通道 c,连接 Core 0 与 Core 1。发送端函数 sender 循环发送 0~9 共 10 个整数;接收端函数 receiver 循环接收并打印。两个 par 并行块分别部署在两个核上。

// dual_core_swap.xc
#include <platform.h>
#include <print.h>

// 全局通道声明(连接两个核)
chan c;

// 发送端:产生递增计数 0~9 并通过通道发送
void sender(chanend tx) {
    for (int i = 0; i < 10; i++) {
        tx <: i;          // 通过通道发送数据
    }
}

// 接收端:从通道接收数据并打印
void receiver(chanend rx) {
    int val;
    for (int i = 0; i < 10; i++) {
        rx :> val;        // 从通道接收数据
        printintln(val);  // 打印到控制台
    }
}

// 主入口:将两个函数分别部署到 Core 0 和 Core 1
int main(void) {
    par {
        on tile[0].core[0] : sender(c);   // Core 0 执行发送
        on tile[0].core[1] : receiver(c); // Core 1 执行接收
    }
    return 0;
}

编译与运行

在 XMOS 开发环境(xTIMEcomposer 或命令行)中,创建工程并将上述代码保存为 dual_core_swap.xc。编译目标选择包含至少 2 个逻辑核的器件(例如 xCORE-200 系列)。编译命令如下:

xcc -target=XCORE-200-EXPLORER dual_core_swap.xc -o dual_core_swap.xe

运行生成的 .xe 文件,可通过 xTIMEcomposer 的控制台或 xrun 工具观察输出:

xrun --io dual_core_swap.xe

验证方法与判定标准

运行程序后,控制台应依次打印 0 到 9 共 10 行整数,每行一个数字,顺序严格递增。若输出符合上述预期,则证明两个逻辑核之间通过通道成功完成了数据交换,核间通信机制工作正常。

预期输出(与代码逻辑严格一致):

0
1
2
3
4
5
6
7
8
9

判定标准:控制台完整打印 0~9 且无乱序、无缺失,即视为测试通过。