我将加速度计与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”。
答案 0 :(得分:0)
accelerationX
是有符号整数,但看起来UART_OutUDec
需要无符号整数。因此,他们必须打印一个减号后跟绝对值accelerationX
(删除符号)。
答案 1 :(得分:0)
这是因为号码是以无符号短号而非签名数量发送的。查看UART_OutUDec
正在做什么会很有帮助,但它也并不重要,因为UART只会发送丢失在其数据寄存器中的内容。顺便说一句,UART_OutUDec
很可能将unsigned short转换为ASCII。接收器不太可能理解该值应该是负的,所以减号与有效的加速度的绝对值一起传输。
需要考虑的是并非所有接收器都是相同的。很多人都认为另一端的设备是计算机或者理解ASCII的东西,但情况并非总是如此。我曾经研究过传输与非ASCII字符混合的ASCII字符的嵌入式系统,这种情况令人困惑且难以维护,但这些系统仍然存在。这几乎肯定不适用于您的情况,仅仅因为它很少见,但是,在将来,如果您提供有关接收器的其他详细信息,它将有助于阐明数据应如何格式化和传输。