嵌入式软件开发岗秋招【寒武纪笔试篇】

    题目来源牛客网的嵌入式笔试题牛客网,由笔者亲自整理,加上自己的理解和解题思路。此篇为寒武纪笔试题。

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

    开漏输出只能输出低电平,必须接上拉电阻才能输出高电平。可以实现电平转换和线与功能。所谓线与功能,即逻辑与,I2C总线判断占用状态就是根据这个原理。

    推挽输出既可以输出高电平,又可以输出低电平。推挽输出的负载能力更强,输出频率更高。

输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。
输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)

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

解:(采样频率)fs=512x40Hz=20,480

    在频谱分析中,横轴为频率,纵轴为幅度(这个幅度不是指幅值,幅度要经过数学处理才是幅值,直流分量和谐波分量的处理不同)
分辨率—>就是频谱中横轴上相邻两个频率之间的频率间隔。或者说在频率轴上的所能得到的最小频率间隔f0=fs/N=1/NTs=1/T , 其中N为采样点数,fs为采样频率,Ts为采样间隔。所以NTs就是采样前模拟信号的时间长度T

  • 分辨率=采样频率/采样点数=fs/N

    我做的2021电赛A题程序中2021年电子竞赛四天三夜征程—-信号失真度测量装置(A题),在fftOutput数组中,输出的元素代表幅度,如何由幅度处理为幅值。对于直流分量,幅度除以N(N为采样点数)得到幅值,对于谐波分量,则幅度除以N/2。(别问我为啥,站在巨人的肩膀上,辅之实践得真知——https://blog.csdn.net/spiremoon/article/details/100053495参考这篇博主说的)。

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

以下内容在串行通信下讨论:

(1).同步通信的接受时钟和发送时钟必须同步,即必须要时钟信号才能定位数据,也就是会通过一根专门的时钟信号线。

(2).异步通信是以字符为单位,相邻两字符之间的时间间隔可以任意长(我发了一个字符,但是我可以等个666秒才去发送下一个字符)。字符间异步,但字符里面的位是同步的

(3).异步通信的数据格式:起始位1位(低电平,你别问我为什么,这是规定,OK),8位数据,1位奇偶校验位,停止位1位(规定位高电平)。

(4).同步通信的数据格式:2个同步字符作为开始标志(就像做事之前,总要通知一下撒),n个数据位(有多少就发多少,随意!),2个CRC(什么你不知道CRC?这个难记名字叫循环冗(rong)余校验,然后呢,自己查)。同步通信是以数据块为单位(数据块就是连续的bit流),位之间是同步。

(5).异步通信对硬件要求相对要低,电路简单,传送效率不高,而同步通信对硬件要求高,电路复杂,但传送效率高(这亦是为什么同步通信要求CRC校验,而异步通信要求奇偶校验,因为奇偶校验简单但漏检率太高,在同步通信n个数据位传送中就显得不够用,所以还得请大哥CRC校验。

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

中断处理的过程:

1.保护现场,将当前位置的PC地址压栈;

2.跳转到中断服务程序,执行中断服务程序;

3.恢复现场:将栈顶的值回送给PC;

4.中断返回:跳转到被中断的位置开始执行下一个指令;(在ARM处理器中直接用传送指令返回,而一些CPU是由专门的中断返回指令)

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

(1)不能有返回值,不能向ISR传递参数。

(2)中断服务函数应短小精悍,所以不能有延时。

(3)进入中断服务函数是随机的,不是主函数调用,或者说与主函数没有半毛钱关系。

(4) printf(char * lpFormatString,…)以及浮点运算等函数会带来函数重入和性能问题,不能在ISR中采用。

    先解决怎么进入中断服务函数的?当中断产生,PC指针强制跳转到对应的中断服务函数入口。中断服务函数不是由主函数调用的,只要是中断产生,则由PC指针强制跳转中断服务函数,中断随机产生,所以进入中断便具有了随机性,并不像下面 fA() fB() fC()函数已经事先安排好的,由main()调用。

    也正因为其随机性,如果ISR有返回值和参数传入,则返回值返回给谁?参数又是谁去调用传递呢?显然这个返回值毫无意义,如果有返回值,它必定需要进行压栈操作,这样一来何时出栈怎么出栈将变得无法解决。

参考这篇博客:https://blog.csdn.net/qq_41092963/article/details/84544445

int main(){
    
    
    fA();
    fB();
    fC();
}

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

输入:”255.255.255.255”

输出:255 255 255 255 (数组)

猜你喜欢

转载自blog.csdn.net/Eterlove/article/details/122291003