嵌入式常见面试题总结(10)_can常用面试题

3,只有在调用ioperm或者iopl后才可以访问I/O端口。然而并不是所有平台都支持两个系统调用,并且访问/dev/port可能非常慢,因而并非十分有效。同样只有特权用户才能引用这些系统调用和访问设备文件;

相应时间很慢。这是因为在客户端和硬件之间传递数据和动作需要上下文切换;

5,更严重的是,如果驱动程序被换到磁盘,相应时间将令人难以忍受。使用mlock系统调用或许可以缓解这一问题,但由于用户空间程序一般需要链接多个库,因此通常需要占用多个内存页。同样,mlock也只有特权用户才能使用;

6,用户空间中不能处理一些非常重要的设备,包括(但不限于)网络接口和块设备等。

92**,DMA原理?**

**答:**一个完整的DMA传输过程必须经过下面的4个步骤。

(1)DMA请求:CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。

(2)DMA响应:DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。

(3)DMA传输:DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。

(4)DMA结束:当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。

由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

参考:https://blog.csdn.net/dddd0216/article/details/50906504

93**,中断的上半段和下半段指?**

**答:**中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出于这样的原因,大家都希望中断处理函数执行得越快越好。

另外,中断上下文中不能阻塞,这也限制了中断上下文中能干的事。

基于上面的原因,内核将整个的中断处理流程分为了上半部和下半部。上半部就是之前所说的中断处理函数,它能最快的响应中断,并且做一些必须在中断响应之后马上要做的事情。而一些需要在中断处理函数后继续执行的操作,内核建议把它放在下半部执行。

拿网卡来举例,在linux内核中,当网卡一旦接受到数据,网卡会通过中断告诉内核处理数据,内核会在网卡中断处理函数(上半部)执行一些网卡硬件的必要设置,因为这是在中断响应后急切要干的事情。接着,内核调用对应的下半部函数来处理网卡接收到的数据,因为数据处理没必要在中断处理函数里面马上执行,可以将中断让出来做更紧迫的事情。

三种方法来实现下半部:软中断、tasklet和等待队列。

参考:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=24690947&id=3491821

94**,运算符优先级,左右结合到底是怎么回事?**

答:举例:+a-,左结合,就是a和a左边的符号结合参与运算,即+a,右结合,就是a和a右边的符号结合起来参与运算,即a-。

95**,socket编程?**

答:参考:https://www.cnblogs.com/liushui-sky/p/5609535.html

96,mknod****命令怎么用?

答:mknod /dev/ttyUSB32 c 188 32

/dev/ttyUSB32 文件名:要创建的设备文件名;

C 类型:指定要创建的设备文件的类型;

188 主设备号:指定设备文件的主设备号;

32 次设备号:指定设备文件的次设备号。

Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录 下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。

为了管理这些设备,系统为设备编了号,每 个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编 号,如硬盘的主设备号是3。

Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。

打开一个文件就是调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。

97**,自旋锁?及其代码?**

答:是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。

参考:https://baike.so.com/doc/9186718-9519957.html

98**,can原理?**

答:控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议由德国的 Robert Bosch公司开发,用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。

CAN总线是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电子干扰性,并且能够检测出产生的任何错误。CAN总线可以应用于汽车电控制系统、电梯控制系统、安全监测系统、医疗仪器、纺织机械、船舶运输等领域。

CAN总线的特点

(1)具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点;

(2)采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作;

(3)具有优先权和仲裁功能,多个控制模块通过CAN 控制器挂到CAN-bus 上,形成多主机局部网络;

(4)可根据报文的ID决定接收或屏蔽该报文;

(5)可靠的错误处理和检错机制;

(6)发送的信息遭到破坏后,可自动重发;

(7)节点在错误严重的情况下具有自动退出总线的功能;

(8)报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。

参考:http://embed.21ic.com/hardware/can/201611/42974.html

99**,底半部实现方法1:软中断?及其代码?**

答:“硬中断是外部设备对CPU的中断”,“软中断通常是硬中断服务程序对内核的中断”,“信号则是由内核(或其他进程)对某个进程的中断”。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是嵌入式系统? 嵌入式系统是一种特殊的计算机系统,它通常被嵌入到其他设备中,如智能手机、电视、汽车、医疗设备等。嵌入式系统具有低功耗、高性能、实时性要求等特点。 2. 嵌入式系统与普通计算机有什么不同? 嵌入式系统通常具有较小的尺寸、低功耗、高可靠性、实时性要求以及特定的功能需求。它们的硬件和软件都是为了满足特定的应用需求而设计的。 3. 嵌入式系统中常用的处理器架构有哪些? 常见的处理器架构包括ARM、MIPS、PowerPC、x86等。 4. 嵌入式系统中常用的操作系统有哪些? 常见嵌入式操作系统包括FreeRTOS、uC/OS、Linux、Windows CE等。 5. 嵌入式系统中常用的通信协议有哪些? 常见的通信协议包括UART、SPI、I2C、CAN、USB、Ethernet等。 6. 嵌入式系统中常用的编程语言有哪些? 常见的编程语言包括C、C++、Assembly等。 7. 嵌入式系统中如何进行调试? 常用的调试方法包括printf调试、LED指示灯调试、仿真器调试、逻辑分析仪调试等。 8. 嵌入式系统中如何进行电源管理? 电源管理主要包括功耗控制、电池管理、供电稳定等。常用的电源管理技术包括休眠模式、时钟频率调整、电源管理芯片等。 9. 嵌入式系统中如何进行存储管理? 存储管理主要包括程序存储、数据存储、配置存储等。常用的存储设备包括FLASH、EEPROM、SD卡、硬盘等。 10. 嵌入式系统中如何进行实时性任务调度? 常见的实时任务调度算法包括优先级调度、时间片轮转调度、最短剩余时间优先调度等。常用的实时操作系统包括FreeRTOS、uC/OS等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值