ZYNQ与ThreadX之AMP玩法

得益于A9的双核异构架构,我们可以在双核上进行AMP、SMP、以及BMP三种运行模式的软件开发。本次是笔记简单概要AMP的玩法。
Xilinx的SDK提供的标准的AMP是基于FreeRTOS的OpenAMP,我们这里需要的是基于ThreadX的AMP.

  1. 创建CPU0_APP
    我们直接通过New->Application Project:创建一个在内核0上运行的APP:需要注意的是选择的Processor为内核0.
    在这里插入图片描述
    图 1

我在CPU0中创建了一个按键,通过连接在PS上的按键KEY_PS控制连接在PL上的4个LED,其中,按下KEY_PS产生一个上升沿中断,在中断中修改按键按下状态标志,主函数中根据按键状态标志依次修改4个LED状态。

因为我们是创建两个APP,他们公用同一块DDR,我们通过修改lsscript.ld
文件中的APPx的起始地址和长度,达到分离两个APP的目的。

CPU0_APP lsscript.ld
在这里插入图片描述

图 2

  1. 创建CPU1_APP
    相同道理,我们创建运行在内核1上的APP,但是要注意我们的处理器的选择:
    在这里插入图片描述
    图 3

    在这里插入图片描述
    图 4

和之前创建threadx_demo的道理一样,我们先创建一个helloworld,分别编译并运行CPU0 与CPU1的helloworld,没有问题在做修改。

在CPU1_APP没有问题后,我们在右键CPU1_APP_bsp->Board Support Package Settings-> Overview->drivers->ps7_cortexa9_1中增加-DUSE_AMP=1参数。这是运行AMP所必需的,详情请见 ug1186。
在这里插入图片描述

图 5

此时我们将上一次移植在threadx_demo中的程序移植到CPU1_APP中,注意包含头文件、库以及库所在位置。
在这里插入图片描述

图 6

在这里插入图片描述

这是我们为了同时运行CPU0_APP与CPU1_APP,我们在debug configuration中的Application中设置同时Download CPU0_APP与CPU1_APP,这样就可以同时运行了。

我们Debug界面分别点击两个内核到运行状态:
在这里插入图片描述

图 7

  1. 修改CPU1_APP_bsp 以及初始化代码
    你会发你的CPU0_APP有可能运行不正常,而CPU1_APP运行一定不正常。
    通过查看CPU1_APP的代码看,我们看到在初始化的hardware_setup()中设置了TTC SetupTimer()作为系统定时器中断,我们在运行双核APP时候,要注意的一点是要映射指定中断到指定的CPU内核,我们只需要在SetupTimer()的XScuGic_Connect()函数后添加XScuGic_InterruptMaptoCpu(&Gic0, 0x01, TTC_INTR_ID)即可,这时我们重新运行CPU0_APP与CPU1_APP,发现两个APP运行都正常了。
    在这里插入图片描述
    图 8

这时候再次烧录到片中,就可以发现按键按下4个LED依次变化,CPU1 demo也在正常打印输出。
.后面就可以愉快的进行AMP的开发了无论是通过第三方的OpenAMP还是通过共享内存等等机制,可以让两个核进行数据交互,CPU0_APP不限于裸机,也可以运行Linux。可以让工程做到同时兼顾复杂的Linux应用拓展性与是实时性。

文中的CPU0_APP & CPU1_APP如果有需要的做验证测试的可以留言贴出来。
关于AMP的RTOS+Linux可以参考:
ZYNQ双核通信 Linux+FreeRTOS

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值