fmql程序移植注意事项

把zynq的程序移植到fmql,因为软件不同(vivado与Procise;SDK与IAR),库函数不同,所以在移植过程中遇到些坑。记录下来,以便后续回看。

哪些可以用zynq的库函数,哪些没有用

zynq中用到了:

中断

UART、UART16550、sysmon、WDT、Timer、CAN、Lwip、SDFatfs、GPIO、flash读写

在尝试移植zynq库函数的过程中,遇到了很多没有解决的问题,所以放弃使用,转而使用fmql的库函数:

中断GIC、UART、WDT、Timer、CAN、Lwip、SDFatfs、flash

【fmql的WDT比zynq少,Timer也与zynq有差别】

【中断:GIC、exception.h都移植失败】

zynq的库函数:

UART16550、GPIO、sysmon

 总结

为什么有些可以用zynq的库函数,有些不可以?

比如WDT,在zynq中用的是ScuWDT,而fmql只有WDT,没有ScuWDT。Timer也是,fmql没有ScuTimer。

并且,fmql库函数中没有关于PL任何资源的库函数内容,比如sysmon,UART16550(至少目前新建的工程都没有自动生成),包括定义的bram_PL。

来看一下目前我用的工程的库函数对比:

可以看出来,zynq比fmql多。

库函数添加&修改

pl文件夹下libsrc文件夹中是zynq库函数的添加位置,但是具体有哪些模块的文件夹(自动生成),要根据.bd生成。也就是说,block design中没用到的,pl中也不会自动生成

【所以后面需要添加其他功能时可能需要重新新建工程】

以上文件夹都是自动生成的,但是是需要什么生成什么(可能ps_a7也是,没太注意)

其中,bram、gpiops、sysmon、uartns550这几个文件夹移植了zynq的库函数。

其他头文件添加如下图所示:(文件内容有修改

 

头文件修改

xil_types.h

添加了#include "fmsh_common_types.h"(因为有些定义重复了)

注释掉:

xparameter.h

//#include "xparameters_ps.h"              注释
#include "fmsh_ps_parameters.h"        添加

注释STDIN_BASEADDRESS与STDOUT_BASEADDRESS

IAR环境配置

如果有用到stdio.h,就要修改以下位置:

以下内容视需求而定:

修改.icf文件:

程序默认在AHB_SRAM中运行,但是Lwip程序内容占用比较大,所以要修改至DDR运行(在icf文件中修改)

程序移植注意事项

这也是自己遇到的坑。

Lwip以太网调试

只有Lwip工程会自动添加网口所需的头文件,其他如Helloworld、Empty就没有:

最开始用的是empty工程,手动添加文件夹把以上文件添加了,但是一直调不通。

后来尝试用Lwip工程,把用的串口等其他模块内容加进去,就可以了。

所以用到网口的话,一定要用生成以上文件夹的工程!!!

(网口的工程中,在初始化部分,已经有使能中断的内容,后续可以不用对中断进行初始化)

编译环境

最开始是在para.h文件中声明变量,在para.c中使用,然后main.h中include para.h

但是编译环境不支持这么做,会报duplicate definitions

仅支持这么做:

 中断配置

中断这部分也卡了我很久。。

CAN用例程就可以(虽然例程是CAN0与CAN1的通信,但是CAN1的中断配置可以参考)

但是UART就调了很久。用官方的中断服务函数

网口根据phy型号修改参数,自行修改中断函数内容(默认的传输是接收到什么数据就发送什么数据)

Timer的中断服务函数里要添加:

 

等待完善......

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值