当我声明一个接受const char*的函数并传递字符串文字时,我得到一个



因为字符串文字是rom const char*。反之亦然。

尽管PIC是哈佛架构,但内存被映射到一个连续的地址空间中,因此从理论上讲,应该有可能以相同的方式支持ram和rom指针。可能我必须使用rom指针,因为它们是24位,而ram指针是16位。

但是,仅将const char*转换为const rom char*是行不通的。

最佳答案

不幸的是,这是Microchip C18编译器的固有限制。 C18中的指针可以指向ROM或RAM,但不能同时指向两者。

这就是为什么您会在例如ROM中找到用于ROM和RAM操作的重复功能的原因。 Microchip Application Libraries:

BYTE* TCPPutString(TCP_SOCKET hTCP, BYTE* Data);
ROM BYTE* TCPPutROMString(TCP_SOCKET hTCP, ROM BYTE* Data);

高科技PICC-18编译器具有在运行时确定的适本地址空间,从而可以更灵活地使用指针。这是我放弃C18取而代之的PICC-18的原因之一。

有关更多信息,请参见this question和John Temples的Comparison of Hi-Tech PICC-18 and MPLAB C18的答案。

关于我可以在Microchip C18中创建一个可以同时接受ram和rom指针的函数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6025415/

10-09 09:00