关于结构体指针的使用

关于结构体指针的使用

单片机在写代码的时候很多情况下会遇到使用数据和变量差不多的情况,每次都会定义一些类似的变量.我碰到的比如有建立很多个任务,这时候在定义的时候每个任务都有很多类似的变量,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

时间: 2024-11-02 01:42:59

关于结构体指针的使用的相关文章

结构体指针

结构体与指针 1.结构体指针的数值为某个结构体的内存空间的地址,从而指针指向某个结构体. 2.结构体指针的初始值为空(0),不指向任何结构体. 3.malloc操作:创建一个新的内存空间(从内存中选择一个内存空间存储结构体),p指向这个结构体,p的值为这个结构体的内存空间的地址. 4.结构体指针的赋值:一个结构体指针的数值等于另外一个结构体指针的数值,从而两个结构体指针指向相同的结构体.当对某个结构体进行访问时,选择的结构体指针只要满足该结构体指针指向这个结构体即可,即可以有很多种选择. 5.当

C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

strcpy(pstudent->name, "guo zhao wei "); 为什么错误,该怎么写,(红色行) 追问 为什么不能直接赋值啊, 追答 用char nnnn[20]定义的,用strcpy 用char *ppp定义的,用=来赋值 C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

(C)struct结构体指针

结构体指针 指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员:其二是指向结构的指针(称为结构指针). 前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点. 结构指针说明的一般形式是: struct (结构类型名称) * (结构指针变量名);例如:struct date * pdate, today;说明了两个变量,一个是指向结构date的结构指针pdate,today是一个date结构变量. 语句: struct date{ int year; int mo

c语言中结构体指针

1.指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符"->". 举例说明: struct SunLL { int a; int b; int c; }; struct SunLL  * p;               //定义结构体指针 struct SunLL A = {1,2,3};    //定义一个SunLL类型的变量A

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语

结构体指针之 段错误 具体解释(segmentation fault)

一个网友问了我一个问题.一个C程序执行出现了段错误,这个问题非常好.非常多刚開始学习的人都easy犯这个错误,详细代码例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 这个编译没有问题,可是执行是段错误    Segmentation fault 由于你定义了一个结构体指针p.用来指向此类

用PostMessage或SendMessage发送结构体指针

SendMessage可以随意发送结构体指针. PostMessage则必须注意结构体的生命周期. 例如如下发送代码,使用PostMessage: struct _tag_aa { CString s1; char szBuffer[512]; int a; char* szText; }; _tag_aa *a=new _tag_aa; a->s1="ssssss11111111111111"; strcpy(a->szBuffer,"Bufferrrrrrrr

c语言中的结构体指针类型的cast

1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针,并且 在这个结构体中,第一个结构成员必须也是一个结构体(最好是结构体类型). 那么我们可以这个结构体指针转换为指向这个结构体中第一个成员结构体的指针. 直接看代码: ************************************ /* struct transform for struct

python 传递结构体指针到 c++ dll

CMakeLists.txt # project(工程名) project(xxx) # add_library(链接库名称 SHARED 链接库代码) add_library(xxx SHARED xxx.cpp) xxx.cpp #include <iostream> using namespace std; // c++ 结构体定义 struct struck_ { // 股票名,字符串 char * stock_code_; // 开盘价 double stock_open_; };

C语言--- 高级指针2(结构体指针,数组作为函数参数)

一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针     结构体:     typedef  struct stu{                          char name[20];                          char sex;                          int age;                    }Student;     Student stu1 = {"zhangsan",'m',23};