Tag: harvard architecture

如何使两个相同的指针类型不兼容

在某些体系结构上,可能需要为其他相同的对象使用不同的指针类型。 特别是对于哈佛架构CPU,您可能需要以下内容: uint8_t const ram* data1; uint8_t const rom* data2; 特别是这对于PICs的MPLAB C18(现已停产)中ROM / RAM指针的定义如何。 它甚至可以定义如下内容: char const rom* ram* ram strdptr; 这意味着RAM中的指针指向RAM中指向ROM中的字符串的指针(使用ram是没有必要的,因为默认情况下这个编译器在RAM中,为了清楚起见,只是添加了所有内容)。 这种语法的好处是编译器能够在您尝试以不兼容的方式分配时提醒您,例如ROM位置的地址到指向RAM的指针(类似于data1 = data2;或传递ROM)使用RAM指针指向函数的指针会产生错误)。 与此相反,在AVR-8的avr-gcc中,没有这种类型的安全性,因为它提供了访问ROM数据的function。 无法将指向RAM的指针与指向ROM的指针区分开来。 在某些情况下,这种类型的安全性对于捕获编程错误非常有益。 有没有办法以某种方式向指针添加类似的修饰符(例如通过预处理器,扩展到可以模仿这种行为的东西)来实现此目的? 甚至是一些警告不正当访问的东西? (在avr-gcc的情况下,尝试在不使用ROM访问function的情况下获取值)