beaglbone的am3359和pru之间怎么交换数据?直接对共享内存写数据是只能存成正整数?有没有相关的例子
Steven Liu1:
PRU拥有对全局访问的权限,也就是说,PRU是可以直接访问到DDR上的内容的,所以考虑ARM侧和PRU的数据共享问题,只要知道数据在哪个区域,就可以让PRU取到了。PS: PRU也是可以访问到外设接口的寄存器。
yu chen16:
回复 Steven Liu1:
那对格式有没有什么要求呢,比如说,pru对0X00000000地址写入一个float型的数据,am3359这边读出的是一个正整数,这是怎么情况
Steven Liu1:
回复 yu chen16:
格式上的要求,取决于当前编译器上支持的类型,就是说PRU侧写到DDR上写了一个float型,ARM侧读一个float才能读到正确的数据。如果PRU不支持FLOAT,你就要看他是按照什么格式写入的数据了。
不过看你的描述,往全0地址写数据,你是用PRU往自己的data ram中写数据吧,然后用ARM读出来,是指ARM侧读PRU内部的DRAM?
yu chen16:
回复 Steven Liu1:
对,是这种情况,
在pru上往一个地址里写一个float型,
pru0DataMemory_int=0x00000000; float AAngle=234.23; *(pru0DataMemory_int+12)=AAngle;
在ARM这边读取
float AAngle3;AAngle3=*(pru0DataMemory_int+12);printf(" AAngle3 %f.\n", AAngle3);
结果是234.000000,没有小数部分
Steven Liu1:
回复 yu chen16:
PRU用的C编译器?哪个版本的编译器?能否提供一下版本号?看下是不是编译的时候就把float处理成int了
yu chen16:
回复 Steven Liu1:
pru的C编译器clpru 2.1.4,hexpru 2.0.0B2
ARM的gcc 4.6.3
在ARM程序中使用的是PRU Linux Application Loader那一组函数,对PRU的地址写一个float型,再读出来,也是一个正整数