3. 预处理器标识#error的目的是什么?
编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。
下面举个例子:
程序中往往有很多的预处理指令
#ifdef XXX
...
#else
#endif
当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译:
#ifdef XXX
...
#error "XXX has been defined"
#else
#endif
这样,如果编译时出现错误,输出了XXX has been defined,表明宏XXX已经被定义了。
同步通信和异步通信有什么区别?UART、SPI和I2C分别属于什么类型的通信方式?
同步通信需要相同频率的时钟,逐字符发送接收,发一个收一个,收一个发一个,不能有间隙。
异步通信可以任意间隙,接受端随时准备,发送端任意时刻发送 ,需要加停止位和开始位。
UART异步通信 全双工 2线 RX TX
I2C 同步通信 半双工 2线 SDA SCL
SPI 同步通信 全双工 3线或四线 MOSI MISO SCLK SS(片选)
SPI:串行同步外设接口,全双工通信,3线或4线式,有MOSI、MISO、NSS、SCK四条线,主机控制时钟频率,有四种工作模式,通过时钟相位和时钟极性来选择,时钟相位是来判断空闲状态下时钟的电平状态,时钟极性是来选择采集数据的跳变沿。发送数据通过主从设备的移位寄存器来实现,主设备先传输高位数据,两个设备通过交换的方式完成一帧数据的传送。SPI优点:传输速度快,简单性,有效性 缺点:占用端口较多
I2C:两线式串行总线,半双工,有两条线,一条时钟线SCL,一条数据线SDA。因为这I2c内部是漏极开路或集电极开路结构,所以必须外接上拉电阻,才能输出高电平,实现线与逻辑。每个设备都自己的地址。I2C引脚发送完数据后会检测自己引脚上的电平状态,如果不一致则退出,实现总线仲裁。从设备可通过控制SCL上的电平状态来控制时钟同步。I2C优点:支持多控,缺点:半双工,速度慢于SPI
UART:异步收发器,两线式,TX和RX,不需要时钟,由起始位停止位及波特率进行标识,一般硬件上由波特率发生器、串口发送器、串口接收器组成。有检错机制:奇偶校验位。UART优点:不需要时钟,传输距离远,有检错机制,缺点:需要波特率的支持,速度慢
中断
中断是什么?请简述单片机中断处理的过程
CPU在正常执行程序的过程中,由于内部/外部事件的触发或程序的预先安排引起CPU暂时中断当前正在运行的程序,而转去执行中断服务子程序,待中断服务子程序执行完毕后,CPU继续执行原来的程序,这一过程称为中断;
中断处理的过程:
第一步:保护现场,将当前位置的PC地址压栈;
第二步:跳转到中断服务程序,执行中断服务程序;
第三步:恢复现场,将栈顶的值回送给PC;
第四步:跳转到被中断的位置开始执行下一个指令;
相比于正常子函数,中断服务函数有什么特点和需要注意的地方?
相当于正常子函数,中断服务函数的特点是没有输入参数,一般也没有输出参数,此外,调用中断服务函数的方式也有所区别,正常子函数的调用直接在需要的位置写出子函数名即可,程序运行到此即进入子函数内部;调用中断服务函数,需要在程序中开启中断开关,即配置对应中断控制的寄存器,当出现触发条件时(例如某引脚电平信号发生变化,或时间达到某一值),就会进入中断服务函数体内运行
注意地方:中断函数中不宜写太多的代码,这样可能导致中断服务函数还未执行完,因为符合条件,又触发了一次中断,程序就一直卡在中断服务程序中,导致整个系统崩溃。另外,当系统有多个中断时,为防止在执行当前中断服务函数时,被另一个不必要的中断打断,一个可以参考的解决方法时在进入中断时关闭其他中断,并在中断服务函数的最后一句再次开启中断开关。
1.BLE,即蓝牙技术,是一种近距离无线通信方式,诞生于1994年,由Ericsson公司首先提出。蓝牙协议的标准版本为802.15.4, 其传输频段为全球公共通用的2.4GHz ISM频段,提供1Mbps的传输速率和10m的传输距离。缺点是高成本、低传输距离、扛干扰能力不强;
2.WiFi(Wireless Fidelity,无线高保真),也是一种短距离无线通信技术,正式名称是802.11b,其工作频率是2.4GHz,最高速率可达11Mbps,覆盖范围可达100m。是以太网的一种无线扩展。
3.NFC(Near Field Communication,近距离无线传输),是由Philips、NOKIA和Sony主推的一种类似于RFID(非接触式射频识别)的短距离无线通信技术。和RFID不同,NFC采用双向的识别和连接,在20cm距离内工作与13.56MHz频率范围内。