嵌入式工程师面试准备(客观题准备)

Q:1.为什么flash的起始地址是0x0800 0000?

A:ARM Cortex-M3 M4 M7等微控制器通常遵循一个通用的内存映射,其中0x0800 0000被定义为内部闪存的起始地址,这是ARM的推荐规范,所以许多制造商都遵循这一标准。
2.设置为相同的 可以方便软件开发和维护,
微控制器在上电或复位后,bootloader通常从固定地址开始执行代码。
但是也并不是所有的微控制器都使用这个地址,对于有不同内存映射的 还是需要根据手册来获取准确的内存映射信息。

Q:2.STM32 bootloader通用执行流程是什么?

1.启动模式选择
2.硬件初始化
3.通信接口初始化
4.协议处理
5.固件更新操作
6.跳转到用户程序
STM32有三种启动模式:主闪存存储器,系统存储器(内置bootloader)和内置SRAM。
用户通过BOOT引脚配置启动模式,当选择系统存储器启动时,芯片会执行内置的Bootloader程序

1,上电后或者发生复位后,bootloader会从预定义的复位向量地址开始执行代码,对于STM32,这个地址通常是0x0800 0000。
2.bootloader初始化代码中,首先会执行系统初始化代码。包括
配置时钟系统(HSE、HSI、PLL)以设置所需的系统时钟。
初始化堆栈指针。
配置必要的GPIO和外设
执行一些基本的内存清理操作。

bootloader 执行特定的硬件测试
跳转到应用程序代码

Q:3.8080并口协议的工作原理 和 IIC SPI的工作原理 区别

8080 并行接口是 早期的计算机总线接口标准,是INTEL 为其8080微处理器设计的总线接口,
常见于微控制器与外围设备(LCD显示屏)通信的协议。
包括 数据线 D0-D17 具体用哪几个信号线需要看配置
控制信号 D/CX RDX WRX CSX RESX

8080-I 8080-II的主要区别在于数据线通信时占据的数据位8080-I优先使用的是低8位,8080-II优先使用的是高8位。

使用过最熟悉的支持8080接口协议的就是ILI9341 TFT显示芯片,就以此为例 展开介绍写写,做个部分总结:
9341是一个单芯片控制驱动器,具有262144色的240RGB320像素解决方案,组成包括一个720通道的源极驱动器,一个320通道的栅极驱动器,172800字节用于图形显示的GRAM,以及供电电路。
看起上上面很简单的一段话 还是有一些内涵的。 比如262144色的定义如何来的?为什么是172800字节的GRAM大小?又为什么包含720通道的源极驱动器?
下面给简单解释下:
1.RGB颜色模型,通过组合不同强度 R、G、B三种基本色来形成各种不同的颜色。26万色通道用18bit的颜色深度来表示每个像素的颜色,所以RGB三基色分别用6位二进制表示,所以每种基色组合可表达的状态有2^6种,总颜色数量等于 2^6*2^6*2^6=2^18=262144色组合。
2.物理尺寸显示大小为240
320像素点 每个像素点需要的bit数为18位来表示一个像素点上的颜色种类,所以总共需要24032018个bit的数据大小=1382400bit,转换为字节的单位就是172800的GRAM了。
3.至于720通道的源极驱动器,同样和RGB颜色模型有关,为了显示一个完整的彩色像素,需要控制RGB三种基本色,从而需要分别控制RGB三个子像素的亮度,而物理层面上源级驱动器可以为每个子像素提供精确的驱动电压,从而控制子像素产生的亮度,对应子像素的数据表示。
所以物理层面上也会需要DAC将RGB的色值通过数值转换为模拟电压,从而产生对应的驱动电压。

难点或者复杂点:

根据项目需求,参考手册上的说明,完成各种过程函数的实现(面向对象里面就可以称呼为方法了),debug,并做成库

IIC
物理层

双线制:SDA SCL 所有连接在总线上的设备都通过这两条线进行通信 开漏输出 开漏输出智能将信号拉低,不能拉高,便于多设备共享总线而不发生电平冲突。多主多从架构,设备上可以有多主多从设备

链路层:

START SCL为高电平,SDA由高电平向低电平的跳变 指示为START信号
STOP SCL为高电平,SDA由低电平向高电平的跳变指示为STOP信号

速率

