(1)硬件平台:CPU (51,arr,ARM,mips,powerpc,x86)
软件平台:windows,linux,andriod,ios,vxworks,wince,ucosii
1.软件-------》硬件
2.软件-------》操作系统------》硬件
第二种方法的优势:硬件改变,只要操作系统不变,应用层软件不需要改变。
嵌入式核心:操作系统(操作系统的核心:内核)
有操作系统的优势:(1)提高软件的移植性
(2)使软件开发不需要再熟悉硬件工作原理
(3)提供多任务机制(进程&线程)
(4)提供丰富的网络协议栈
(5)提供很多开源的工具,库,以及软件
(2)硬实时性:Vxworks
软实时性:Wince, RTLinux
无实时性:Embedded,Linux
(3)gcc编译器(全称GNU CC)是GNU项目中符合ANSI C标准的编译系统
GPL协议
POSIX标准(同时在Linux和unix上运行)
GLU计划(GNU is not unix)
(4)c文件到可执行文件的步骤
1.预处理:进行一些代码文本的替换
(1)将所有的#define删除,并展开所有的宏定义
(2)处理所有的条件预编译指令,如:#if ?#ifdef #elif #else #endif
(3)处理#include预编译指令,将被包含的文件插进到该指令的位置,这个过程是递归的
(4)删除所有的注释//与/* */
(5)添加行号与文件名标识,以便产生调试用的行号信息以及编译错误或警告时能够显示行号
(6)保留所有的#pragma编译器指令,因为编译器需要使用它们
范例:gcc -E hello.c>hello.i
“>”是重定向
“-o”是重命名
2.编译:把预处理完的文件进行一系列词法分析(lex)、语法分析(yacc)、语义分析及优化后生成汇编代码,这个过程是程序构建的核心部分。
范例:gcc -c hello.c
3.?汇编:汇编代码->机器指令。
范例:gcc -s hello.c
4.链接:这里讲的链接,严格说应该叫静态链接。多个目标文件、库->最终的可执行文件(拼合的过程)。
(5)加声明提高效率
范例:gcc -o1/-o2/-o3 optimize.c -o optimize(一级/二级/三级优化)
<>只在系统的头文件目录寻找,找不到就报错
“”现在当前目录寻找,再到系统头文件目录找,找不到报错
(6)库文件(1.静态库 2.动态库):无法直接访问里面的内容,但可以使用
静态库优点:执行效率高,布局方便
动态库优点:易于软件升级,编译效率高,库体积小
(两者的优缺点相对)
范例:创静态库:#gcc -c add.c
#ar rcs libadd.a add.o(把add.o封装到库)
#gcc main.c -ladd -L/root/0706/
-l用于链接库 -L指定链接到头文件的搜索路径
创动态库:#gcc -shared -fPIC add.c -o libadd.so
#gcc main.c /root/0706/libadd.so -o add
软件平台:windows,linux,andriod,ios,vxworks,wince,ucosii
1.软件-------》硬件
2.软件-------》操作系统------》硬件
第二种方法的优势:硬件改变,只要操作系统不变,应用层软件不需要改变。
嵌入式核心:操作系统(操作系统的核心:内核)
有操作系统的优势:(1)提高软件的移植性
(2)使软件开发不需要再熟悉硬件工作原理
(3)提供多任务机制(进程&线程)
(4)提供丰富的网络协议栈
(5)提供很多开源的工具,库,以及软件
(2)硬实时性:Vxworks
软实时性:Wince, RTLinux
无实时性:Embedded,Linux
(3)gcc编译器(全称GNU CC)是GNU项目中符合ANSI C标准的编译系统
GPL协议
POSIX标准(同时在Linux和unix上运行)
GLU计划(GNU is not unix)
(4)c文件到可执行文件的步骤
1.预处理:进行一些代码文本的替换
(1)将所有的#define删除,并展开所有的宏定义
(2)处理所有的条件预编译指令,如:#if ?#ifdef #elif #else #endif
(3)处理#include预编译指令,将被包含的文件插进到该指令的位置,这个过程是递归的
(4)删除所有的注释//与/* */
(5)添加行号与文件名标识,以便产生调试用的行号信息以及编译错误或警告时能够显示行号
(6)保留所有的#pragma编译器指令,因为编译器需要使用它们
范例:gcc -E hello.c>hello.i
“>”是重定向
“-o”是重命名
2.编译:把预处理完的文件进行一系列词法分析(lex)、语法分析(yacc)、语义分析及优化后生成汇编代码,这个过程是程序构建的核心部分。
范例:gcc -c hello.c
3.?汇编:汇编代码->机器指令。
范例:gcc -s hello.c
4.链接:这里讲的链接,严格说应该叫静态链接。多个目标文件、库->最终的可执行文件(拼合的过程)。
(5)加声明提高效率
范例:gcc -o1/-o2/-o3 optimize.c -o optimize(一级/二级/三级优化)
<>只在系统的头文件目录寻找,找不到就报错
“”现在当前目录寻找,再到系统头文件目录找,找不到报错
(6)库文件(1.静态库 2.动态库):无法直接访问里面的内容,但可以使用
静态库优点:执行效率高,布局方便
动态库优点:易于软件升级,编译效率高,库体积小
(两者的优缺点相对)
范例:创静态库:#gcc -c add.c
#ar rcs libadd.a add.o(把add.o封装到库)
#gcc main.c -ladd -L/root/0706/
-l用于链接库 -L指定链接到头文件的搜索路径
创动态库:#gcc -shared -fPIC add.c -o libadd.so
#gcc main.c /root/0706/libadd.so -o add