OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5236|回复: 7

求助帖!原子哥!往原子哥的adc.c,lcd.c里面加入自己编的函数main函数不能引用(库函数版本)

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-3-11
在线时间
0 小时
发表于 2014-3-30 22:27:49 | 显示全部楼层 |阅读模式



adc.c,lcd.c


里面放函数,adc.h,lcd.h里面都给函数声明了,但是在main函数里引用自己编写的程序时却不能查看函数的definition和reference,求助啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-30 22:32:50 | 显示全部楼层
回复【楼主位】Day_Day_Up:
---------------------------------
你这是由多个匹配的对象吧
在Browser选项卡里面,双击吧!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-30 22:41:39 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不好意思啊原子哥没太明白您说的意思啊,我的问题主要是我自己编的函数(放在lcd.c里)在main函数里貌似没被调用,怎么解决好呢?刚接触stm32不久希望原子哥给讲的通俗易懂点啦
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-31 01:40:01 | 显示全部楼层
回复【3楼】Day_Day_Up:
---------------------------------
你编译过了没有啊?报错吧,我看你代码写的有问题。。。
函数调用的时候,还有void在里面。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-31 12:37:40 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
按你说的双击稀里糊涂搞对了(暂不深究),之前报错许多是跟extern变量引用有关现已解决,现在还剩下一个问题,各个函数.h文件的引用不出意外没有问题,程序想实现的功能是8路ADC数据采集DMA数据传输,lcd显示实时曲线,程序还没调出来,逻辑应该正确,上代码
1、main 函数中的程序:
while(1)
{
filter(); //(重要)读取加滤波各通道数据
for(c=0;c<8;c++)
{
switch(c)
{
case 0OINT_COLOR(WHITE);                            
   ADC_DMA_LCD_Drawcurve(x); break;
case 1OINT_COLOR(BRRED);
   ADC_DMA_LCD_Drawcurve(x); break;
case 2OINT_COLOR(BLUE);
   ADC_DMA_LCD_Drawcurve(x); break;
case 3OINT_COLOR(RED);
   ADC_DMA_LCD_Drawcurve(x); break;
case 4OINT_COLOR(MAGENTA);
   ADC_DMA_LCD_Drawcurve(x); break;
case 5OINT_COLOR(GREEN);
   ADC_DMA_LCD_Drawcurve(x); break;
case 6OINT_COLOR(CYAN);
   ADC_DMA_LCD_Drawcurve(x); break;
case 7OINT_COLOR(YELLOW);
   ADC_DMA_LCD_Drawcurve(x); break;
}
x=x+1;
}
basex=x;
basey=y;
    delay_ms(100);
LED0=!LED0;
if(x>240) x=25;
}
2、lcd.c里的程序
void ADC_DMA_LCD_Drawcurve(u16 x)
{
u16 tempx=x;
tempx+=1; //每次只画一个点使图像更精确
y=304-(int)(After_filter[c]/16);
LCD_DrawLine(basex,basey,tempx,y); //画实时曲线
}
3、lcd.h里的函数声明
void ADC_DMA_LCD_Drawcurve(u16 x);//自加画实时曲线函数
4、报错
错误对应case1~case7
compiling main.c...
main.c(57): error:  #109: expression must have (pointer-to-) function type
main.c(59): error:  #109: expression must have (pointer-to-) function type
main.c(61): error:  #109: expression must have (pointer-to-) function type
main.c(63): error:  #109: expression must have (pointer-to-) function type
main.c(65): error:  #109: expression must have (pointer-to-) function type
main.c(67): error:  #109: expression must have (pointer-to-) function type
main.c(69): error:  #109: expression must have (pointer-to-) function type
main.c(71): error:  #109: expression must have (pointer-to-) function type
5、①是不是语法方面的问题?switch用的不对??
     ② case 0OINT_COLOR(WHITE);                            
             ADC_DMA_LCD_Drawcurve(x); break;
        实参(对吧??)x是定义的全局变量,能这样用吗
     ③void ADC_DMA_LCD_Drawcurve(u16 x)
        形参这样用对吗
c语言不是特熟可能问题很二还希望原子哥多多包含哦
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-31 19:24:14 | 显示全部楼层
switch没问题。
POINT_COLOR(WHITE),不知道你怎么写的,我怀疑报错的是这个。
c语言好好练习。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-31 19:38:23 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
大赞原子哥,真是这个问题,高兴!一个马虎问题。。。POINT_COLOR(WHITE);这个应该为POINT_COLOR=WHITE;谢谢原子哥啦
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-4-1 22:35:52 | 显示全部楼层
回复【7楼】Day_Day_Up:
---------------------------------
程序实在是调不出来了!!来求助原子哥了,关于DMA的初始化问题,用JTAG仿真与DMA有关的寄存器都没有反应,程序没错误没警告,真是跪了看不出来。。上图上程序了
放在adc.c里了adc.h也声明了,#include "stm32f10x_adc.h"也引入了,而且程序也能跑进void Dma_Init(void)里(有图)

void Dma_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel1); //将DMA的通道1寄存器重设为缺省值
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA外设ADC基地址(此寄存器存放16位采集到的数据)
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //DMA内存基地址(即定义的变量地址)
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //内存作为数据传输的目的地(另一选择为来源)
DMA_InitStructure.DMA_BufferSize = 20*8; //DMA通道的DMA缓存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变(另一选择为递增)
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增(另一选择为不变)
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //数据宽度为16位(还有32,8位可选)
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //数据宽度为16位(还有32,8位可选)
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式(说明当二维数组存满后重新从数组第一个内存地址开始存储??)
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x拥有高优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输
DMA_Init(DMA1_Channel1, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道
DMA_Cmd(DMA1_Channel1, ENABLE); //启动DMA通道???没有初始化??
}
main函数的引用Dma_Init();
附仿真截图,截图在上面
网上查了查有相关的说意思是时钟问题我的貌似没有啊,还有个说事库函数版本什么的,还望原子哥给指导下这种情况发生的原因都有哪些啊,感激不尽
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 18:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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