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。

弹出一个向导窗口。这里要注意几个关键点:

  1. Project name:给工程起个名字,比如 hello_world_ps。我建议用英文小写加下划线,简洁明了。
  2. Platform:这里要选择你之前创建好的平台。如果你按上一章做的,应该能看到类似 my_platform 的选项。如果没有,点 Create a new platform from hardware (XSA),重新导入你的XSA文件。
  3. Processor:一般选 ps7_cortexa9_0(Zynq)或 psu_cortexa53_0(Zynq MPSoC)。
  4. Language:选 C 就行。C++也可以,但Hello World用C更直接。
注意: 如果你选错了处理器,后面编译会报链接错误。我刚开始学的时候,选了A53的核,结果板子是Zynq-7000,折腾了半小时才发现选错了。

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,特别是堆栈大小设置。
避坑指南: 我曾经遇到一个奇怪的问题——编译成功,但下载后板子没反应。后来发现是UART的波特率没对上。Vitis默认是115200,但我的串口工具设成了9600。嗯,这种低级错误,犯过一次就记住了。

3.5 知识体系梳理

为了让你更直观地理解整个流程,我画了一张图:

创建第一个Vitis工程核心流程 1. 启动Vitis IDE 选择工作空间 2. 创建Application工程 选择Platform和Processor 3. 选择Hello World模板 自动生成main.c 4. 编写/修改代码 添加打印信息 5. 编译工程 (Ctrl+B) 生成.elf文件 6. 检查编译结果 成功 → 准备下载调试 注意:每一步都可能遇到坑,建议按顺序执行,不要跳步

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”打印出来。那才是最有成就感的一刻。

可可精品资料库