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

2022年01月13日 阅读数:8
这篇文章主要向大家介绍嵌入式软件开发岗秋招【寒武纪笔试篇】,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

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

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

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

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

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

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

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

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

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

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

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 (数组)