小技巧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 ) 是等效的。