zoukankan      html  css  js  c++  java
  • 寒武纪嵌入式软件笔试试题及解析

    1.单片机IO口开漏输出和推挽输出有什么区别?

    开漏输出:开漏输出只能输出低电平,如果要输出高电平必须通过上拉电阻才能实现。就类似于三极管的集电极输出。

    推挽输出:推挽输出既可以输出低电平,也可以输出高电平,可以直接驱动功耗不大的数字器件。导通损耗小、效率高、既提高电路的负载能力,又提高开关速度。

    推挽输出:可以输出高,低电平,连接数字器件。
    输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。
    输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。

    开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).
    输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。
    输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);可以读IO输入电平变化,此模式可以把端口作为双向IO使用。
    2.单片机里定时器有什么作用和优势?

    作用:计数器、延时、输入捕获(解码和测量时间间隔)、输出比较(主要输出PWM波)、单脉冲输出、触发中断(对其他模块进行操作)

    优势:不需要CPU参与,精确

    3.什么是Nyquist采样定理?如果需要通过512点FFT分析200-10KHz信号频谱,频谱分辨率不低于40Hz,此时采样频率需在什么范围?

    频率分辨率可以理解为在使用DFT时,在频率轴上的所能得到的最小频率间隔f0=fs/N=1/NTs=1/T,其中N为采样点数,fs为采样频率,Ts为采样间隔。所以采样频率不低于20480hz.与采样频率的不低于20000hz综合得不低于20480hz

    4.已知单片机内置12位精度的ADC,单片机工作电压3.3V,ADC基准电压3V,请计算ADC采样的电压最小分辨率是多少?如果单片机ADC输入口电压为1V,则采样得到的值是多少?

    不确定是否正确

    先求误差 (3.3-3)/3=10%

    也是说当单片机ADC输入口电压为1V测得电压为1.1V

    在无误差的情况下 分辨率为 1/4096

    本题的分辨率为 1.1/4096(可以理解为一把尺子实践的长度没变,原先1个格子代表1V,现在想表示1V需要占用1.1个格子)

     

    5.同步通信和异步通信有什么区别?UART、SPI和I2C分别属于什么类型的通信方式?

     

    同步通信需要一根时钟线,并且通信双方的时钟频率要严格同步,系统搭建相对较复杂,成本高,但是传输的数据量少,速度快,其中时钟的作用就是判断收发数据的进程,定位当前传输的数据

    异步通信可以不要时钟线,系统较为简单,由于缺少定位数据的时钟线,所以必须在传输的数据帧前后加上开始、结束等冗余字符,造成传输速度略有降低

    UART全称通用异步收发器,无时钟线,属于异步通信

    SPI全称串行外设接口,有时钟线,属于同步通信

    I2C全称集成电路串行总线,有时钟线,属于同步通信

    6.简述通过I2C接口读取设备X的寄存器Y的值的过程

    1.首先主机发起通信(起始信号),将设备X的地址与寄存器Y写入从机;

    2.从机接收信号将命令(读还是写命令)与寄存器Y地址提取出来,

    3.从机将寄存器Y地址的数据放入从机I2C输出buffer

    4.主机再次发起一次通信,读取从机数据。

    7.中断是什么?请简述单片机中断处理的过程

    CPU在正常执行程序的过程中,由于内部/外部事件的触发或程序的预先安排引起CPU暂时中断当前正在运行的程序,而转去执行中断服务子程序,待中断服务子程序执行完毕后,CPU继续执行原来的程序,这一过程称为中断;

            中断处理的过程:

            第一步:保护现场,将当前位置的PC地址压栈;

            第二步:跳转到中断服务程序,执行中断服务程序;
            第三步:恢复现场,将栈顶的值回送给PC;
            第四步:跳转到被中断的位置开始执行下一个指令;

    8.相比于正常子函数,中断服务函数有什么特点和需要注意的地方?

    相当于正常子函数,中断服务函数的特点是没有输入参数,一般也没有输出参数,此外,调用中断服务函数的方式也有所区别,正常子函数的调用直接在需要的位置写出子函数名即可,程序运行到此即进入子函数内部;调用中断服务函数,需要在程序中开启中断开关,即配置对应中断控制的寄存器,当出现触发条件时(例如某引脚电平信号发生变化,或时间达到某一值),就会进入中断服务函数体内运行

    注意地方:中断函数中不宜写太多的代码,这样可能导致中断服务函数还未执行完,因为符合条件,又触发了一次中断,程序就一直卡在中断服务程序中,导致整个系统崩溃。另外,当系统有多个中断时,为防止在执行当前中断服务函数时,被另一个不必要的中断打断,一个可以参考的解决方法时在进入中断时关闭其他中断,并在中断服务函数的最后一句再次开启中断开关。

    9.对于char型变量 a,写两段代码分别将 a的 bit 6置1和置0

    a|=(1<<6); a&=~(1<<6);

    10.请写一段代码,可以将输入为”0.0.0.0”—“255.255.255.255”的字符串转换为int型整数数组。

    输入:”255.255.255.255”

    输出:255 255 255 255 (数组)

    #include<stdio.h>

    #include<stdilib.h>

    #include<string.h>

     

    int main()

    {

        char arry[20];

        int res[4]={0};

        gets(arry);

        int len=strlen(arry);

        int i=0,count=0;

        while(i<len)

        {

            if(arry[i]=='.')

            {

                count++;

                i++;

            }

            res[count] *=10;

            res[count] +=(arry[i]-'0'); //字符转数字

            i++;

        }

        for(int j=0;j<4;j++)

        {

            printf("%d ",res[j]);

        }

    }

  • 相关阅读:
    King's Quest
    JavaScript“并非”一切皆对象
    javascript中的style只能取到在HTML中定义的css属性
    jquery中的$(this)和this
    WEB安全字体(Web Safe Fonts)-网页设计用什么字体兼容性好?
    css各种水平垂直居中
    css绘制各种形状
    css3椭圆运动
    通过时间戳控制类
    js中的面向对象程序设计
  • 原文地址:https://www.cnblogs.com/wulianwangaxing/p/15008918.html
Copyright © 2011-2022 走看看