阅读以下说明和C语言代码,回答问题1至问题4,将解答填入对应栏内。【说明】 在嵌入式操作系统设备管
阅读以下说明和C语言代码,回答问题1至问题4,将解答填入对应栏内。
【说明】
在嵌入式操作系统设备管理的实现上,常使用到C语言的函数指针变量,由统一的管理函数调用不同的设备驱动程序。下面的一段C语言代码是驱动管理程序 manage_device调用4个不同设备驱动程序,但没有用到函数指针变量。
【C语言代码】
/*变量与类型说明*/
include "stdio.h"
include "stdlib.h"
extern int sys_status;
extern int Dev_drv1(int arg1, int arg2);
extern int Dev_drv2(int arg1, int arg2);
extern int Dev_drv3(int arg1, int arg2);
extern int Dev_drv4(int arg1, iht arg2);
define NOERROR 0
type struct {
int _fd;
} TYP_DEV_TAB;
TYP DEV_TAB dev_tab[50]= {101,99, 80, 120,};
/*程序代码*/
void manage_device(int devid, int arg1, int arg2)
{ int place ;
int ret;
for(place=0 ; place<50 ; place++)
if dev_tab [place]. fd == devid) break;
if(place>=50)
printf(" NO DEVICE fd = %d\n ",devid);
switch(dev_tab [place]._fd) {
case 80:
ret = Dev_drv3(int arg1,int arg2);
break;
case 99:
ret = Dev_drv2(int arg1,int arg2);
break;
case 101:
ret = Dev_drv1(int arg1,int arg2);
break;
case 120:
ret = Dev_drv4(int arg1,int arg2);
break;
}
if (ret!=NOERROR)
printf(" DEVICE %d error!\n ", devid);
}
int Dev_drv1(int arg1,int arg2)
{
/*局部变量声明,略*/
/*驱动程序代码,略*/
}
int Dev_drv2(int arg1,int arg2)
{
/*局部变量声明,略*/
/*驱动程序代码,略*/
}
int Dev_drv3(int arg1,int arg2)
{
/*局部变量声明,略*/
/*驱动程序代码,略*/
}
int Dev_drv4(int arg1,int arg2)
{
/*局部变量声明,略*/
/*驱动程序代码,略*/
请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入对应栏内。
【C语言代码】
/*变量与类型说明*/
include "stdio.h"
include "stdlib.h"
extern int sys_status;
extern int Dev_drv1(int arg1, int arg2);
extern int Dev_drv2(int arg1, iht arg2);
extern int Dev_drv3(int arg1, int arg2);
extern int Dev_drv4(int arg1, int arg2);
define NOERROR 0
typedef struct {
int _fd;
(1) 函数指针变量说明;/* 变量名用process */
} TYP_DEV_TAB;
TYP_DEV_TAB dev_tab[50]= {{101, Dev_drv1},{99, Dev_drv2},
{80, Dev_drv3},{120, Dev_dry4},};
/* 程序 */
void manage_device(int devid, int arg1, int arg2)
{ iht place ;
int ret;
(2) 函数指针变量说明;/*局部变量,变量名用ProcAction */
for(place=0 ; place<50 ; place++) {
if(dev_tab [place]._fd == devid) {
(3) 语句1;/* 变量名胜ProcAction, 得到具体函数的入口地址 */
break;
}
}
if(place>=50)
printf("NO DEVICE fd = %d\n",devid);
(4) 语句2;
if(ret!=NOERROR)
printf("DEVICE %d error!", devid);
}
(1)int (*process)(int arg1,int arg2); (2)int (*ProcAction)(int arg1,int arg2); (3)ProcAction=dev_tab[place].process; (4)ret=ProcAction(arg1,arg2); 解析:本题考查对C语言中函数指针变量的理解和用法。在C语言中,可以用指针变量指向整型变量、字符串、数组、结构变量,也可以指向一个函数,对指针的用法非常灵活,也很容易出错。其中,函数指针变量为较高级的用法。
一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
本题已将使用变量指向函数编写设备驱动程序的大部分给出,只需在对函数指针变量的声明和引用处,只需给出正确的用法即可。
阅读下列说明和代码,回答问题1和问题2,将解答卸载答题纸的对应栏内。【说明】某一本地口令验证函数( 计算机类考试 2020-05-26 …
2011高考历史广东卷问答题答案(1)从国际和国内两方面分析20世纪30年代计划经济思潮在中国兴起 历史 2020-06-10 …
“李白喝酒”的java编程问题,“遇店加一倍,见花喝一斗”,问题和代码如下,能帮我解释下代码的意思 其他 2020-07-10 …
对对联和问答题上联:一碗饭,当思来之不易.下联:示例:瓜熟蒂落(水到渠成)旗开得胜()问答题:我们 语文 2020-07-26 …
某中学在评选“校园之星”时,对参评的同学设计了“情境问答”和“参评感言”等环节。请你以参评选手的身份 政治 2020-11-23 …
课前三分钟,有奖问答我们班上语文课的时候,老师抽出课前3分钟,每天让我们上去1名同学表演写东西,我们 语文 2020-11-28 …
语文课上的活动我们班上语文课的时候,老师就抽出课前3分钟,每天让我们上去1名同学表演些东西,我们班大 语文 2020-11-29 …
陪伴了几代中国人的大型科普丛书《十万个为什么》正在进行第六版的编纂工作。与以往不同的是,这次编纂不再 政治 2020-12-04 …
某中学在评选“校园之星”时,对参评的同学设计了“情境问答”和“参评感言”等环节。请你以参评选手的身份 政治 2020-12-15 …
如何应对英语演讲赛中的问答和即兴演讲?马上要参加英文演讲赛了,希望有经验的朋友给我分享一下关于评委问 其他 2020-12-19 …