【发布时间】:2015-11-27 09:45:11
【问题描述】:
我会尽量说得更清楚: 我需要将在 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);定义 volatile 有符号字符 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;
}
我错过了什么?
【问题讨论】:
-
什么是
a?Num_Samples是什么? -
a 是我需要获取的 var 之一,而 Num_samples 是存储在缓冲区中的字符数,定义为:
typedef struct { volatile signed char * const buffer; int head; int tail; const int Num_Samples; }buffer; -
显示
a的定义。 -
a,b,c 被定义为
volatile signed char a,b,c;作为一个全局变量 -
a、b、c的地址是什么? (查看地图文件。)
标签: floating-point ram msp430 dma