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