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

  • 相关阅读:
    C++多线程二
    C++多线程一
    定义抽象数据类型
    泛型函数
    关联容器(map):支持高效查找的容器,一种键值对的集合。
    字符串拆成单词的另一种实现
    将字符串拆成单词,并算最长的长度
    重载,排序,集合实例
    程序调用动态链接库中的方法,位图,类
    用bosybox制作文件系统
  • 原文地址:https://www.cnblogs.com/zhihui-3669/p/13525400.html
Copyright © 2011-2022 走看看