嵌入式c题目3

 *********************************************************************************

1   读程序段,回答问题 
      int   main(int   argc,char   *argv[]) 
      { 
          int   c=9,d=0; 
          c=c++%5; 
          d=c; 
          printf("d=%d\n",d); 
          return   0; 
      } 
      a)   写出程序输出 
      5
      b)   在一个可移植的系统中这种表达式是否存在风险?why? 
  
  
  
  
      #include   "stdio.h" 
      int   a=0;   
      int   b; 
      static   char   c; 
      int   main(int   argc,char   *argv[]) 
      { 
          char   d=4; 
          static   short   e; 
  
          a++; 
          b=100; 
          c=(char)++a; 
          e=(++d)++; 
          printf("a=%d,   b=%d,   c=%d,   d=   %d,   e=%d",a,b,c,d,e); 
          return   0; 
      } 
      a)   写出程序输出 
      以前学过c++,这个是可以的       e=(++d)++; 
  现在才发现在c中,这是不行的
      a=2,   b=100,   c=2,   d=   6,   e=5
      b)   编译器如果安排各个变量(a,b,c,d)在内存中的布局(eg.   stack,heap,data   section,bss   section),最好用图形方式描述。 
      data section: a
      bss section: b,c,e
      stack d
   在采用段式内存管理的架构中,数据段(data   segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。   
  
  在采用段式内存管理的架构中,BSS段(bss   segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block   Started   by   Symbol的简称。BSS段属于静态内存分配。
  
  4   嵌入式系统相关问题 
      a)   对于整形变量A=0x12345678,请画出在little   endian及big   endian的方式下在内存中是如何存储的。 
     
                       low - > high
      little endian    0x78 0x56 0x34 0x12
      big    endian    0x12 0x34 0x56 0x78
     
      b)   在ARM系统中,函数调用的时候,参数是通过哪种方式传递的? 
      在arm汇编中,如果不超过4个参数时,是通过r0   -r3寄存器来传递参数,>4的通过压栈方式传递 。  
     
      c)   中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?
      在《Linux内核设计与实现》一书中,说道: 
        异常   :在产生时必须考虑与处理器的时钟同步,实践上,异常也称为同步中断。在处理器执行到由于编程失误而导致的错误指令时,或者在执行期间出现特殊情况(如缺页),必须靠内核处理的时候,处理器就会产生一个异常。  
       
        中断可分为同步(synchronous)中断和异步(asynchronous)中断:

1. 同步中断是当指令执行时由 CPU 控制单元产生,之所以称为同步,是因为只有在一条指令执行完毕后 CPU 才会发出中断,而不是发生在代码指令执行期间,比如系统调用。

2. 异步中断是指由其他硬件设备依照 CPU 时钟信号随机产生,即意味着中断能够在指令之间发生,例如键盘中断。

所谓中断应该是指外部硬件产生的一个电信号,从cpu的中断引脚进入,打断cpu当前的运行; 
  所谓异常,是指软件运行中发生了一些必须作出处理的事件,cpu自动产生一个陷入来打断当前运行,转入异常处理流程。
  
  6   优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。 
      a)   首先请解释优先级反转问题 
      高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象叫做优先级反转 
    
      b)   很多RTOS提供优先级继承策略(Priority   inheritance)和优先级天花板策略(Priority   ceilings)用来解决优先级反转问题,请讨论这两种策略。
     
       优先级继承策略(Priority   inheritance):最低优先级任务继承现有被阻塞任务的最高优先级作为其优先级,任务退出临界区,恢 
  
  复初始优先级。 
      优先级天花板策略(Priority   ceilings):控制访问临界资源的信号量的优先级天花板。 
      优先级继承策略对任务执行流程的影响相对教小,因为只有当高优先级任务申请已被低优先级任务占有的临界资源 
  
  这一事实发生时,才抬升低优先级任务的优先级。
 
 

posted on 2008-03-21 17:34  dqshll  阅读(291)  评论(0)    收藏  举报

导航