有人可以帮我理解为什么主循环中的printf语句什么都不打印吗?如果在主循环中添加常规的hello world printf语句,它也不会在控制台上输出任何内容。但是,如果我注释掉打印返回数据的行,则此hello world打印语句确实起作用。

我尝试了多种方法来在两个函数之间传递字符串数据而没有运气。

char * getADCValue()
{
    uint8_t id;
    int32_t adc;
    int32_t volt;
    uint8_t i;
    uint8_t ch_num;
    int32_t iTemp;
    uint8_t buf[3];

    bcm2835_spi_begin();
    bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_LSBFIRST );
    bcm2835_spi_setDataMode(BCM2835_SPI_MODE1);
    bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_1024);
    bcm2835_gpio_fsel(SPICS, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_write(SPICS, HIGH);
    bcm2835_gpio_fsel(DRDY, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_set_pud(DRDY, BCM2835_GPIO_PUD_UP);

    id = ADS1256_ReadChipID();
    /*if (id != 3)
    {
        printf("Error, ASD1256 Chip ID = 0x%d", (int)id);
    }
    else
    {
        printf("Ok, ASD1256 Chip ID = 0x%d", (int)id);
    }*/

    ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS);
    ADS1256_StartScan(0);

    while((ADS1256_Scan() == 0));
    adc = ADS1256_GetAdc(0);
    volt = (adc * 100) / 167;

    buf[0] = ((uint32_t)adc >> 16) & 0xFF;
    buf[1] = ((uint32_t)adc >> 8) & 0xFF;
    buf[2] = ((uint32_t)adc >> 0) & 0xFF;

    iTemp = volt;   /* uV */

    char * return_data = malloc(1024);

    if (!return_data)
     return NULL;

    sprintf(return_data, "%ld.%01ld V", iTemp /1000000, (iTemp%1000000)/100000);

    return return_data;

}

int  main()
{
    char * returnValue  = getADCValue();
    printf("Voltage Value: %s", returnValue);
    free(returnValue);
    return 0;
}

最佳答案

谢谢你们的建议。最终被提示为bcm库调用。不知何故丢失了我的bcm2835初始化调用,这导致文件描述符陷入混乱。

07-24 09:46
查看更多