【问题标题】:Doing the mod of a pointer variable in C在 C 中对指针变量进行 mod
【发布时间】:2012-09-06 12:56:11
【问题描述】:

我正在为摩托罗拉 68000 微处理器使用嵌入式 C。我想将指针地址存储在 uint16 变量中,然后想做变量的 mod。我这样做的主要原因是检查 EEPROM 的扇区是否正确分配。

例如->

 uint16 a, c;
 uint16 *b;
 b=&a;
 c=b%4;

类似的东西。显然,我不能这样做。

谢谢

【问题讨论】:

    标签: c embedded 68000


    【解决方案1】:

    您是否仅限于 16 位地址空间,即 64 KB 的 RAM?这对于 68k 系统来说是相当小的。

    无论如何,你需要将指针转换为整数类型才能对其进行算术运算;

    #include <stdint.h>
    
    uint16 a, *b = &a;
    intptr_t c = (intptr_t) b;
    
    if( (c % 4) != 0 )
    {
      /* bad address! */
    }
    

    请注意,上述没有将地址存储在 16 位变量中,因为这不是正确的方法。相反,它使用intptr_t 将指针保存为整数。

    【讨论】:

    • 抱歉回复晚了,我在发布查询之前已经尝试过这种技术。看来我的交叉编译器在编译时遇到了一些问题。
    【解决方案2】:
    b = (uint16*)(((uint16)(&a)) % 4);
    

    【讨论】:

    • b = (uint16*)( ((uint16) &amp;a) % 4 ); 更容易阅读。
    猜你喜欢
    • 2016-07-06
    • 2013-08-05
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多