美文网首页
Mtk功能机,项目编译与宏控制

Mtk功能机,项目编译与宏控制

作者: Guoke24 | 来源:发表于2018-11-05 10:27 被阅读0次

流程简介

  • 声明一个开关
  • 检测到开关,定义宏
  • 宏控制着代码的引入编译

声明一个开关

  • 文件:EC618AE_ENG_GPRS.mak (make)
  • 代码:
    POS_XXX_APP = TRUE
  • 代码逻辑:打开开关: POS_XXX_APP

检测到开关,定义宏

第一个宏
  • 文件:Option_HAL.mak (make)
  • 代码:
    ifdef POS_XXX_APP
      ifeq ($(strip $(POS_XXX_APP)),TRUE)
        COM_DEFS    += __POS_XXX_APP__
      endif
    endif

代码逻辑:如果打开了开关:POS_XXX_APP ,定义宏:

__POS_XXX_APP__
第二个宏
  • 文件:MMI_features.h (plutommi\mmi\inc)
  • 代码:
// 第一处,定义加MMI前缀的宏
#if defined(__POS_XXX_APP__)
    #ifndef __MMI_POS_XXX_APP__
    #define __MMI_POS_XXX_APP__
    #endif
#endif
  • 代码逻辑:定义加上 MMI 前缀的宏:
__MMI_POS_XXX_APP__

到此,宏定义完成,接着是用宏控制代码的引入编译

以 TOPQRPAY 这个应用为例,定义的宏为:

 __MMI_POS_TOPQRPAY_APP__
头文件和源码文件的引入编译:
  • Mmi_app.mak (make\plutommi\mmi_app)
  • 代码:
    ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
        SRC_LIST += plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayMain.c \
                    plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayScrnInquiry.c \
                    。。。。。。
                    plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayNfcSearch.c
    endif
    
    ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
        INC_DIR += plutommi\mmi\TopQRPay\TopQRPayInc
    endif

    ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
        SRC_PATH += plutommi\mmi\TopQRPay\TopQRPaySrc
    endif 
  • 代码逻辑:如果发现开关:MMI_POS_TOPQRPAY_APP ,就引入 TopQRPay 项目的头文件和源码文件
资源文件的引入:
  • 文件:Mmi_pluto_res_range_def.h (plutommi\mmi\inc)
  • 代码:
    #ifdef __MMI_POS_TOPQRPAY_APP__
    MMI_RES_DECLARE(APP_ID_TOPQRPAY, 400, ".\\MMI\\TopQRPay\\TopQRPayRes\\")
    #define TOPQRPAY_BASE                    ((U16) GET_RESOURCE_BASE(APP_ID_TOPQRPAY))
    #define TOPQRPAY_BASE_MAX                ((U16) GET_RESOURCE_MAX(APP_ID_TOPQRPAY))
    #endif
  • 代码逻辑:如果发现开关:MMI_POS_TOPQRPAY_APP ,就引入 TopQRPay 项目的资源文件
  • 并且声明 APP_ID_TOPQRPAY 指向 TopQRPay 项目的资源文件
  • 声明两个宏:TOPQRPAY_BASE ,TOPQRPAY_BASE_MAX 表示 APP_ID_TOPQRPAY 的基本值和最大基本值
资源文件的id声明
  • 文件:TopQRPayRes.res( plutommi\mmi\TopPandaPay\TopPandaPayRes ) // 资源文件的本体
  • 文件:TopQRPayRes.c (plutommi\customer\resgenerator\temp\res) // 编译时生成的临时文件,代码跟本体一样
  • 代码:
#include "mmi_features.h"
#include "custresdef.h"

/* Need this line to tell parser that XML start, must after all #include. */
<?xml version="1.0" encoding="UTF-8"?>

<APP id="APP_ID_TOPQRPAY">

    <INCLUDE file="mmi_rp_app_mainmenu_def.h"/>
    <INCLUDE file="GlobalResDef.h,SettingResDef.h,GlobalMenuItems.h"/>
    <INCLUDE file="Mmi_rp_all_defs.h"/>

    <STRING id="TOPQRPAY_STR_ID_XIAOFEI"/>
    <STRING id="TOPQRPAY_STR_ID_XIANJIN"/>
    。。。。。。
    <SCREEN id="SCREEN_ID_TOPQRPAY_MAINMENU"/>
    <SCREEN id="SCREEN_ID_CONSUME_MAIN"/>
    。。。。。。
    <TIMER id="TIMER_LOGIN_TIMEROUT_ID"/>
    。。。。。。
    <IMAGE id="IMAGE_ID_TOPQRPAY_UNIONPAY_ICON">CUST_IMG_PATH"\\\\MainLCD\\\\TopQRPay\\\\union_icon.png"</IMAGE>
    <IMAGE id="IMAGE_ID_TOPQRPAY_MAINMENU_BG">CUST_IMG_PATH"\\\\MainLCD\\\\TopQRPay\\\\topqrpay_mainmenu_bg.jpg"</IMAGE>
    。。。。。。
    <AUDIO id="AUD_ID_AMOUNT_NUM_0" flag="MULTIBIN">CUST_ADO_PATH"\\\\Amount\\\\tts_0.mp3"</AUDIO>
    <AUDIO id="AUD_ID_AMOUNT_NUM_1" flag="MULTIBIN">CUST_ADO_PATH"\\\\Amount\\\\tts_1.mp3"</AUDIO>
    。。。。。。
    <CACHEDATA type="short" id="NVRAM_SAOMA_DATASIZE" restore_flag="TRUE">
    <DEFAULT_VALUE> [0x00, 0x00] </DEFAULT_VALUE>
    </CACHEDATA>
    。。。。。。
    <MENU id="MENU_ID_LOGIN_TIME_SETTING_MENU" type="APP_SUB" str="TOPQRPAY_STR_ID_LOGIN_TIMEOUT">
        <MENUITEM_ID>TOPQRPAY_MENU_ID_LOGIN_SETTING_2_MIN</MENUITEM_ID>
        。。。。。。
    </MENU>

    <MENUITEM id="TOPQRPAY_MENU_ID_LOGIN_SETTING_2_MIN" str="TOPQRPAY_STR_ID_SLK_2_MIN"/>
    。。。。。。
    <RECEIVER id="EVT_ID_GPIO_LCD_SLEEP_OUT" proc="topqrpay_mmi_lcd_sleep_out_handler"/>
</APP>
  • 代码逻辑:定义了字符串,屏幕,TIMER,IMAGE,AUDIO,MENU,
    RECEIVER等的id

然后就是在.h和.c文件中,用宏控制代码段是否引入编译

相关文章

网友评论

      本文标题:Mtk功能机,项目编译与宏控制

      本文链接:https://www.haomeiwen.com/subject/ombjxqtx.html