Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded-C:如何在2个无符号整数之间执行除法并以十进制格式显示答案_C_Embedded - Fatal编程技术网

Embedded-C:如何在2个无符号整数之间执行除法并以十进制格式显示答案

Embedded-C:如何在2个无符号整数之间执行除法并以十进制格式显示答案,c,embedded,C,Embedded,我不熟悉嵌入式系统。我想在2个无符号16位整数之间执行除法,并显示答案(包括十进制值)。我想知道如何在embedded-C中实现这一点。Float、double和unsigned long似乎不起作用。我正在使用TI的TM4C启动板 uint8_t PPGMsg[5]; unsigned long PPG; uint16_t IR_combined,RED_combined; IR_combined = (PPGMsg[1]<< 8)|PPGMsg[2]; RED_combined

我不熟悉嵌入式系统。我想在2个无符号16位整数之间执行除法,并显示答案(包括十进制值)。我想知道如何在embedded-C中实现这一点。Float、double和unsigned long似乎不起作用。我正在使用TI的TM4C启动板

uint8_t PPGMsg[5];
unsigned long PPG;
uint16_t IR_combined,RED_combined;
IR_combined = (PPGMsg[1]<< 8)|PPGMsg[2];
RED_combined = (PPGMsg[3]<< 8)|PPGMsg[4];
PPGMsg[0]=(RED_combined/IR_combined);
PPG=(RED_combined/IR_combined);
UARTprintf("IR_combined is: %d\n",IR_combined);
UARTprintf("RED_combined is: %d\n",RED_combined);
UARTprintf("PPG is: %d\n",PPGMsg[0]);
UARTprintf("long PPG is: %d\n",PPG);
uint8_t PPGMsg[5];
无符号长PPG;
uint16红外组合、红色组合;

IR_combined=(PPGMsg[1]对于2位小数的精度,您需要执行
(uint32_t)RED_combined*100/IR_combined
。然后根据需要打印小数。示例:

#include <stdint.h>
#include <inttypes.h>
...
uint16_t RED_combined = 1012;
uint16_t IR_combined = 147; 
uint16_t x = ((uint32_t)RED_combined*100u / IR_combined);
printf("%"PRIu16".%.2"PRIu16, x/100, x%100);
#包括
#包括
...
uint16\u t红色\u组合=1012;
uint16\u t IR\u组合=147;
uint16\u t x=((uint32\u t)红色组合*100u/IR组合);
printf(“%“PRIu16”。.2”PRIu16,x/100,x%100);
但是,您还有许多其他问题/bug:


  • IR\u combined=(PPGMsg[1]对于2位小数的精度,您需要执行
    (uint32\u t)RED\u combined*100/IR\u combined
    。然后根据需要打印小数。示例:

    #include <stdint.h>
    #include <inttypes.h>
    ...
    uint16_t RED_combined = 1012;
    uint16_t IR_combined = 147; 
    uint16_t x = ((uint32_t)RED_combined*100u / IR_combined);
    printf("%"PRIu16".%.2"PRIu16, x/100, x%100);
    
    #包括
    #包括
    ...
    uint16\u t红色\u组合=1012;
    uint16\u t IR\u组合=147;
    uint16\u t x=((uint32\u t)红色组合*100u/IR组合);
    printf(“%“PRIu16”。.2”PRIu16,x/100,x%100);
    
    但是,您还有许多其他问题/bug:


    • IR\u combined=(PPGMsg[1]指定在哪个目标硬件上运行很有用,因为这可能很重要。硬件或软件中是否支持浮点?
      PPGMsg[0]=(红色\u combined/IR\u combined)
      这到底有什么意义?左操作数=是8位。无关:信息我建议在读取UART的机器上处理转换。在控制器上进行转换将浪费大量的时钟周期,如果应用程序对时间敏感,还可能面临一些时间/资源问题e、 tm4c有一个单精度浮点单元(FPU)。如果单精度足够,如果需要,可以使用FPU来提高性能。此外,UARTprintf()TI在该平台的SDK UTIL中提供的不处理浮点。如果需要从UART打印浮点,可以将结果分成两个整数,或者使用/生成不同的UARTprintf()函数。指定正在运行的目标硬件很有用,因为这可能很重要。硬件或软件中是否支持浮点?
      PPGMsg[0]=(红色/红外组合)
      这到底有什么意义?左操作数=是8位。无关:信息我建议在读取UART的机器上处理转换。在控制器上进行转换将浪费大量的时钟周期,如果应用程序对时间敏感,还可能面临一些时间/资源问题e、 tm4c有一个单精度浮点单元(FPU)。如果单精度足够,如果需要,可以使用FPU来提高性能。此外,UARTprintf()TI在该平台的SDK UTIL中提供的不处理浮点。如果需要从UART打印浮点,可以将结果分成两个整数,或者使用/生成不同的UARTprintf()函数。您的
      printf()
      方法将错误地打印68.8而不是6.88。您的
      printf()
      方法将错误地打印68.8而不是6.88。