苏嵌项目实战
学习日志
姓名: 闵永界 日期:07.12
1、 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)
是否具有操作系统
2、 移植操作系统的好处有哪些?
1 可以多任务操作,2 提供网络协议栈,3,提供开源的软件和工具
3、 嵌入式工程师的岗位划分有哪些?所具备的能力是什么?
可分为嵌入式软件开发工程师,嵌入式系统开发工程师,嵌入式系统测试工程师等
1. 具备一定的硬件基础,熟悉各种单片机以及外围电路的应用和设计;
2.熟练使用嵌入式C语言编程和ARM单片机;
3.熟悉数模电路,能运用Protel设计电路图,能根据客户要求独立规划硬件电路及4软件编程。
4.精通MCU的外设,
2. 5.精通单片机C语言,能独立进行软件开发。
6.参于需求分析、技术评估,撰写设计方案、开发文档
7.通晓Modbus协议
4、 人工智能和嵌入式之间有什么关系?人工智能和大数据、云计算的关系?
人工智能的大数据来源于嵌入式设备,
大数据为人工智能提供有用数据,提供其学习。
云计算为人工智能提供强大的运算能力,处理大量的数据。提高其处理效率
5、 CPU、GPU、DPU、TPU 分别是什么?
CPU 是中央处理器 GPU 图像处理器
DPU 深度学习处理器 TPU 张量处理器
6、 嵌入式操作系统有哪些?vxwork 的特点?ucossii 的特点?
Linux、UCLinux、Windows CE、psos、qnx、Uc/OS-II、Vxworks等
Vxworks:适用于高精尖端技术及实时性要求极高的领域
Uc/OS-II:开源、代码结构清晰、注视详尽、组织有条理、可移植性好、可裁剪、可固化、抢占式内核、最多可以管理60个任务的实时操作系统
7、 什么是实时性?哪些操作系统具有实时性?
实时性是 在规定的时间内完成规定的内容,
8、 嵌入式的就业前景和以后的发展方向如何?
嵌入式的就业前景
9、 Linux 操作系统有哪些特点?
1、 开源、多用户使用、多任务执行且相互独立
2、 良好的用户界面
3、 设备独立性
4、 提供了丰富的网络功能
5、 安全系统可靠、可移植性良好
10、Linux 和 unix 操作系统的区别?
Linux 系统的源代码是开源的
unix系统的源代码是封锁的,不开源
11、虚拟机的作用是什么?主流的虚拟机有哪些?
虚拟一台pc机,VMware,VPC,VirtualBox,Xen,
12、分别阐述 POSIX、GNU、GPL 的理解?
POSIX是Linux想要人们也使用它的系统,于是和unix系统制定的标准
GNU是Linux想要和unix作区分
GPL 是和unix区分的协议
13、Linux 发行版有哪些?各自的特点是什么?
14、Linux 和windows 的区别?
主要是文件格式的不同,内核不同,linux的内核是shell,而windows 是NT。
windows有很多软件支持,而Linux没这么多软件支持
15、Linux 文件类型有哪些?
有ext2 ,ext3,swap,ext4,Fat,等
16、罗列 Linux 下文件操作的命令有哪些?(常见面试命令)
ls –al
mkdir newfolder
cp –r source target
rm –rf File
su – username
pwd(查看所在路径)
touch file
gedit file
vim file
gcc file
./a.out
17、如何配置 vim 编辑器?Linux 下还有哪些比较常用的文本编辑器?
进入vim.vimrc中利用set命令语句增添自己需要的功能。
Emacs、Notepad++、TextMate、Subline Text、
18、如何压缩、解压文件?命令是什么?
tar cvzf 压缩
Tar xvzf解压
19、gcc 编译器的优点有哪些?还知道哪些 C 的编译器?
1、 能够编译较多语言
2、 是一种交叉平台编译器
LLVM+Clang Watcom Digital Mars MSVC系列 TCC
20、什么是交叉编译器?交叉编译器的作用?为什么需要交叉编译?
交叉编译器GNU计划的工具,可以编译多种语言。
作用是在一款CPU上编译的代码可以在另一款CPU上运行。
需要交叉编译是因为不同CPU有不同的汇编。
21、C 语言中源文件到可执行文件经历哪几个步骤?每个步骤具体做哪些工作?
经历预处理,编译,汇编,链接四个步骤。
预处理:头文件展开,宏替换,条件编译
编译:语法检查,语法分析
汇编:汇编程序
链接:符号表建立
22、#include <stdio.h> 和 #include “stdio.h”的区别?
#include <stdio.h>是在系统头文件目录中查找。适合系统文件。
#include “stdio.h”是先在当前文件中查找,找不到再到系统头文件目录中查找。适合自己创建的文件
23、分别阐述-I -w -Wall -O3 的作用?
-l是指定链接第三方的库,库的调用
-w是关闭警告报错
-Wall是开启警告报错
-O3是优化
24、什么是库文件?库文件的特点?
库文件是用来保存函数和变量的,只能使用函数或变量,但看不到具体的实现。分为静态库和动态库。
静态库的特点是占用内存大,程序升级比较繁琐,但是执行速度快,更利于代码的布属。
动态库反之。
25、Linux 下库文件的分类有哪些?库文件的存放路径是什么?
静态库和动态库,
26、静态库和动态库的区别?
静态库是在程序执行之前就加入代码中,动态库是在程序执行时加入代码中。
静态库的特点是占用内存大,程序升级比较繁琐,但是执行速度快,更利于代码的布属。
动态库反之。
27、如何制作和使用静态库和动态库?
先gcc -c 静态库要所需的.c文件先生成.o文件
再ar rcs 生成库,
Gcc main.c -l 链接到第三方指定的库
-L生成库文件
28、GDB 的特点有哪些?
1启动被调试的程序。2让被调程序停在指定位置
29、分别阐述 run break info break continue finish 命令的作用?
30、make 工程管理的作用?
编写简单的makefile文件,企业级makefile的编写
31、makefile 的语法是什么?(定义、执行顺序)
makefile有三要素 :目标体 依赖体 命令
可分为总控makefile,子目录makefile,scripts目录下的makefile
先执行scripts目录下的makefile,再执行总控makefile,然后执行子目录makefile,
32、企业级工程目录是如何创建?分别描述三个不同 makefile 的作用?
先要有多个.c文件,脚本文件,图片文档视频文件等等
总控makefile,将子目录下的.o链接生成可执行文件
执行子目录makefile,将目录下的.c文件编译成.o文件
scripts目录下的makefile 相当c语言中的头文件定义一些变量
程序1
#include<stdio.h>
int main()
{
int i,j,a[17][17];//定义二维数组
for (i = 0;i <= 16;i ++ )
for(j = 0;j <= 16;j ++ )
{
a[i][0] = 1;/第一列全为1
a[i][i] = 1;
}
for(i = 2;i <= 16;i ++ )
for(j = 1;j <= i- 1;j ++ )
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//阳辉三角的计算公式
for(i = 0;i <= 16;i ++)
{
for(j = 0;j <= i;j ++)//当j《=i 时输出的是需要的数
printf("%5d",a[i][j]);
printf("\n");
}
getchar();
return 0;
}
程序2
#include<stdio.h>
main()
{
float a;
float b;/存放两个运算分量
char c;/存放运算符
printf(" 输入a,c,b,例如(1 + 2):");
scanf("%f%c%f",&a,&c,&b);
switch(c)/定义运算符
{
case'+':printf("%f + %f = %f",a,b,a + b);break;
case'-':printf("%f - %f = %f",a,b,a - b);break;
case'*':printf("%f * %f = %f",a,b,a * b);break;
case'/':if(b == 0)
printf("除数为零无意义");
else
printf("%f / %f = %f",a,b,a / b);
break;
default:printf("运算符无效");
}
}
程序3
#include<stdio.h>
int jc(int n)
{
if(n > 1)
return n*jc(n - 1);
else
return n;
}
main()
{
int n;
printf("input a number:");
scanf("%d",&n);
printf("%d\n",jc(n));
}
程序四
#include<stdio.h>
int main()
{
char a[50];
char b[10];
scanf("%s",&a);
scanf("%s",&b);
int i;
int j;
int k;
int num = 0;
for(i = 0;i < 50;i++)
{
if(*(a + 1) == * b)
{
for(j = 0,k = i;*(b + j) !='\0';k++,j++)
{
if(*(a + k) !=*(b +j))
{
break;
}
if(*(b + j + 1) =='\0')
{
num++;
}
}
}
}
printf("num = %d",num);
return 0;
}