国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網(wǎng)

標(biāo)題: 來個宏定義玩玩,呵呵~ [打印本頁]

作者: 一朝成名    時間: 2009-7-14 16:38
標(biāo)題: 來個宏定義玩玩,呵呵~
從驅(qū)動接口宏定義抽出來

第一個數(shù)據(jù)結(jié)構(gòu)


// Driver functions:驅(qū)動函數(shù)
CYG_ADC_FUNCTIONS( lpc2xxx_adc_funs,
                   lpc2xxx_adc_enable,
                   lpc2xxx_adc_disable,
                   lpc2xxx_adc_set_rate );

//doc中的解釋說明
The macro CYG_ADC_FUNCTIONS() instantiates a function table called example_adc_funs and populates it with the ADC driver functions



//宏定義原型

#define CYG_ADC_FUNCTIONS( __name, __enable, __disable, __set_rate )    \
cyg_adc_functions __name =                                              \
{                                                                                         \
    .enable               = __enable,                                          \
    .disable              = __disable,                                          \
    .set_rate            = __set_rate                                         \
};



//adc函數(shù)定義原型,一個結(jié)構(gòu)體包含了三個函數(shù)指針

struct cyg_adc_functions
{  
    void (*enable)( cyg_adc_channel *chan );
    void (*disable)( cyg_adc_channel *chan );

    void (*set_rate)( cyg_adc_channel *chan, cyg_uint32 rate );
};


/******************************************************************/
宏展開的結(jié)果:定義了一個cyg_adc_funtions包含了函數(shù)指針的結(jié)構(gòu)體

cyg_adc_functions  lpc2xxx_adc_funs{

    .enable               =  lpc2xxx_adc_enable,                                    
    .disable              =  lpc2xxx_adc_disable,                           
    .set_rate            =  lpc2xxx_adc_set_rate

}      
/********************************************************************/


//ADC信息的私有數(shù)據(jù)
static lpc2xxx_adc_info lpc2xxx_adc_info0 =
{
    .base               = CYGARC_HAL_LPC2XXX_REG_AD_BASE,
    .vector             = CYGNUM_HAL_INTERRUPT_TIMER1,
    .intprio            = CYGNUM_DEVS_ADC_ARM_LPC24XX_INTPRIO,
    .int_handle         = 0,
#if CYGPKG_DEVS_ADC_ARM_LPC24XX_DEBUG_LEVEL > 0
    .isr_cnt            = 0,
#endif
    .chan_mask          = 0
};

//ADC驅(qū)動的總結(jié)構(gòu),包含了上述的兩部分驅(qū)動函數(shù)和私有數(shù)據(jù)
CYG_ADC_DEVICE( lpc2xxx_adc_device,               //名字
                &lpc2xxx_adc_funs,                                 //驅(qū)動函數(shù)
                &lpc2xxx_adc_info0,                                //驅(qū)動信息私有數(shù)據(jù)
                CYGNUM_DEVS_ADC_ARM_LPC24XX_DEFAULT_RATE);    //默認(rèn)采樣率
宏定義
#define CYG_ADC_DEVICE(__name, __funs, __dev_priv, __rate )     \
cyg_adc_device __name =                                         \
{                                                               \
    .funs                    = __funs,                               \
    .dev_priv             = __dev_priv,                           \
    .config.rate         = __rate,                               \
    .init               = false                                 \
};

/********************************************************************************************/
展開宏定義的結(jié)果

cyg_adc_device lpc2xxx_adc_device =                                             \
{                                                                                                            \
    .funs                   = lpc2xxx_adc_funs, ,                                            \
    .dev_priv            = lpc2xxx_adc_info0,                                             
    .config.rate          =CYGNUM_DEVS_ADC_ARM_LPC24XX_DEFAULT_RATE,                                         
    .init                      = false                                                                     
};
/**********************************************************************************************/


//ADC0~7驅(qū)動的注冊
LPC2XXX_ADC_CHANNEL(0~7)

//原型
#define LPC2XXX_ADC_CHANNEL( __chan )                                    \
CYG_ADC_CHANNEL( lpc2xxx_adc_channel##__chan,                            \
                 __chan,                                                 \
                 CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL##__chan##_BUFSIZE,  \
                 &lpc2xxx_adc_device );                                  \
                                                                         \
