DMA传输小程序,解决“总线错误”

    这个程序实现的是:共享内存中的一组数据,部分被用DMA传输到LS中进行加1操作,最后再将结果用DMA传到共享内存。

 

spu端程序single_buffer.c:

 

解释:LS中开2个unsigned int型的数组,长度均为10。这与共享内存中开辟的数组大小不同是值得注意的地方。

main函数中的第2个参数是接收spe_context_run函数中的第4个参数,这个ppu与spu端的接口。mfc_get函数中的第3个参数必须是16的整数倍,是指DMA传输的数据量,若不是16的整数倍,运行时会出现“总线错误”。

mfc_get, mfc_write_tag_mask, mfc_read_tag_status_all这3个函数中间不能插入任何代码,否则会一直运行不停止。

这里面的unsigned int型占32位,正如mfc_get传输16字节的数据,结果就给4个unsigned int数加1,其他6个不变。这点能从函数定义void mfc_get(volatile void *ls, uint64_t ea, uint32_t size, uint32_t tag, uint32_t tid, uint32_t rid)中看出,其中uint32_t指的就是unsigned int占32位。

 

ppu端程序ppu.c:

 

解释:

ppe_src_buf[10] = {1,2,3,4,5,6,7,8,9,10};这样给数组赋值时错误的,要写成int ppe_src_buf[10] = {1,2,3,4,5,6,7,8,9,10};

 

结果如下图:

实验结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值