C 什么';这个函数有什么问题?不可转让?
我试图使用微控制器上的ADC将电位计转换为-40到50摄氏度之间的温度,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\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_值的范围从您的uP0到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_值的范围从您的uP0到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范围极限处的测量值进行一些假设。