小技巧C 使用

今天的第一个工作

我是要验证 一个 下面这种 函数的写法 是不是 正常  

第二步骤  再增添功能   

 

大致是  

   DC_control.h 中新建数据类型   

   

Typedef struct  

{

  成员1    NOW

  成员2    OUT

 .

 .

 .

  Void (*calc ) ()   //定义一个指向函数的指针 成员名 calc

 

 

}  STEP ;

 

 

 

DC_control.h中   初始化 该结构体  

 

#define   STEP_DEFAULT

 

{

   0,

   0,

   .

   .

   .

(void)(*)(uint32) step_calc

 

//将函数名(本来就是地址) 转换为整型数  然后再转换为 指向函数的指针

用于赋值 初始化

 

其中step_calc  就是后面新定义的函数

 

}

 

 

DC_control.c 中 定义变量   step_is  并且赋予初始值

 

STEP   step_is  =  STEP_DEFAULT    

 

DC_control.c 中定义函数    

 

 

step_calc STEP * V)  //形式参数 是 指向STEP 类型  

 

 

函数的调用方式   

 

step_is.now  赋予初始值  

 

调用函数   

Step_is.calc (& step_is)

 

或者直接 这样使用  step_calc( &step_is)

 

 

 

我现在做了如下实例  

 

 

 

 

 

DC_control.c 中定义函数  

 

Void  step_calc (STEP * V )

在下面 V-> pre 的值 一直增加    

 

然后把 step_is.pre  拿出来 观测。  赋值给spdobjsoftstart  进行 观测 如下

 

 

 

 

 

如下图

 

 

 

观察以下 看是不是 10ms  增加10   

将上图 用放大镜 放大  

46.1386秒  对应 35550 

 

 

 

 

46.1683秒  对应 35580  

 

 

 

 

两个图对应的点是相邻点  对应的时间间隔是 0.03秒  30毫秒  

 

对应的差值35580-35550=30  恰好就是

 

10ms  增加10  

 

 

 

 

两种用法 等效   

 

 

 

Step_is.calc (&step_is)   与  step_calc ( &step_is )  是等效的。 

 

 

 

 

 

posted @ 2021-02-22 21:38  STEVEN-SUN  阅读(166)  评论(0)    收藏  举报