3. 双核数据交换
任务说明
本案例使用 XMOS xCORE 的两个逻辑核(Tile 0 上的 Core 0 与 Core 1),通过通道(channel)完成一次单向数据交换:发送端核产生递增计数(0~9),通过通道发送给接收端核;接收端核接收数据并通过 printintln 打印到控制台。目标是验证 xCORE 通道通信机制的正确性与基本用法。
硬件连接与通道拓扑
代码实现
以下代码定义了一个全局通道 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 且无乱序、无缺失,即视为测试通过。