学习日志 姓名:王俊 日期:7月12
|
|
今日学习任务
| 1. 早上进行回答嵌入式的问题; 2. 下午进行C语言的测试编程; |
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) | 1. 早上准时完成问题的回答,结合书本和自己的知识解决问题; 2. 下午完成4项编程题目,将4个编程都能正确运行; |
今日开发中出现的问题汇总
| 1. 在编写程序时出现错误:对基础知识掌握的不牢,问题有eg: if(c == “+”)中的c是单个字符并不是字符串所以应该改为’+’才对; 2. 在编写程序时出现错误:问题:在定义float a;后面使用了%a 是错误的,类型不匹配,应该改为%f才正确; |
今日未解决问题
| 还需要掌握清楚一些基础的知识; |
今日开发收获 | 对基本的C语言的编程掌握能力更好了,对基础的问题的模糊感也有了正确的认识了,收获很多很有用; |
自我评价
(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)
| 对基础的知识掌握感还不是很好需要自己多加的练习掌握更多自己还不清楚的知识点,这个对于我来说还是很重要的; |
其他
| 无 |
对嵌入式问题的回答:
1. 是否有无操作系统
2. 软硬件耦合度提高,能够适应各种硬件平台;提供多任务机制;提供网络协议;提供开源和软件和工具;软件开发人员要求不高;
3. 嵌入式软件开发工程师:ARM+Linux/Android开发;
嵌入式硬件开发工程师:应用程序开发,操作系统移植,底层驱动开发;
应用软件工程师:精通一门语言,熟悉一款操作系统;
系统级工程师:精通C语言,熟悉汇编,理解操作系统的实现,熟悉硬件工作原理;
4. 人工智能不会没有嵌入式,人工智能的领域庞大含该学科众多,应用范围也很多,嵌入式开启了人工人工智能的进程。人工智能的目的是机器具备人的思维,那机器就需要学习,那学习就需要从大数据(筛选数据和分析数据)和云计算(处理)哪里得到数据来学习。
5. CPU:Central Processing Unit 中央处理器
GPU:Graphics processing Unit 图形处理器
DPU:Distributed Processing Unit 分散处理单元
TPU:Tensor Processing Unit 谷歌的张量处理器
6. 嵌入式操作系统有Linux,uCLinux,windowsEmbedded CE,Uc/os-Ⅱ,Vxworks,eCos等;vxwork的特点是一个操作系统,又可以运行的最小基本程序,有BSP可以减小驱动程序的编写过程,有强大的调试能力,具有DEBUG功能,具有丰富的函数库,自带TCP/IP协议栈;ucossii的特点是有开源性,可移植性,可固化,可确定性,多任务,中断管理,系统服务;
7. 实时性是指时钟信号能够准确的定时,各处的时钟能够达到一致,在不同的场合需要达到ns级,us级;ucossii,rtthread,MsgOS
8. 嵌入式开发是IT开发行业中火热的职业,Android开发和IOS开发包括智能设备,其根基还是嵌入式开发。发展方向是可以选择人工智能,大数据,云计算处理;
9. Linux操作系统的特点是一点哲学,一切均为文件,对外免费开放,容易获得,稳定可靠;
10. Linux是开发源代码的自由软件,拥有自己出色的规则,使网络的可配置能力很强为系统管理提供了极大的灵活性,对外是免费的 unix是对源代码实行知识产权保护的传统商业软件,拥有一套完善的网络管理机制和规则,对外是需要收取昂贵的费用;
11. 虚拟机作用可以在一台电脑上模拟出来若干的PC,每台PC可以运行单独的操作系统而互不干扰,可以实现一台电脑同时运行几个操作系统,可以将及格操作系统连成一个网络;主流的有VMware VPC VietualBox;
12. POSIX:表示可移植操作系统接口,获得源代码级别的软件可移植性,为一个POSIX兼容的操作系统编写的程序;
GNU:是一套完全自由的操作系统,拥有强大的文字编译器GCC,有大部分UNIX系统的程序库和工具;
GPL:适用于大多数自由软件基金会的软件,是GNU通用公共授权非正式的中文翻译,效用对象是GNU通用公共授权英文原文的版本;
13. 发行版有elementaryos 桌面Linux,veket linux 适合老旧的电脑系统,pearlinux 一款桌面操作系统,linux 免费的类的操作系统,linux mint 自由开放源代码软件;
14. 区别:文件格式是不同的,windows操作系统内核是NT而Linux是shell;另外windows硬件文件格式是fat32或NTSF而Linux需要的文件格式是ext2或EXT3,该操作系统还多一个SWAP格式的交换分区;
15. 普通文件 - ;目录文件 d ;设备文件 c/b;链接文件 l ;管道文件 p ;共享文件 s ;堆栈文件 f ;
16. Su – adduser passwd ls ls -l touch rm rm -f cat chmod gedit gcc vimmkdir cp cd tar make gdb reboot cd / cd..
17. 编写vim vimrc 编写自己想要的设置;VIM Emacs Notepad++TextMate Sublime Text;
18. 使用tar 压缩时用tar cvzf xxx.tar.gz 解压文件时用tar xvzf;xxx.tar.gz;
19. 支持几乎所有的主流CPU处理器平台,可以完成C,C++,Objective C等源文件想运行在特定CPU硬件上的目标代码的转换,GCC不仅功能强大,结构也异常灵活,便携性与跨平台支持特性;visual c++6.0 visualstudio win-tc code::BlOCKS DEV C++ C-Free Turb C;
20. 交叉编译器:在一种计算机CPU环境下运行的编译程序能另一种计算机CPU环境下运行的代码;不同的CPU拥有不同的汇编,则会不用的机器码;
21. 四步骤:预处理编译汇编链接;预处理:1.头文件的展开,2.宏替换,3.条件编译;
编译:1.语法检查, 2词法分析;
汇编:生成能够识别的机器码;
链接:符号表的建立;
22.搜索路径不同,《:告诉系统目录下的路径 “”:先在当前目录查找,再在系统里面查找;
23.-l:指定链接的库 -I告诉第三方搜索路径 -w 关闭警告 -wall 开启警告 -O3 3级优化;
24.库文件时动态链接库文件,用来保存函数或变量;特点:只能使用函数或变量,但时看不到具体实现;
25.分类:静态库.a 动态库.so
26.区别:静态库:在执行程序之前就已经加入到执行代码中,成为执行程序的一部分来执行;动态库:在执行程序启动时运行到哪里再加载到代码中运行;
27.静态库: gcc -c xxx.c ar rcslibxxx.a add.o
动态库: gcc -shared -Fpic -o xxx.c ar rcs libxxx.a add.so
28.GDB:是一个调试工具,是受通用公共许可证即GPL保护的自由软件;可以让程序在你希望的地方停下,此时你可以查看变量,寄存器,内存即堆栈。更进一步你可以修改变量及内存值;
29.Run运行程序 break:在某处停下 info break:检查断点信息 continue:继续运行,跳过当前断点 finish:让子函数运行完成;
30.make的作用:是个自动编译管理器;能够根据文件间戳自动的发现更新过的文件而减少编译的工作量,同时它通过读入Makefile文件的内容来执行大量的编译工作;
31:makefile 三要素语法:目标法依赖体命令执行顺序从上到下还有伪目标的存在;
32.企业级工程目录时创建总控makefile 子目录makefile scripts目录下的makefile
总控:将各个子目录的.o连接成可执行文件;
子目录:将目录下.c文件编译成.o文件;
Scripts目录:相当于C语言中的头文件,定义了一些变量;
#include<stdio.h> //头文件
int main() //定义主函数
{
float a; //定义浮点类型a
float b; //定义浮点类型b
float d; //定义浮点类型d
char c; //定义运算字符
scanf("%f%c%f",&a,&c,&b); //输入数字和运算符号
if(c == '+' ) //判断运算符号是否等于+号
{
d = a + b; //加法运算
printf("a + b = %f\n",d); //输出结果d
}
if(c == '-') //判断运算符号是否等于-号
{
d = a - b; //减法运算
printf("a - b = %f\n",d); //输出结果d
}
if(c == '*') //判断运算符号是否等于*号
{
d = a * b; //乘法运算
printf("a * b = %f\n",d); // 输出结果d
}
if(c == '/') //判断运算符号是否等于/号
{
d = a / b; //除法运算
printf("a / b = %f\n",d); //输出结果d
}
}
#include<stdio.h> //头文件
int main() //定义主函数
{
char str[100]; //定义str的数组
char substr[100]; //定义substr的数组
printf("please input a string:"); //显示:请输入一个字符串
gets(str); //输入字符串
printf("please input a substring:"); //请输入一个字符串
gets(substr); //输入字符串
printf("%d\n",match(str,substr)); //输出字符串显示的次数
}
int match(char *str,char *substr) //定义字符串函数
{
int i; //定义变量i
int j; //定义变量j
int k; //定义变量l
int num = 0; //定义定义num=0
for(i = 0;str[i];i++) //循环匹配主字符串
for(j = i,k = 0;substr[k] == str[j];k++,j++) //循环匹配子字符串
{
if(substr[k + 1] == '\0') //如果匹配成功
{
num ++; //位置加1
break; //中断
}
}
return num; //返回num
}
#include<stdio.h> //头文件
int main() // 定义主函数
{
float fac(int n); //定义一个函数
int n; //定义输入变量n
float y; //定义输出变量y
scanf("%d",&n); //输入变量n
y=fac(n); //函数计算输出
printf("%d! = %10.0f\n",n,y); //结果输出
}
float fac(int n) //定义递归函数
{
float f; //定义一个变量
if(n < 0) //如果n<0时
{
printf("n < 0,dataerror!"); //输出数据错误
}
else //否则
if(n == 0||n == 1) //如果n=0或则n=1
f=1;//f=1
else //否则
f=fac(n-1)*n; //计算函数
return(f); //返回函数
}
#include<stdio.h> //头文件
int main() //定义主函数
{
int i; // 定义整形变量i
int j; //定义整形变量j
int n=0; //定义变量n=0
int a[100][100] = {0}; //定义一个100*100的二维数组
while(n < 1||n > 99) //当n<1或则n>99时
{
printf("请输入杨辉三角的行数:");//显示:请输入杨辉三角的行数
scanf("%d",&n);//输入行数
}
for(i = 0;i < n;i++) //循环杨辉三角的每一行
a[i][0] = 1; //每一行的第一个都是1
for(i = 1;i < n;i++) //进行n次循环,构成二维数组
for(j = 1;j <= i;j++) //进行i次循环,构成二维数组
a[i][j]=a[i - 1][j - 1] + a[i - 1][j]; //从第尔行第二列开始,值是上一行的加上上一行的相邻两个数的和
for(i = 0;i < n;i++) //根据输入的n,i进行n次循环
{
for(j = 0;j <=i;j++) //根据i,j进行i次循环
printf("%5d",a[i][j]); //输出数组的结果
printf("\n"); //跳行
}
}