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.

[参考译文] MSP430FR6989:指针算术问题

Guru**** 2782445 points

Other Parts Discussed in Thread: MSP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/930715/msp430fr6989-problem-pointer-arithmetics

器件型号:MSP430FR6989

尊敬的:  

对于一个项目、我正在处理 MSP430FR6989上的存储器块的写入和读取。 因此、我将地址写入"从器件"(将存储该地址上的数据)、该地址不属于我可以写入的 MSP430FR6989地址块(1880h 直到19FFh)、而是像0x0060那样。 我 想对这个指针做一些算术运算。 但是、当使用调试工具时、我看到发生了一些奇怪的事情。  

重要的代码是:  

/*
* 4个可用 RAM 段:
* 1. D --> 1800h '到187Fh
* 2. C -> 1880h '到18FFh
* 3. b --> 1900h '直至187Fh
* 4. a --> 1980h '直到19FFh
*
uint16_t volatile * address =(uint16_t *) getAddress ();


if (address >=(uint16_t *) 0x0 && address <(uint16_t *) 0x100){//比较"指针"
地址=地址+ 900;

if (address >=(uint16_t *) 0x1800){
__no_operation();
}
} 

问题出在行:"address = address + 900;"   (900只是我用来查看发生了什么的一个示例编号)。

这时会将数字 x708 (十六进制)添加到地址(我尝试使用多个地址)。 这使我感到困惑、因为900的十六进制数是 x384、它不会翻倍至708 (但达到768、这是我所期望的)。 如果我使用 x900 (而不是十进制的900)、它会添加具有 x1200 (十六进制)的地址。  

我可能遗漏了一些非常简单的东西。  

此致。  

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

    address 是 uint16_t 的指针、因此向其添加1会将(字节)指针值递增 sizeof (uint16_t)==2。

    我的计算器显示(2*900)=0x708。

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

    真的是啊! 我知道我只是在看东西。  

    非常感谢!!