亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

嵌入式培訓(xùn) 百分網(wǎng)手機(jī)站

嵌入式軟件助理工程師認(rèn)證考試試題題庫(kù)(5)

時(shí)間:2018-04-01 11:42:31 嵌入式培訓(xùn) 我要投稿

2016年嵌入式軟件助理工程師認(rèn)證考試試題題庫(kù)

  in tints[20]={

  10, 20, 30, 40, 50, 60, 70, 80, 90, 100,

  110, 120, 130, 140, 150, 160, 170, 180, 190, 200

  };

  (Other declarations)

  int *ip=ints+3;

表達(dá)式

ints

__   ____

ints[4]

__   ____

ip

__   ____

ip[4]

__   ____

*(ip+4)

__   ____

  答:(每項(xiàng)1分)

表達(dá)式

ints

__     100   ____

Ints[4]

    50   ____

ip

__  112 ____

ip[4]

__  80 ____

*(ip+4)

__   80____

  5、請(qǐng)對(duì)下列shell程序加注釋,并說明程序的功能和調(diào)用方法:

  #!/bin/sh

  #

  # /etc/rc.d/rc.httpd

  #

  # Start/stop/restart the Apache web server.

  #

  # To make Apache start automatically at boot, make this

  # file executable: chmod 755 /etc/rc.d/rc.httpd

  #

  case "$1" in

  'start')

  /usr/sbin/apachectl start ;;

  'stop')

  /usr/sbin/apachectl stop ;;

  'restart')

  /usr/sbin/apachectl restart ;;

  *)

  echo "usage $0 start|stop|restart" ;;

  esac

  答:

  1)程序注釋

  #!/bin/sh 定義實(shí)用的shell

  #

  # /etc/rc.d/rc.httpd 注釋行,凡是以星號(hào)開始的行均為注釋行。

  #

  # Start/stop/restart the Apache web server.

  #

  # To make Apache start automatically at boot, make this

  # file executable: chmod 755 /etc/rc.d/rc.httpd

  #

  case "$1" in #case結(jié)構(gòu)開始,判斷“位置參數(shù)”決定執(zhí)行的操作。本程序攜帶一個(gè)“位置參數(shù)”,即$1

  'start') #若位置參數(shù)為start

  /usr/sbin/apachectl start ;; #啟動(dòng)httpd進(jìn)程

  'stop') #若位置參數(shù)為stop

  /usr/sbin/apachectl stop ;; #關(guān)閉httpd進(jìn)程

  'restart') #若位置參數(shù)為stop

  /usr/sbin/apachectl restart ;; #重新啟動(dòng)httpd進(jìn)程

  *) #若位置參數(shù)不是start、stop或restart時(shí)

  echo "usage $0 start|stop|restart" ;; #顯示命令提示信息:程序的調(diào)用方法

  esac #case結(jié)構(gòu)結(jié)束

  (2)程序的功能是啟動(dòng),停止或重新啟動(dòng)httpd進(jìn)程

  (3)程序的調(diào)用方式有三種:?jiǎn)?dòng),停止和重新啟動(dòng)。

  七、應(yīng)用實(shí)踐題

  1、管道是Linux中進(jìn)程通信的一種方式,以下程序在父進(jìn)程和子進(jìn)程之間創(chuàng)建了一個(gè)管道,然后建立它們之間的通信,實(shí)現(xiàn)父進(jìn)程向子進(jìn)程寫數(shù)據(jù)的功能。說明標(biāo)號(hào)所在行代碼的功能。

  #include

  #include

  #include

  #include

  #include

  int main()

  {

  int pipe_fd[2];

  pid_t pid;

  char buf_r[100];

  char* p_wbuf;

  int r_num;

  memset(buf_r,0,sizeof(buf_r)); (1)

  if(pipe(pipe_fd)<0) (2)

  {

  printf("pipe create error\n");

  return -1;

  }

  if((pid=fork())==0) (3)

  {

  printf("\n");

  close(pipe_fd[1]); (4)

  sleep(2);

  if((r_num=read(pipe_fd[0],buf_r,100))>0) (5)

  {

  printf( "%d numbers read from the pipe is %s\n",r_num,buf_r);

  }

  close(pipe_fd[0]); (6)

  exit(0);

  }

  else if(pid>0) (7)

  {

  close(pipe_fd[0]); (8)

  if(write(pipe_fd[1],"Hello",5)!=-1) (9)

  printf("parent write1 success!\n");

  if(write(pipe_fd[1]," Pipe",5)!=-1)

  printf("parent write2 success!\n");

  close(pipe_fd[1]); (10)

  sleep(3);

  waitpid(pid,NULL,0);

  exit(0);

  }

  }

  答案要點(diǎn):(1) 將數(shù)據(jù)緩沖區(qū)清0 (2) 創(chuàng)建管道 (3) 創(chuàng)建子進(jìn)程 (4) 關(guān)閉子進(jìn)程寫描述符 (5) 子進(jìn)程讀取管道內(nèi)容 (6) 關(guān)閉子進(jìn)程讀描述符 (7) 父進(jìn)程運(yùn)行控制語句 (8) 關(guān)閉父進(jìn)程的讀描述符 (9) 將數(shù)據(jù)寫入緩沖區(qū)

  (10) 關(guān)閉父進(jìn)程寫描述符

  2、用Shell編程,判斷一文件是不是字符設(shè)備文件,如果是將其拷貝到 /dev 目錄下。

  答:

  #!/bin/sh

  FILENAME=

  echo “Input file name:”

  read FILENAME

  if [ -c "$FILENAME" ]

  then

  cp $FILENAME /dev

  fi

  3.下列程序?qū)崿F(xiàn)了著名的生產(chǎn)者—消費(fèi)者問題的模型,主程序中分別啟動(dòng)了生產(chǎn)者線程和消費(fèi)者線程。生產(chǎn)者不斷順序地將0-1000的數(shù)字寫入共享的循環(huán)緩沖區(qū),同時(shí)消費(fèi)者線程不斷地從共享的循環(huán)緩沖區(qū)中讀取數(shù)據(jù)。完成如下問題。

  進(jìn)行生產(chǎn)(put) 進(jìn)行消費(fèi)(get)

  1)生產(chǎn)者 寫入共享的循環(huán)緩沖區(qū)PUT函數(shù)的流程圖如下,試完成流程圖中標(biāo)號(hào)所在處的內(nèi)容。(4.5分)

  (1)寫指針+1是否等于讀指針 (2)等待條件變量not full (3) 設(shè)置條件變量notempty

  2)生產(chǎn)者 寫入共享的循環(huán)緩沖區(qū)PUT函數(shù)的流程圖如下,試完成流程圖中標(biāo)號(hào)所在處的內(nèi)容。(4.5分)

  (4)寫指針是否等于讀指針 (5) 等待條件變量not empty (6) 設(shè)置條件變量notfull

  void put(struct prodcons * b, int data)

  { pthread_mutex_lock(&b->lock);

  while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) {

  printf("wait for not full\n");

  pthread_cond_wait(&b->notfull, &b->lock);

  }

  b->buffer[b->writepos] = data;

  b->writepos++;

  if (b->writepos >= BUFFER_SIZE) b->writepos = 0;

  pthread_cond_signal(&b->notempty);

  pthread_mutex_unlock(&b->lock);

  }

  int get(struct prodcons * b)

  {

  int data;

  pthread_mutex_lock(&b->lock);

  while (b->writepos == b->readpos) {

  printf("wait for not empty\n");

  pthread_cond_wait(&b->notempty, &b->lock);

  }

  data = b->buffer[b->readpos];

  b->readpos++;

  if (b->readpos >= BUFFER_SIZE) b->readpos = 0;

  pthread_cond_signal(&b->notfull);

  pthread_mutex_unlock(&b->lock);

  return data;

  }

  void * producer(void * data)

  { int n;

  for (n = 0; n < 1000; n++) {

  printf(" put-->%d\n", n);

  put(&buffer, n);

  }

  put(&buffer, OVER);

  printf("producer stopped!\n");

  return NULL;

  }

  void * consumer(void * data)

  { int d;

  while (1) {

  d = get(&buffer);

  if (d == OVER ) break;

  printf(" %d-->get\n", d);

  }

  printf("consumer stopped!\n");

  return NULL;

  }

  int main(void)

  { pthread_t th_a, th_b;

  void * retval;

  init(&buffer);

  pthread_create(&th_a, NULL, producer, 0);

  pthread_create(&th_b, NULL, consumer, 0);

  pthread_join(th_a, &retval);

  pthread_join(th_b, &retval);

  return 0;

  }

  4、設(shè)計(jì)一個(gè)Shell程序,在/userdata目錄下建立50個(gè)目錄,即user1~user50,并設(shè)置每個(gè)目錄的權(quán)限,其中其他用戶的權(quán)限為:讀;文件所有者的權(quán)限為:讀、寫、執(zhí)行;文件所有者所在組的權(quán)限為:讀、執(zhí)行。

  答:

  #!/bin/sh

  i=1

  while [ i -le 50 ]

  do

  if [ -d /userdata ];then

  mkdir -p /userdata/user$i

  chmod 754 /userdata/user$i

  echo "user$i"

  let "i = i + 1" (或i=$(($i+1))

  else

  mkdir /userdata

  mkdir -p /userdata/user$i

  chmod 754 /userdata/user$i

  echo "user$i"

  let "i = i + 1" (或i=$(($i+1))

  fi

  done

  5、用變量a給出下面的定義

  f) 一個(gè)指向整型數(shù)的指針(A pointer to an integer)

  g) 一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數(shù)(A pointer to a pointer to an integer)

  h) 一個(gè)有10個(gè)整型數(shù)的數(shù)組(An array of 10 integers)

  i) 一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的(An array of 10 pointers to integers)

  j) 一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針(A pointer to an array of 10 integers)

  2、答:

  a) int *a; // A pointer to an integer

  b) int **a; // A pointer to a pointer to an integer

  c) int a[10]; // An array of 10 integers

  d) int *a[10]; // An array of 10 pointers to integers

  e) int (*a)[10]; // A pointer to an array of 10 integers

  6.根據(jù)下面給出的聲明和數(shù)據(jù),對(duì)每個(gè)表達(dá)式進(jìn)行求值并寫出他的值。在每個(gè)表達(dá)式進(jìn)行求值是使用原來給出的值(也就是說,某個(gè)表達(dá)式的結(jié)果不影響后面的表達(dá)式)。假定ints數(shù)組在內(nèi)存中的起始位置是100,整型值和指針的長(zhǎng)度都是4字節(jié)。

  in tints[20]={

  10, 20, 30, 40, 50, 60, 70, 80, 90, 100,

  110, 120, 130, 140, 150, 160, 170, 180, 190, 200

  };

  (Other declarations)

  int *ip=ints+3;

