威泰视信嵌入式软件工程师笔试题

威泰视信嵌入式软件工程师笔试题答题时间 45分钟

选择题

1、以下不需要编译内核的情况是

A、删除系统不用的设备驱动程序时

B、升级内核时

C、添加新硬件时

D、激活网卡

只要你代码或配置有改动,都要重新编译的,只是如果代码写成块模式的,不用整个代码都重新编译,编译器会自动编译改动了的代码。ABC都改动了原有的配置,D没有,选择D。

激活网卡就用 ifconfig eth0 up

2、内核不包括的子系统是( )

A、进程管理系统

B、内存管理系统

C、/O管理系统

D、硬件管理系统

内核分为进程管理子系统,内存管理子系统,IO管理子系统,文件管理子系统

D

3, unsigned short hash(uinsigned short key) Return( key >> 4)%256; 请问hash(16) , hash(256) 的值分别是 ( )

A、1,16

B 8 , 32

C、4,16

D、1,32

key = 256 = 0000 0001 0000 0000, >> 4 = 0001 0000 key = 16 = 0000 0000 0001 0000 = 0001

4、烧写到 FLASH 里的是 ( ) 格式的文件

A、.asm

B .bin

C、.obj

D .cpp

B .bin

5、汇编程序中的伪指令是在( ) 阶段起作用

A、编辑

B、链接

C、编译

D、执行

C、编译

6、经过汇编后,生成的目标文件的后经名为( )

A、.C

B .s

C .o

D .exe

  • 预处理,生成 .i 的文件[预处理器cpp]

  • 2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]

  • 3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]

  • 4、连接目标代码, 生成可执行程序 [链接器ld]

    .c为后缀的文件,C语言源代码文件

    .a为后缀的文件,是由目标文件构成的档案库文件;

    .C,.cc或.cxx 为后缀的文件,是C++源代码文件;

    .h为后缀的文件,是程序所包含的头文件;

    .i 为后缀的文件,是已经预处理过的C源代码文件;

    .ii为后缀的文件,是已经预处理过的C++源代码文件;

    .m为后缀的文件,是Objective-C源代码文件;

    .o为后缀的文件,是编译后的目标文件;

    .s为后缀的文件,是汇编语言源代码文件;

    .S为后缀的文件,是经过预编译的汇编语言源代码文件。

7、对代码文件 code.c 编译, 生成可调式代码的命令是()

A、#gcc - g code.c - o code

B、# gcc code.C - o code

C、#c - g code. c code

D、#gcc - g code

g++命令中 -g 表示生成的文件是可调试的,如果没有-g,调试时无法命中断点。

A、#gcc - g code.c - o code

8、 nand flash 和 nor flash的区别正确的是()

A、nor 的读速度比nand稍慢

B、nand的擦除速度远比nor慢

C、nand的写入速度比nor 慢很多

D、nand的擦除单元更小, 擦出电路更少

NOR的读速度比NAND稍快一些。

NAND的写入速度比NOR快很多。

NAND的4ms擦除速度远比NOR的5s快。

大多数写入操作需要先进行擦除操作。

NAND的擦除单元更小,相应的擦除电路更少。

NOR Flash 来运行启动代码

Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储

D. nand的擦除单元更小, 擦出电路更少

简答题

1、写出 Linux下的cmd命令, 显示文件、拷贝、删除。

ls

cp

mv

image-20200622101738727

2、关键字 volatile 有什么意义?

中断服务程序中修改的供其它程序检测的变量需要加volatile;

多任务环境下各任务间共享的标志应该加volatile;

存储器映射的硬件寄存器通常也要加 volatile 说明,因为每次对它的读写都可能由不同意义;

变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错

3、ICMP是什么协议? 处于网络分层的那一层?

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。属于网络层协议

控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

4、程序的全局变量、局部变量和动态申请数据分别位于哪些存储区中?

根据 作用域 可分为 全局变量 和 局部变量。

根据 生存周期 可分为 静态存储方式 和 动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)

静态存储方式 是指 在程序运行期间分配固定的存储空间的方式,动态存储方式是 在程序运行期间根据需要进行动态的分配存储空间的方式。

局部变量存在于( 堆栈 )中,全局变量存在于( 静态区 )中,动态申请数据存在于( )中

5、使用gcc编译生成可执行文件要经历的那些步骤?

一、预处理(生成预编译文件 ,.i文件)

gcc –E hello.c –o hello.i //一定.c作为后缀,让gcc识别

