硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2116|回复: 5
收起左侧

[ThreadX全家桶] ZYNQ 与ThreadX之AMP玩法

[复制链接]

8

主题

104

回帖

138

积分

初级会员

积分
138
发表于 2021-11-23 10:21:33 | 显示全部楼层 |阅读模式

得益于A9的双核异构架构,我们可以在双核上进行AMP、SMP、以及BMP三种运行模式的软件开发。本次是笔记简单概要AMP的玩法。
Xilinx的SDK提供的标准的AMP是基于FreeRTOS的OpenAMP,我们这里需要的是基于ThreadX的AMP.
1.    创建CPU0_APP
我们直接通过New->Application Project:创建一个在内核0上运行的APP:需要注意的是选择的Processor为内核0.

下载.png

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


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

CPU0_APP lsscript.ld
下载 (1).png

2.    创建CPU1_APP
相同道理,我们创建运行在内核1上的APP,但是要注意我们的处理器的选择:

下载 (2).png
下载 (3).png
和之前创建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。
下载 (4).png


此时我们将上一次移植在threadx_demo中的程序移植到CPU1_APP中,注意包含头文件、库以及库所在位置。
下载 (5).png
下载 (6).png
这是我们为了同时运行CPU0_APP与CPU1_APP,我们在debug configuration中的Application中设置同时Download CPU0_APP与CPU1_APP,这样就可以同时运行了。

我们Debug界面分别点击两个内核到运行状态:
下载 (7).png
3.    修改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).png 这时候再次烧录到片中,就可以发现按键按下4个LED依次变化,CPU1 demo也在正常打印输出。
.后面就可以愉快的进行AMP的开发了无论是通过第三方的OpenAMP还是通过共享内存等等机制,可以让两个核进行数据交互,CPU0_APP不限于裸机,也可以运行Linux。可以让工程做到同时兼顾复杂的Linux应用拓展性与是实时性。

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


评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106665
QQ
发表于 2021-11-23 10:28:49 | 显示全部楼层
非常感谢楼主分享
回复

使用道具 举报

8

主题

104

回帖

138

积分

初级会员

积分
138
 楼主| 发表于 2021-11-23 10:30:24 | 显示全部楼层
eric2013 发表于 2021-11-23 10:28
非常感谢楼主分享

图被吃了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106665
QQ
发表于 2021-11-23 10:44:25 | 显示全部楼层

帮你修改好了,这个论坛不支持拖拽,拖拽上传的是一个非常大的base64数据格式,刷新非常慢。
回复

使用道具 举报

19

主题

62

回帖

119

积分

初级会员

积分
119
发表于 2022-8-17 07:40:24 | 显示全部楼层
有没有linux+ThreadX使用openamp模式的例子呀?
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-8-24 11:55:06 来自手机 | 显示全部楼层
楼主,zynq能搞threadx smp吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 08:09 , Processed in 0.178892 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表