表達(dá)式

ints

__   ____

ints[4]

__   ____

ip

__   ____

ip[4]

__   ____

*(ip+4)

__   ____

  答:(每項(xiàng)1分)

表達(dá)式

ints

__     100   ____

Ints[4]

    50   ____

ip

__  112 ____

ip[4]

__  80 ____

*(ip+4)

__   80____

  7、由于Boot Loader的實(shí)現(xiàn)依賴于 CPU 的體系結(jié)構(gòu),因此大多數(shù)Boot Loader都分為 stage1 和 stage2 兩大部分。依賴于 CPU 體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在 stage1 中,而且通常都用匯編語言來實(shí)現(xiàn),以達(dá)到短小精悍的目的。而stage2 則通常用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)給復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。請(qǐng)根據(jù)你對(duì)嵌入式系統(tǒng)中bootloader的理解,簡(jiǎn)要設(shè)計(jì)一下stage1和stage2需要完成的功能。

  參考答案:

  BootLoader 的 stage1 通常包括以下步驟(以執(zhí)行的先后順序):(3分)

  基本硬件設(shè)備初始化。

  為加載 Boot Loader 的 stage2 準(zhǔn)備 RAM 空間。

  拷貝 Boot Loader 的 stage2 到 RAM 空間中。

  設(shè)置好堆棧。

  跳轉(zhuǎn)到 stage2 的C入口點(diǎn)。

  BootLoader 的 stage2 通常包括以下步驟(以執(zhí)行的先后順序): (3分)

  初始化本階段要使用到的硬件設(shè)備。

  檢測(cè)系統(tǒng)內(nèi)存映射(memory map)。

  將 kernel 映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中。

  為內(nèi)核設(shè)置啟動(dòng)參數(shù)。

  調(diào)用內(nèi)核。

  8、Qt/Embedded對(duì)嵌入式GUI提供了強(qiáng)大的支持,信號(hào)和插槽機(jī)制是QT的核心機(jī)制,使用QT實(shí)現(xiàn)如下界面的登陸程序,其原代碼如下所示,請(qǐng)回答如下問題:

  1)什么是Qt中的信號(hào)插槽機(jī)制?(3分)

  2)應(yīng)用程序中用到了哪些控件,列舉2個(gè)并說明該控件的特點(diǎn)?(4分)

  3)根據(jù)注釋完成程序中相應(yīng)的語句?(4分)

  #include

  #include "window.h"

  CWinDlg::CWinDlg(QWidget* parent) : QDialog(parent)

  {

  setWindowTitle("Example");

  Edit1 = new QLineEdit;

  Button1 = new QPushButton("OK");

  Edit1->setEchoMode(QLineEdit::Password);

  QVBoxLayout* Layout1 = new QVBoxLayout;

  Layout1->addWidget(Edit1);

  Layout1->addWidget(Button1);

  (1) ;

  (2) ;

  }

  CWinDlg::~CWinDlg()

  {

  delete Edit1;

  delete Button1;

  }

  void CWinDlg::function()