AMP模式下共享内存通信的两种定义方法

为了在两个CPU之间交互,设计0XFFFF0000所在的字节为两个CPU之间的交互中转站。关于具体的实现,有如下两个常用的方法:

1,库函数直接读写。注意设置该地址Memory禁用缓存cache,这样CPU能够及时读到该地址内存中变化的数据,Xil_SetTlbAttributes(0xFFFF0000,0x14de2);然后通过Xilinx提供的读写地址的库函数实现读写:Xil_Out8(0xFFFF0000,0x55);read_char = Xil_In8(0xFFFF0000);

2,通过固定地址指针操作。#define VAR_NAME (*(volatile unsigned char *)(0xFFFF0000)),注意该行程序的理解:中间的(volatile unsigned char *)的作用是强制类型转换,类型转换改变了后续连接主体的属性,改变后:等效于指向0xFFFF0000这个地址的一个存储内容易变化的字节的指针变量,最左侧*代表“取指针指向内存位置的存储内容”,基础知识:指针变量内部存储的是指针指向内存位置的存储地址,指针是指针变量的属性,*是取指针变量指向位置存储的内容。

参考资料:

http://www.iot-online.com/IC/embedded/2017/030451088.html

https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-50-AMP-and-the-Zynq-SoC-s/ba-p/521889

时间: 2024-10-29 19:08:18

AMP模式下共享内存通信的两种定义方法的相关文章

父子进程共享内存通信的三种方法

1.  mmap MAP_ANONYMOUS 在支持MAP_ANONYMOUS的系统上,直接用匿名共享内存即可, 2. mmap  /dev/zero 有些系统不支持匿名内存映射,则可以使用fopen打开/dev/zero文件,然后对该文件进行映射,可以同样达到匿名内存映射的效果. 3. shmget shmat shmctl shmget 是老式的system V 共享内存模式,很多系统都支持这种方法. 父子进程共享内存通信的三种方法

Windows环境下共享内存通信

一.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换. 进程间通讯(即:同机通讯)和数据交换有多种方式:消息.共享内存.匿名(命名)管道.邮槽.Windows套接字等多种技术."共享内存"(shared memory)可以定义为对一个以上的进程是可见的内存或存在于多个进程的虚拟地址空间.例如:如果两个进程使用相同的DLL,只把DLL的代码页装入内存

SQL Server 2008 R2占用内存越来越大两种解决方法

SQL Server 2008 R2运行越久,占用内存会越来越大. 第一种:有了上边的分析结果,解决方法就简单了,定期重启下SQL Server 2008 R2数据库服务即可,使用任务计划定期执行下边批处理: net stop sqlserveragentnet stop mssqlservernet start mssqlservernet start sqlserveragent 第二种:进入Sql server 企业管理器(管理数据库和表的,这个都不知道就不用往下看了),在数据库服务器名称

域套接字通信域共享内存通信性能比较

最近碰到一个问题,两个进程间需要实时交换一些数据,数据量不是很大,就72个字节.当时估计简单起见,用的是域套接字的方式. 后续性能测试的时候,忽然发现当网络包并发量很大时,性能忽然大幅下降,用strace跟踪发现,忽然有好多的read,write操作,查看代码跟踪到此处,发现是域套接字需要不断的读写操作,虽然保证了数据的安全按序到达,但是此种操作性能太低.自己就想,两者究竟相差多少呢?跑两个程序比较下,一目了然.代码有些是用的网上现成的,水平有限,勿喷. 结果写在前面防止你看不到:域套接字跟共享

ARC模式下的内存泄露问题

ARC模式下的内存泄露问题 iOS提供的ARC 功能很大程度上简化了编程,让内存管理变得越来越简单,但是ARC并不是说不会发生内存泄露,使用不当照样会发生. 以下列举两种内存泄露情况: 死循环造成的内存泄露 若一个ViewController中存在无限循环,就会导致即使ViewController所对应的View消失掉了,ViewController对象也不能够被释放. 此问题通常发生在animation处理中: eg: CATransition *transition = [CATransit

USB小白学习之路(9) CY7C68013A Slave FIFO模式下与FPGA通信

CY7C68013A Slave FIFO模式下与FPGA通信 CY7C68013A的时钟是由FPGA提供的24MHz,RESET引脚也是由FPGA控制. 1.开始时没有给FPGA烧录程序,将CY7C68013A接到PC上,安装驱动后,是检测不到device的,经查找,原因有两个: ①没有时钟,这种情况下需要先让FPGA跑起来,为CY7C68013A提供时钟 ②复位引脚没有控制,因为CY7C68013A的复位时低有效,如果FPGA的引脚不控制,就会使得此引脚电平不固定,CY7C68013A处于复

【Linux笔记】细说linux系统下共享库的命名规范和使用方法

1. Shared Library的优势 共享库,又称动态库或so文件,顾名思义,它可以在可执行文件启动时加载或进程运行期被调用.使用共享库有很多好处,例如(包含但不限于下面提到的场景): 1) 减少了依赖共享库的模块的大小,因为它们不必把共享库提供的功能的实现代码静态编译到自己的模块代码中. 2) 在同一台机器上运行的多个进程会在内存中共享同一份动态库,操作系统采用的这种内存布局方式可以极大地节省机器内存资源. 3) 若很多模块依赖了以共享库形式提供的同一个底层库,则底层库升级时,只需升级该s

在ArcEngine下实现图层属性过滤的两种方法

转自chanyinhelv原文 在ArcEngine下实现图层属性过滤的两种方法 有时候,我们要对图层上的地物进行有选择性的显示,以此来满足实际的功能要求. 按下面介绍的方法可轻松实现图层属性过滤显示: 1.当图层已经加载时 private void ShowByFilter(AxMapControl sMapCtr, IFeatureLayer sFlyr, string sFilter) { ESRI.ArcGIS.Carto.IFeatureLayerDefinition pDef = (

图解STL内存管理的两种边界情况(STL源码剖析补充)

图解STL内存管理的两种边界情况(STL源码剖析补充) 第一种情况就是内存池剩余的小字节空间怎么处理,会不会有内存泄露,答案肯定是不会,但是这个过程是怎么处理的,以下的代码已经简化处理,直接放到VS2010里就可以运行 #include<stdio.h> #include<stdlib.h> static const size_t __ALIGN=8; static const size_t __MAX_BYTES=128; static const size_t __NFREEL