大家好,我用omapl137进行系统设计,程序设计思路如下:
1. ARM 用于与PC机进行通信,接收数据并写入共享内存1区;
2. DSP从1区中读取数据处理后写入共享内存2区;
3. ARM从2区读取数据发回PC机。
问题:
系统在前几十步ARM与DSP交替读写共享内存正常,后面便跑飞了,DSP好像停止了工作,只有ARM在读取数据,但返回来的却是正常运行时的最后一个数据。
请问这是什么原因?
kooking:
这两个buf的处理是每次后面的数据覆盖前面的数据吗,还有就是写好要发中断通知另一端收,收到后也要发信号到对方,还有每次读的长度什么的
dongdong ma:
回复 kooking:
您好,感谢您抽出时间回答我的问题。
1. 两个buf中的数据都是后面新来的数据覆盖前面的旧数据;
2. 每次读写的数据都是一个结构体,包含4个成员,共24个字节;
3. 当ARM写数据到buf1中完成后,就设置标志位tag1=1,然后等待标志位tag2=1; 此前DSP一直在等待tag1变为1,当tag1变为1后就读取buf1中数据,处 理完成后写入buf2中,并令tag2=1,tag1=0; ARM读到tag2=1后又开始从PC机(上位机)读取数据写入buf1,然后置tag2=1,通知DSP处理,依次循环;
4. ARM与DSP是通过设置标志位tag1 和 tag2 为1来实现互相通知对方的,没有使用中断。
问题是前几十步系统运行正常,后面DSP就不处理数据了,返回的数据都一样。
请问这样的问题该如何解决?
dongdong ma:
回复 kooking:
您好,感谢您抽出时间回答我的问题。
1. 两个buf中的内容都是后面新来的数据覆盖前面的数据;
2. 每次读写的数据都是一个结构体,有4个成员,共24字节;
3. 当ARM收到PC端(上位机)的数据后,就将数据写入buf1中,并置标志位tag1=1,然后等待标志位tag2 = 1;此前DSP一直在等待tag1 = 1,当DSP读到tag1=1时,就从buf1中读取数据进行处理,并将处理后的数据写入buf2中,并置tag2=1,tag1=0; 然后ARM等到tag2=1后就又开始从PC机端读取数据,依次循环;
4. ARM与DSP是通过分别设置tag1和tag2标志位来通知对方的,没有使用中断;
问题是系统前几十步运行正常,后面ARM返回来的数据都一样,好像ARM没有将数据写入buf1中;ARM读数据的代码如下:
tag2 = sharedram_read(offset); // sharedram_read()是读数据的函数
while(tag2 != 1) tag2 = sharedram_read(offset);
请问这样的问题该如何解决?