Framwork Component 中ACPY3只支持numFrames为1

这几天在调C64+这边的DMA, 想把YUV中的Y用DMA的方式提取出来,这样能大大减轻处理器的负担。但是搞了几天都没弄出来,只要设成ACPY3_1D2D或ACPY3_2D1D或ACPY3_2D2D数据就不对。后来仔细看《Using DMA with Framework Components for ‘C64x+》,发现numFrames有一个注释,用很小的字标在下面

The current implementation of ACPY3 does not support the use of numFrames or frame indexes due to QDMA-based hardware implementation restrictions. These may be supported in future releases using an EDMA-based implementation.

 意思是说目前的ACPY3是通过QDMA实现的,numFrame只能设为1,否则操作就不正确。就目前而言ACPY3_2D2D操作用处不是太大,只能支持一帧的数据搬运,效率要低很多。TI也不用大点的字标出来,害得我浪费了好几天的时间!

 

#include <iostream> #include <algorithm> using namespace std; int lev(const int arr[])//返回等级,值越高等级越高 { //统计重复次数,次数从大到小排列 int cnt[7]={0}; for(int i=0;i<=4;i++) cnt[arr[i]]++; sort(cnt,cnt+7,greater<int>()); if(cnt[0]==5) return 9; if(cnt[0]==4) return 8; if(cnt[0]==3&&cnt[1]==2) return 7; int acpy[5]; for(int i=0;i<=4;i++) acpy[i]=arr[i]; sort(acpy,acpy+5); if(acpy[0]==2&&acpy[1]==3&&acpy[2]==4&&acpy[3]==5&&acpy[4]==6) return 6; if(acpy[0]==1&&acpy[1]==2&&acpy[2]==3&&acpy[3]==4&&acpy[4]==5) return 5; if(cnt[0]==3) return 4; if(cnt[0]==2&&cnt[1]==2) return 3; if(cnt[0]==2) return 2; return 1; } int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } void dfs1(const int arr[],int d,int level,int &t_fenzi) { if(d==5) return; int acpy[5]; for(int i=0;i<=4;i++) acpy[i]=arr[i]; for(int i=1;i<=6;i++) { acpy[d]=i; int t=lev(acpy); if(t>level) t_fenzi++; } dfs1(arr,d+1,level,t_fenzi); } void dfs2(const int arr[],int d,int level,int &t_fenzi) { if(d==4) return; for(int i=d+1;i<=4;i++)//从d的下一个开始选另一个需要枚举的位置 { for(int j=1;j<=6;j++)//枚举d位置 { for(int k=1;k<=6;k++)//枚举另一个位置 { int acpy[5]; for(int ii=0;ii<=4;ii++) acpy[ii]=arr[ii]; acpy[d]=j,acpy[i]=k; int t=lev(acpy); if(t>level) t_fenzi++; } } } dfs2(arr,d+1,level,t_fenzi); } void dfs3(const int arr[],int d,int level,int &t_fenzi) { if(d==3) return; for(int p2=d+1;p2<=3;p2++)//选第二个位置 { for(int p3=p2+1;p3<=4;p3++)//选第三个位置 { for(int i=1;i<=6;i++)//枚举d位置 { for(int j=1;j<=6;j++)//枚举第二个位置 { for(int k=1;k<=6;k++)//枚举第三个位置 { int acpy[5]; for(int ii=0;ii<=4;ii++) acpy[ii]=arr[ii]; acpy[d]=i,acpy[p2]=j,acpy[p3]=k; int t=lev(acpy); if(t>level) t_fenzi++; } } } } } dfs3(arr,d+1,level,t_fenzi); } bool cmp(double a1,double a2,double b1,double b2) { if(a1/a2<b1/b2) return true; return false; } int main() { ostream::sync_with_stdio(0); cin.tie(0); int T; cin>>T; while(T--) { int arr[5]; for(int i=0;i<=4;i++) cin>>arr[i]; int level=lev(arr);//该组等级 int fenzi=0,fenmu=1;//分别代表更大等级的情况,总情况 int cnt=0;//最好且最少的重骰次数 //重骰一次 int t_fenzi=0,t_fenmu=6*6; dfs1(arr,0,level,t_fenzi); if(cmp(fenzi,fenmu,t_fenzi,t_fenmu)) { cnt=1; fenzi=t_fenzi; fenmu=t_fenmu; } //重骰两次 t_fenzi=0,t_fenmu=10*6*6; dfs2(arr,0,level,t_fenzi); if(cmp(fenzi,fenmu,t_fenzi,t_fenmu)) { cnt=2; fenzi=t_fenzi; fenmu=t_fenmu; } //重骰三次 t_fenzi=0,t_fenmu=10*6*6*6; dfs3(arr,0,level,t_fenzi); if(cmp(fenzi,fenmu,t_fenzi,t_fenmu)) { cnt=3; fenzi=t_fenzi; fenmu=t_fenmu; } cout<<cnt<<&#39; &#39;<<fenzi/gcd(fenmu,fenzi)<<&#39; &#39;<<fenmu/gcd(fenmu,fenzi)<<endl; } return 0; }不要帮我改代码,指出我当前代码的问题
最新发布
07-10
TI达芬奇数字媒体处理器DM3730资料汇总 DM3730Digital Media Processors.pdf: 讲解DM3730的硬件资源及电器特性。 DM3730Digital Media Processors Silicon Revisions.pdf 讲解DM3730的硬件资源及特性勘误修正。 DM37x Multimedia Device Technical Reference Manual.pdf 这是一个非常重要的文档,在以后的编程中涉及到硬件的地方都需查看这个手册。手册中详细讲解了各片上资源的工作方式,配置寄存器地址及配置功能。 AM37xDM37x Schematic Checklist.pdf 文档里有一网络连接,这个连接可以带起找到最新的图解列表,推荐一些电器连接。 xDAIS-DM(Digital Media)User Guide.pdf 本文讲解了数字媒体开发的一个标准。xDAIS 是一个标准,它定义了TI DSP算法接口的标准。这样大大提高了DSP算法软件的通用性。DSP算法工程师要写出能被ARM通过Codec Engine调用的算法,必须保证自己的算法接口符合这个标准。因此,DSP算法工程师也必须了解这个软件模块。 Using DMA with Framework Components for&#39;C64x+.pdf xDAIS DSKT2 User&#39;s Guide.pdf 本文档的目的是描述xDAIS DSKT2模块算法支持和配置api。DSKT2是符合xDAIS标准的一个模块,用来管理分配内存的。 Framework Components是TI提供的一个软件模块,负责DSP侧的memory 和DMA资源管理。因此,DSP算法工程师需要了解这个 软件模块。可以登录如下链接。 http://tiexpressdsp.com/wiki/index.php?title=Framework_Components_FAQ Framework Components DMAN3/ACPY3 Users Guide 查看如下链接 http://processors.wiki.ti.com/index.php/Framework_Components_DMAN3/ACPY3_Users_Guide TMS320DM3730_Software_Developers_Guide.pdf 如果你致力成为一个基于Linux的应用开发工程师,那么这个文档你必须详细阅读。 本文讲解了基于Linux开发环境的软件开发向导,他能帮你快速的掌握整个软件开发的整体流程,并讲解了几个例程供你参考。 Codec_Engine_Application_Developer_User&#39;s_Guide.pdf 如果你致力成为一个ARM侧的嵌入式系统工程师,那么这个文档你必须详细阅读。 本文讲解了基于嵌入式操作系统的应用程序开发人员不必关注DSP侧的实现细节,只需按照一定的规范调用API,就可以完成 DSP算法的操作。这就类似于把DSP完全看成一个黑盒子。 CodecEngine_Server_Integrator_UserGuide.pdf 如果你致力成为一个DSP侧的系统工程师,那么这个文档你必须详细阅读。 本文讲解了如何按照一定的标准配置DSP/BIOS以及其他的配置,而创建一个DSP侧的编解码服务端。以便于为ARM侧服务。其 中涉及DSP/BIOS实时操作系统的使用,算法工程的算法集成,任务分配等等。 Codec Engine Algorithm Creator User&#39;s Guide.pdf 如果你致力成为一个算法工程师,那么这个文档你必须详细阅读。 本文讲解了如何把自己的算法按照xDM标准封装成算法库,以便于使用CE的编解码服务应用工程师调用。 关于算法工程师更多的资料如下: TMS320 DSP Algorithm Standard Rulesand Guidelines.pdf TMS320 DSP Algorithm Standard API Reference (SPRU360).pdf TMS320 DSP Algorithm Standard Developer’s Guide (SPRU424).pdf 如果你是硬件工程师那么你可以到下面这个链接,查看关于DM37x 的硬件设计。 http://processors.wiki.ti.com/index.php/DM37x_Hardware_Design_Guide 如果你是软件工程师那么你可以到下面链接,查看关于DM37x Software Design Guide http://processors.wiki.ti.com/i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值