gpt4 book ai didi

c - 使用 malloc() 在子函数中分配返回指针但未获取返回数据

转载 作者:行者123 更新时间:2023-11-30 16:50:14 25 4
gpt4 key购买 nike

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

我尝试了多种在两个函数之间传递字符串数据的方法,但没有成功。

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 init 调用,这导致我的文件描述符出现困惑。

关于c - 使用 malloc() 在子函数中分配返回指针但未获取返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42278375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com