预处理过程主要处理那些源代码中以 # 开始的预编译指令,主要处理规则如下:

① 将所有的 #define 删除,并且展开所有的宏定义;

②处理所有条件编译指令,如 #if#ifdef 等;

③处理 #include 预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。

④删除所有的注释 ///* */

⑤添加行号和文件标识,如 #2 “ hello.c ” 2, 以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;

⑥保留所有的 #pragma 编译器指令,因为编译器须要使用它们;

二、编译(生成预编译文件 ,.s文件)

gcc –S hello.i –o hello.s //可以不用指定名字,默认生成一个.s文件

编译过程 就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件。

三、汇编(生成汇编代码,.o文件)

gcc –c hello.s –o hello.o //可以不指定,默认生成.o的文件

汇编器 是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。

四、链接(生成可执行文件)

gcc hello.o –o hello

链接器 ld 将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。

假定我们有一个程序名为 hello.c 的C语言源代码文件,要生成一个可执行文件,最简单的办法就是∶

gcc hello.c -o myhello 	//一步即可完成

这时,预编译、编译连接一次完成,生成一个系统预设的名为 myhello.out 的可执行文件。

6 用一句话概括 Makefile的作用。

makefile文件和make工具一起使用,用于控制工程项目的编译和链接,也可以用来编写手册页和程序的安装。make工具用于解释执行makefile文件中的内容。makefile文件中通常包含源文件和目标文件的依赖关系以及从源文件生成目标文件的规则。make工具可以根据makefile判断哪些文件需要被重新编译,目标文件的构建顺序等。

7、简述看门狗的作用。

软件看门狗:一些重要的程序,必须让它一直跑着;而且还要时时关心它的状态——不能让它出现死锁现象。当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误。我们首要做的事是,把这个Bug揪出来。但如果时间紧迫,这个Bug又“飘忽不定”,那么,我们还是先写一个软件“看门狗”,暂时应一下急吧。

硬件看门狗:在初始化的时候配置一下寄存器,那么这个时候就可以给硬件看门狗发送喂狗指令了。硬件看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个[复位信号]到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

8、什么是 Cache?

cache 就是 高速数据交换的存储器 , 简称 缓存,它先于内存与CPU交换数据,因此速率很快 , 主要是解决CPU和内存之间的数据传输速度差异 . 一般分为 L1 cache , L2 cache , L3 cache , 看成金字塔形结构 , 是上层的存储设备容量越小、速度越快、价格也越贵,而越是下层的存储设备容量越大、速度越慢、价格也越便宜

9、用预处理指令 #define 声明一个常量, 用以表明一个有10位地址线的 FLASH的最大存储容量, 单位 bit。

//1 字节(B, byte) = 8位(b, bit)
//2^10 = 1024bit = 128 B
#define MAXADDR 1024

10 int id[ sizeof(unsigned long) ], 这个表达式是否正确? 表达的是什么?

正确 , 先运算 sizeof,得出 unsigned long 的字节长度 , 这个值是根据每个机器决定 , 一般为 4字节 或 8字节 , 所以可以看成常量

问答题

1、如果有一个简单的 helloworld项目目录如下:

# tree helloworld

Helloworld

I- file2. h

I- filel. cpp

I- file2. cpp

请编写一个 Makefile文件。

Helloworld : filel.o file2.og++ -o Helloword filel.o file2.ofilel.o : filel.cpp g++ -c filel.cppfile2.o : file2.cpp file2.hg++ -c file2.cpp.PHONY : clean
clean :rm Helloworld *.o

2、简述嵌入式linux系统开发流程

开发目标硬件系统 : 选择处理器、Flash等

建立交叉开发环境 : 安装交叉编译工具链(如 arm-linux-gcc )、设置好环境变量、配置串口通信工具(如超级终端、SecureCRT等)、配置网络通信工具(如NFS)等

建立引导装在程序的bootloader : u-boot , 完成初始化,引导内核,下载、烧写等

移植嵌入式Linux操作系统 : Linux 内核的移植

建立根文件系统 : 如 busybox , 修改根文件系统中的启动脚本,它的存放位置至于/etc目录下

开发相关的硬件驱动程序 : 如LCD、网卡、GPIO

开发应用程序 : 如 网络 , QT , android

烧写内核、根文件系统、应用程序

发布产品

3、什么是 Bootloader? bootloader 有哪两种工作模式, 分别应用在什么情况下?