标准模式 100kHz
快速模式 400KHz
高速模式 3-4MHz 具体需要看设备支持 这里只只是总线的特性。

地址帧:START 信号后 主设备发送一个7bit或10bit的从设备地址,以及一个读写位,总线上的所有设备都会接收这个地址和自己地址比对,比对结果一致的,返回ACK表示响应。
数据帧:地址匹配成功后,开始发送数据,每个字节传输完成后,接收方会发送一个应答位来表示是否成功接收。
SPI
物理层

四线制:CS SCL MOSI MISO 单主多从架构,主设备控制始终信号和从设备的选择,从设备根据主设备的控制进行数据收发
工作模式
由CPOL和CPHA决定 组合可以产生四种工作模式
CPOL 指定SPI总线空闲时的电平状态 CPOL = 0 总线空闲低电平 CPOL = 1 总线空闲高电平
CPHA 指定数据在SCK的第一边沿或第二个边沿采样 CPHA=0 第一个边沿采样 CPHA=1第二个边沿采样
由上述定义
CPOL =0 CPHA = 0:空闲低电平 第一个上升沿采样 下降沿发送
CPOL =0 CPHA = 1:空闲低电平 第二个下降沿采样 上升沿发送

链路层

数据是按照bit传输 数据传输速率由SCK频率定义。也受控于主控芯片最高频率。

速率

低速情况下:几百KHz和几MHz之间
高速情况下 几十MHz-100MHz 也存在

Q:经典PID控制算法 如何使实际值慢慢接近目标值?

我们整定参数应该如何整定

Q:数组和链表的区别?

A:数组和链表是两种常见的数据结构。它们在存储和操作数据上有显著的区别。
1.存储方式
数组:数组在内存中是连续存储的。,且定义时需要指定大小,通常是固定的 所有元素在内存中占据一块连续的空间。
链表:链表中的元素在内存中是可以分散存储的,每个元素(节点)包含数据和指向下一个节点的指针。链表的大小是动态的,可以随时增加和减小节点。
2.操作数据
访问:
数组:数据是连续存储的,可以通过索引直接访问任意元素,时间复杂度为O(1)。
链表:链表必须从头节点开始遍历,直到找到目标节点,时间复杂度为O(n)。
插入和删除
数组:
在数组中插入或删除元素需要异动大量的元素,时间复杂度O(n);
链表:在链表中插入或删除元素只需调整指针,时间复杂度为O(1);
3.使用效率上:
数组:数组的内存使用效率较高,因为只有数据本身占用空间。由于连续存储的特性,对缓存的利用较好,访问速度通常较快。
链表:链表每个节点除了数据外还需要额外的空间存储指针,因此内存使用效率较低。链表的节点在内存中分散存储,对缓存的利用较差,访问速度通常较慢。
所以对于数组和链表的使用要注意应用场景,数组适合快速访问和固定大小的场景,链表适合频繁插入和删除操作的动态大小场景。

应用:创建单向链表 ,双向链表 , 环形队列 并定义相关方法

Q:单片机上电后不能正常启动 可能是哪些原因造成的?如何排查?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14801.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows安装cwgo,一直安装的是linux平台的

Windows安装cwgo,一直安装的是linux平台的 查看 go env ,发现 GOOSlinux 临时修改 GOOS ,set GOOSwindows ,再安装。 此时,安装的就是 windows 的可执行文件。安装之后再将 GOOS 修改回来即可。

【R语言】plyr包和dplyr包

一、plyr包 plyr扩展包主要是实现数据处理中的“分割-应用-组合”(split-apply-combine)策略。此策略是指将一个问题分割成更容易操作的部分,再对每一部分进行独立的操作,最后将各部分的操作结果组合起来。 plyr扩展包中的主要函…

google 多模态aistudio Stream Realtime体验

参考: https://aistudio.google.com/live 使用gemini多模态能力,支持语音图像文字输入输出,实时交互体验 支持语音实时交互、摄像头加语音、屏幕视频语音 摄像头 屏幕共享

opentelemetry-collector 配置elasticsearch

一、修改otelcol-config.yaml receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailedotlp/jaeger: # Jaeger supports OTLP directlyendpoint: 192.168.31.161:4317tls:insecure: trueotlphttp/prometheus: …

四、OSG学习笔记-基础图元

