我可以在 Microchip C18 中创建一个同时接受 ram 和 rom 指针的函数吗?

2024-04-10

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

警告:[2066] 赋值中的类型限定符不匹配

因为字符串文字是rom const char*。反过来也是一样的。

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

然而,只需投射一个const char* to a const rom char*不起作用。


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

这就是为什么您会发现 ROM 和 RAM 操作的重复函数,例如这Microchip 应用程序库 http://www.microchip.com/MAL/:

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

Hi-Tech PICC-18 编译器具有在运行时确定的适当地址空间,这允许更灵活的指针使用。这是我放弃 C18 而选择 PICC-18 的原因之一。

查看以下问题的答案这个问题 https://stackoverflow.com/q/93356/287954和约翰·坦普尔斯的高科技PICC-18和MPLAB C18的比较 http://www.xargs.com/pic/picc18-vs-c18.html以获得更多见解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 Microchip C18 中创建一个同时接受 ram 和 rom 指针的函数吗? 的相关文章

随机推荐