BootLoader 是在操作系统内核运行之前运行的一个小程序。可以通过这个小程序,初始化硬件设备、然后建立内存空间的映射,这样就方便最终调用操作系统内核做了一个合适的环境

BootLoader 的工作模式 (Operation Mode):

启动加载(Boot loading)模式:简称 “ 自主 ”模式,也就是Boot Loader从目标机上的某个存储设备上将操作系统加载到RAM中运行,整个过程不需要用户的介入。这种模式是Boot Loader的正常工作模式。

下载(Down loading)模式:在这种模式下目标机上的Boot Loader将通过 串口连接 或 网络连接 等通信手段 从主机下载文件。从主机下载的文件通常首先被Boot Loader保存到目标机的RAM中 然后再被Boot Loader写到目标机上的存储设备中。

BootLoader 的启动过程 :

分为单阶段(Single-Stage)和 多阶段(Multi-Stage)两种。

通常多阶段的Boot Loader 具有更复杂的功能,更好的可移植性。在存储设备上启动的Boot Loader 大多采用两阶段,即启动过程可以分为 stage1 和 stage2:stage1完成初始化硬件,为stage2准备好内存空间,并将stage2复制到内存中,并设置好堆栈,然后跳转到stage2中

4、给定一个整形变量 lcr, 写两段代码, 第一个置位 lcr 的bit3, 第二个清除 lcr 的bit3。

lcr |= (1 << 3)		//置位
lcr &= ~(1 << 3)	//清位

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

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

相关文章

【LLM之RAG】RAT论文阅读笔记

研究背景 近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在各种自然语言推理任务上取得了显著进展&#xff0c;尤其是在结合大规模模型和复杂提示策略&#xff08;如链式思维提示&#xff08;CoT&#xff09;&#xff09;时。然而&#xff0c;LLMs 在推理的事实…

.net8 blazor auto模式很爽(三)用.net8的Blazor自动模式测试,到底在运行server还是WebAssembly

Blazor自动模式到底什么时侯在运行server&#xff0c;什么时侯在运行WebAssembly。这个对我们来说非常重要&#xff0c;官方并没有很清楚地告诉我们。并且存在一些误导&#xff0c;让我们觉得自动模式就是不管我怎么弄&#xff0c;blazor都会自动识别该使用server还是WebAssemb…

Ubuntu 安装 CloudCompare

步骤&#xff1a; sudo apt install flatpakflatpak install flathub org.cloudcompare.CloudCompare此时会有报错&#xff1a; error: No remote refs found similar to ‘flathub’执行 flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.fla…

【IDEA】Spring项目build失败

通常因为环境不匹配需要在file->projectstructure里面调整一下。

详解DAC数模转换+DAC输出模拟电压的测量比对实验程序

前言&#xff1a;详解DAC数模转换原理DAC输出模拟电压的测量比对实验程序&#xff08;使用 DAC 通道 1 输出模拟电压&#xff0c;然后通过 ADC1 的通道 1 对该输出电压进行读取&#xff0c;并显示在 LCD 模块上面&#xff0c;DAC 的输出电压可以通过按键&#xff08;或 USMART&…

了解CDN:提升网络性能和安全性的利器

在当今的数字时代&#xff0c;网站性能和安全性是每一个网站管理员必须关注的核心问题。内容分发网络&#xff08;CDN&#xff0c;Content Delivery Network&#xff09;作为解决这一问题的重要工具&#xff0c;逐渐成为主流。本文将详细介绍CDN的定义、作用及其工作原理&#…

小白学react之Next.js 14(一)不配置路由的玩法

Next.js 14是目前最新版本&#xff0c;我们用就用最新的玩一下。 建一个示例之后&#xff0c;我在找配置&#xff0c;我应该在那建一个新的页面。找半天硬是没找着&#xff0c;答案是现在不需要配置。 我们来看一下Next.js 14的项目结构&#xff1a; 很明显&#xff0c;在src/…

数学建模系列(4/4):Matlab建模实战

目录 引言 1. Matlab简介与安装 1.1 Matlab简介 1.2 Matlab的安装 2. Matlab基础操作 2.1 Matlab基础语法和常用命令 2.2 Matlab中的数据类型和数据结构 3. 用Matlab进行建模 3.1 矩阵运算与线性代数 矩阵运算 3.2 Matlab中的绘图功能 绘制2D图形 绘制3D图形 3.3…

物联网技术-第5章-物联网数据处理

