關於結構體指針的使用


關於結構體指針的使用

單片機在寫代碼的時候很多情況下會遇到使用數據和變量差不多的情況,每次都會定義一些類似的變量.我碰到的比如有建立很多個任務,這時候在定義的時候每個任務都有很多類似的變量,taskliving,taskprocesing,flag,logen等等;還有就是對步進電機和直流電機也是有初速度,末速度,加速度,運行步數,輸出電壓,運行時間等.在開始使用的時候每個都用單個的變量去表示,但隨着程序復制程度的增加這個就不那么適用了,會有很多變量要去復制,然后他們的公共函數不能通用,會寫很多個不同名字但是功能都相同的函數,定義很多變量.有沒有更簡單的辦法呢?

那么人類都是為了偷懶而進步,我們能完成這個進步嗎?當然有的,前人已經開發了道路,只是我們不會用.那就是C語言的結構體struct.結構體是一個自定義變量類型,可以用於自己定義變量,是一組變量的組合,C++中的類類似,有了結構體就可以簡化很多的工作,下面我們以步進電機為例來說明一下 ,高手就請飛走,下面都是很基礎的.

typedef struct {

    int32_t   Vo;               // 初速度   單位 Step/s

    int32_t   Vt;               // 末速度   單位 Step/s

u8 MotionStatus;            //目前運行狀態

u16 Acce_stepcounter;       //加速階段的加速步數

u16 Toggle_Pulse;           //定時器的值

    int32_t AccelStep;           // 加速段的步數單位 Step

int32_t DecelStep;           // 減速段的步數單位 Step

  int32_t DecPoint;            // 減速點

    int32_t Step;

    int32_t Step_Position;      //

}Stepmotor;

這里定義了一個結構體Stepmotor,這個結構體包含了一個步進電機的所有參數,我們一共有4個步進電機需要使用這些相同的參數,以前的做法我們會復制4次變量,V0_1,V0_2,V0_3,V0_4;Vt_1,Vt_2...等等很多變量.對於電機的行為來說,最終得到這些參數后都是運動,在這個運動里面還要去計算減速點等,這樣這個move()函數會有很多個參數,代碼的重用性不是很好,也不容易理解.如果使用結構體來定義,我們就只需要幾行代碼就可以定義出4個步進電機對象.Stepmotor motor1,motor2,motor3,motor4.再定義結構體指針Stepmotor *pstu=&motor1. ...   這樣就指想了這一組電機變量,然后在move函數帶入參數move(pstu),簡化了很多參數的傳遞等.代碼結構更清晰,更容易理解.

 

20190806 HH


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM