找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2797|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

關(guān)于C語言結(jié)構(gòu)體內(nèi)的函數(shù)指針的用法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:884307 發(fā)表于 2021-10-9 23:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
項目需要控制多個步進電機, 我的想法是使用結(jié)構(gòu)體來做多個步進電機的獨立控制, 把控制函數(shù)的函數(shù)指針放在結(jié)構(gòu)體中調(diào)用.在實際測試的時候發(fā)現(xiàn)這種方式(結(jié)構(gòu)體)調(diào)用步進電機的函數(shù)沒有反應(yīng), 不起作用(電機不轉(zhuǎn))

C語言代碼大概如
  1. //為閱讀方便, 將所有函數(shù)參數(shù)使用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. //定義了結(jié)構(gòu)體

  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. }
復(fù)制代碼
求教大佬出現(xiàn)了什么錯誤? 應(yīng)該如何解決?
非常感謝您的回復(fù)!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:57657 發(fā)表于 2021-10-10 08:26 | 只看該作者
這是什么平臺的C語言程序? 請?zhí)峁┫?Stepper.h 里的內(nèi)容。
回復(fù)

使用道具 舉報

板凳
ID:884307 發(fā)表于 2021-10-10 11:54 | 只看該作者
npn 發(fā)表于 2021-10-10 08:26
這是什么平臺的C語言程序? 請?zhí)峁┫?Stepper.h 里的內(nèi)容。

感謝回復(fù), 平臺是C51, Stepper.h的內(nèi)容已經(jīng)在帖子里了
回復(fù)

使用道具 舉報

地板
ID:401564 發(fā)表于 2021-10-10 19:23 | 只看該作者
函數(shù)應(yīng)該是不能作為結(jié)體體成員的,結(jié)構(gòu)體是一種變量
回復(fù)

使用道具 舉報

5#
ID:429003 發(fā)表于 2021-10-10 19:49 | 只看該作者
結(jié)構(gòu)體自身只是一個類型聲明而已! 你必須對定義的類型實體變量初始化賦值才能調(diào)用!
比如:
const Stepper StepperInterface = {
    MotorAntiClockwise,
    MotorClockwise,
    MotorSetAngle,
};
回復(fù)

使用道具 舉報

6#
ID:884307 發(fā)表于 2021-10-15 19:13 | 只看該作者
Y_G_G 發(fā)表于 2021-10-10 19:23
函數(shù)應(yīng)該是不能作為結(jié)體體成員的,結(jié)構(gòu)體是一種變量

那有沒有什么方法能做到類似stp.MotorClockwise()這樣的調(diào)用呢?,這樣寫簡單直觀, 我覺得比其他方法好的多
回復(fù)

使用道具 舉報

7#
ID:401564 發(fā)表于 2021-10-15 23:56 | 只看該作者
Kituro 發(fā)表于 2021-10-15 19:13
那有沒有什么方法能做到類似stp.MotorClockwise()這樣的調(diào)用呢?,這樣寫簡單直觀, 我覺得比其他方法好的多

一個電機一個控制函數(shù)不就行了,有時候簡潔不一定實用
回復(fù)

使用道具 舉報

8#
ID:935919 發(fā)表于 2021-10-16 17:00 | 只看該作者
你在結(jié)構(gòu)體里面定義一個指向函數(shù)的指針, 在結(jié)構(gòu)定義的時候, 把相應(yīng)的處理函數(shù)傳給它即可.
回復(fù)

使用道具 舉報

9#
ID:884307 發(fā)表于 2021-10-16 21:44 | 只看該作者
Y_G_G 發(fā)表于 2021-10-15 23:56
一個電機一個控制函數(shù)不就行了,有時候簡潔不一定實用

嗯嗯,謝謝!!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表