C语言 需要支持使用FM_1808(F-RAM存储器),以便使用结构指针进行数据提取

myzjeezk  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(81)

我正在研究永磁同步电机的磁场定向控制。我使用定制的硬件,不幸的是我无法通过引脚直接在示波器上看到速度响应和电流信号。因此我需要将数据保存在FM_1808中(F-RAM内存),之后使用FM_1808(F-RAM内存)来绘制信号。我使用结构来保存一个函数中的所有数据,指向该功能。不幸的是,我不能很好地利用弗拉姆,无法提取数据。我需要帮助,以找到我做错了什么,使问题提取数据。谢谢你的帮助将不胜感激。我已经附上了一些代码行,我定义的结构,开始地址和函数提取数据。

define.c
 #pragma DATA_SECTION(FRAMAdr,"FRAMData");
 volatile struct FRAMAddress FRAMAdr;

连接器命令

page1 
{
EXTFRAM : origin = 0x200000, length = 0x008000 
} 

Sections
{
FRAMData: > EXTFRAM    PAGE = 1
}

define.h

struct FRAMAddress {
    int16 Dat[32768];    // FRAM 16bit data & 16bit memory
};
extern volatile struct FRAMAddress FRAMAdr;

Uint16  *FRAMStartAdr = (Uint16 *)0x200000;

pheripheral.c

void FSave(Uint16 FAdr, int16 FD1, int16 FD2)
 {
FRamAdr.Dat[FAdr] = FD1;            
DELAY_US(0.2L);
FRamAdr.Dat[FAdr+5000] = FD2;

}

main.c

extern void FSave(Uint16 FAdr1, int16 FD1, int16 FD2);
{
if(FIndex<=5000)
 {
FSave(FIndex, (int16)spd, (int16)(id));
FIndex++;
 }
 else
 {
FSaveflag=0;
 }
 }

我想寻求有关使用FM_1808(F-RAM存储器)的存储器地址的数据值的帮助。

yqkkidmi

yqkkidmi1#

假设弗拉姆Map到地址0x200000,我猜想您可能需要类似的东西。

struct FRAM {
    uint16_t Dat[32768];
};

struct FRAM * FRAMData = (struct FRAM *)0x200000;

void FSave(Uint16 FAdr, int16 FD1, int16 FD2)
{
    FRAMData->Dat[FAdr] = FD1;            
    DELAY_US(0.2L);
    FRAMData->Dat[FAdr+5000] = FD2;
}

注意,我在网上找到的datasheet表明FM1808有32K的8位值,而不是16位值,所以你应该调查一下。
编辑:也不确定你的延迟是需要的还是有意义的。0. 2L的类型是什么?DELAY_US()采用什么参数类型?

相关问题