DEVTAB_ENTRY( lpc2xxx_adc_channel##__chan##_device,                      \
              CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL##__chan##_NAME,        \
              0,                                                         \
              &cyg_io_adc_devio,                                         \
              lpc2xxx_adc_init,                                          \
              lpc2xxx_adc_lookup,                                        \
              &lpc2xxx_adc_channel##__chan );

(1)第一步展開,將"##__chan"和"##_chan##"替換為__chan的數(shù)值,假設(shè)為0

CYG_ADC_CHANNEL( lpc2xxx_adc_channel0,                                        \
                 0,                                                                                                  \
                 CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_BUFSIZE,  \
                 &lpc2xxx_adc_device );                                                            \
                                                                                                                    \
DEVTAB_ENTRY( lpc2xxx_adc_channel0_device,                                 \
              CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_NAME,        \
              0,                                                                                                 \
              &cyg_io_adc_devio,                                                                      \
              lpc2xxx_adc_init,                                                                             \
              lpc2xxx_adc_lookup,                                                                       \
              &lpc2xxx_adc_channel0 );


//CYG_ADC_CHANNEL宏定義原型
#define CYG_ADC_CHANNEL( __name, __channel, __bufsize, __device )      
static cyg_adc_sample_t __name##_buf[__bufsize];                                    
cyg_adc_channel __name =                                                                              
{                                                                                                                          
    .channel            = __channel,                                    \
    .buf                = __name##_buf,                                 \
    .len                = __bufsize,                                    \
    .put                = 0,                                            \
    .get                = 0,                                            \
    .device             = __device,                                     \
    .init               = false                                         \
};


(2-1)CYG_ADC_CHANNLE再次展開后的結(jié)果:
static cyg_adc_sample_t lpc2xxx_adc_channel0_buf[CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_BUFSIZE];                        \
cyg_adc_channel lpc2xxx_adc_channel0 =                                                                   \
{                                                                                                                                        \
    .channel            = 0,                                                                                                     \
    .buf                    = lpc2xxx_adc_channel0_buf,                                                           \
    .len                    = CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_BUFSIZE,       \
    .put                   = 0,                                                                           \
    .get                   = 0,                                                                           \
    .device              = &lpc2xxx_adc_device,                                                           \
    .init                    = false                                                                         \
};


(2-2)DEVTAB_ENTRY宏定義的原型
         
    #define DEVTAB_ENTRY(_l,_name,_dep_name,_handlers,_init,_lookup,_priv) \
                   CHAR_DEVTAB_ENTRY(_l,_name,_dep_name,_handlers,_init,_lookup,_priv)
    #define CHAR_DEVTAB_ENTRY(_l,_name,_dep_name,_handlers,_init,_lookup,_priv)  
       cyg_devtab_entry_t _l CYG_HAL_TABLE_ENTRY(devtab) = {                  
       _name,                                                               
       _dep_name,                                                           
       _handlers,                                                           
       _init,                                                               
       _lookup,                                                            
       _priv,                                                               
       CYG_DEVTAB_STATUS_CHAR                                               
    };
           
        展開結(jié)果
          cyg_devtab_entry_t _l CYG_HAL_TABLE_ENTRY(devtab) = {                  
       lpc2xxx_adc_channel0_device,                                                                                                        
       CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_NAME,                                                                                               
       0,                                                                                                   
       lpc2xxx_adc_init,                                                                                          
       lpc2xxx_adc_lookup,                                                                             
       &lpc2xxx_adc_channel0,                                                                              
       CYG_DEVTAB_STATUS_CHAR                                               
    };      
      CYG_HAL_TABLE_ENTRY()原型
    #define CYG_HAL_TABLE_ENTRY( _name ) \
                CYGBLD_ATTRIB_SECTION(".ecos.table." __xstring(_name) ".data")
            CYGBLD_ATTRIB_USED

      展開結(jié)果
                CYGBLD_ATTRIB_SECTION(".ecos.table.devtab.data")
            CYGBLD_ATTRIB_USED
      CYGBLD_ATTRIB_SECTION原型
        #define CYGBLD_ATTRIB_SECTION(__sect__) __attribute__((section (__sect__)))
      展開結(jié)果
       __attribute__((section (".ecos.table.devtab.data")))
       展開CYGBLD_ATTRIB_USED
    __attribute__((used))

    CYG_HAL_TABLE_ENTRY()的展開結(jié)果為
      __attribute__((section (".ecos.table.devtab.data")))
    __attribute__((used))
    DEVTAB_ENTRY的展開結(jié)果為
          cyg_devtab_entry_t _l  __attribute__((section (".ecos.table.devtab.data"))) __attribute__((used)) = {                  
           lpc2xxx_adc_channel0_device,                                                                                                            
           CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_NAME,                                                                                               
           0,                                                                                                                                    
           lpc2xxx_adc_init,                                                                                                   
           lpc2xxx_adc_lookup,                                                                                                
           &lpc2xxx_adc_channel0,                                                                                       
           CYG_DEVTAB_STATUS_CHAR                                                                                   
    };      



總結(jié)LPC2XXX_ADC_CHANNEL(0)的宏定義結(jié)果為
static cyg_adc_sample_t lpc2xxx_adc_channel0_buf[CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_BUFSIZE];                        
cyg_adc_channel lpc2xxx_adc_channel0 =                                                                  
{                                                                                                                                       
    .channel            = 0,                                                                                                     
    .buf                    = lpc2xxx_adc_channel0_buf,                                                           
    .len                    = CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_BUFSIZE,      
    .put                   = 0,                                                                           
    .get                   = 0,                                                                           
    .device              = &lpc2xxx_adc_device,                                                           
    .init                    = false                                                                        
};

cyg_devtab_entry_t _l  __attribute__((section (".ecos.table.devtab.data"))) __attribute__((used)) = {                  
           lpc2xxx_adc_channel0_device,                                                                                                            
          CYGDAT_DEVS_ADC_ARM_LPC24XX_CHANNEL0_NAME,                                                                 
           0,                                                                                                                                
           lpc2xxx_adc_init,                                                                                                   
           lpc2xxx_adc_lookup,                                                                                                
           &lpc2xxx_adc_channel0,                                                                                          
           CYG_DEVTAB_STATUS_CHAR                                                                                   
    };      



   


因?yàn)楣绲陌姹咎耍瑢?dǎo)致很多行都亂了,所以把一些還行符刪掉了~
看人家老外做的程序,專業(yè)~看不懂~
我要是分析的不對的,大家指正
作者: 一朝成名    時間: 2009-7-14 16:44
自己沙發(fā),消滅0回復(fù)
作者: 一朝成名    時間: 2009-7-16 09:39
果然是沒人看
作者: masonz    時間: 2009-8-25 13:24
cyg_adc_functions  lpc2xxx_adc_funs{

    .enable               =  lpc2xxx_adc_enable,                                    
    .disable              =  lpc2xxx_adc_disable,                           
    .set_rate            =  lpc2xxx_adc_set_rate

}      
看不懂,為何要加個點(diǎn)(.enable)




歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 精品国产乱码久久久久久上海公司| 亚洲高清日韩精品第一区| 国产亚洲精品线视频在线| 美女扒开腿让男生桶免费看动态图| 熟女人妻久久精品AV天堂| 青青青视频在线播放视频| 亚洲美女激情视频| 欧美在线中文| 四虎私人影院| 婷婷色香| 午夜性福利| 色哟哟久久| 乌克兰粉嫩摘花第一次| 一卡2卡三卡4卡3卡欧美| 99re8在线视频精品| 国模大胆一区二区三区| 男人天堂黄色| 亚洲av欧美在我| 亚洲国产成人久久综合一| 香蕉久草视频| 日本视频高清| 亚洲黄色官网| 亚洲高清中文字幕综合网| 2019精品国产品在线不卡| 国精品产露脸偷拍视频| 无码免费视频AAAAAA片草莓| 日本中文在线视频| 亚洲国产精品成人午夜在线观看 | 我半夜摸妺妺的奶C了她软件 | 九色PORNY真实丨国产免费| 午夜影视不充值观看| 亚洲一区不卡视频| 午夜精品久久久久久| 深夜免费视频| 中文在线免费视频| 亚洲夜色综合久久| 阿娇和冠希13分钟在线观看| 久久亚洲伊人中字综合精品| 亚洲精品线在线观看| 亚洲韩精品欧美一区二区三区| 青青草综合|