【发布时间】:2021-02-19 18:26:31
【问题描述】:
我想在 Flash 中放置一个表格并直接从我的 C 程序中读取它。根据 Microchip 的说法,这是由 __attribute__((space(psv))) 完成的。但是,作为 microchip 周围的大多数事情,他们自己的示例效果不佳(通常已过时且未更新):https://microchipdeveloper.com/16bit:psv
这就是我想要做的:
uint16_t __attribute__((space(psv))) ConfDiskImage[] = {
/*AOUT*/ 0x01E0,0x0004,0x3333,0x4053,
/* 1*/ 0x01E1,0x0012,0x0005,0x0000,0x0000,0x0000,0x4120,0x0000,0x0000,0x0000,0x4120,
/* 2*/ 0x01E2,0x0012,0x0006,0x0000,0x0000,0x0000,0x4120,0x0000,0x0000,0x0000,0x4120,
/* 3*/ 0x01E3,0x0012,0x0007,0x0000,0x0000,0x0000,0x4120,0x0000,0x0000,0x0000,0x4120,
/*EOD */ 0x0000,0x0000
};
当我编译时,我得到:"warning: ignoring space attribute applied to automatic ConfDiskImage"
我正在使用 MPLAB X IDE 5.45 和 XC16-gcc v1.50。 微控制器:dsPIC33EP256MC506
关于如何让它留在闪存中(不被复制到 RAM)并使用指针直接从闪存读取它的任何想法?
【问题讨论】:
-
尝试添加
const说明符。 -
没有上下文[更多代码],我猜...您将其定义为函数范围变量(来自“自动”)。我认为您拥有的是(例如):
int main(void) { uint16_t __attribute__((space(psv))) ConfDiskImage[] = { ... }; }您可能需要的是全局范围(例如):uint16_t __attribute__((space(psv))) ConfDiskImage[] = { ... }; int main(void) { }如果您添加了static,您原来的可能工作 -
@Craig Estey DOH!!!我很确定这是问题所在。我把它作为一个测试概念扔进去,所以我很确定它在 main 函数中。为了我的辩护,星期五晚上在办公室已经很晚了:)我会在星期一马上处理。