学习日志 姓名: 孙勇 日期:2018.07.12
|
|
今日学习任务
| 1、完成嵌入式Linux项目开发工具相关题目; 2、完成四条c语言编程题; |
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) | 嵌入式Linux项目开发工具题目完成,C语言编程作业完成。 |
今日开发中出现的问题汇总
| 1、编写计算器时出现警告类型冲突; 2、编写杨辉三角形时出现excepted ';' before 'a' 的错误,在数组中多加了个a。 3、字符串,指针方面的问题。 |
今日未解决问题
| 无 |
今日开发收获 | 1、if else语句了解更深; 2、对数组的使用更加熟练; 3、对指针进行了复习回顾; |
自我评价
(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)
| C语言基础知识掌握的还不是很好,编程时会出现很多小错误,检查错误时耗费的时间太久。对C语言还需要多加练习。 |
其他
| 对Linux的一些基本命令和vim文本编辑器的使用更加熟练。 |
1、 嵌入式开发与传统开发的区别:是否有无操作系统的参与和移植,是否修改原码。传统开发耦合度较高,移植性差,嵌入式开发耦合度低,移植性高。
2、 ①软件开发人员不需要了解硬件;
②提供了多任务机制;
③提供了丰富的网络协议;
④提供了很多的开源软件和工具;
3、 ⑤解决企业人才欠缺创新不足的问题。
4、 有应用开发工程师和系统开发工程师。应用开发工程师要求为1.精通一门语言2.熟悉系统操作。系统软件开工程师要求为1.精通c语言2.熟悉汇编3.理解操作系统的实现4.熟悉硬件工作原理。
5、 人工智能所需要使用的大数据需要嵌入式的支持。人工智能要求机器具有机器学习和深度学习的功能。机器学习需要大量有用数据的支撑,和对数据进行筛选和分析,这就使用到了大数据。而对于大数据中庞大数据进行处理,这就使用到了云计算的功能。
6、 CPU是中央处理器,GPU是图形处理器,DPU深度学习处理器,即AI芯片。TPU张量处理器。
7、 嵌入式操作系统有Vxworks,wince,ucossii,PalmOS、Symbian等。VxWorks具有实时性高,闭源,支持多任务间的通信等特点。Ucossii具有开源,多任务,实时性等特点,并且基本都是用c语言编写的。
8、 实时性是指在规定时间点内完成相应的指令,操作。VxWorks,ucossii具有实时性
9、 可以进行应用软件和系统软件的开发。
10、 Linux操作系统具有开源,模块化程度高,安全可靠性好,具有优秀的开发工具,可与Unix兼容的特点。
Linux是开源的,Unix是闭源的,UNIX是商业软件,而Linux是自由软件,免费、公开源代码。
11、 虚拟机为用户提供了一个可自由切换系统的平台,用户不需要经过重启去进入另一个操作系统。目前主流虚拟机有VMware和VPC等。
12、 POSIX是Linux和Unix共同遵守的协议,机制,GNU是Linux独有的协议,GPL是GNU通用公共许可证。
13、 有Ubuntu,红帽等。Ubuntu界面更炫酷,但对内存占用更大,红帽界面普通,但对内存要求不高。它们的库也不同。
14、 ①内核不同;
②Linux是开源系统,Windows是闭源系统;
③Linux是免费的,Windows是收费的。
15、 有普通文件,目录文件,设备文件,链接文件,管道文件,共享文件,堆栈文件
16、 Ls,clear,rm,mv,cp,mkdir,touch,tar,cd,
17、 用vim打开/etc/vim/vimrc文件对vimrc添加指令。 还有gedit,vi等编辑器。
18、 tar cvzf压缩 tar xvzf解压缩
19、 可以编译c,c++,java等多种语言,还具有交叉编译的功能。EGCS PGCC
20、 交叉编译指在一个平台上生成另一个平台上的可执行代码,能解决编译环境和运行 环境不同的问题。由于目标环境中各种资源都相对有限,所以很难直接进行本地编译,因此需要交叉编译。
21、 预处理,编译,汇编,链接
预处理:1、头文件展开;2、宏替换;3、条件编译;
编译 :1、语法检查,词法分析;
汇编 :将代码转换为机器码;
链接:符号表的建立。
22、#include<stdio.h>是在系统目录下搜索stdio.h文件,#include”stdio.h”是先在当前目录下搜索,如果没有再到系统目录下搜索。
23、-I制定头文件库第三方搜索路径;-w 屏蔽所有警告信息;-Wall显示所有类型的警告;
-O3在-O2的基础上进一步优化,支持集成函数。
24、库文件是将函数封装在一起后供自己或他人调用的文件。用来保存函数或变量,只能使用函数或者变量,但不能看到具体实现。
25、库文件分为静态库和动态库。库文件存放在lib目录下。
26、静态库后缀为 .a,静态库一次性将所有函数全部封装好,利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,编译后的执行程序不需要外部的函数库支持,在编译过程中就已经被载入到可执行文件,缺点是程序过大,不利于升级,但容易部署;
动态库后缀为.so动态库的代码是在可执行程序运行时才载入内存的,动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便,但不容易部署。
27、静态库:先写好各个.c文件,然后输入gcc -c xxx.c生成.o文件,接着用ar rcs libxxx.a xxx.o生成.a文件。最后输入gcc xxx.c -l xxx-L将库链接到程序使用。
动态库:gcc -shared-fPIC -o xxx.so xxx.c生成动态库文件。gcc xxx.c./xxx.so -o xxx完成使用。
28、①启动被调试程序;
②让被调试的程序在指定位置停住;
③当程序被停住时,可以检查程序状态以及变量值。
29、run为运行,break为设置断点让程序停住,info break为显示断点,continue为跳过断点,finish可让子函数执行完。
30、 源文件越多,gcc命令行会越长;编译规则会加大gcc命令行的复杂度;使用gcc命令行编译程序时,会把没有修改的源程序再编译一次,影响编译效率,使用make会提高编译程序的效率。
31、三要素:目标体,依赖体,命令
目标体:依赖体
(tab) 命令
执行顺序:先从第一行开始执行,如果所需的依赖体不存在则跳转到生成依赖体的那一行。
32、先建立总目录,在下面创建各个子目录,scripts目录,以及总控Makefile文件,接着在scripts目录下创建Makefile文件,在各个子目录下建立src目录以及makefile文件,最后将对应的.c文件存放到各个src目录中。
总控Makefile:将各个子目录下的.o链接生成可执行文件;
子目录makefile:将目录下.c文件编译生成.o文件;
Scripts目录下Makefile:相当于c语言中的头文件,定义了一些变量。