3、创建第一个Vitis工程:使用Vitis IDE创建Application工程、选择Platform、编写Hello World程序并编译
好,咱们正式开始动手了。
前面两章我们把Vitis平台的概念和搭建环境讲清楚了。现在,是时候创建你的第一个Vitis工程了。说白了,就是让开发板跑起来,打印一句“Hello World”。
别小看这一步。我见过不少新手,环境配好了,但第一步就卡在工程创建上。嗯,咱们一步步来。
3.1 启动Vitis IDE并创建工作空间
打开Vitis IDE。你会看到一个对话框,让你选择工作空间(Workspace)。
我个人习惯把每个项目单独放一个文件夹。比如 D:/vitis_workspace/hello_world。这样方便管理,也避免多个工程互相干扰。
3.2 创建Application工程
点击菜单栏 File → New → Application Project。
弹出一个向导窗口。这里要注意几个关键点:
- Project name:给工程起个名字,比如
hello_world_ps。我建议用英文小写加下划线,简洁明了。 - Platform:这里要选择你之前创建好的平台。如果你按上一章做的,应该能看到类似
my_platform的选项。如果没有,点 Create a new platform from hardware (XSA),重新导入你的XSA文件。 - Processor:一般选
ps7_cortexa9_0(Zynq)或psu_cortexa53_0(Zynq MPSoC)。 - Language:选
C就行。C++也可以,但Hello World用C更直接。
3.3 选择模板并编写代码
向导下一步会让你选择模板。这里选 Hello World 模板。Vitis会自动生成一个简单的main.c文件。
打开 src/main.c,你会看到类似这样的代码:
#include <stdio.h>
#include "platform.h"
int main()
{
init_platform();
print("Hello World\n\r");
cleanup_platform();
return 0;
}
嗯,这里要注意一点:print() 函数是Xilinx的库函数,不是标准C的 printf。它通过UART输出到串口终端。如果你想用 printf,需要额外配置,但咱们先不搞那么复杂。
我个人习惯在打印信息里加上时间戳或者模块名,方便调试。比如改成:
print("Hello World from Vitis!\n\r");
这样在串口终端里一眼就能认出是哪个工程输出的。
3.4 编译工程
代码写好了,接下来编译。右键点击工程名,选择 Build Project。或者直接按快捷键 Ctrl+B。
编译过程会在Console窗口输出信息。你会看到类似这样的日志:
Building target: hello_world_ps.elf
Invoking: ARM v7 gcc linker
...
Finished building: hello_world_ps.elf
如果一切顺利,你会看到 Build Finished 的提示。如果有错误,别慌。常见的错误有:
- 找不到头文件:检查platform.h路径是否正确。通常是BSP没配置好。
- 链接错误:检查Processor是否选对,或者平台是否包含正确的驱动库。
- 内存溢出:检查Linker Script,特别是堆栈大小设置。
3.5 知识体系梳理
为了让你更直观地理解整个流程,我画了一张图:
3.6 常见问题与解决
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 编译报错:找不到platform.h | BSP未正确生成或路径错误 | 右键工程 → Board Support Package → Re-generate BSP Sources |
| 链接错误:undefined reference to `init_platform' | platform.c未包含在编译中 | 检查src目录下是否有platform.c,如果没有,从模板重新生成 |
| 编译成功但下载后无输出 | UART配置错误或波特率不匹配 | 检查串口终端波特率是否为115200,确认UART引脚连接正确 |
| 内存溢出错误 | 堆栈设置过小或代码段过大 | 修改lscript.ld文件,增大堆栈大小 |
3.7 一点个人经验
创建第一个工程,其实就像学骑自行车。你可能会摔几次,但一旦成功了,后面就顺了。
我记得我第一次用Vitis时,编译通过了,但板子就是没反应。后来发现是串口线没插紧。嗯,这种硬件问题,往往比软件问题更隐蔽。所以,遇到问题先检查物理连接。
另外,我建议你养成一个好习惯:每次修改代码后,先 Clean 再 Build。右键工程 → Clean Project → Build Project。这样可以避免一些缓存导致的奇怪问题。
- 创建工程时,Platform和Processor必须匹配硬件
- Hello World模板自动生成main.c和platform.c,不要手动删除
- 编译成功只是第一步,下载调试才是验证的关键
- 遇到问题先检查硬件连接,再检查软件配置
好了,到这里你的第一个Vitis工程就创建并编译成功了。接下来,咱们就可以把它下载到板子上,真正看到“Hello World”打印出来。那才是最有成就感的一刻。