有人可以帮我理解为什么主循环中的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初始化调用,这导致文件描述符陷入混乱。