美文网首页
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