读取加速度计的负值

时间:2015-08-26 12:56:16

标签: c accelerometer negative-number

我将加速度计与TivaC连接并在UART上显示RAW数据。

void main(){

  signed int accelerationX;

  accelerationX = getAcceleration_X();
  if (accelerationX>=0){
    UART_OutString("\r\nX Axl: ");
    UART_OutUDec((unsigned short) accelerationX);
  } else {
    UART_OutString("\r\nX Axl: - ");
    UART_OutUDec((unsigned short) (accelerationX*-1));
  }
}

我在某个论坛上获得的这类代码。 我不明白为什么加速度为负时会加速“accelerationX * -1”。

2 个答案:

答案 0 :(得分:0)

accelerationX是有符号整数,但看起来UART_OutUDec需要无符号整数。因此,他们必须打印一个减号后跟绝对值accelerationX(删除符号)。

答案 1 :(得分:0)

这是因为号码是以无符号短号而非签名数量发送的。查看UART_OutUDec正在做什么会很有帮助,但它也并不重要,因为UART只会发送丢失在其数据寄存器中的内容。顺便说一句,UART_OutUDec很可能将unsigned short转换为ASCII。接收器不太可能理解该值应该是负的,所以减号与有效的加速度的绝对值一起传输。

需要考虑的是并非所有接收器都是相同的。很多人都认为另一端的设备是计算机或者理解ASCII的东西,但情况并非总是如此。我曾经研究过传输与非ASCII字符混合的ASCII字符的嵌入式系统,这种情况令人困惑且难以维护,但这些系统仍然存在。这几乎肯定不适用于您的情况,仅仅因为它很少见,但是,在将来,如果您提供有关接收器的其他详细信息,它将有助于阐明数据应如何格式化和传输。