国产毛片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分钟在线观看
|
久久亚洲伊人中字综合精品
|
亚洲精品线在线观看
|
亚洲韩精品欧美一区二区三区
|
青青草综合
|