当前位置: 首页 > news >正文

嵌入式常问问题和知识

12、并发和并行的区别?
最本质的区别就是:并发是轮流处理多个任务,并行是同时处理多个任务。
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。

你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 (不一定是同时的)

你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

并发的关键是你有处理多个任务的能力,不一定要同时。

并行的关键是你有同时处理多个任务的能力。

所以我认为它们最关键的点就是:是否是『同时』。

并发是轮流处理多个任务,并行是同时处理多个任务
原文链接:https://blog.csdn.net/weixin_30363263/article/details/80732156

1、const 含义
只读
问题:const char* name = “hello word”,是否可以改变name里存放的字符串?
不可以,指针指向常量,内容不可变,指针可以变。
const char *p; //*p是const,p可变

const (char *) p;//p是const,*p可变

char* const p; //p是const,*p可变

const char* const p; //p和*p都是const

char const * p;// *p是const,p可变

(char*) const p;//p是const,*p可变

char* const p;// p是const,*p可变

2、C语言中strlen和sizeof的区别
1.strlen是一个库函数使用时需要引用#include<string.h>这个头文件,而sizeof是一个运算符号;

2.strlen计算的是’\0’之前的字符个数,sizefo计算的是所占空间内存的大小,单位是字节;

3.strlen计算时不包含’\0’,而sizeof包含’\0’;

4.strlen遇到’\0’才结束;

5.sizeof的类型是unsigned int ,是一个无符号的整型;

6.strlen只能用char做参数,sizeof可以用类型做参数;

3、ioctl如何确保命令的唯一性?
ioctl 用户与驱动之间的协议

前文提到 ioctl 方法第二个参数 cmd 为用户与驱动的 “协议”,理论上可以为任意 int 型数据,可以为 0、1、2、3……,但是为了确保该 “协议” 的唯一性,ioctl 命令应该使用更科学严谨的方法赋值,在linux中,提供了一种 ioctl 命令的统一格式,将 32 位 int 型数据划分为四个位段,如下图所示:

// include/uapi/asm-generic/ioctl.h

#define _IOC(dir,type,nr,size)
(((dir) << _IOC_DIRSHIFT) |
((type) << _IOC_TYPESHIFT) |
((nr) << _IOC_NRSHIFT) |
((size) << _IOC_SIZESHIFT))
dir(direction),ioctl 命令访问模式(数据传输方向),占据 2 bit,可以为 _IOC_NONE、_IOC_READ、_IOC_WRITE、_IOC_READ | _IOC_WRITE,分别指示了四种访问模式:无数据、读数据、写数据、读写数据;
type(device type),设备类型,占据 8 bit,在一些文献中翻译为 “幻数” 或者 “魔数”,可以为任意 char 型字符,例如
‘a’、’b’、’c’ 等等,其主要作用是使 ioctl 命令有唯一的设备标识;
nr(number),命令编号/序数,占据 8 bit,可以为任意 unsigned char 型数据,取值范围 0~255,如果定义了多个 ioctl 命令,通常从 0 开始编号递增;
size,涉及到 ioctl 函数 第三个参数 arg ,占据 13bit 或者 14bit(体系相关,arm 架构一般为 14 位),指定了 arg 的数据类型及长度,如果在驱动的 ioctl 实现中不检查,通常可以忽略该参数;

4、copy_from_user 返回值含义
copy_from_user失败返回没有被拷贝的字节数,成功返回0.

5、linux设备驱动注册流程

  1. 驱动程序入口 module_init (at6600efb_init)
  2. 模块初始化 platform_driver_register(&at6600efb_platform_driver);
  3. 驱动程序注册 platfrom_driver_register() 是在设备注册时进行绑定的.以USB为例:先插上USB设备并挂到总线上,然后在安装USB设备驱动的过程中,从总线上遍历各个设备,看是否有与驱动相匹配的设备,如果有,则两者绑定,就是platfrom_driver_register()

platfrom_device_register() 是在驱动注册时进行绑定的.以USB为例:先安装USB驱动程序,然后当USB设备插入时,就遍历总线上各个驱动,看两者是否匹配,如果相配则绑定,这就是platfrom_device_register()

6、platform目录在哪里?
/sys/bus/platform/drivers

7、问:用宏定义一年有多少秒(忽略闰年)
答:

#define SECONDS_PER_YEAR 60 * 60 * 24 * 365UL //加UL,是为了防止溢出

8、IPC摄像头含义
internet protocol camera

9、vmalloc 和 kmalloc区别
.kmalloc分配的页在物理地址上是连续的(虚拟地址自然也是连续的)

vmalloc只确保页在虚拟地址空间内是连续的。它通过非连续的物理内存块,再“修正”页表,把内存映射到逻辑地址空间是连续的区域内。

10、单精度和双精度
单精度是这样的格式,1位符号,8位指数,23位小数。
单精度和双精度精确的范围不一样:单精度,也即float,一般在计算机中存储占用4字节,也32位,有效位数为7位;

在这里插入图片描述
双精度是1位符号,11位指数,52位小数。
双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。
在这里插入图片描述

11、cache作用

在这里插入图片描述
Cache可以大大提高CPU访问主存的速度,中央处理器绝大多数存取主存储器的操作能为存取高速缓冲存储器所代替,能极大缓和中央处理器和主存储器之间速度不匹配的矛盾。

http://www.lryc.cn/news/18411.html

相关文章:

  • 【数据结构】空间复杂度
  • 湖南中创教育提醒校外培训留意这几点,避免维权
  • docker 配置私有/本地镜像仓库
  • 每日学术速递2.23
  • LeetCode 232. 用栈实现队列
  • AI算法创新赛-人车目标检测竞赛总结04
  • 【C语言进阶】动态内存管理详解与常见动态内存错误以及柔性数组使用与介绍
  • 【C++】string的模拟实现
  • 前端借助Canvas实现压缩base64图片两种方法
  • 用ChatGPT生成Excel公式,太方便了
  • 【Kubernetes 企业项目实战】09、Rancher 2.6 管理 k8s-v1.23 及以上版本高可用集群
  • 在Excel中按条件筛选数据并存入新的表
  • 【面试题】MySQL索引相关知识点
  • MySQL索引类型及原理?一文读懂
  • 【C语言】字符分类函数+内存函数
  • 高通平台开发系列讲解(SIM卡篇)SIM卡基础概念
  • 记录一次ubuntu下配置ssh登录出现的问题
  • 深度剖析数据在内存中的存储(下)(适合初学者)
  • 智慧物联网系统源码:一个用于数据的收集、处理、可视化、设备管理、设备预警、报警的平台
  • 2023年,拥有软考证书在这些地区可以领取福利补贴
  • 使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
  • Tesseract 4.0训练字库并且识别训练后的图片
  • ChatGPT热潮背后,金融行业大模型应用路在何方?——金融行业大模型应用探索
  • 【怎么预防sql注入,以及还有预防其他的什么网络攻击】
  • 2023年全国最新机动车签字授权人精选真题及答案4
  • 【Java】用记事本实现“HelloWorld”输出
  • 我希望早点知道的关于成长的建议
  • 【哈希表】使用方法总结
  • 【笑小枫-面试篇】Java基础面试题整理,努力做全网最全
  • 亚马逊短期疲软,但长期前景乐观