3. 开发环境搭建:CCS 安装与多核工程创建
说实话,搞多核DSP开发,第一步就是把家伙事儿备齐。CCS这玩意儿,我用了快十年了,从4.0版本一路跟到现在。每次装新版本,总有些小坑等着你。今天我就把这些年踩过的坑、攒下的经验,一股脑儿倒出来。
3.1 CCS版本选择——别盲目追新
很多人一上来就问:「是不是装最新版最好?」我的回答是:不一定。
我自己就吃过这个亏。有一回项目赶进度,我兴冲冲装了CCS 12.0,结果发现某个老项目的BIOS组件不兼容,折腾了两天才回退到11.2。你想想看,这时间浪费得多冤枉。
我的建议是:
- 新项目:用CCS 12.x或13.x,支持最新的C66x/ C7x内核
- 老项目维护:保持跟原开发环境一致的版本
- 多核开发:至少CCS 10.0以上,对SYS/BIOS和OpenMP支持更好
3.2 安装流程——一步步来,别跳步
安装CCS其实不复杂,但有几个关键点容易忽略。我列个清单,你照着做就行。
3.2.1 下载与准备
去TI官网下载离线安装包。别用在线安装,除非你网速特别快。我见过有人在线装了三个小时,最后还失败了。
- 下载前先注册TI账号,免费
- 选择对应操作系统的版本(Windows/Linux)
- 建议下载完整版(Full Installer),大概2-3GB
3.2.2 安装步骤
- 关闭杀毒软件——这个很重要。我遇到过安装到一半被拦截,结果注册表写坏了,只能重装系统。
- 以管理员身份运行——右键,你懂的。
- 选择组件——这里要注意,别全选。只勾选你需要的器件支持包。比如你做C6678,就勾选C6000多核DSP系列。
- 安装路径——不要有中文,不要有空格。我习惯用
C:\ti\ccs12xx这种简洁路径。 - 等待——大概20-40分钟,取决于你的电脑配置。
3.3 多核工程创建——从零开始
环境装好了,咱们来建个多核工程。以TMS320C6678为例,这是个8核的DSP,很经典。
3.3.1 创建新工程
打开CCS,点 File → New → CCS Project。会弹出一个对话框,这里有几个关键选项:
| 选项 | 推荐设置 | 说明 |
|---|---|---|
| Target | TI C66x Multicore DSP | 选对器件型号 |
| Project name | my_multicore_demo | 不要中文,不要空格 |
| Output type | Executable | 生成可执行文件 |
| Device endianness | little endian | 大多数场景用这个 |
| Compiler version | TI v20.2.x (最新) | 选最新的稳定版 |
3.3.2 配置多核启动
多核DSP的启动方式跟单核不一样。每个核都有自己的入口地址。我一般用这种方式:
// main.c - 主核(Core 0)入口
#include <stdio.h>
#include <csl.h>
void main(void) {
// 初始化系统
CSL_init();
printf("Core 0 is running!\n");
// 启动其他核
// 这里用IPC中断唤醒Core 1-7
for(int i = 1; i < 8; i++) {
// 设置每个核的入口函数地址
// 实际项目中用IPCGR寄存器触发
printf("Starting Core %d...\n", i);
}
// 主核自己的任务
while(1) {
// 调度、监控、数据分发
}
}
关键点:每个核的代码可以放在同一个工程里,通过编译选项区分。也可以用多个工程,各自生成.out文件,再通过加载器分别加载到对应核。
3.3.3 配置CMD文件
CMD文件决定了代码和数据放在哪里。多核场景下,每个核通常有自己的L2 SRAM,共享的MSMC SRAM和DDR3。我分享一个常用的配置思路:
// 以Core 0为例的CMD片段
MEMORY
{
/* 本地L2 SRAM,每个核独享 */
CORE0_L2: o = 0x10800000 l = 0x00080000 /* 512KB */
/* 共享MSMC SRAM */
MSMC_SRAM: o = 0x0C000000 l = 0x00400000 /* 4MB */
/* 共享DDR3 */
DDR3: o = 0x80000000 l = 0x10000000 /* 256MB */
}
SECTIONS
{
.text > CORE0_L2 /* 代码放本地L2 */
.data > CORE0_L2 /* 数据放本地L2 */
.bss > CORE0_L2
.stack > CORE0_L2
/* 共享数据段 */
.shared > MSMC_SRAM /* 核间通信数据放这里 */
.heap > DDR3 /* 大块数据放DDR */
}
3.4 多核调试——让所有核跑起来
工程建好了,怎么让8个核同时跑?这里有个小技巧。
在CCS的Debug配置里,选择 Target Configuration,添加所有核。然后右键点击 Connect Target,CCS会依次连接每个核。
连接成功后,你会看到8个核的窗口。每个核都可以单独加载程序、设置断点、查看变量。我习惯的做法是:
- 先让Core 0跑起来,初始化共享资源
- 再依次加载并启动Core 1-7
- 用全局变量或IPC寄存器同步状态
3.5 常见问题与避坑
这些年帮不少同事解决过CCS安装和工程配置的问题,总结几个高频坑:
- 安装后打不开:检查Java环境,CCS依赖JRE。我遇到过JDK版本不兼容的情况。
- 编译报错找不到头文件:检查Include路径配置。右键工程 → Properties → Build → Include Options。
- 连接仿真器失败:先检查驱动,再检查仿真器固件版本。XDS100/200/560各有各的驱动。
- 多核调试时某个核跑飞:大概率是CMD文件配置错了,代码或数据放到了其他核的私有空间。
嗯,说到这个,我想起一个项目。当时调试一个8核的雷达信号处理程序,Core 3总是莫名其妙死机。查了两天,最后发现是CMD文件里把Core 3的堆栈地址写到了Core 2的L2空间里。你说冤不冤?
3.6 本章小结
开发环境搭建这事儿,说难不难,说简单也不简单。关键是要细心,别跳步。CCS装好了,多核工程建起来了,后面的事情就好办了。
我建议你装好环境后,先跑一个简单的「Hello World」多核版本——每个核打印自己的编号。确认所有核都能正常工作,再开始写真正的业务代码。这一步能帮你排除90%的环境问题。
一句话总结:环境搭得好,调试少烦恼。多核开发,从CCS开始。