KEIL 中结构体对指定元素(函数指针)初始化的探索(呼吸灯为例)

结构体对指定元素初始化就是类似下面的操作:

1 struct lzh { int x; int y; }; 
2 struct lzh xianjue = 
3 { .x = 1, 
4   .y = 2 
5 };

 

在KEIL MDK中使用却报错:“expected an expression”。其实就是编译器不支持C99标准,我们可以打开C99模式让编译器支持C99标准.此方法我测试不通! 最终还是使用函数赋值的方法完成的实例化。 以我的呼吸灯为例说明这个问题:

 1 /*****************************声明呼吸灯对象接口**********************************/
 2 typedef struct { 
 3 void (*breathInit)(void); //呼吸灯初始化
 4 void (*startBreath)(void); //呼吸灯开始呼吸 
 5 void (*stopBreath)(void); //呼吸灯 
 6 void (*taskBreath)(void); //呼吸灯任务轮询,放在1Ms轮询任务里 
 7 }breathfuns_t;
 8 /*************void breathfunsInit(void) 实例化呼吸灯的对象***************/
 9 breathfuns_t breathfuns; //声明一个呼吸灯对象
10 void breathfunsInit(void)
11 {
12 breathfuns.breathInit = breathLedInit; //实例化呼吸灯对象
13 breathfuns.startBreath = startbreath;
14 breathfuns.stopBreath = stopbreath;
15 breathfuns.taskBreath = breathLedTask;
16 }

如此,呼吸灯功能对于主函数的接口就只有结构体变量:breathfuns.比如: breathfuns.startBreath(); 不必再去用extern去声明一大丢的功能函数,真正做到了三化:模块化,分层化,对象化! 没有人一开始就是天下无敌,除了天赋,后期的训练和实战才是根本,只有专研和深耕自身的武艺水平,才能达到其他人达不到的顶尖水平。这句话来自网络,我想也同样适用于嵌入式软硬件领域, 针对本文中所有的错误和不足,欢迎交流,交流技术和项目合作均可。等你来撩我哦!加我请说明来意,谢谢。

 

posted @ 2020-08-18 19:23  leida_3669  阅读(1153)  评论(1编辑  收藏  举报