找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2250|回复: 8
打印 上一主题 下一主题
收起左侧

关于C语言结构体内的函数指针的用法

[复制链接]
跳转到指定楼层
楼主
ID:884307 发表于 2021-10-9 23:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
项目需要控制多个步进电机, 我的想法是使用结构体来做多个步进电机的独立控制, 把控制函数的函数指针放在结构体中调用.在实际测试的时候发现这种方式(结构体)调用步进电机的函数没有反应, 不起作用(电机不转)

C语言代码大概如
  1. //为阅读方便, 将所有函数参数使用arg代替
  2. //*****************************main.c
  3. //尝试在main.c中控制步进电机

  4. #include "Stepper.h"

  5. void main(){
  6. Stepper stp;

  7. while(1){
  8.     //如果使用 "MotorClockwise(arg); "则电机正常工作
  9.     stp.MotorAntiClockwise(arg); //电机不工作
  10.     }
  11. }

  12. //***************************Stepper.h
  13. //定义了结构体

  14. extern void MotorAntiClockwise(arg);
  15. extern void MotorClockwise(arg);
  16. extern void MotorSetAngle(arg);

  17. typedef struct
  18. {
  19.     void (*MotorAntiClockwise)(arg);
  20.     void (*MotorClockwise)(arg);
  21.     void (*MotorSetAngle)(arg);
  22. }Stepper;

  23. //***************************Stepper.c

  24. void MotorAntiClockwise(arg){
  25.     //code
  26. }

  27. void MotorClockwise(arg){
  28.     //code
  29. }

  30. void MotorSetAngle(arg){
  31.     //code
  32. }
复制代码
求教大佬出现了什么错误? 应该如何解决?
非常感谢您的回复!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2021-10-10 08:26 | 只看该作者
这是什么平台的C语言程序? 请提供下 Stepper.h 里的内容。
回复

使用道具 举报

板凳
ID:884307 发表于 2021-10-10 11:54 | 只看该作者
npn 发表于 2021-10-10 08:26
这是什么平台的C语言程序? 请提供下 Stepper.h 里的内容。

感谢回复, 平台是C51, Stepper.h的内容已经在帖子里了
回复

使用道具 举报

地板
ID:401564 发表于 2021-10-10 19:23 | 只看该作者
函数应该是不能作为结体体成员的,结构体是一种变量
回复

使用道具 举报

5#
ID:429003 发表于 2021-10-10 19:49 | 只看该作者
结构体自身只是一个类型声明而已! 你必须对定义的类型实体变量初始化赋值才能调用!
比如:
const Stepper StepperInterface = {
    MotorAntiClockwise,
    MotorClockwise,
    MotorSetAngle,
};
回复

使用道具 举报

6#
ID:884307 发表于 2021-10-15 19:13 | 只看该作者
Y_G_G 发表于 2021-10-10 19:23
函数应该是不能作为结体体成员的,结构体是一种变量

那有没有什么方法能做到类似stp.MotorClockwise()这样的调用呢?,这样写简单直观, 我觉得比其他方法好的多
回复

使用道具 举报

7#
ID:401564 发表于 2021-10-15 23:56 | 只看该作者
Kituro 发表于 2021-10-15 19:13
那有没有什么方法能做到类似stp.MotorClockwise()这样的调用呢?,这样写简单直观, 我觉得比其他方法好的多

一个电机一个控制函数不就行了,有时候简洁不一定实用
回复

使用道具 举报

8#
ID:935919 发表于 2021-10-16 17:00 | 只看该作者
你在结构体里面定义一个指向函数的指针, 在结构定义的时候, 把相应的处理函数传给它即可.
回复

使用道具 举报

9#
ID:884307 发表于 2021-10-16 21:44 | 只看该作者
Y_G_G 发表于 2021-10-15 23:56
一个电机一个控制函数不就行了,有时候简洁不一定实用

嗯嗯,谢谢!!!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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