软件评测师
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】微内核架构的软件内核相对较小,主要功能和业务逻辑都通过插件实现。某国产通信芯片操作系统使用了微内核架构,其插件与核心系统通过命令方式实现通信。其通信功能中,获取命令函数主要完成命令获取及通过校验和判断是否为合法命令,如果为合法命令,则函数返回命令字前4字节,否则返回错误码。命令最大长度为16个字节,命令格式为:具体函数实现如下:#define MAXCMD 16INT32 getEcho(UINT32* cmdBuf){     UINT32 icnt=0;     UINT32 cmdLen=0;                                /*命令长度*/     UINT32 chkSum=0;                               /*校验和*/     cmdLen=*(UINT32*)(pcibarAddr+BASEADDR_ECHO);            /*读取长度*/     if((cmdLen==0)&(cmdLen>MAXCMD)){                   /*长度合法检查*/            return -1;    }   else{          for(icnt=0;icnt<(cmdLen -4);icnt+=4){           /*读取命令,并计算校验和*/              *(cmdBuf+icnt/4)=*(UINT32*)(pcibarAddr+BASEADDR_ECHO+icnt);              chkSum+=*(cmdBuf+icnt/4);          }          if(chkSum==(*(UINT32*)(pcibarAddr+BASEADDR_ECHO+icnt))){           /*如果校验和正确,则清除命令缓存,并将读取命令返回*/             *(UINT32*)(pcibarAddr+BASEADDR_ECHO)=0;              (*(UINT32*)(pcibarAddr+BASEADDR_ECHO+4))=0;              (*(UINT32*)(pcibarAddr+BASEADDR_ECHO+icnt))=0;             return(*(cmdBuf+1));          }         else{                return -2;           }     }}
阅读下列C 程序,回答问题1至问题3,将解答填入答题纸的对应栏内。【C程序】long long yajl_integer(const unsigned char *number,size_t length){               //1        long long ret=0;        long sign=1;        const unsigned char *pos=number;                       if(*pos=='-'){                                                                                   //2            pos++;sign=-1;                                                                          //3   }   if(*pos=='+'){                                                                                       //4             pos++;                                                                                      //5  } while(pos<number+length){                                                                 //6            if(ret>MAX_VALUE_TO_MULTIPLY){                                      //7                 errno=ERANGE;                 return sign==1?LLONG_MAX:LLONG_MIN;                    //8            }           ret*=10;           if(LLONG_MAX-ret<(*pos-'0')){                                                  //9                errno=ERANGE;                                               return sign==1?LLONG_MAX:LLONG_MIN;  //10           }           if(*pos<'0'||*pos>'9'){                                                                 //11、12                 errno=ERANGE;                  return sign==1?LLONG_MAX:LLONG_MIN;                  //13          }          ret+=(*pos++-'0');                                                                      //14     }  return sign *ret;                                                                                //15;}                                                                                                         //16
1 / 226
本模块为学员专用
学员专享优势
老师批改作业 做题助教答疑
学员专用题库 高频考点梳理
成为学员