前一章节&#xff1a; 三、OSG学习笔记-应用基础-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145514021 代码&#xff1a;CuiQingCheng/OsgStudy - Gitee.com 一、绘制盒子模型 下面一个简单的 demo #include<windows.h> #include<osg/Node&…

保姆级AI开发环境搭建

目录 windows下环境搭建1. Python环境搭建2. 下载vLLM2.1 安装CUDA2.2 安装Pytorch2.3 安装vllm 3. 部署Deepseek&#xff08;huggingface&#xff09;3.1 DeepSeek的优化建议 4. ollama快速部署Deepseek4.1 下载Ollama4.2 配置Ollma4.2 运行模型4.3 其他Ollama命令 linux下环境…

MySQL安装与配置

MySQL是常用的数据库&#xff0c;本篇记录MySQL的安装与配置。 1.首先到官网下载MySQL&#xff0c;这里下载5.7版本的。 https://downloads.mysql.com/archives/community/ 2.下载完成后&#xff0c;解压&#xff0c;然后设置环境变量 3.打开解压的要目录&#xff0c;创建一个…

如何参与开源项目

目的 就是说一下如何参与开源的项目&#xff0c;通过参与QXlsx来说明开源项目是如何参与的&#xff0c;其它的github上的开源项目&#xff0c;也是这样的流程。 关于GitHub: GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号&#xff0c;直接搜索引擎搜索即可得到&#xff0c;这就不用多说了&#xff0c;但是这里的手机号可以任意输入&#xff0c;只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构

论文原文链接&#xff1a;DeepSeek-V3/DeepSeek_V3.pdf at main deepseek-ai/DeepSeek-V3 GitHub 特别声明&#xff0c;本文不做任何商业用途&#xff0c;仅作为个人学习相关论文的翻译记录。本文对原文内容直译&#xff0c;一切以论文原文内容为准&#xff0c;对原文作者表示…

Qt之设置QToolBar上的按钮样式

通常给QAction设置icon后,菜单栏的菜单项和工具栏(QToolBar)上对应的按钮会同时显示该icon。工具栏还可以使用setToolButtonStyle函数设置按钮样式,其参数为枚举值: enum ToolButtonStyle {ToolButtonIconOnly,ToolButtonTextOnly,ToolButtonTextBesideIcon,ToolButtonTe…

学习threejs,使用Lensflare模拟镜头眩光

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Lensflare 二、&…

opencv图像处理

注释详细 1.图像维度&#xff1a;打印出的结果分别为图片像素的横行、纵列和三原色彩色通道 import cv2 imgcv2.imread(pictures//3.png) print(img.shape) cv2.imshow("img",img)#窗口名、变量名 cv2.waitKey(0) 2.图像彩色通道&#xff1a;1张彩色图片&#xff…

harmonyOS生命周期详述

harmonyOS的生命周期分为app(应用)的生命周期和页面的生命周期函数两部分 应用的生命周期-app应用 在app.js中写逻辑,具体有哪些生命周期函数呢,请看下图: onCreated()、onShow()、onHide()、onDestroy()这五部分 页面及组件生命周期 着重说下onShow和onHide,分别代表是不是…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…

快速上手——.net封装使用DeekSeek-V3 模型

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…

国产化创新 守护开放边界网络安全

当今数字化浪潮的席卷下&#xff0c;企业、医院、政府部门等各类机构的信息化建设正以前所未有的速度推进。 在这个数字化转型的关键时期&#xff0c;尤其是在涉及国家核心利益和敏感数据的领域&#xff0c;我们不仅要追求技术的先进性&#xff0c;更要确保安全性和自主可控性…

基于Java的在线购物系统的设计与实现

引言 课题背景 随着Internet国际互联网的发展&#xff0c;越来越多的企业开始建造自己的网站。基于Internet的信息服务&#xff0c;商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代企业需要的是一个功能强…

cefsharp131升级132测试(WinForms.NETCore)

一、升级&#xff08;Nuget&#xff09; 版本说明&#xff08;readme&#xff09;:最低.NET Core3.1 (NET5.0) Visual C 2019 Redist 二、试运行、兼容性测试 三、后记说明 支持H264版本推荐版本63,79,84,88,100,111,125&#xff08;支持h264和pdf预览&#xff09; 其他H264版…

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…