DAT_copy 产生的问题
来源:互联网 发布:dior fix it 遮瑕 编辑:程序博客网 时间:2024/06/06 02:42
#include <csl.h>
#include <csl_cache.h>
#include <csl_dat.h>
#include <stdio.h>
#pragma DATA_SECTION(external, "quickdata")
char external[352*416]; // 片外
#pragma DATA_SECTION(internal, "quickdata")
char internal[16 * 352]; // 片内
void main()
{
int i, j, id;
char x = 0;
CSL_init();
CACHE_clean(CACHE_L2ALL, 0, 0);
CACHE_setL2Mode(CACHE_128KCACHE);
CACHE_enableCaching(CACHE_EMIFA_CE00);
CACHE_enableCaching(CACHE_EMIFA_CE01);
for(i = 0; i < 352 * 416;++i)
{
external[i] = (i & 0xff);
}
DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
id = DAT_copy2d(DAT_2D1D, &external[0], internal, 352, 16, 416);
DAT_wait(id);
for(i = 0; i < 16; ++i) // 检查搬移是否正确
{
if(memcmp(&external[i * 416], &internal[i * 352], 352) != 0)
{
fprintf(stderr, "error/n");
}
}
fprintf(stderr, "end/n");
}
测试运行失败。DMA传输后片内与片外数据不一致。经分析后确认是因为程序开始打开了L2Cache,并且允许对片外存储器进行缓存,因此开始对external的初始化实际上实在L2Cache中做的,并未实时更新到片外external,故DMA不正确,解决办法是在external初始化之后调用下面的语句请求二级缓存立刻刷新数据:
CACHE_wbInvL2(external, 352*416, CACHE_WAIT);
则测试正确,注意这个函数的第二个参数有最大为65536*4的限制,如果要刷新的数据大小超过了这个值,则应该分为几块分别调用该函数。
- DAT_copy 产生的问题
- DAT_copy 产生的问题
- DAT_copy 产生的问题
- DAT_copy 产生的问题
- DAT_copy 产生的问题 .
- hive 终端产生的问题
- 随机数据产生的问题
- DWR异步产生的问题
- 由问题产生的感悟
- 启动 hadoop的产生问题
- 继承产生两义性的问题
- 临界区问题的产生
- CLGeocoder单列产生的问题
- 修改lower_case_table_names产生的问题
- 清除浮动产生的问题
- Keil的代码优化产生的问题
- Keil的代码优化产生的问题
- Keil的代码优化产生的问题
- Struts-国际化支持
- DM642 QDMA 数据传输应注意的一个问题
- gcc 编译动态链接库
- 测试_手机应用的内存消耗输出到excel
- Shell学习笔记(1) unix和shell的发展历程
- DAT_copy 产生的问题
- 用for循环计算1000以内的偶数和(第十周上机任务)
- 浅谈对ucos-ii任务就绪表的理解
- 如何采集原始图象数据存储格式的数据-dm642
- 设计模式之禅--策略模式【STRATEGY PATTERN 】
- QDMA应用实例-dm642
- mount -o loop 回环设备相关
- 梯形的面积 输入一个三位整数
- How to install CUDA on fedora17