Floating point MSP430使用DMA传输存储在RAM中的浮点var

Floating point MSP430使用DMA传输存储在RAM中的浮点var,floating-point,ram,msp430,dma,Floating Point,Ram,Msp430,Dma,我会尽量说清楚: 我需要将在RAM内存中计算的3个浮点var传输到存储在RAM内存中不同位置的缓冲区中:我编写了一个代码来实现这一点,但缓冲区填充方式不正确:我只能读取一个值。这是RAM中计算var的函数 #pragma CODE_SECTION(Calculatevar,".FLASHCODE") void Calculatevar(volatile signed char *a,volatile signed char *b,volatile signed char *c) { float

我会尽量说清楚: 我需要将在RAM内存中计算的3个浮点var传输到存储在RAM内存中不同位置的缓冲区中:我编写了一个代码来实现这一点,但缓冲区填充方式不正确:我只能读取一个值。这是RAM中计算var的函数

#pragma CODE_SECTION(Calculatevar,".FLASHCODE")
void Calculatevar(volatile signed char *a,volatile signed char *b,volatile signed char *c)
{
float axg, ayg, azg; // x, y, and z axis readings of the accelerometer
volatile unsigned char a_x,a_y,a_z;

axg = (ax + 2083)/16131.0;
ayg = (ay + 208)/16131.0;
azg = (az + 204)/16131.0;

*a=axg*126;
*b=ayg*126;
*c=azg*126;
}
在main()中,我编写了Calculatevar(&a,&b,&c);定义易失性符号字符a、b、c; 以下是DMA功能:

   unsigned char DMA_transfer(buffer *pointer_buffer) //DATA WRITE/PUSH
{ int next = pointer_buffer->head + 1;
   if (next >= pointer_buffer->Num_Samples)
    next = 0;
   //buffer is full
    DMA0SZ =pointer_buffer->Num_Samples;
//    __data20_write_long((unsigned long) &DMA0SA,(unsigned long) &d1);
    __data20_write_long((unsigned long) &DMA0SA,(unsigned long) & a);
    __data20_write_long((unsigned long) &DMA0DA,(unsigned long) &pointer_buffer->buffer[pointer_buffer->head]);
    DMA0CTL |= DMAEN +DMAIE;                         // Enable DMA0
    DMA0CTL |= DMAREQ;                      // Trigger block transfer
    pointer_buffer->head = next;
    return 0;
}

我错过了什么

对于初学者来说,第一个代码段与DMA无关,显示存储的是3个字符而不是浮点

其次,没有代码设置块传输、源/目标地址更改或字节(相对于字)传输


如果没有其他代码配置DMA0,一个字的默认单次传输模式将仅说明正确传输的一个值,因为在每次DMA0SZ传输次数后,源地址和目标地址都不会增加。

什么是
a
?什么是
Num_Samples
?a是我需要获取的变量之一,Num_Samples是存储在缓冲区中的字符数,定义为:
typedef struct{volatile signed char*const buffer;int head;int tail;const int Num_Samples;}buffer
显示
a
的定义。a、b、c定义为
易失性符号字符a、b、c
作为全局变量,
a
b
c
的地址是什么?(查看地图文件。)