关于结构体指针的使用
单片机在写代码的时候很多情况下会遇到使用数据和变量差不多的情况,每次都会定义一些类似的变量.我碰到的比如有建立很多个任务,这时候在定义的时候每个任务都有很多类似的变量,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
原文地址:https://www.cnblogs.com/constanto/p/11307380.html