结构体对指定元素初始化就是类似下面的操作:
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去声明一大丢的功能函数,真正做到了三化:模块化,分层化,对象化! 没有人一开始就是天下无敌,除了天赋,后期的训练和实战才是根本,只有专研和深耕自身的武艺水平,才能达到其他人达不到的顶尖水平。这句话来自网络,我想也同样适用于嵌入式软硬件领域, 针对本文中所有的错误和不足,欢迎交流,交流技术和项目合作均可。等你来撩我哦!加我请说明来意,谢谢。