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

  • 相关阅读:
    BZOJ 2752: [HAOI2012]高速公路(road)
    codevs 1979 第K个数
    洛谷 P2680 运输计划
    hdu 3501 Calculation 2
    POJ 2417 Discrete Logging
    比较数组和字典
    js事件之event.preventDefault()与event.stopPropagation()用法区别
    alert
    js基本类型的包装对象
    js取自定义data属性
  • 原文地址:https://www.cnblogs.com/zhihui-3669/p/13525400.html
Copyright © 2020-2023  润新知