OpenEdv-开源电子网

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

函数指针问题

[复制链接]

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
发表于 2013-7-2 23:06:35 | 显示全部楼层 |阅读模式
就一个函数,直接调用没问题,用函数指针就出问题了,调试能进去,当就没效果,是usb的,就是切换为U盘模式

main()
{
        //一连串初始化
        void (*pfun)(u16 x,u16 y,u16 fcolor,u16 bcolor,const char *s);
        pfun=UDiskMode;//UDiskMode的参数列表没问题;
        UDiskMode(//跟参数没关系);//这里直接调用函数能正常实现功能。
         (*pfun)(//和上面相同的参数);//这里通过函数指针调用取不能实现功能了,电脑提示无法识别的USB设备    
}
谁遇到过这个问题,有会解决的不






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-2 23:11:29 | 显示全部楼层
回复【楼主位】120742915:
---------------------------------
直接调用函数呢...
OK么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-2 23:11:37 | 显示全部楼层
先别搞这么复杂.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-2 23:16:54 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
直接调用一点问题都没有。
目前必须这么做,这个函数指针是放在结构体里的。

但是我调试时发现一个问题,
函数的地址比函数指针的值少1
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-2 23:20:35 | 显示全部楼层
现在休息了,明天再用另外一个函数转一次试一试
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2013-7-3 08:40:44 | 显示全部楼层
肯定是参数类型不匹配啊。
业余程序玩家。
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-3 12:57:24 | 显示全部楼层
回复【6楼】ofourme:
---------------------------------
怎么会不匹配,不匹配还能编译通过呀,至少也应该有个警告呀。
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-3 13:31:11 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请问,如果我在中断中调用函数,而函数还未返回,是不是其他中断也就不能执行了?
如果是的话我也就知道为什么了!
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-3 13:59:45 | 显示全部楼层
void USB_Interrupts_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

#ifdef STM32F10X_CL 
  NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
#else
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
#endif /* STM32F10X_CL */

  
#if defined(STM32F10X_HD) || defined(STM32F10X_XL)  
  NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_Init(&NVIC_InitStructure);
#endif /* USE_STM3210E_EVAL */
  
}


这个的优先级应该怎么改,0是最高的吗?
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2013-7-3 14:00:15 | 显示全部楼层
回复【8楼】120742915:
---------------------------------
你看一下编译环境遵循C语言哪个标准
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-7-3 16:56:39 | 显示全部楼层
回复【8楼】120742915:
---------------------------------
是这样的,不能中断嵌中断
1-1
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-3 18:33:00 | 显示全部楼层
回复【11楼】mygod:
---------------------------------
不是有优先级的吗?
难道这个优先级只是用于同时发生时?
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-3 18:33:32 | 显示全部楼层
回复【10楼】sun_shine:
---------------------------------
我用的mdk4.7
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-3 18:53:50 | 显示全部楼层
算了,解决了,只能换方法了,在中断中只提供信号,不执行任务
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2013-7-4 08:08:12 | 显示全部楼层
回复【14楼】120742915:
---------------------------------
你要使用这种方法解决的 ,可能是你的中断服务函数太长了造成堆栈溢出。
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-6-29
在线时间
12 小时
 楼主| 发表于 2013-7-4 08:30:57 | 显示全部楼层
回复【15楼】sun_shine:
---------------------------------
不是,因为usb也有中断,可能是它的中断优先级没目前这个的高
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-7-4 10:10:18 | 显示全部楼层
回复【16楼】120742915:
---------------------------------
基乎ARM都不支持中断嵌入中断,一般中断嵌中断只有在带 OS系统中才有;
1-1
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 11:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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