目录 1.物联网数据特征 2.物联网数据处理 &#xff08;1&#xff09;数据清洗 &#xff08;2&#xff09;数据存储 &#xff08;3&#xff09;数据融合 &#xff08;4&#xff09;数据挖掘 3.大数据基本概念 4.云计算基本概念 &#xff08;1&#xff09;背景 &#xf…

RTD 基础知识——电阻温度检测器简介

电阻温度检测器或 RTD 可能是简单的温度传感器类型。这些设备的工作原理是金属的电阻随温度变化。纯金属通常具有正的电阻温度系数&#xff0c;这意味着它们的电阻随温度升高而增加。RTD 可在 -200 C 至 850 C 的较大温度范围内工作&#xff0c;并提供高精度、出色的长期稳定性…

HoVer-Net复现:手把手带你实现细胞核的分割与分类,并输出叠加图像|24-06-21

小罗碎碎念 先说一下&#xff0c;只要你跟着我一步一步走&#xff0c;你能实现的效果——对细胞核进行分割和分类&#xff0c;并在原始图像上以颜色叠加的方式直观地展示这些结果。 昨天我在交流群里进行了一下预热&#xff0c;并且提供了一些前期的教程&#xff0c;反响还不…

C# 实现去除多行文本框光标闪烁,并设置行距

一、前言 本篇主要通过继承RichTextBox 的方式实现去除多行文本框的光标闪烁&#xff0c;以及能够设置行距大小&#xff0c;这是因为C#提供的TextBox 和 RichTextBox 本身无这样的功能 二、代码 封装 RichTextBox 为CustomTextBox using System; using System.Collections.Ge…

解决element-plus没有导出的成员FormInstance

使用element-plus的el-form时&#xff0c;报错“"element-plus"”没有导出的成员“FormInstance”。你是否指的是“FooterInstance”? 解决方法&#xff1a; 引入ElForm类型&#xff0c;在外重新定义FormInstance的类型为ElForm的实例类型 示例&#xff1a; import…

React+TS前台项目实战(十四)-- 响应式头部导航+切换语言相关组件封装

文章目录 前言Header头部相关组件1. 功能分析2. 相关组件代码详细注释3. 使用方式4. Gif图效果展示 总结 前言 在这篇博客中&#xff0c;我们将封装一个头部组件&#xff0c;根据不同设备类型来显示不同的导航菜单&#xff0c;会继续使用 React hooks 和styled-components库来…

Oracle最终还是杀死了MySQL

起因 大约15年前&#xff0c;Oracle收购了Sun公司&#xff0c;从而也拥有了MySQL&#xff0c;互联网上关于Oracle何时会“扼杀MySQL”的讨论此起彼伏。 当时流传着各种理论&#xff1a;从彻底扼杀 MySQL 以减少对 Oracle 专有数据库的竞争&#xff0c;到干掉 MySQL 开源项目&…

qt开发-07_radioButton

QRadioButton 部件提供了一个带有文本标签的单选框&#xff08;单选按钮&#xff09;。 QRadioButton 是一个可以切换选中&#xff08;checked&#xff09;或未选中&#xff08;unchecked&#xff09;状态的选项按钮。 单选框通常呈现给用户一个“多选一”的选择。也就是说&…

Emacs之复制时:禁止转换成tab符号(一百三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

购物网站系统

摘 要 随着互联网的快速发展&#xff0c;不同的平台软件也不断涌出市场&#xff0c;在众多的平台中&#xff0c;购物网站深受人们的欢迎&#xff0c;也成为生活中不可缺少的一部分。经过对国内外购物情况的调查&#xff0c;社区购物在近几年来成为电商发展的新趋势&#xff0c…

递归乘法00

题目链接 递归乘法 题目描述 注意点 保证乘法范围不会溢出 解答思路 使用加法代替乘法&#xff0c;递归计算A * B&#xff0c;每个递归的过程加上一个A&#xff0c;且对B减1&#xff0c;直到B为0为止 代码 class Solution {public int multiply(int A, int B) {if (B 0…

C++ 教程 - 05 构建编译

文章目录 构建工具cmake安装与使用CMakeLists.txt编写使用案例 构建工具 cmake, Cross Platform Make&#xff0c; &#xff08;对C&#xff09;跨平台编译工具&#xff0c;将CMakeLists.txt 文件编译为对应的文件&#xff0c;如linux下的 Makefile&#xff0c;然后使用make命…