嵌入式软件开发笔试题(试卷一)

时间:2021-02-06 14:40:43


1、用预处理指令#define声明一个常数SECONDS_PER_DAY,用以表明一天中有多少秒。

      答:#define SECONDS_PER_DAY (24*60*60)UL

2、用变量a给出下面的定义

     a)一个整型数

        答:int a;

     b)一个指向整型数的指针

    答:int *a;

    c)一个指向指针的指针,它指向的指针是指向一个整型数

    答:int **a;

    d)一个有10个整型数的数组 

    答:int a[10];

    e) 一个有10个指针的数组,该指针是指向一个整型数的 

    答:int *a[10];

    f) 一个指向有10个整型数数组的指针 

    答:int (*a)[10];

    g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数

    答:int (*a)(int);

    h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

    答:int (*a[10])(int);

    3、关键字static的作用是什么

    答:1)在函数体内,一个被声明为静态的局部变量,函数被调用过程中其值维持不变

           2)在模块内函数外,一个被声明为静态的全局变量,能被模块内所有函数访问,但不能被模块外函数访问

           3)static用来修饰函数,此函数只能被模块内的其它函数调用

    4、用C语言编写代码访问固定的位置0x1000,赋值为0x2000

    答:int *ptr;

           ptr = (int*)0x1000;

           *ptr = 0x2000;

    5、给定一个整型变量a,写两段代码,第一个设置a的bit:3,第二个清除a的bit:3,在以上两个操作中,要保持其他位不变。

    答:a = a | 0x00000004;

           a = a & 0xFFFFFFFB;

    6、写一个函数,来实现两个字符串的拷贝。

    答:

    #include<assert.h>

    char *strcopy(char *dest, const char *src)

    {

        assert((NULL != dest) && (NULL != src));

        char *temp = dest;

        while((*dest++ = *src++) != '\0');

    

        return temp;

    }

    7、下面的代码就使用了_interrupt关键字去定义了一个中断服务子程序(ISR),请确认这段代码是否正确,并说明理由。

    _interrupt double compute_area (double radius)

{

    double area = PI* radius *radius;

    printf("\nArea = %f",area);

    return area;

}

    答:中断服务程序不能有返回值

            中断返回值不能有参数

            中断程序应该是短而高效的,不应进行浮点运算

            printf()经常有重入和性能上的问题

    8、下面的代码输出是什么,为什么?

    void foo(void)

    {

         unsigned int a = 6;

         int b = -20;

         (a+b>6)?puts(">6"):puts("<=6");

    }

    答:输出 >6

           因为有无符号数参与的运算中都按无符号处理

    9、完成下列代码,实现数组内数据的数字平均滤波。

    /***********************************************************************

    *函数名:Average

    *参    数:buffer = 缓冲区

    *                len = 缓冲区长度

    *返回值:平均滤波结果

    *功能描述:将长len的buffer缓冲区进行平均滤波计算

    **********************************************************************/

    int average(int *buffer, unsigned char len)
    {

         unsigned char temp = len;

        long int total = 0;

        while(temp--)

        {

            total = *buffer++;

        }


        return total/len;

    }