前言
本系列记录本人从零开始,边复习边学习FreeRTOS新知识的过程,仅涉及PS端,无PL部分设计,部分理解仅供参考,欢迎各位大佬指正。学习过程基于Xilinx Soc ZYNQ 7000系列芯片。
本系列学习采用Xilinx SDK 2018.3,所有代码模块基于C语言实现,代码修改及调试在windows10系统上进行。
一、 Xilinx SDK安装
安装vivado2018.3时,可以勾选是否配备SDK,在此不作详细介绍,具体安装流程可以参考:Vivado 2018.3 安装步骤及 license 获取
此处给出vivado 2018.3网盘链接(印象中压缩包自带license,若没有请评论一下会补上):
链接: https://pan.baidu.com/s/1TDbxnRftV2U8cWufSXPVdA
提取码:c6dj
二、 Hello World工程创建
1. 打开SDK
在win10搜索栏中搜索SDK,找到如图选项并打开。也可以通过快捷方式打开,设置方式略。
2. 工作空间创建
打开SDK后,点击Browse选择已构建的工作空间,若第一次打开SDK,可以在Browse的选择界面中进行新工作空间文件夹的创建。如下图所示,选择好工作空间后,点击OK打开。
3. Hello World工程创建
进入SDK后,若之前未在该工作空间内创建工程,会显示如下界面:
此时,有两种方式可以创建工程:
① 直接在该界面创建:点击"Create Application Project":
② 若不慎关闭welcome界面,会显示如下界面:
此时,需点击"File"→“New"→"Application Project",如下:
两种打开方式都会进入下列界面:
首先明确我们此次Hello World工程的运行环境:FreeRTOS,且运行在ZYNQ 7000系列芯片的Cpu0上,因此我们先给工程名,即"Project name"栏取一个工程名(不能出现空格),选择操作系统平台"OS Platform"为"freertos10_xilinx",选择处理器"Processor"为"ps7_cortexa9_0"(此处末尾标识为0即为Cpu0,1即为Cpu1),如下图所示:
需要注意的是,此处应还有一项硬件平台"Hardware Platform"的选项,可以根据自身实际使用的板卡,选择Xilinx提供的硬件平台,或板卡自身提供的硬件平台,本记录中仅提供自身已有硬件平台时的硬件平台导入教程。
硬件平台内容以文件夹形式存在,若为自身已有的硬件平台,则需先通过"File"→"import"→"General"→"Existing Projects into Workspace"导入硬件平台(导入时选择该硬件平台文件夹自身或其上级目录均可),才可以在创建工程时选择自己的硬件平台,流程图如下:
完成上述操作后,即可在工程创建界面的"Hardware Platform"中选择自身已有的硬件平台,我们在选择好工程创建相关信息后,点击"Next"
选择"FreeRTOS Hello World",点击"finish"
成功创建后,在"Project Explorer"界面应看到"Hello_World"及"Hello_World_bsp"两个文件夹,其中的文件名与工程创建时输入的名字相关。
至此,基于FreeRTOS的Hello World工程创建完毕。
4. 运行环境调整(BSP适配调整)
此次创建的Hello World工程仅涉及硬件的串口输出,ZYNQ 7000系列在PS端拥有两个Uart设备,即Uart0与Uart1,具体哪个串口用作打印输出与硬件相关,一般默认为Uart0,但在本人采用的板卡中,采用Uart1进行串口打印输出,因此需要进行相关配置。
找到"Project Explorer"文件夹下,刚刚创建的bsp文件夹,右键选择"Board Support Package Settings":
选择"Overview"→"freertos10_xilinx",观察其中的"stdin"、“stdout"选项,选项对应的串口即为打印输出所采用的串口,由于本人采用的板卡通过Uart1输出,我需要将这两项选为"ps7_uart_1”(理论上只修改"stdout"即可,为避免后续不必要的bug,我将两个设置都进行了更改),随后选择"OK"完成配置。
5. 打开串口输出
为了观察程序运行时的输出内容,需通过某款应用将串口输出进行界面化显示,可以选择的应用软件有Xilinx SDK、Putty、Xshell、串口调试助手等,此处仅介绍两款应用软件的串口打开方式:
① Xilinx SDK
SDK自带串口输入/输出界面,在SDK中的名字为"SDK Terminal",若没有发现该窗口或错误关闭,可通过"Windows"→"Show View"→"Others",输入"Terminal"找到该选项并调出对应窗口。
调出窗口后,点击窗口中的"+“号
选择对应的串口设备,这里需要注意,如果确定连线正常,但界面中未出现任何可选择的串口设备,请确认电脑是否具备对应驱动,解决方式在此不作详细介绍。
点击"OK"后,在窗口处能观察到明显的已连接提示:
② 串口调试助手
此处介绍的是windows10应用商店中提供的串口调试助手,在Microsoft Store中搜索"串口调试助手”,下载安装并打开即可
6. Hello World运行
在串口已连接并打开的情况下,可以开始运行并观察Hello World工程的输出,此处创建的Hello World工程基于FreeRTOS,有部分不需要的功能,为了方便大家更直观地理解代码,可以将"freertos_hello_world.c"中的代码替换如下:
/* FreeRTOS includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "timers.h"
/* Xilinx includes. */
#include "xil_printf.h"
#include "xparameters.h"
int main( void )
{
xil_printf( "Hello from Freertos example main\r\n" );
}
代码覆盖并保存后,将板卡通电,在SDK中右键Hello World工程,选择"Run As"→"Launch on Hardware (System Debugger)"
在串口调试助手中观察到如下输出,Hello World案例运行成功。
总结
本章仅对基于ZYNQ 7000系列,学习FreeRTOS的硬件调试环境进行初步确认,确保串口正常输出,后续更复杂程序的调试中,串口将起到关键作用。与传统C代码不同的是,嵌入式中的C代码实现需结合硬件执行,因此,本章可作为硬件串口连接的简易测试。