题库 题库

【简答题】

试题五(共15分)
    阅读以下关于嵌入式C语言编程方面的问题,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
    嵌入式C语言编程中常涉及位运算、宏定义的问题,以及大端方式(Big-endian)、小端方式(Little-endian)的访问问题。
【问题1】(4分)
    嵌入式系统中常要求用户对变量或寄存器进行位操作。下面的两个函数分别为设置和清除变量a的第5位。请使用下面的宏定义BIT5按要求对变量a进行相应的处理。在函数set_bit5中,用位或赋值操作(|=)设置变量a的第5位,在函数clear_bit5中,用位与赋值操作(&=)清除变量a的第5位。
    #define BIT5 (0x01<<5)
    static int a;
    void set_bit5(void)
    {
    ①  ;  /* 设置变量a的第5位 */
    }
    void clear_bit5(void)
    {
    ②  ;  /* 清除变量a的第5位 */
    }
【问题2】(5分)
    图5-1所示代码的设计意图是计算1~100各数的平方。该段代码运行后,没有得到应有的结果,请说明出错原因,将答案填入答题纸的对应栏内。
 
    图5-1 计算1到100平方数的代码
    图5-2是在不改变宏定义的情况下,对程序进行修改。请完成该段代码,将答案填入答题纸的对应栏内。
 
    图5-2 计算1到100平方数的代码
【问题3】(6分)
    某嵌入式处理器工作在大端方式(Big-endian)下,其中unsigned int为32位,unsignedshort为16位,unsigned char为8位。仔细阅读并分析下面的C语言代码,写出其打印输出的结果,将答案填入答题纸的对应栏内。
#include  "stdio.h"
#include  "stdlib.h"
void  *MEM_ADDR;
void mem_test(void)
{
  unsigned int *pint_addr = NULL;
  unsigned short *pshort_addr = NULL;
  unsigned char *pchar_addr = NULL;
  MEM_ADDR = (void *)malloc(sizeof(int));
  pint_addr = (unsigned int *)MEM_ADDR;
  pshort_addr = (unsigned short *)MEM_ADDR;
  pchar_addr = (unsigned char *)MEM_ADDR;
  *pint_addr = 0x12345678;
  printf("0x%x, 0x%x\n", *pshort_addr, *pchar_addr);
  /* 第一次输出 */
  pshort_addr++;
  *pshort_addr = 0x5555;
  printf("0x%x, 0x%x\n", *pint_addr, *pchar_addr);
  /* 第二次输出 */
  pchar_addr++;
  *pchar_addr = 0xAA;
  printf("0x%x, 0x%x\n", *pint_addr, *pshort_addr);
  /* 第三次输出 */
}

参考答案

 

相关试题