注册 登录
查看: 435|回复: 15

调用的山外函数,为什么自己写的函数编译出错(新人发帖,多多恳求高人指导!)

[复制链接]
发表于 2014-2-4 23:08:57 | 显示全部楼层 |阅读模式
山外的库整理的很全,今天做AD处理时,自己写了一个外部函数,调用了ad初始化函数,可是IAR编译时却一直出错。
*/
uint16 adc_mid(ADCn_Ch_e adcn_ch, ADC_nbit bit)
{
uint16 i,j,k,tmp;            
i= adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit);----------错误行
j= adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit);----------错误行
k= adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit);----------错误行
。。。
   for(i=0;i<N;i++)
    sum+= adc_mid(ADCn_Ch_e adcn_ch, ADC_nbit bit);-----------------错误行
大家帮忙看看什么情况吧?
error:type name is not allowed
error:too few arguments in function call
error:expected a ")"...

回复

使用道具 举报

发表于 2014-2-4 23:09:52 | 显示全部楼层
i= adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit);----------错误行
j= adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit);----------错误行
k= adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit);----------错误行

你都没有修改参数:ADCn_Ch_e adcn_ch, ADC_nbit bit  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-4 23:16:52 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-4 23:09
i= adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit);----------错误行
j= adc_once(ADCn_Ch_e adcn_ch, ADC_nb ...

你是指具体的管脚好么?
回复 支持 反对

使用道具 举报

发表于 2014-2-5 08:33:26 | 显示全部楼层
bobo_Shane 发表于 2014-2-4 23:16
你是指具体的管脚好么?

建议你看看我们的视频,因为你对我们很多函数都不熟悉。

ADCn_Ch_e adcn_ch   ,函数调用的参数,是不需要类型的,ADCn_Ch_e 是一个数据类型。
你看看 ADCn_Ch_e 定义,这个是ADC通道定义,不同通道,管脚不一样,注释里写着的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-5 10:15:10 | 显示全部楼层
--谢谢! 。。。可是,我括号里面的是通道号变量跟ADC精度定义,uint16 adc_mid(ADCn_Ch_e adcn_ch, ADC_nbit bit)
这种含义格式依照的void adc_start(ADCn_Ch_e adcn_ch, ADC_nbit bit)以及uint16 adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit) 定义的,我如果去掉类型,编译反而错误变多。  另外我在头文件里面也有过了外部函数的声明的--
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-5 10:15:40 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-5 08:33
建议你看看我们的视频,因为你对我们很多函数都不熟悉。

ADCn_Ch_e adcn_ch   ,函数调用的参数,是不 ...

--谢谢! 。。。可是,我括号里面的是通道号变量跟ADC精度定义,uint16 adc_mid(ADCn_Ch_e adcn_ch, ADC_nbit bit)
这种含义格式依照的void adc_start(ADCn_Ch_e adcn_ch, ADC_nbit bit)以及uint16 adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit) 定义的,我如果去掉类型,编译反而错误变多。  另外我在头文件里面也有过了外部函数的声明的--
回复 支持 反对

使用道具 举报

