1、 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)
有无操作系统。传统开发由软件和硬件组成,而嵌入式开发在软件和硬件之间加入了操作系统。
2、移植操作系统的好处有哪些?
未移植操作系统之前,传统开发软硬件耦合度高,软件的移植性差,对开发人员的要求比较高,导致企业人才欠缺及产品创新不足。移植操作系统以后,降低软硬件的耦合度,增强软件的移植性,降低对开发人员的要求,增强产品创新。
提供多任务机制;提供网络协议栈;提供开源的软件和工具。
3、嵌入式工程师的岗位划分有哪些?所具备的能力是什么?
应用软件工程师:(Linux c/c++)1、精通C语言 2、熟悉一款操作系统
系统软件工程师:(底层软件)驱动BSP;1、精通C语言 2、熟悉汇编 3、理解操作系统的实现 4、熟悉硬件工作原理
4、人工智能和嵌入式之间有什么关系?人工智能和大数据、云计算的关系?
人工智能中大量的使用了嵌入式的处理器如CPU、GPU、DPU、TPU。
人工智能的工作方式为机器具备人的思维→机器学习(大量的有用数据)→深度学习
其中机器学习中需要的大量的有用数据需要大数据和云计算来实现,大数据筛选数据、分析数据,云计算处理数据。
5、CPU、GPU、DPU、TPU分别是什么?
COU:中央处理器;GPU:图形处理器;DPU:屏幕驱动器;TPU:控制芯片,可以在不占用CPU性能的基础之上对玩家的CPU通过硬件控制的方式进行超频。
6、嵌入式操作系统有哪些?Vxworks的特点?Ucosii的特点?
Linux、uCLinux、uC/OS-II、uC/OS-III、Vxworks、eCos、WinCE、PlamOS、Symbian等
Vxworks的特点是保密性好,实时性传输,适用于军方及其它高精度作业
ucosii适用于单片机,为最小的操作系统,仅有五千行左右的代码。
7、什么是实时性?哪些操作系统具有实时性?
实时性:规定的时间完成规定的动作。
Vxworks及ucosii的操作系统具有实时性。
8、嵌入式的就业前景和以后的发展方向如何?
嵌入式不会过时,在日新月异的互联网时代,跟上潮流很重要
嵌入式人工智能、应用软件开发、系统软件开发
9、Linux操作系统有哪些特点?
一点哲学:一切皆为文件
开放性、多用户、多任务、良好的任务界面、设备独立性、丰富的网络功能、可靠的安全系统、良好的移植性
10、Linux和unix操作系统的区别?
Linux相比于unix免费且开源,更加完善unix的功能
11、虚拟机的作用是什么?主流的虚拟机有哪些?
在电脑上模拟若干台PC,每台PC可以运行单独的操作系统而互不干扰,可以实现一台电脑“同时”运行几个操作系统,还可以将这几个操作系统连成一个网络
主流虚拟机:VirtualBox、VMware Workstation、Virtual PC
12、分别阐述POSIX、GNU、GPL的理解?
POSIX标准:针对操作系统的标准化协议(类UNIX操作系统)
GUN计划:自由软件集体协作计划,目标是创建一套完全自由的操作系统GNU
GPL协议:通用公共许可协议
13、Linux发行版有哪些?各自的特点是什么?
Redhat红帽:基于RPM包和YUM包的管理方式,包分发方式是编译好的二进制文件
CentOS:社区企业操作系统,更加稳定
Fedora:新颖、多功能并且自由和开源的操作系统
OpenSUSE:免费,桌面绚丽,性能强
Gentoo:极高的自定制性,操作复杂
Ubuntu:界面友好,容易上手,对新款硬件具有极强的兼容能力
14、Linux和windows的区别?
文件格式不同,windows的操作内核是NT,而Linux是shell;windows硬盘文件格式是fat32或NTSF,而LIinux需要的文件格式是ext2或ext3且操作系统还多一个SWAP格式的交换分区
15、Linux的文件类型有哪些?
普通文件- 目录文件d 设备文件c/b 链接文件l 管道文件p 共享文件s 堆栈文件f
16、罗列Linux下文件操作的命令有哪些?(常见面试命令)
ls -l -a mkdir -p cd touch echo cat cp mv rm rm -f find tree man reboot clear
17、如何配置vim编辑器?Linux下还有哪些比较常用的文本编辑器?
使用超级用户root用户,cd进入当前用户主工作目录,输入vim .vimrc进行vim配置
Vim Emacs Notepad++ TextMate Sublime Text
18、如何压缩、解压文件?命令是什么?
tar :打包压缩 -x 压缩文件 -z gzip压缩文件
19、gcc编译器的优点有哪些?还知道哪些C的编译器?
命令行比图形界面更容易使编译自动化
Viual C++ GNU C++ Clang
20、什么是交叉编译器?交叉编译器的作用?为什么需要交叉编译?
当前平台编写,不同平台运行
不同的处理器有不同的汇编,不同的汇编有不同的机器码
21、C语言中源文件到可执行文件经历哪几个步骤?每个步骤具体做哪些工作?
1、预处理 2、编译 3、汇编 4、链接
预处理 1、头文件展开 2、宏替换 3、条件编译
编译 1、语法检查、词法分析
汇编 将C语言转化为汇编语言
链接 将汇编语言转化为机器码
22、#include<stdio.h>和#include”stdio.h”的区别?
搜索路径不同,<>在系统文件夹寻找,””先在当前文件夹寻找,后在系统文件夹中寻找
23、分别阐述 -l -w -Wall -O3的作用?
-l 显示文件和目录中的详细资料
-w 关闭警告
-Wall 打开全部警告
-O3 第三级优化
24、什么是库文件?库文件的特点?
库文件:用保存函数或者变量,只能使用函数或者变量,但是看不到具体实现
特点:1、数据结构化,数据之间具有联系,面向整个系统
2、数据的共享性高,冗余度低,易扩充
3、数据独立性高 4、数据由DBMS统一管理和控制
25、Linux下库文件的分类有哪些?库文件的存放路径是什么?
分类:静态库,动态库
存放路径:gcc xxx.c -lmyku
26、静态库和动态库的区别?
静态库 .a(1、可执行文件过大 2、更新不利 3、易代码部署 4、执行速度块)
动态库.so(1、执行速度慢 2、易于升级 3、可执行文件小 4、不易进行代码部)
2 7、如何制作和使用静态库和动态库?
静态库:停止在编译阶段 gcc -c
用 ar rcs libadd.a add.c
gcc main.c -ladd 指定库
Gcc main.c -ladd -L 指定库的位置
动态库:gcc -shared -FPIC -o libbcal . so add.c sub.c(创建)
gcc main.c /libcal.so -o main
28、GDB的特点有哪些?
使程序停在你想停的位置,可以查看变量,寄存器,内存及堆栈,调试多种语言。
29、分别阐述 run break info break continue finish命令的作用?
run:使程序运行
break:跳出停顿 找一个断点使程序代码停顿
Info break:显示断点信息
Continue:使程序跳过断点继续运行
Finish:结束程序
30、make工程管理的作用?
源文件过多时,gcc不再适用,一个工程有许多的源文件,用make编译,加快编译速率。
31、makefile的语法是什么?(定义、执行顺序)
make所看到的第一项规则会被当做默认规则使用
一个规则可分为三个部分 目标:依赖1 依赖2 。 。
命令(命令前必须使用一个制表符(TAB))
32、企业级工程目录是如何创建?分别描述三个不同makefile的作用?
建立一个文件夹,在文件夹中以功能为名再建立相应的文件夹,相应的文件夹中给一个src文件夹用以防止 .c .o文件,相应文件夹中放置相应的makefile
1、保存了编译器和连接器的参数选项
2、表述了所有源文件之间的关系
3、创建make程序
代码如下所示
cal:
int main() //主函数
{
int a; //定义一个变量a
int b; //定义一个变量b
char c; //定义一个运算符c
scanf("%d",&a); //输入变量a
scanf("%c",&c); //输入运算符c
scanf("%d",&b); //输入变量b
switch(c) //switch选择函数
{
case'+':printf("sum = %d\n",a + b );break; //+号选项时,输出a+b,后跳出
case'-':printf("sub = %d\n",a - b );break; //-号选项时,输出a-b,后跳出
case'*':printf("mul = %d\n",a * b );break; //*号选项时,输出a*b,后跳出
case'/':printf("div = %d\n",a / b );break; ///号选项时,输出a/b,后跳出
}
}
recursion:
int main() //定义一个主函数
{
int fac(int n); //定义一个函数
int in; //定义一个输入变量in
int out; //定义一个输出变量out
printf("请输入数字:"); //输入
scanf("%d",& in); //输入
out=fac(in); //函数计算输出
printf("%d!=%d\n",in,out); //输出out
return 0; //返回0
}
{
int f; //定义一个辅助变量
if(in<0) //如果输入小于0
printf("n<0,data error!"); //输出 数据错误
else if(in == 0 || in==1) //若n=0或者n=1
f=1; // 得到结果 f=1
else //如果输入大于等于2
f=fac(in-1)*in; //计算阶乘
return(f); //返回数据
}
string;
#include<string.h> //头文件
{
char str[64]={0}; //定义一个str的数组
char str1[16]={0}; //定义一个str1的数组
int i,j,x; //定义i,j,x三个变量
printf("请输入\n"); //输出输入提示
gets(str); //输入原字符串
puts(str); //输出字符串
printf("\n"); //跳行
i=strlen(str); //放置变量
j=strlen(str1); //放置变量
printf("the string lenth is %d\n",i); //输出变量i的长度
printf("the string lenth is %d\n",j); //输出变量j的长度
x=substring(str,str1); //调用函数
printf("then anwser is %d\n",x); //输出答案
return 0; //返回0
}
{
int x=0; //定义变量x
char *p; //p指针
do //do函数
{
p=strstr(str,str1); //放置变量
if(p!=NULL) //if语句
{
str=p+1; //变量指针+1
x=x+1; //变量x+1
}
}
while(p!=NULL); //while语句
return x; //返回x
}
tringle:
#include<stdio.h> //头文件
int i; //整形一个变量i
int j; //整形一个变量j
int main() //主函数
{
int a[10][10]; //定义一个10x10的二维数组
for( i = 0;i < 10; i ++) //for循环i10次,构成二维数组
{
for( j = 0 ;j <= i; j ++) //for循环j10次,构成二维数组
{
if( j == 0 || i == j) //令j=0或者i=j
{
a[i][j] = 1; //第一列或者i=j列均为1
}
else //若存在别的情况
{
a[i][j] = a[i-1][j-1] + a[i-1][j]; //从第二行起,中间的没一个数是上一行里相邻两个数的和
}
}
}
for( i = 0; i < 10; i ++ ) //for循环i10次
{
for( j = 0; j <= i ; j ++ ) //for循环j10次
{
printf("%5d", a[i][j]); //输出数组结果
}
printf("\n"); //跳行
}
}