You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使两个本质相同的指针类型具备不兼容性?

哈佛架构下的存储空间专属指针(以MPLAB C18为例)

做嵌入式开发尤其是接触哈佛架构CPU的朋友,肯定碰到过这种情况:明明都是同类型的数据,却要给指针加不同的存储空间标记——毕竟哈佛架构把ROM(程序存储)和RAM(数据存储)物理分开了,编译器得靠不同的指针类型来区分访问的是哪块区域。

曾经针对PIC器件的MPLAB C18编译器(现已停用)就用了这种非常直观的自定义指针语法,比如常见的写法:

uint8_t const ram* data1;
uint8_t const rom* data2;

这里的ram和rom是编译器扩展的关键字,用来明确指针指向的存储空间:

  • data1是一个指向RAM中常量uint8_t的指针
  • data2是一个指向ROM中常量uint8_t的指针

更有意思的是它还支持多层嵌套的指针定义,比如这个看起来有点绕的写法:

char const rom* ram* ram strdptr;

咱们拆解一下它的含义,从外到内看:

  • 最末尾的ram表示strdptr本身是存放在RAM里的指针
  • 中间的ram*表示它指向的是另一个同样存放在RAM里的指针
  • 最内层的const rom*表示这个二级指针最终指向的是ROM里的常量字符串

简单总结就是:RAM中的指针 → RAM中的指针 → ROM中的字符串。

内容的提问来源于stack exchange,提问作者Jubatian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:14:19