1.嵌入式系统由嵌入式处理器、外围设备、嵌入式操作系统和应用软件组成。
①嵌入式处理器(MPU)是嵌入式系统的核心部件。
②外围设备由存储器(静态易失性存储器RAM/SRAM,动态存储器DRAM和非易失性存储器Flash)、接口和人机交互组成。
2.嵌入式系统软件分为两大类:分时系统和实时系统。
3.①实时系统:一个能够在置顶或时间内完成系统功能以及对外部或内部事件在同步或异步时间内做出相应的系统。实时操作系统是指具有实时性,能支持实时控制系统工作的操作系统。根据确定性分为“硬实时”和“软实时”,区别在于选择调度算法。
硬实时系统必须是对事件做出及时的反应,绝对不能错过事件处理的时限。(航天)
软实时系统是指如果在系统负荷较重的时候,允许发生错过时限的情况而且不会造成太大的危害。(消费电子)
4.嵌入式系统的应用:国防武器设备;通信信息设备;过程控制;信息家电;生物微电子技术。
5.嵌入式处理器(选择:下面哪些是嵌入式处理器) ARM MIPS PowerPC
6.嵌入式操作系统:VxWorks、μC/OS系统、QNX、DeltaOS、psos、Hopens、嵌入式多线程编程plamOS、WindowsCE和嵌入式linux。(linux分为桌面linux和嵌入式linux。嵌入式Linux分为实时嵌入式Linux和一般嵌入式linux)
7.典型嵌入式处理器ARM处理的三大特点:①小体积,低功耗,低成本而性能高。②16/32位双指令集。③众多合作厂商。
8.嵌入式开发软件特点:①需要交叉开发环境(交叉编译指宿主机和目标机是不同的系统,开发用的宿主机是PC机,运行用的目标机是嵌入式系统;交叉软件开发工具:交叉编译器、交叉调试器,实验箱内核为ARM9,结构芯片为三星S3c2410)。②引入任务设计方法。③需要固化程序。④软件开发难度大。
9.嵌入式系统的调试:①源程序模拟器方式(通过软件手段模拟,可信度最低)。②监控器方式。③仿真器方式(可信程度最高)。
10. 流水线技术:流水线越多,并行度越高。
ARM7 三级流水线:取指,译码,执行
ARM9五级流水线:取指,译码,执行,访存,回写
ARM10 六级流水线:取指 发射 译码 执行 访存 回写
11. 超流水线技术:流水线超过5~6步以上。超标量技术:指在CPU中有一条以上的流水线。
12.对于一台内存为256M的32bit x86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是0x000000000~0x0FFFFFFF(256M)。
13.存储器结构:哈佛结构(程序存储器和数据存储器是相互独立的,使用各自不同的总线进行访问.)和冯·诺依曼结构(冯氏结构)(程序存储器和数据存储器合二为一,使用同样的总线进行访问.)
14..相关和转移的概念
相关:在重叠方式的指令执行过程中,由于发生了某种关联,使正在被解释的指令无法再继续下去的现象,称相关。解决方法:在两条指令中插入不相关的指令
转移:条件转移。解决方法:分支预测技术
1.任务管理的概念:具有独立功能的无限循环的程序段的一次运行活动。
2.实时操作系统内核的任务管理拥有运行态、就绪态、挂起态和休眠态的四中运行任务状态。
3.嵌入式linux操作系统进程拥有运行态、阻塞态(可中断和不可中断)、挂起态和僵尸态。
任何进程都需要经历:①就绪态R:一旦获得CPU就能执行的任务状态。②阻塞态B:由于资源条件未满足,没有资格竞争CPU的任务状态。③运行态E:当前占有CPU的任务状态。
4.gcc常用选项:(.gcc是什么?——GNU Compiler Collection.即GUN编译集合器)
(1)-o XX 将经过gcc处理过的结果存为XX文件,这个结果文件可能是预处理文件、汇编文件、目标文件或者最终的可执行文件。(假设被处理的源文件为source.suffix,如果这个选项被省略了,那么生成的可执行文件默认名称为a.out(固定的);目标文件默认名为so
urce.o(变量);汇编文件默认名为source.s;生成的预处理文件则发送到标准输出设备)。
(2)-c 仅对源文件进行编译,不链接生成可执行文件。在对源文件进行查错时,或只需产生目标文件时可以使用该选项。(只编译,不链接成可执行文件)
-g[gdb] 在可执行文件中加入调试信息,方便进行程序的调试。如果使用中括号中的选项,表示加入gdb扩展的调试信息,方便使用gdb来进行调试
(3)-O[0、1、2、3] 对生成的代码使用优化,中括号中的部分为优化级别,缺省的情况为2级优化,0为不进行优化。注意,采用更高级的优化并不一定得到效率更高的代码。
5.GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接
6.gcc文件扩展名规范:
(1).c 是c语言源程序 预处理、编译、汇编、链接
(2).C、.cc、.cp、.cpp、.c++ 是C++语言源程序;预处理、编译、汇编、链接
(3).i 预处理后的c语言源程序;编译、汇编、链接
(4).ii 预处理后的C++语言源程序;编译、汇编、链接
(5).s 预处理后的汇编程序;汇编、链接
(6).S 未预处理的汇编程序;预处理、汇编、链接
(7).o 目标文件;链接
7.Makefile文件(编程题) make管理项目是一条命令,make管理项目含gcc命令
输入make命令就是调用makefile。而命令行需要以tab键开头。makefile包含三部分,第一是目标文件、编译文件和依赖文件(冒号后面的)。以#开头的都是注释。
CC= armv4l-unknown-linux-gccEXEC = hello
OBJS = hello.o
CFLAGS +=
LDFLAGS+= –static
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) (如果有多线程则加入-phread没有就删除) -o $@ $(OBJS)
clean:
rm -f $(EXEC) *.elf *.gdb *.o
说明:
CC指明编译器 EXEC表示编译后生成的可执行文件名称
OBJS目标文件列表 CFLAGS编译参数
LDFLAGS连接参数 all:编译主入口 clean:清除编译结果
宿主机上编译(加上调试选项-g) armv4l-unknown-linux-gcc -g test.c (生成可执行文件a.out)
通过minicom连接到目标机,并挂载共享文件 mount 192.168.0.121:/arm2410s /mnt
1.线程的基本概念:线程是包含在进程中的一种实体.它有自己的运行线索,可以完成一定的任务,可与其他线程共享进程中的共享变量及部分环境、相互之间协同来完成进程所要完成的任务。
2.线程的基本操作程序(2个大题)
3.多线程的头文件是 pthread.h
⑴创建线程函数
int pthread_create(pthread_t *tid,const pthread_attr_t *attr,void *(*func)(void *),void *arg);(便于理解:线程创建函数第一个参数为指向线程标识符的指针, 第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。)
⑵等待线程的结束函数
int pthread_join(pthread_t tid,void **status);
第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的进程将一直等到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。
⑶取自己线程ID函数
pthread_t pthread_self(void);
线程都有一个ID以在给定的进程内标识自己。线程ID由pthread_creat返回,可以取得自己的线程ID。
⑷终止线程函数
void pthread_exit(void *status);
4.多线程编程的例子
#include<stdio.h>
#include<pthread.h>
void thread(void)
{
int i;
for(i=0;i<3;i++)
printf("This is a pthread.\n");
}
int main(void)
{
pthread_t id;
int i,ret;
ret=pthread_create(&id,NULL,(void*)thread,NULL);
if(ret!=0)
{
printf("Create pthread error!\n");
exit();
}
for(i=0;i<3;i++)
printf("This is the main process.\n");
pthread_join(id,NULL);
return(0);
}
运行程序,得到如下结果:
This is the main process。
This is a pthread。
This is the main process。
This is the main process.
This is a pthread.
This is a pthread
再次运行,可能得到如下结果:
This is a pthread.
This is the main process.
This is a pthread.
This is the main process.
This is a pthread.
This is the main process.
前后两次结果不一样,这是两个线程争夺CPU资源的最终结果。
5.互斥锁:互斥锁用来保证一段时间内只有一个线程在执行一段代码。
void reader_function(void);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论