发表于 2014-2-5 13:31:20 | 显示全部楼层
bobo_Shane 发表于 2014-2-5 10:15
--谢谢! 。。。可是,我括号里面的是通道号变量跟ADC精度定义,uint16 adc_mid(ADCn_Ch_e adcn_ch, ADC_nb ...

形参,也需要换成你自己定义的变量,或者我们自带的枚举参数啊。

C语言,函数是可以带参数的,参数是需要你自己去修改的,而不是直接复制函数声明。

函数声明,仅仅是示意性的。

我建议真的好好看看我们的例程和视频,我们有调用例子的。需要把形参改成你自己所需的通道号,和精度,直接复制函数声明,肯定是编译出错的。
回复 支持 反对

使用道具 举报

发表于 2014-2-5 13:33:42 | 显示全部楼层
bobo_Shane 发表于 2014-2-5 10:15
--谢谢! 。。。可是,我括号里面的是通道号变量跟ADC精度定义,uint16 adc_mid(ADCn_Ch_e adcn_ch, ADC_ ...

错误变多,没所谓啊,关键是找到错误原因。你对C语言的函数调用都不了解,需要把我们实现的函数换成你自己所需的形参。看我们的ADC例程。
  1. /*!
  2. *  @brief      main函数
  3. *  @since      v5.1
  4. *  @note       山外 ADC 实验
  5. */
  6. void main()
  7. {
  8.     uint16 var;
  9.     adc_init(ADC1_SE16);              //ADC初始化

  10.     while(1)
  11.     {
  12.         var = adc_once   (ADC1_SE16, ADC_8bit);
  13.         printf("\nADC采样结果为:%d",var);
  14.         printf("     相应电压值为%dmV",(3300*var)/((1<<8)-1));

  15.         DELAY_MS(500);

  16.     }
  17. }
回复 支持 反对

使用道具 举报

发表于 2014-2-5 13:35:09 | 显示全部楼层
这个是函数声明:
  1. uint16 adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit)
直接放到代码里是编程出错的,需要换成我们所需的通道号和精度。
  1. var = adc_once   (ADC1_SE16, ADC_8bit);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-5 14:06:07 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-5 13:33
错误变多,没所谓啊,关键是找到错误原因。你对C语言的函数调用都不了解,需要把我们实现的函数换成你自己 ...

这个例子我知道,我 开始想问的问题,不是函数调用啊,我知道调用可以嵌套的。(我的c语言是不好,但我没有放弃过学习),我的意思是,开始我自己写的adc_mid()函数,我在定义他的时候,嵌套调用了库里面已经有的,定义好的adc_once()函数,这是没问题的对吧。还有我后面自己写的均值滤波函数adc_avg(),他也是调用了之前写的adc_mid()函数,所以具体的给引脚函数赋值的时候就是在main()函数里面,引用了这些函数的时候再赋值引脚号给形参比如什么ADC0_SE16...等等的。
回复 支持 反对

使用道具 举报

发表于 2014-2-5 14:08:43 | 显示全部楼层
bobo_Shane 发表于 2014-2-5 14:06
这个例子我知道,我 开始想问的问题,不是函数调用啊,我知道调用可以嵌套的。(我的c语言是不好,但我没 ...

哦哦,我理解你的意思了。需要把类型删掉,删掉后,还有什么错误呢?如果有错误,那你把最前面那个错误发上来
  1. uint16 adc_mid(ADCn_Ch_e adcn_ch, ADC_nbit bit)
  2. {
  3. uint16 i,j,k,tmp;            
  4. i= adc_once(adcn_ch, bit);----------需要把类型删掉
  5. j= adc_once(adcn_ch, bit);----------需要把类型删掉
  6. k= adc_once(adcn_ch, bit);----------需要把类型删掉
  7. 。。。
  8.    for(i=0;i<N;i++)
  9.     sum+= adc_mid(adcn_ch, bit);-----------------需要把类型删掉
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-5 14:09:05 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-5 13:35
这个是函数声明:直接放到代码里是编程出错的,需要换成我们所需的通道号和精度。

adc_mid()我在主函数里面调用它,在定义申明的的时候又不要把参数换成具体的通道号和精度
回复 支持 反对

使用道具 举报

发表于 2014-2-5 14:10:23 | 显示全部楼层
bobo_Shane 发表于 2014-2-5 14:09
adc_mid()我在主函数里面调用它,在定义申明的的时候又不要把参数换成具体的通道号和精度

删掉类型后,还有什么错误呢?
main函数里调用,需要 函数声明的哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-5 14:22:11 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-5 14:08
哦哦,我理解你的意思了。需要把类型删掉,删掉后,还有什么错误呢?如果有错误,那你把最前面那个错误发 ...

哈哈,已经解决了!!!!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-5 14:24:37 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-5 14:10
删掉类型后,还有什么错误呢?
main函数里调用,需要 函数声明的哦

非常感谢山外!!还有你的耐心解答!果然在函数调用时类型出了错误。以往函数在调用的时候还真没怎么在意这些。。谢谢啦!
回复 支持 反对

使用道具 举报

发表于 2014-2-5 14:28:14 | 显示全部楼层
bobo_Shane 发表于 2014-2-5 14:24
非常感谢山外!!还有你的耐心解答!果然在函数调用时类型出了错误。以往函数在调用的时候还真没怎么在意 ...

呵呵,解决就好
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部