C 什么';这个函数有什么问题?不可转让?

C 什么';这个函数有什么问题?不可转让?,c,microcontroller,C,Microcontroller,我试图使用微控制器上的ADC将电位计转换为-40到50摄氏度之间的温度,ADC\u值是ADC给出的范围,但是我得到了错误: Main.c:110:11:错误:非对象类型“float(unsigned int)”不是 可转让 如果需要,我可以提供更多代码,但我不知道哪里出了问题,因为我对C和编程非常陌生。tempC是您的函数名,因此,行: float tempC(unsigned int adc_value) { multiplier = adc_value / 1023.0f;

我试图使用微控制器上的ADC将电位计转换为-40到50摄氏度之间的温度,
ADC\u值是ADC给出的范围,但是我得到了错误:

Main.c:110:11:错误:非对象类型“float(unsigned int)”不是 可转让


如果需要,我可以提供更多代码,但我不知道哪里出了问题,因为我对C和编程非常陌生。

tempC
是您的函数名,因此,行:

float tempC(unsigned int adc_value) {
    multiplier = adc_value / 1023.0f;
    tempC = -40 * multiplier * 90;
    return tempC;
}
正在尝试为函数赋值,这是不可能的

要返回值,只需执行以下操作:

tempC = -40 * multiplier *90;


tempC
是函数名,因此,行:

float tempC(unsigned int adc_value) {
    multiplier = adc_value / 1023.0f;
    tempC = -40 * multiplier * 90;
    return tempC;
}
正在尝试为函数赋值,这是不可能的

要返回值,只需执行以下操作:

tempC = -40 * multiplier *90;


tempC
不是一个变量,而是一个函数,因此不能在那里赋值

您应该声明另一个变量,而不是像这样声明:

float tempC(unsigned int adc_value)
{
    float multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}
float tempC(unsigned int adc_value) {
    float tempC_ret;
    multiplier = adc_value / 1023.0f;
    tempC_ret = -40 * multiplier * 90;
    return tempC_ret;
}
也可以直接返回计算值,如下所示:

float tempC(unsigned int adc_value)
{
    float multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}
float tempC(unsigned int adc_value) {
    float tempC_ret;
    multiplier = adc_value / 1023.0f;
    tempC_ret = -40 * multiplier * 90;
    return tempC_ret;
}

tempC
不是一个变量,而是一个函数,因此不能在那里赋值

您应该声明另一个变量,而不是像这样声明:

float tempC(unsigned int adc_value)
{
    float multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}
float tempC(unsigned int adc_value) {
    float tempC_ret;
    multiplier = adc_value / 1023.0f;
    tempC_ret = -40 * multiplier * 90;
    return tempC_ret;
}
也可以直接返回计算值,如下所示:

float tempC(unsigned int adc_value)
{
    float multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}
float tempC(unsigned int adc_value) {
    float tempC_ret;
    multiplier = adc_value / 1023.0f;
    tempC_ret = -40 * multiplier * 90;
    return tempC_ret;
}

虽然
C
语法问题已经解决,但我相信仍然存在一些问题 将一个数字范围映射到另一个数字范围的问题。表达方式:

float tempC(unsigned int adc_value) {
    multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}
总是产生一个负数,因此不太可能做你需要的事情

映射…
您使用的是
无符号int
。您的代码表示2字节变量,使得adc_值的范围从您的uP
0到65535

输出范围为-40到50
问题是从一个映射到另一个

鉴于这些范围, ADC输入开始
0
映射到
-40.0
ADC输入端
65535
映射到
50.0的输出端
输入变化的每一位数的输出增量变化为:

tempC = -40 * multiplier * 90;  
然后,输出值将为:

float multiplier = 1.0*(50.0f -(-40.0f))/65535;
这意味着

-40.0f + multiplier*adc_value; 

虽然
C
语法问题已经解决,但我相信仍然存在一些问题 将一个数字范围映射到另一个数字范围的问题。表达方式:

float tempC(unsigned int adc_value) {
    multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}
总是产生一个负数,因此不太可能做你需要的事情

映射…
您使用的是
无符号int
。您的代码表示2字节变量,使得adc_值的范围从您的uP
0到65535

输出范围为-40到50
问题是从一个映射到另一个

鉴于这些范围, ADC输入开始
0
映射到
-40.0
ADC输入端
65535
映射到
50.0的输出端
输入变化的每一位数的输出增量变化为:

tempC = -40 * multiplier * 90;  
然后,输出值将为:

float multiplier = 1.0*(50.0f -(-40.0f))/65535;
这意味着

-40.0f + multiplier*adc_value; 


tempC
是函数的名称。您不能分配给函数。你来自帕斯卡吗?如果可能的话,我不会依赖浮点运算,更不用说微控制器了。您有无符号输入,因此如果您乘以-40,将永远不会得到正值。
multiplier
在这里没有定义。全球的?类型?除了愚蠢的输入错误外,您还需要指定ADC提供的电压水平-50度和90度。相关参考点将是与之对应的ADC值。假设函数可以被假设为线性的。那不是应该是
-40+乘法器*90
?此外,您应该除以
1024
,而不是
1023
0..1023
是1024个不同的值)。
tempC
是函数的名称。您不能分配给函数。你来自帕斯卡吗?如果可能的话,我不会依赖浮点运算,更不用说微控制器了。您有无符号输入,因此如果您乘以-40,将永远不会得到正值。
multiplier
在这里没有定义。全球的?类型?除了愚蠢的输入错误外,您还需要指定ADC提供的电压水平-50度和90度。相关参考点将是与之对应的ADC值。假设函数可以被假设为线性的。那不是应该是
-40+乘法器*90
?此外,您应该除以
1024
,而不是
1023
0..1023
是1024个不同的值)。
乘数
不是defined@ryyker虽然没有公开,但它可能被定义为一个全局变量(如果这样的话,设计看起来就不太好了),这里主要问题的核心是你的答案,但我认为转换算法是假的。同意,@Ryker。据猜测,他们真正想要的是
-40+multiplier*90
,尽管这仍在对ADC范围极限处的测量值进行一些假设。
multiplier
并非如此defined@ryyker虽然没有公开,但它可能被定义为一个全局变量(如果这样的话,看起来设计不太好)这里主要问题的核心是你的答案,但我认为转换算法是假的。同意,@Ryker。据猜测,他们真正想要的是
-40+乘法器*90
,尽管这仍在对ADC范围极限处的测量值进行一些假设。