面试--单片机工程师--2018.03.09

面试问答:

1、spi的特点,时序

2、iic的特点,时序是怎么样的

3、单片机如何读取EEPROM

4、单片机如何读写flash

5、如何驱动LCD屏幕

6、会usb、can协议吗,

7、会ucos系统吗

8、线程、进程之间的关系

笔试题:

1、已知一个数组a[10],其中的每一个元素至多重复两次,求第三个最大数,写出程序:

  • 思路:先使用冒泡算法进行从大到小排序,设置一个标志位flag,然后将前5个元素逐一对比,如果元素不一样,则flag+1,当flag =3时,打印第三个元素的值,然后break。
int main(void)
{
    int a[10];
    int i, j, temp, sum=0, flag=0;
    
    for(i=0; i<9; i++) {
        for(j=0; j<9-1; j++) {
            if(a[j] < a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = a[j];
            }            
        }
    }
    for(i=0; i<5; i++) {
        sum = a[i] - a[i+1];
        if(sum != 0)
            flag++;
        if(flag == 3)
            printf("第三大的数为 %d.
", a[i]);
        break;
    }
}

2、volatile的作用:

  • 答:volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化,但有可能会读脏数据。当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据,而且读取的数据立刻被保存。精确地说就是,优化器每次在用到这个变量时都必须小心地重新从内存里读取这个变量的值,而不是使用保存在寄存器里的备份。

3、小红单独完成一份工作要12小时,小明单独完成一份工作要x小时,两人一起完成一份工作一共需8小时,问:小明单独完成一份工作要几小时?

  • 答:小明一个完成:1/ (1/12 + 1/x)  =  8  ==>  x=24 小时

4、试用if语句分别写出bool、int、float、指针类型的变量val与“零值”的比较

//bool 类型变量与0比较
if(val)    if(!val)

//int 类型变量与0比较
if(val ==0)    if(val !=0)

//两个浮点数正确的比较方法为:
if(abs(a-b)<=EPSILON),
if(abs(a-b)>EPSILON)    //其中EPSILON为精度

//同理浮点数与0值比较的正确方法为
if(abs(x)<=EPSILON),
if(abs(x)>EPSILON)

//指针 类型变量与0比较
if(val == NULL)    if(val != NULL) 

5、有一时钟的表盘为80个刻度,秒针转一圈为60秒钟,分针转一圈为60分钟,时针转一圈为12小时,现在时针、分针、秒针指向的刻度分别为31,45,12,问现在是几点。

  • 答:一个刻度对应的 时 分 秒 分别为:12/80;  60/80;  60/80,  那么此时的时间为:31*12/80:45*60/80:12*60/80

  

 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/icefree/p/8536852.html