专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

像这样“聪明地”调用相应的函数吗 可行噶?解决思路

发布时间:2011-06-28 16:13:06 文章来源:www.iduyao.cn 采编人员:星星草
像这样“聪明地”调用相应的函数吗 可行噶?
char   Uart_Getch(void)
{
        if(whichUart==0)
        {              
                while(!(rUTRSTAT0   &   0x1));   //Receive   data   ready
                return   RdURXH0();
        }
        else   if(whichUart==1)
        {              
                while(!(rUTRSTAT1   &   0x1));   //Receive   data   ready
                return   RdURXH1();
        }
        else   if(whichUart==2)
        {
                while(!(rUTRSTAT2   &   0x1));   //Receive   data   ready
                return   RdURXH2();
        }
}
这是原来的函数,我觉得有点罗嗦。想这样改进下,首先定义两个宏,把寄存器的名和号绑定到一起。比如:#define   SelectTR(   FuncName,UartNum)   FuncName##UartNum
#define   WaitReady(regvalue,mask)   while(!(regvalue   &   mask)) 这样,就可以不用这些分支了。
上面的程序可以写成 char   Uart_Getch(void){
           WaitReady(SelectTR(rUTRSTAT,whichUart),0x1);
                                           
           但是,这里怎么写呢?我怎么选择相应的函数呢?
           return   ???
                                            我可以把函数名也绑定到对应的号上,如SelectTR                 (RdURXH,whichUart),但我该怎样调用它呢?



------解决方案--------------------
typedef char (*RDURXH_FUNC)(void);

RDURXHFUNC SelectFunc(int whichUart) {
switch(whichUart) {
case 0:
return RdURXH0;
case 1:
return RdURXH1;
case 2:
default:
return RdURXH2;
}
}

……
WaitReady(SelectTR(rUTRSTAT,whichUart),0x1);
return SelectFunc(whichUart)();
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: