额,我遇到的问题比较奇怪,我尽可能描述清楚问题。
我使用MSP430F5438a,以下使用单片机代替MSP430F5438a。
单片机与DSP通过DMA+SPI进行通讯。单片机作为SPI通讯的主机。
1、由于每次通讯单片机都是接收数据,但是标准SPI通讯要求发送同时接收,因此单片机维持着两段内存,分别是send_buf和recv_buf。send_buf是发送端缓存,而recv_buf是接收端缓存。
2、由于单片机与DSP通讯的目的是用于从DSP接收数据,单片机发送数据仅仅是为了保证SPI真正实现双端通讯,DSP端根本不关心接收到的数据是什么,会直接丢掉。
3、我使用两路DMA来保证SPI通讯双端通讯。到目前为止,一切正常。
4、由于单片机RAM紧张,我希望压缩send_buf缓存尺寸。由于发送数据DSP根本“不敢兴趣”,因此我在使用DMA发送数据时,将DMA发送端内存地址设置为地址不变,即发送端每次发送的都是固定地址的数据。
按照我的理解,这样做应该是可行的。但是,程序在大多数情况下运行是正常的,但是偶然情况下(可能一天会出现1~2次)会修改我栈中的数据,从而导致其它程序运行异常。
恳请各位帮助,不胜感激。