This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器:检查地址 C2000的有效范围

Guru**** 2616395 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/648526/compiler-check-valid-range-of-addresses-c2000

工具/软件:TI C/C++编译器

您好!  

根据 c/c++标准、不同结构的两个指针的比较未定义。

从互联网(:/):

“如果两个指针 p 和 q 同一类型的指针指向不是同一个对象或同一数组的元素成员或不同函数的不同对象,或者如果其中只有一个指针为空,则 p<q p>q p<=q p>=q 未指定、、和的结果。”

我想知道、确定指针是否位于两个绝对地址之间的正确方法是什么? 以下代码在 C2000编译器中是否有效?

int * p;

p =(int*)(字节流中的某些值);

if (p >=(int*) 0x8000 && p<=(int*) 0x9000)

{执行某些操作}  

谢谢

此致

gzhang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这...

    [引用用户="Leong"]

    int * p;

    p =(int*)(字节流中的某些值);

    if (p >=(int*) 0x8000 && p<=(int*) 0x9000)

    {执行某些操作}  

    [/报价]

    (笑声) 未定义的行为。 但这不会阻止任何其他人。  它也不应阻止您。  编译器将发出执行该比较的代码。  接下来发生的是未定义的情况。  编译器对此不承担任何责任。  但您可以自行承担这一责任。   

    一些要考虑的提示...

    请在有关此内容的注释和文档中详细说明。

    您可以在 C 代码和链接器命令文件之间共享#define 常量。  在这种情况下、这可能是合理的。  这样的东西会起作用...

    /* addresses.h */
    #define RAM_base 0x8000
    #define RAM_LENGTH 0x1000 

    您的 C 代码可以包含该文件并使用这些#define 名称。  链接器命令文件也可以...

    #include "addresss.h"
    
    MEMORY
    {
    RAM:origin = RAM_base,length = RAM_length...
    
    } 

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 George。

    在头文件中添加保护是一个好主意。

    我最终转换了地址以与范围进行比较。 (unit_32)(p)。