嵌入式学习笔记1

嵌入式学习笔记1
嵌入式学习笔记1

1、linux系统:

linux系统的特点

1)软硬件一体化,集计算机技术、微电子技术、行业技术与一体;

2)需要操作系统支持,代码小,执行速度快;

3)专用产品,用途固定,成本敏感;

4)可靠性要求高;

5)多样性,应用广泛,种类繁多。

linux文件系统结构:先有目录再有分区,像一颗倒置的树

windows文件系统:先有分区,再有目录

shell命令:

ls,---列出当下目录的内容

cd

cd+目录名---切换当前的工作目录

cd ..------------返回上一级目录

cd../..----------返回上一级的上一级目录

cd~-------------返回家目录

..----------------上一级目录

.-----------------当前目录

Touch文件名---创建文件

rm+文件名-----删除文件

mkdir目录名—创建目录

rm -r目录名----删除目录

man手册

Linux中C程序(c语言编程)步骤:

编辑(vim) ---> 编译、链接(gcc) ---> 执行、调试(./a.out)

1)编辑:vim 文件名(.c) ---创建并打开文件

三种模式:当vim打开文件时,首先进入的是命令模式

命令模式:

i ---进入插入模式

shift + : ---进入底行模式

yy ---复制光标所在的一行

nyy ---复制从光标位置开始的n行5yy ---复制5行

p ---粘贴

dd ---剪切光标所在的一行

ndd ---剪切从光标位置开始的n行5dd ---剪切5行

u ---撤销上一次的操作

ctrl + v + 上下箭头选中+ = ----自动调整代码格式

插入模式:

ESC ---返回到命令模式

底行模式:

w ---保存

q ---退出

wq ---保存并退出

num ---光标直接跳转到num这行

$ ---光标直接跳转到文件最后一行

2)编译、链接:gcc 文件名----默认生成可执行文件a.out

gcc 文件名-o 可执行文件名---指定生成可执行文件的名字

gcc hello.c -o test ---指定生成可执行文件test

3) 执行、调试:./可执行文件

./a.out

./test

2、C语言:

1) 数据的基本类型:

整型:short(2)、int(4)、long(4)、long long(8)

浮点类型(实数) :float(4)、double(8)

字符型:char(1)

空类型:void

sizeof(变量/类型/表达式/....) ---求...在内存上所占字节数

2) 常量:在程序运行过程中,其值不会发生改变的数据

整型:

十进制:76, 89, 101

八进制:076, 0123

十六进制: 0x123, 0x76, 0xaf

浮点:10.5 3.15e+5 ==>315000

字符型常量:字符常量需要以单引号括起来的单个字节的字符

'c', 'a', '\n'

字符串常量:

"123" "hello" ---字符串常量是以双引号括起来,且以'\0'结尾

3) 变量:在程序运行过程中,其值有可能会发生改变的数据

数据类型变量名;

例:

int a;

float b;

标识符命名规则:

1)由数字、字母、下划线中的一种或多种组成

2)第一个字符不能是数字

3)不能和关键字相同,关键字例如:int, sizeof, for

int a;

int b = 0; //初始化,在定义变量的同时给这个变量赋一个初始值

b = 100; //赋值

4) 输入输出:

printf ---标准格式化输出函数

scanf ---标准格式化输入函数

getchar ---输入一个字符

putchar ---输出一个字符

gets ---输入字符串

puts ---输出字符串

printf("格式化输出串", 变量1, 变量2, ...); ---把变量按照格式输出到屏幕

scanf("格式化输出串", &变量1, &变量2, ...); ---把键盘上输入的数据按格式存放在对应变量中

格式串:

%d --- int

%ld --- long

%lld --- long long

%hd --- short

%u ----无符号整数

%o ----打印八进制整数

%x ----打印十六进制的整数

%f ---float

%lf ---double

%c ---字符

%s ---字符串类型

5) 运算符:

算术运算: + - * / % ++ --

逻辑运算:&& || !

关系运算: > < >= <= == !=

位运算: << >> & | ~ ^

赋值运算: = += -= *=

条件运算符: 表达式1?表达式2 :表达式3

6)数组:存放具有相同数据类型的多个数据的集合,且在内存上连续存储

数据类型数组名[元素个数];

数组的初始化

int a[10] = {1,2,3,4,5,6,7,8,9,10};

赋值:

数组只能一个元素一个元素依次赋值

访问数组的元素

数组名[下标];

数组名

地址常量,代表的是数组的首地址

1)定义数组:

变量: 数据类型变量名;

数组:数据类型数组名[元素个数];

注:元素个数必须是一个确定的值

int a[10]; //拥有10个int类型数据的数组

char buf[100]//拥有100个char类型数据的数组

2、怎么取数组的元素

数组名[下标]

注:下标取值范围:0 ~ n-1 (n指的是元素个数)

3、初始化:

int a[10] = {1,2,3,4,5,6,7,8,9,10}; //把1-10依次赋值给数组中的a[0]-a[9]

int a[10] = {1,2,3,4,5}; //数组的前5个元素依次为1-5,其余元素为0

int a[10] = {0} //数组的元素全部为0

#include

void *memset(void *s, int c, size_t n); //用c填充s地址的前n个字节

memset(a, 0, sizeof(a)); //用于把数组a清空

4、赋值:在定义之后

int a[10];

只能给数组的元素依次进行赋值,通常循环来做

5、数组名:地址常量,代表的是数组的首地址

7) 字符数组:

数组元素是字符类型的数组

char buf[100] = "hello world!";

strlen: 求字符串长度的函数

strcat:字符串连接函数

strcpy:字符串拷贝函数

strcmp: 字符串比较函数,比较两个字符串的大小

1、定义:char 数组名[元素个数];

2、初始化:

char buf[10] = {'h','e','l','l','o'}; //数组的前5个元素依次为hello,其余元素为'\0'

char buf[10] = "hello";

char buf[10] = "";

3、赋值:

1)输入:gets(char *s); ---从键盘上输入一行字符串存入s中

s ---指的是数组的首地址,也就是数组名

2)输出:puts(const char *s); ---把s字符串打印在屏幕上

s ---指的是数组的首地址,也就是数组名

4、字符串函数

字符串函数头文件:#include

a)strlen: 求字符串的长度

size_t strlen(const char *s);

参数:s ---字符串的首地址

返回值:字符串的长度,不包括末尾的'\0'

b)strcpy: 字符串比较函数

char *strcpy(char *dest, const char *src); ---把src串中所有元素拷贝到dest中去

参数:dest ---目标字符数组的首地址(数组名)

src ---源字符串的首地址

c)strcmp: 字符串比较函数

int strcmp(const char *s1, const char *s2); ---比较s1与s2的大小

参数:s1,s2 ---想要比较的两个字符串的首地址

返回值:

== 0: 两个字符串完全相同

!= 0:两个字符串不相等

8)指针:

数据类型*指针变量名;

&:取变量的地址

*: 取指针指向的内容

指针的运算:

p+n: 指针向地址大的方向移动n个数据

p-n: 指针向地址小的方向移动n个数据

p++:指针向地址大的方向移动1个数据

p--: 指针向地址小的方向移动1个数据

p-q: 指针之间相隔的数据元素个数

1、概念:

地址:内存基本单位(字节)都有一个编号,这个编号就是地址

指针: 地址又称为指针

指针变量: 专门用来存放地址的变量

2、定义:

变量: 数据类型变量名;

指针: 数据类型*指针变量名;

注:数据类型: 指针指向的类型

int a;

int *pa = &a; //pa: int *

char b;

char *pb = &b; //pb: char *

float c;

float *pc; //pc: float *

pc = &c;

3、指针运算符:

&: 取变量的地址的

int a;

&a ----取a的地址

*:取指针所指向的内容

int *a;

int *p = &a;

*p == a

4、直接访问与间接访问

直接访问:直接通过变量名去访问的方式

间接访问:通过指向这个变量的指针(地址)去访问的方式

5、指针的运算:

指针的加减法运算: p指的是地址,n指的是整数

p+n: 指针向地址大的方向移动n个数据

地址量的变化:p + n * sizeof(*p)

p-n: 指针向地址小的方向移动n个数据

地址量的变化:p - n * sizeof(*p)

p++: 指针向地址大的方向移动1个数据

地址量的变化:p + sizeof(*p)

p--: 指针向地址小的方向移动1个数据

地址量的变化:p - sizeof(*p)

注:指针移动看的是指针指向的类型

9)函数:

三要素:定义、声明、调用

函数的传参: 值传递和地址传递

strlen strcpy strcmp printf scanf

1)定义

函数的一般形式:

数据类型函数名(数据类型形参名1, 数据类型形参名2, ...)

{

函数体;

return 返回值;

}

注:函数名前的数据类型指的是函数返回值的类型,如果不需要函数返回值,则

类型设为void,return后不需要值,甚至不需要return语句

函数名尽量贴合函数的功能,望名知义

形参在定义时不会分配空间,而是在函数被调用时才分配空间

return语句用于返回函数,如果函数的返回值类型void,则不需要return语句

封装一个函数的步骤:

a)确定函数的功能

b)根据功能确定函数是否需要返回值,返回值的类型是什么

c)根据功能确定需不需要参数,参数的类型是什么

d)实现函数体

e)如果需要返回值,使用return返回函数

2)声明

数据类型函数名(数据类型形参名1, 数据类型形参名2, ...);

注:只有当函数定义在使用之前(main定义)时不需要声明,否则需要在main定义前加上声明

3)调用

函数名(实参1, 实参2, ....);

返回值类型变量= 函数名(实参1, 实参2, ....); ---获取函数调用的返回值

例:

printf("format", ...);

4)传参

把实参的值依次传递给形参

实参与形参一一对应(个数,类型)

a)值传递

传递的是实参的值,这种只能使用实参的值,而不能修改实参的值

b)地址传递:

传递的是变量的地址值,这种既能使用实参的值,也能修改实参的值

3、数据结构:

算法: 时间复杂度和空间复杂度

数据结构中的逻辑结构:

线性结构、层次结构、图形结构

顺序表:数据在内存上连续存储---增、删、改、查

链表: 数据在内存上是散列存储---增、删、改、查

顺序表与链表的优缺点

数据结构: 指的是数据的逻辑结构和存储结构及其操作;

1)数据的逻辑结构:

线性结构: 里面的数据除了第一个和最后一个,其余元素都只有唯一前驱,唯一后继

第一个数据没有前驱,最后一个没有后继

层次结构(树型结构):除了第一个数(没有前驱),其余的数都只有唯一前驱,但可以有多个后继

网状结构(图型):所有数据都可以有多个前驱和后继

逻辑关系:描述数据与数据之间的关系

2)储存结构: 指的是数据在内存上的存储方式

顺序存储:数据在内存上连续存储

链式存储: 数据在内存上散列存储

3)操作:增、删、改、查等等

2、线性表: 顺序表---线性结构的顺序存储

对线性表的操作:创建空表,增删改查, 排序,倒置, 判空或满etc

4、文件操作:

文件IO标准IO

访问方式:文件描述符文件流(FILE *)

是否有缓存:没有缓存有缓存(全缓冲、行缓冲、无缓冲)

操作的函数: open/close/read/write fopen/fclose/fread/fwrite/fgetc/fputc/fgets/fputs

1、文件IO

Linux上一切皆是文件

文件描述符: 非负整数,当创建或打开文件时会返回一个顺序分配的非负整数,这个整数就是文件描述符,

文件IO就是通过文件描述符来对文件进行操作

一个程序中有3个文件自动打开:

标准输入(键盘): 0

标准输出(屏幕):1

标准错误输出(屏幕):2

open: 打开文件

close:关闭文件

read:读

write: 写

lseek: 定位

man 2/3 函数名---查看函数

2、文件API

1、open: 打开文件

#include

#include

#include

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

参数:pathname ---路径+文件名,如果是当前目录下的文件则不用加路径

flags --- O_RDONLY ---只读

O_WRONLY ---只写

O_RDWR ---可读写

O_TRUNC ---清空文件

O_APPEND ---追加打开

O_CREAT ---当打开的文件不存在时,创建该文件,并使用第三个参数0777(权限)

返回值:

成功:文件描述符

失败:-1,并设置errno

perror("提示符"); ---打印系统错误信息(只有当函数设置过errno时才能使用)

2、close:关闭文件

#include

int close(int fd);

参数:fd ---文件描述符

返回值:成功:0

失败:-1,并设置errno

3、read: 读取文件内容

#include

ssize_t read(int fd, void *buf, size_t count); //从fd文件中读取count字节存入buf 中

参数:

fd ---文件描述符

buf ---存放读取数据的缓冲区首地址

count ---想要读取的字节数

返回值:

成功:

>0 : 成功读取的字节数

=0 :读到文件末尾

失败:

-1,并设置errno

打开一个文件,把文件内容读出来并打印到屏幕上

4、write:向文件中写入数据

#include

ssize_t write(int fd, const void *buf, size_t count); //把buf中的count字节写入文件fd 中

参数:

fd ---文件描述符

buf ---存放想要写入数据的缓冲区首地址

count ---想要写入的字节数

返回值:

>0 ---成功写入的字节数

-1 ---失败,设置errno

5、进线程:

1)线程: pthread_create ---线程可以使用全局变量来进行通信

2)进程:

进程与程序的区别?

ps ---查看进程的状态

kill ---向进程发送信号

kill -信号PID ---向进程PID中发送信号

int kill(pid_t pid, int sig); ---向进程pid中发送sig信号

PID ---进程号

PPID ---父进程号

fork ---创建进程的函数

返回值:

<0 ---出错

=0 ---在子进程中

>0 ---在父进程中,且返回值就是子进程的PID号

1、多进程

进程: 是程序的一次执行过程

ps -ef ---查看进程的状态

PID PPID CMD

进程号父进程号命令

进程号: 用于区分不同的进程

kill ---发送信号

kill -l ---列出所有的信号

kill -信号PID ---向PID进程发送信号

例: kill -2 PID --- 2号信号(SIGINT)

2、进程API:

1、fork---创建一个子进程

#include

pid_t fork(void); //typedef

参数:无

返回值:

成功:

>0 ---再父进程中,这个值就是创建的子进程的PID号

=0 ---在子进程中

失败:

-1 ---创建子进程失败,并设置errno

注: fork创建的子进程从fork的下一条语句开始执行

fork创建的子进程与父进程的执行顺序是随机的

进程是资源分配的最小单位,fork创建子进程时会拷贝父进程的空间

2)exit ---退出进程

#include

void exit(int status);

参数: 0

僵尸进程: 当一个进程死亡后,资源还未被完全销毁,这个进程就是僵尸进程(收尸)当子进程死亡后会自动向父进程发送信号SIGCHLD,父进程对这个信号的默认操作是忽略

孤儿进程: 当进程的父进程先子进程死亡,这个进程就是孤儿进程,孤儿进程又会被init(1号进程收养)

6、网络编程:

1)网络编程的预备知识:

a)套接字: 既是一个通用的网络编程接口,也是一种特殊的文件描述符

b)IP地址: 区分不同的主机

ifconfig ---查看本机的IP地址

ping ---网络检测工具,用于检测网络是否连通的

c)端口号: 区分一台主机上的不同任务的(标志进程)

unsigned short

2) TCP编程流程:

服务器:

socket ---创建套接字

bind ---绑定本机地址和端口

listen ---设置监听套接字

accept ---接收客户端的连接,并生成通信套接字

read/write ---收发数据

close ---关闭套接字

客户端:

socket ---创建套接字

connect ----主动连接服务器

write/read ---发收数据

close ---关闭套接字

服务器有2种套接字:

监听套接字---用于监测是否有客户端的连接,并接受链接

通信套接字---只用于跟客户端通信

客户端只有一种套接字

1)预备知识

a、套接字socket

是网络编程的通用的接口socket

也是一种特殊的文件描述符----可以使用文件IO进行操作

b、IP地址: 区分不同的主机

例:192.168.19.45 ---点分形式

IP = 网络号+ 主机号192.168.19.45(IP)255.255.255.0(子网掩码)

网络号: IP & 子网掩码192.168.19.0

主机号: IP & (~子网掩码)0.0.0.45

在同一局域网内,所有主机网络号相同,主机号不同

linux中查看IP:

ifconfig ---查看IP地址

eth0:192.168.19.96

lo :127.0.0.1 ---只能用于本机通信, 用于测试

ping ---用于网络监测的工具

ping ip

虚拟机网络配置:

虚拟机中--》编辑--》虚拟网络编辑器--》选择桥接模式(管理员身份运行虚拟机)-->桥接到window所用的网卡

点击ubuntu的网络图标-->Edit connections-->点击网络(edit)--->

-->Wired(eth0)--》IPV4 settings(Automatic(DHCP))--->save

点击ubuntu的网络图标-->选中刚刚配置的网络(重新连接)

ifconfig查看IP是否与windowsIP再同一网络,如果再,则使用ping命令查看是否和windows相通,

ping不同,则关闭windos防火墙

c、端口号: 区分同一主机不同的任务

unsigned short 1 - 65535

可用: 5001 ~ 65565

3、网络编程TCP流程: c/s架构

服务器(server) 客户端(client)

socket ---创建套接字socket ---创建套接字

bind ---绑定本机IP地址和端口

listen ---设置监听套接字connect ---主动向服务器发起连接请求

accept ---接收客户端的连接

------------------------------------------------------------------------------

read/write ---收发数据write/read ---发收数据

close ---关闭套接字close ----关闭套接字

4、网络编程API:

1)socket ---创建套接字

#include /* See NOTES */

#include

int socket(int domain, int type, int protocol);

参数:domain --- AF_INET

type --- SOCK_STREAM (可靠通信)

protocol --- 0

返回值:

成功:套接字文件描述符

失败:-1,并设置errno -- perror

2) bind ---绑定本机地址和端口

#include

#include

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

参数:sockfd ---套接字文件描述符

addr ---本机地址和端口

addrlen ---地址长度

返回值:

成功:0

失败:-1,使用perror查看错误原因

通用地址结构

struct sockaddr

{

u_short sa_family; // 地址族, AF_xxx

char sa_data[14]; // 14字节协议地址

};

Internet协议地址结构

struct sockaddr_in

{

u_short sin_family; // 地址族, AF_INET,2 bytes

u_short sin_port; // 端口,2 bytes

struct in_addr sin_addr; // IPV4地址,4 bytes

char sin_zero[8]; // 8 bytes unused,作为填充};

IPv4地址结构

// internet address

struct in_addr

{

in_addr_t s_addr; // u32 network address

};

例:

struct sockaddr_in myaddr;

memset(&myaddr, 0, sizeof(myaddr));

myaddr.sin_family = AF_INET;

myaddr.sin_port = htons(8888);

myaddr.sin_addr.s_addr = inet_addr("192.168.3.254");

3) listen ---设置监听套接字

int listen(int sockfd, int backlog);

参数:

sockfd ---套接字文件描述符

backlog ---监听队列长度,大于0的整数

返回值:

成功:0

失败:-1,使用perror查看错误原因

4) accept ---接收客户端连接

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

参数:sockfd ---套接字文件描述符

addr ---客户端的地址结构

addrlen ---客户端地址长度

当不想知道是哪个客户端时,此时addr和addrlen可设置为NULL

返回值:

成功:通信套接字文件描述符

失败:-1,使用perror查看错误原因

服务器有两种套接字:

1、监听套接字---监听是否有客户端链接,并建立连接使用的

2、通信套接字---用于与连接成功的客户端通信的(接收数据与发送数据)

5) connect ---主动向服务器发起连接请求

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); //服务器地

参数:sockfd ---套接字文件描述符

addr ---服务器地址和端口

addrlen ---服务器地址长度

返回值:

成功:0

失败:-1,使用perror查看错误原因

网络编程中遇到问题的解决办法:

1、问题:

farsight@ubuntu:~/Liuj/panzh/pan2/3-31$ ./client

socket...............

connect: Connection refused

解决:

因为服务器没开,首先检查服务器是否开启,如果已经开启,仍然出现这个问题,首先服务器ping客户端

如果ping通还是出现这个错误,那就是你的服务器与客户端不匹配(IP, PORT)

2、

问题:

farsight@ubuntu:~/Liuj/panzh/pan2/3-31$ ./server

socket...........

bind: Address already in use

解决: 首先检查客户端是否关闭

a) 等待30s ~ 2分钟

b) 修改服务器与客户端上的服务器的端口号

3、

问题:

farsight@ubuntu:~/Liuj/panzh/pan2/3-31$ ./server

socket...........

bind: Cannot assign requested address

解决:

bind函数绑定的IP地址不对,重新ifconfig查看自己的IP进行设置

注: 网络编程执行过程中:

服务器先执行,客户端后执行

客户端先关闭,再关闭服务器

网络编程过程中,发送与对应接收的字节数应该匹配(一样)

嵌入式软件工程师应该知道的16个问题

嵌入式软件工程师应知道的0x10个基本问题(经典收藏版) C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。 从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。 有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮助。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。 这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。 预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4) 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 . 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A)<= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1) 标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。

嵌入式系统开发基础——基于ARM9微处理器C语言程序设计各章习题

第一章习题 1。嵌入某种微处理器或单片机的测试和控制系统称为嵌入式控制系统(Embedded Control System)。 在应用上大致分为两个层次,以MCS-51为代表的8位单片机和以ARM技术为基础的32位精减指令系统单片机 2。目标机上安装某种嵌入式操作系统和不安装嵌入式操作系统, 以MCS-51为代表的8位单片机不安装嵌入式操作系统。 3。32位、16位和8位 5。32位、16位 6。在大端格式中,字数据的高字节存储在低字节单元中,而字数据的低字节则存放在高地址单元中。 在小端存储格式中,低地址单元存放的是字数据的低字节,高地址单元中,存放的是数据的高字节。 第二章习题 (略) 第三章习题 1。 (1)寄存器大约有17类,每个的定义都是寄存器名字前面加一个小写”r” (2)在56个中断源中,有32个中断源提供中断控制器,其中,外部中断EINT4~EINT7通过“或”的形式提供一个中断源送至中断控制器,EINT8~EINT23也通过“或”的形式提供一个中断源送至中断控制器。 第四章习题 1,56个中断源,有32个中断源提供中断控制器 2,两种中断模式,即FIQ模式(快速模式)和IRQ模式(通用模式)。通过中断模式控制寄存器设置。 3,常用的有5个,它们是中断模式控制寄存器,控制中断模式;中断屏蔽寄存器,控制中断允许和禁止;中断源挂起寄存器,反映哪个中断源向CPU申请了中断;中断挂起寄存器,反映CPU正在响应的中断是哪个中断源申请的;中断优先级寄存器,它和中断仲裁器配合,决定中断优先级。

4,中断源挂起寄存器,反映哪个中断源向CPU申请了中断;中断挂起寄存器,反映CPU正在响应的中断是哪个中断源申请的。中断源向CPU申请了中断如果该中断源没被屏蔽并且没有和它同级或高级的中断源申请中断,才能被响应。系统中可以有多个中断源向CPU申请中断,但同一时刻CPU只能响应一个最高级的中断源中断请求。中断源挂起寄存器和中断挂起寄存器反映了中断系统不同时段的状态。 5,进入中断服务程序先清中断源挂起寄存器和中断挂起寄存器;中断结束,将该中断源屏蔽。 6,将该中断源屏蔽取消;将该中断源屏蔽。 第五章习题 1,S3C2410芯片上共有117个多功能的输人/输出引脚,它们是。 ?1个23位的输出端口(端口A); 。1个11位的输入/输出端口(端口B); 。1个16位输入/输出端口(端口C); ?1个16位输入/输出端口(端口D); ?1个16位输入/输出端口(端口E); ?1个8位输人/输出端口(端口F); ?1个16位输入/输出端口(端口G); 。1个11位的输入/输出端口(端口H)。 2,S3C2410 I/O口的控制寄存器、数据寄存器、上拉电阻允许寄存器的作用? 端口控制寄存器定义了每个引脚的功能;与I/O口进行数据操作,不管是输入还是输出,都是通过该口的数据寄存器进行的,如果该端口定义为输出端口,那么可以向GPnDA T的相应位写数据。如果该端口定义为输人端端口,那么可以从GPnDAT的相应位读出数据。 端口上拉寄存器控制每个端口组上拉电阻的使能/禁止。如果上拉寄存器某一位为0,则相应的端口上拉电阻被使能,该位做基本输入/输出使用,即第1功能;如果上拉寄存器某一位是1,则相应的端口上拉电阻被禁止,该位做第2功能使用。 5, rGPBCON=rGPBCON& 0xFFFFFC∣1; //蜂鸣器配置,PB1口接蜂鸣器,输出delay(1000); rGPBDAT & = 0xFFFFFE; //蜂鸣器响,低电平有效 rGPBDAT∣=1; // 蜂鸣器停 第六章习题 3,S3C2410 UART波特率如何确定?

Chapter1会计概论答案

第一章会计透视:会计信息及其使用者▓复习思考题 1.概述会计的性质。 会计是按照会计规范确认、计量、记录一个组织的经济活动,运用特定程序处理加工经济信息,并将处理结果传递给会计信息使用者的信息系统,是组织和总结经济活动信息的主要工具。 会计是一个信息系统,会计处理的各个环节的加工的对象是会计信息。会计信息实际上是一种广义的信息,包含三个层次: 其一,以货币化指标体现的财务信息,它是从动态、静态两个角度,对特定主体经济资源的数量(资产)、归属(负债、所有者权益)、运用效果(收益分配)、增减变化及其结果(财务状况变动及其结果)进行描述; 其二,非货币化的和非数量化的说明性信息,它们不仅仅是对主体的财务状况、经营成果等财务指标的基本说明,而且还包含了大量的主体所处的社会、文化、道德、法律等环境信息,这些信息对于使用者正确判断主体的经营能力、发展前景,往往起到至关重要的作用; 其三,其他用于主体内部管理的信息,这些信息常常由成本会计、管理会计以及内部审计人员提供,主要包括了短期(长期)决策信息、预算信息、责任中心要求及履行情况等情况,虽然与外部性较强的财务会计信息相比,它们更容易为人们所忽略,但在经济管理和财务信息质量控制方面,它们也起了不可低估的作用。不过,在当前的会计报告模式中,所反映的会计信息主要是前两个层次上的信息。 2.企业的获利能力是否为债权人的主要考虑因素? 债权人关心那些影响自己的债权能否得到按期偿还的因素。他们会对公司的获利能力及清偿能力感兴趣。债权人会从获利能力去衡量未来的现金流量,由于企业的获利能力与现金流量并不一定同步产生,所以对短期债权人来说,企业的获利能力不能成为债权人的主要考虑因素,但对相对长期的债权人来说获利能力应该是值得更加关注的因素。 3.财务报表中体现出来的会计信息用以满足不同使用群体的需求,但并不是所有的使用者都能得到相同的满足的。在实践中,外部财务报表使用者诸如股东、供应商、银行等是如何获得有关公司的财务信息的?若要同时满足不同类别的财务报表使用者的信息需求有什么困难? 首先,股东是公司法定的所有者,法律上财务报表是为其制作的。法律规定,公司必须定期编制并发布财务报表,为其股东公布财务信息,我国《公司法》对此也有明确的规定。 其次,供应商与公司是商业伙伴关系,不提供商业信用的供应商,由于是钱货两讫,可通过报媒和网络了解公司公开财务的财务信息,如果供应商对公司提供商业信用,供应商可要求企业提供一定的财务信息,但对这些财务信息的准确性、可靠性需要有一定的分析。

!嵌入式系统开发资料(入门必备)

获取更多权威电子书请登录https://www.360docs.net/doc/6c13410174.html, ARM嵌入式系统开发综述ARM开发工程师入门宝典

获取更多权威电子书请登录https://www.360docs.net/doc/6c13410174.html, 前言 嵌入式系统通常是以具体应用为中心,以处理器为核心且面向实际应用的软硬件系统,其硬件是整个嵌入式系统运行的基础和平台,提供了软件运行所需的物理平台和通信接口;而嵌入式系统的软件一般包括操作系统和应用软件,它们是整个系统的控制核心,提供人机交互的信息等。所以,嵌入式系统的开发通常包括硬件和软件两部分的开发,硬件部分主要包括选择合适的MCU或者SOC 器件、存储器类型、通讯接口及I/O、电源及其他的辅助设备等;软件部分主要涉及OS porting和应用程序的开发等,与此同时,软件中断调试和实时调试、代码的优化、可移植性/可重用以及软件固化等也是嵌入式软件开发的关键。 嵌入式系统开发的每一个环节都可以独立地展开进行详细的阐述,而本文的出发点主要是为嵌入式开发的初学者者提供一个流程参考。因为对于初学者在面对一个嵌入式开发项目的时候,往往面临着诸多困难,如选择什么样的开发平台?什么样的器件类型?在进行编译时怎样实现代码优化?开发工具该如何选择和使用?在进行程序调试时应该注意那些问题以及选择什么样的嵌入式OS 等等。希望通过本文,能帮助初学者了解有关ARM嵌入式系统开发流程。

获取更多权威电子书请登录https://www.360docs.net/doc/6c13410174.html, 目录 前言 (2) 1 嵌入式开发平台 (4) 1.1 ARM的开发平台: (4) 1.2 器件选型 (7) 2 工具选择 (11) 3 编译和连接 (13) 3.1 RVCT的优化级别与优化方向 (16) 3.2 Multifile compilation (21) 3.3调试 (22) 4 操作系统 (23) 4.1 哪里可以得到os 软件包 (Open Source and Linux Kernel) (25) 4.2 安装镜像 (26) 4.3 交叉编译 (26) 总结 (27)

(完整版)嵌入式系统课后答案马维华

第1章嵌入式系统概述 1,什么是嵌入式系统嵌入式系统的特点是什么 嵌入式系统概念: (1) IEEE对嵌入式系统的定义:用于控制,监视或者辅助操作机器和设备的装置. (2)一般定义:以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统. 嵌入式系统的特点: (1) 专用的计算机系统 (2) 必须满足环境要求 (3) 必须能满足对象系统的控制要求 (4) 是集成计算机技术与各行业应用的集成系统 (5) 具有较长的生命周期 (6) 软件固化在非易失性存储器中 (7) 必须能满足实时性要求 (8) 需要专用开发环境和开发工具 2,简单分析几种嵌入式操作系统的主要特点,包括嵌入式Linux,Windows CE,uCOS II 及VxWorks. (1)嵌入式Linux:有多个主流版本,根据应用需求,性能略有差别.μCLinux是Linux小型化后,适合于没有MMU的微处理器芯片而裁剪成的操作系统,μCLinux保持了传统Linux操作系统的主要特性,包括稳定,强大的网络和文件系统的支持,μCLinux裁剪了大量的Linux内核以缩小尺寸,适合像512KB RAM,1MB Flash这样小容量,低成本的嵌入式系统.RT_Linux即能兼容通常的Linux,又能保证强实时性. (2)Windows CE:开发平台主要为WinCE Platform Builder,有时也用EVC环境开发一些较上层的应用.WinCE开发难度远低于嵌入式Linux,实时性略低,常用于手机,PDA等手持设备中. (3)uCOS II:结构小巧,抢先式的实时嵌入式操作系统,具有执行效率高,占用空间小,可移植性强,实时性能好和可扩展性能等优点.主要用于小型嵌入式系统. (4) VxWorks: 集成开发环境为Tornado,Vxworks因出现稍早,实时性很强,并且内核可极微(最小8K),可靠性较高等.通常应用在通信设备等实时性要求较高的系统中. 第2章嵌入式处理器体系结构 1,具体说明ARM7TDMI的含义,其中的T,D,M,I分别代表什么 ARM7TDMI是ARM7处理器系列成员之一,采用V4T版本指令.T表示Thumb,该内核可从16位指令集切换到32位ARM指令集;D表示Debug,该内核中放置了用于调试的结构,支持片内Debug调试;M表示Multiplier,支持位乘法;I表示Embedded ICE ,内含嵌入式ICE宏单元,支持片上断点和观察点. 2,ARMV4及以上版本的CPSR的哪一位反映了处理器的状态若CPSR=0x000000090,分析系统状态.CPSR=0x000000090表示当前处理器工作于ARM状态,系统处于用户模式下. CPSR的BIT5(T)反映当前处理器工作于ARM状态或Thumb状态. 3,ARM有哪几个异常类型,为什么FIQ的服务程序地址要位于0x1C 在复位后,ARM处理器处于何种模式,何种状态 ARM的7种异常类型:复位RESET异常,未定义的指令UND异常,软件中断SWI异常,指令预取中止PABT异常,数据访问中止DABT异常,外部中断请求IRQ异常,快速中断请求FIQ 异常.在有快速中断发生时,CPU从0x1C处取出指令执行.ARM复位后处于管理模式,工作于ARM状态. 4,为什么要使用Thumb模式,与ARM代码相比较,Thumb代码的两大优势是什么

嵌入式底层软件开发方法

嵌入式底层软件开发方法 自从20世纪70年代单片机出现以来,嵌入式系统已获得了较为深入的研究, 提出了一些嵌入式软件的开发方法,但嵌入式系统仍处于发展阶段,嵌入式系统 已经显示出广阔的应用前景。 1.嵌入式系统的定义 嵌入式系统又称为嵌入式计算机系统,是指嵌入到对象体系中的专用计算机系统。对象系统则是指嵌入式系统所嵌入的宿主系统,嵌入性、专用性与计算机系统 是嵌入式系统的三个基本要素。嵌入式系统通常被描述为:以应用为中心,以计 算机技术为基础,软硬件可剪裁,适应于应用系统对功能、可靠性、成本、体积和 功耗有严格要求的专业计算机系统。 2.嵌入式系统的发展历程 嵌入式系统是在硬件和软件交替发展的支撑下逐渐趋于稳定和成熟的,它有着 悠久的历史。从20世纪70年代单片机的出现到现在各种嵌入式微处理器、微控制 器的大规模应用,嵌入式系统己经有了30多年的发展历史。纵观嵌入式技术的发展,大致经历了以下几个发展阶段。 (1)无操作系统阶段:主要是以功能简单的专用计算机或单片机为核心的可编 程控制器形式存在的系统,具有监测、伺服、设备指示等功能,一般没有操作系统 的支持,通过汇编语言编程对系统进行直接控制。主要特点是:系统结构和功能都 相对单一,处理效率较低,存储容量较小,几乎没有用户接口,比较适合于各类专 用领域。 (2)以嵌入式处理器和嵌入式操作系统为标志的嵌入式系统:主要特点是出现 了高可靠、低功耗的嵌入式处理器,嵌入式操作系统能运行于各种不同类型的微处 理器上,兼容性好;操作系统内核精小、效率高,并且具有高度的模块化和扩展性;片上系统(System On Chip,SOC)使得嵌入系统越来越小,具有大量的应用程序接口,开发应用程序简单,应用软件丰富。 3.嵌入式系统的构成及其特点 1)嵌入式系统的组成 嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件 系统等组成,具有专用性、可嵌入性、实时性、可移植性和分布式等特点。其中, 嵌入式微处理器是嵌入式硬件系统的核心部分,它担负着控制、协调系统工作的重 要任务,通常具有实时多任务处理能力、中断处理能力、存储器保护能力和低功耗 能力;支撑硬件主要包括存储介质、通信部件和显示部件等;支撑硬件的驱动程 序、操作系统、应用软件等一起构成嵌入式软件。

29945 嵌入式软件技术概论

高纲1450 江苏省高等教育自学考试大纲 29945 嵌入式软件技术概论 南京航空航天大学编江苏省高等教育自学考试委员会办公室

一、课程性质及其设置目的与要求 (一)课程性质和特点 《嵌入式软件技术概论》是高等教育自学考试计算机网络专业(独立本科段)考试计划规定必考的一门专业课。通过本课程的学习,不仅使学生了解嵌入式计算机系统的基本概念和组织构成,并以ARM Cortex-M0+系列微处理器为基础掌握嵌入式计算机系统软件的开发方法,重点培养学生嵌入式计算机系统的软件开发能力。 (二)本课程的基本要求 本课程共分为14章。在对嵌入式计算机的学科基础、研究和应用领域以及ARM Cortex-M0+微处理器和KL25子系列微控制器进行简要介绍的基础上,重点阐述了如何基于KL25子系列微控制器开发一个相对完整的嵌入式系统的具体过程,以及嵌入式系统中所包含的基本接口及模块的编程方法,包括串行通信、中断、定时器、GPIO、FLASH、ADC、DAC、CMP、SPI、I2C、TSI、USB2.0、系统时钟及其它接口与模块。通过对本书的学习,要求应考者对嵌入式计算机系统有一个全面和正确的了解。具体应达到以下要求: 1.了解嵌入式计算机系统的基本概念、发展过程、现状和发展趋势,嵌入式计算机系统的应用范畴,嵌入式计算机系统与通用计算机系统的区别与联系; 2.理解并掌握嵌入式计算机系统的基本构成和基本原理; 3.掌握基于KL25子系列微控制器的嵌入式计算机软件系统开发的方法以及对嵌入式计算机系统各基本接口及模块的开发编程方法。 (三)本课程与相关课程的联系 嵌入式软件技术概论是一门综合性和应用性都比较强的课程,其内容涉及计算机相关专业的大部分专业课程,学习者需要具有一定的数字电路及编程基础,也要对计算机的一般组成有所了解。因此,本课程的前修课程应至少包含《数字电路》、《程序设计语言》(以C 语言为主)以及《计算机组成原理》,这些课程可以帮助学生很好的理解嵌入式计算机系统的硬件结构及尽快掌握嵌入式计算机系统的软件编程方法。 二、课程内容与考核目标 第1章概述

嵌入式软件开发入门教程

C语言是嵌入式软件开发人员必须熟练掌握的编程语言。作为C语言的初学者重点掌握基本数据类型、复合数据类型、流程控制、数组、指针、函数这几方面的基本知识。本人建议通过观看视频教学的方式进行学习,这样既快速又通俗易懂,当然前提是必须找到优质的教学视频资源。此外,可以配合入门书籍谭浩强的《C语言程序设计》进行学习。如果想深入的学习可以参考美国人写的人民邮电出版社出版的《C Primer Plus》。 方法/步骤2: C语言的磨炼 掌握了基本的C语言语法以后并不代表我们就学会了C语言,关键是如何灵活的去运用。我们可以练习编写C语言学习书籍的课后习题或者在网站上搜索C语言笔试题库进行练习。也可以百度寻找经典的C 语言编程案例进行学习。总之,就是将C语言运用的越熟练越好。至于开发环境可以选择VC++ 6.0 或者linux。 方法/步骤3: 硬件电路基础

嵌入式软件工程师还必须懂一些硬件电路的基本知识。当然,对于刚入门的软件开发人员没必要非常精通电路技术,熟悉基本的电子元器件的功能即可。例如,电阻、电容、电感的作用以及符号,三极管、MOS管导通截止的条件,微处理器、晶振的基本概念等。至于,以上这些基本知识我们可以通过童诗白的第四版《模拟电子技术基础》和网上查阅的资料进行学习。 方法/步骤4: 如何看懂原理图 作为嵌入式软件开发人员我们经常会和硬件打交道,我们的程序最终会被烧录到微处理器内部运行。所以,我们必须要会看硬件原理图,看懂之后才知道如何写程序。首先,我们要知道嵌入式硬件最小系统的组成部分,包括电源电路、晶振、微处理器、复位电路。然后以微处理器为中心向四周查看,主要看我们可以操纵的外设资源。以上知识的学习我们不妨经常浏览一下某些知名IT网站其他人上传的经典原理图。 方法/步骤5: 基本外设知识

嵌入式系统概述

1 嵌入式系统概述 嵌入式系统(Embedded System )也称嵌入式计算机系统。顾名思义,嵌入式系统是计算机的一种特殊形式,是计算机技术、通信技术、半导体技术、微电子技术、语音图像数据传输技术,甚至传感器等先进技术和具体应用对象相结合后的更新换代产品。嵌入式系统不仅和一般的PC 机上的应用系统不同,而且针对不同的具体应用而设计的嵌入式系统之间的差别也很大。嵌入式系统强调硬件和软件的协同性与整合性,软件和硬件可剪裁的,适用于应用系统对功能、可靠性、成本、体积、功耗和应用环境等有严格要求的专用计算机系统。 嵌入式系统特别强调“量身定做”的原则,开发人员往往需要针对某一种特殊用途开发出一个截然不同的嵌入式系统,其特点如下。 (1)嵌入式系统具有应用针对性 应用针对性是嵌入式系统的一个基本特征,体现这种应用针对性的首先是软件,软件实现特定应用所需要的功能,所以嵌入式系统应用中必定配置了专用的应用程序;其次是硬件,大多数嵌入式系统的硬件是针对应用专门设计的,但也有一些标准化的嵌入式硬件模块,采用标准模块可降低开发的技术难度和风险,缩短开发时间,但灵活性不足。 (2)嵌入式系统硬件扩展能力要求不高 硬件上,嵌入式系统作为一种专用的计算机系统,其功能、机械结构、安装要求比较固定,所以一般没有或仅有较少的扩展能力;软件上,嵌入式系统往往是一个设备固定组成部分,其软件功能由设备的需求决定,在相对较长的生命周期里,一般不需要对软件进行改动。但也有一些特例,比如现在的手机,尤其是安装有嵌入式操作系统的智能手机,软件安装、升级比较灵活,但相对于桌面计算机,其软件扩展能力还是相当弱。 (3)嵌入式系统操作系统精简 在现代的通用计算机中,没有操作系统是无法想象的,而在嵌入式计算机中情况则大第 章

一个典型的嵌入式系统设计和实现

关键字:嵌入式系统设计 ARM FPGA多功能车辆总线Multifunction Vehicle Bus 在计算机、互联网和通信技术高速发展的同时,嵌入式系统开发技术也取得迅速发展,嵌入式技术应用范围的急剧扩大。本文介绍了一种基于ARM和FPGA,从软件到硬件完全自主开发多功能车辆总线(Multifunction Vehicle Bus)MVB??B嵌入式系统的设计和实现。 系统设计和实现 通常来说,一个嵌入式系统的开发过程如下: 1.确定嵌入式系统的需求; 2.设计系统的体系结构:选择处理器和相关外部设备,操作系统,开发平 台以及软硬件的分割和总体系统集成; 3.详细的软硬件设计和RTL代码、软件代码开发; 4.软硬件的联调和集成; 5.系统的测试。 一、步骤1:确定系统的需求: 嵌入式系统的典型特征是面向用户、面向产品、面向应用的,市场应用是嵌入 式系统开发的导向和前提。一个嵌入式系统的设计取决于系统的需求。 1、MVB总线简介 列车通信网(Train Communication Network,简称TCN)是一个集整列列车内 部测控任务和信息处理任务于一体的列车数据通讯的IEC国际标准 (IEC-61375-1), 它包括两种总线类型绞线式列车总线(WTB)和多功能车厢总线(MVB)。 TCN在列车控制系统中的地位相当与CAN总线在汽车电子中的地位。多功能车辆总线MVB是用于在列车上设备之间传送和交换数据的标准通信介质。附加在总线上的设备可能在功能、大小、性能上互不相同,但是它们都和 MVB总线相连,通过MVB总线来交换信息,形成一个完整的通信网络。在MVB系统中,根据IEC-61375-1列车通信网标准, MVB总线有如下的一些特点: 拓扑结构:MVB总线的结构遵循OSI模式,吸取了ISO的标准。支持最多4095个设备,由一个中心总线管理器控制。简单的传感器和智能站共存于同一总线上。 数据类型:MVB总线支持三种数据类型:

嵌入式系统软件开发和设计流程复习课程

* 本文由hquwgz贡献 ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 嵌入式系统及应用 第九章嵌入式系统软件的开发 主要内容 嵌入式软件开发工具嵌入式系统开发模式实时软件分析设计方法 第一节嵌入式软件开发工具 嵌入式软件开发工具的分类嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程嵌入式软件开发工具的发展趋势 / 嵌入式软件开发工具 “工欲善其事,必先利其器”嵌入式软件开发工具的集成度和可用性将直接关系到嵌入式系统的开发效率。 嵌入式软件开发工具的分类 嵌入式软件开发阶段 嵌入式软件开发工具的分类 根据不同的阶段,嵌入式软件开发工具可以分为: 需求分析工具(Requirement Analysis Tools)软件设计工具(Software Design Tools) 编码、调试工具(Coding Tools) 测试工具(Testing Tools) 配置管理工具、维护工具等 Rational Rose RealTime ObjectGeode Rhapsody TAU Tornado LambdaTOOL pRISM+ Spectra Win CE Platform Builder CodeWarrior Xray Debugger Logiscope CodeTEST … Phases Requirement Analysis Software Design Coding Test Release 主要嵌入式软件开发工具产品 嵌入式软件开发工具的分类 嵌入式软件的开发可以分为以下几种: 编写简单的板级测试软件,主要是辅助硬件的调试开发基本的驱动程序开发特定嵌入式操作系统的驱动程序(板级支持包)开发嵌入式系统软件,如:嵌入式操作系统等开发应用软件 嵌入式软件开发工具的分类 从以上嵌入式软件开发分类来看,嵌入式软件开发工具可以分为: 与嵌入式OS相关的开发工具,用于开发: ` 基于嵌入式OS的应用部分驱动程序等 与嵌入式OS无关的开发工具,用于开发: 基本的驱动程序辅助硬件调试程序系统软件等 嵌入式软件的交叉开发环境 交叉开发环境是指用于嵌入式软件开发的所有工具软件的集合,一般包括: 文本编辑器交叉编译器交叉调试器仿真器下载器等 交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接。 运行平台Target ]

嵌入式软件开发流程

.嵌入式软件开发流程

————————————————————————————————作者:————————————————————————————————日期:

嵌入式软件开发流程 一、嵌入式软件开发流程 1.1 嵌入式系统开发概述 由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分,其总体流程图如图1.1所示。 图1.1 嵌入式系统开发流程图 在系统总体开发中,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求。另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择。往往通过硬件实现会增加产品的成品,但能大大提高产品的性能和可靠性。 再次,开发环境的选择对于嵌入式系统的开发也有很大的影响。这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等。本书在4.1.5节对各种不同的嵌入式操作系统进行了比较,读者可以以此为依据进行相关的选择。比如,对开发成本和进度限制较大的产品可以选择嵌入式Linux,对实时性要求非常高的产品可以选择Vxworks等。 由于本书主要讨论嵌入式软件的应用开发,因此对硬件开发不做详细讲解,而主要讨论嵌入式软件开发的流程。

1.2 嵌入式软件开发概述 嵌入式软件开发总体流程为图4.15中“软件设计实现”部分所示,它同通用计算机软件开发一样,分为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。其中嵌入式软件需求分析与硬件的需求分析合二为一,故没有分开画出。 由于在嵌入式软件开发的工具非常多,为了更好地帮助读者选择开发工具,下面首先对嵌入式软件开发过程中所使用的工具做一简单归纳。 嵌入式软件的开发工具根据不同的开发过程而划分,比如在需求分析阶段,可以选择IBM的Rational Rose等软件,而在程序开发阶段可以采用CodeWarrior(下面要介绍的ADS 的一个工具)等,在调试阶段所用的Multi-ICE等。同时,不同的嵌入式操作系统往往会有配套的开发工具,比如Vxworks有集成开发环境Tornado,WindowsCE的集成开发环境WindowsCE Platform等。此外,不同的处理器可能还有对应的开发工具,比如ARM的常用集成开发工具ADS、IAR和RealView等。在这里,大多数软件都有比较高的使用费用,但也可以大大加快产品的开发进度,用户可以根据需求自行选择。图4.16是嵌入式开发的不同阶段的常用软件。 图1.2 嵌入式开发不同阶段的常用软件 嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分,下面分别对这两部分进行讲解。 1.交叉编译 嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在第3章中已经提到,编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。嵌入式系统交叉编译环境如图4.17所示。

嵌入式系统概论A卷(答案)

11-12学年上学期嵌入式系统概论期末试卷(A卷)答案及评分细则 一、填空题:(本大题共20空,每空1.5分,共30分) 1.ARM920T 2.冯诺依曼、哈佛结构 3.非特权模式、特权模式、非特权模式 4.ARM 、Thumb 、32 、16 5.立即 6.嵌入式微控制器、嵌入式数字信号处理器、嵌入式微处理器、嵌入式片上系统 7.高速缓存、内存、外存 8.3级、5级 二、名词解释:(本大题共5题,每题4分,共20分) 1、CISC:复杂指令集计算机 2、RISC:精简指令集计算机 3、RTOS: 实时操作系统 4、占先式内核:高优先级的任务一旦就绪,总能立即获得CPU使用权 5、交叉编译:在一种体系平台编译在另外一种体系平台运行 三、简答题(本大题共5题,每题6分,共30分) 1.简要叙述嵌入式系统的定义。 嵌入式系统是以应用为中心,以计算机技术为基础,并且在软、硬件方面可进行裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。 2.寄存器R13,R14,R15的专用功能各是什么? 答:1)寄存器R13保存堆栈指针SP;2)寄存器R14用作子程序链接寄存器,也称为LR ,用以保存返回地址;3)R15(PC)用作程序计数器。 3.目前使用的嵌入式操作系统主要有哪些?请举出六种较常用的。 Windows CE/Windows Mobile、VxWork、Linux、uC/os、Symbian、QNX、webOS、ios 任选六 4.ARM处理器的工作模式有哪几种? 答:1)正常用户模式(usr); 2)快速中断模式(fiq); 3)普通中断模式(irq); 4)操作系统保护模式(svc)或管理模式; 5)数据访问中止模式(abt); 6)处理未定义指令的未定义模式(und);

嵌入式开发必须具备哪些基础知识

嵌入式开发必须具备哪些基础知识 嵌入式操作系统简介 嵌入式操作系统(EmbeddedSystem)是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、硬盘、Modem等均是由嵌入式处理器控制的。 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set TopBox)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。 为什么要学嵌入式软件开发?好处是什么? (1)目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、MPEG技术、无线通信协议等),掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。 (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。搞企业应用软件的IT企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的需求和完成时间都得按客户要求改变,往往疲于奔命,重复劳动。相比而言,搞嵌

第1章嵌入式系统概述

第1章嵌入式系统概述 (1)举出3个本书中未提到的嵌入式系统的例子。 答:键盘、鼠标、扫描仪。 (2)什么叫嵌入式系统? 答:嵌入到对象体系中的专用计算机应用系统。 (3)什么叫嵌入式处理器?嵌入式处理器分为哪几类? 答:嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。分为3类:1.注重尺寸、能耗和价格;2.关注性能;3.关注全部4个需求——性能、尺寸、能耗和价格。 (4)什么是嵌入式操作系统?为何要使用嵌入式操作系统? 答:嵌入式操作系统是操作系统的一种类型,是在传统操作系统的基础上加入符合嵌入式系统要求的元素发展而来的。原因:1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期。3.充分发挥了32位CPU的多任务潜力。 第2章ARM7体系结构 1.基础知识 (1)ARM7TDMI中的T、D、M、I的含义是什么? 答:T:高密度16位Thumb指令集扩展;D:支持片上调试;M:64位乘法指令;I:Embedded ICE硬件仿真功能模块。 (2)ARM7TDMI采用几级流水线?使用何种存储器编址方式? 答:3级;冯·诺依曼结构。 (3)ARM处理器模式和ARM处理器状态有何区别? 答:ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。 (4)分别列举ARM的处理器模式和状态? 答:ARM的处理器模式:用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速模式;ARM的处理器状态:ARM状态、Thumb状态。 (5)PC和LR分别使用哪个寄存器? 答:PC:R15;LR:R14。 (6)R13寄存器的通用功能是什么? 答:堆栈指针SP。 (7)CPSR寄存器中哪些位用来定义处理器状态?

嵌入式Linu 系统开发教程很完整的习题答案

参考答案 第一章 一、填空题。 1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力以实现某些特定的功能。 2、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 3、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。 4、嵌入式处理器目前主要有ARM、MIPS、Power PC、68K等,其中arm

处理器有三大特点:体积小、低功耗、的成本和高性能,16/32位双指令集,全球合作伙伴众多。 5、常见的嵌入式操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II 和eCOS。 6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。 二、选择题 1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:、存储器(SDRAM、ROM等)、设备I/O接口等。(A) A、嵌入式处理器 B、嵌入式控制器 C、单片机 D、集成芯片 2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为,并作为一种软件平台逐步成

为目前国际嵌入式系统的主流。(D) A、分时多任务操作系统 B、多任务操作系统 C、实时操作系统 D、实时多任务操作系统 3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是。(B) A、Palm B、VxWorks C、Linux D、WinCE 4、嵌入式系统设计过程中一般需要考虑的因素不包括:(D) A、性能 B、功耗 C、价格 D、大小 5、在嵌入式系统中比较流行的主流程序有:(A)

基于STM32的嵌入式软件开发基础-实验指导书(经典)

实验一基于STM32的嵌入式软件开发基础实验 一、实验目的 1 、掌握嵌入式软件开发流程 2 、学会使用嵌入式软件开发工具 3 、学会使用无限循环架构开发简单的嵌入式应用程序 4 、学会使用单步∕全速运行、设置断点和观察变量∕寄存器等方法调试嵌入式应用程序 5 、掌握通用数字输入输出(GPIO)和系统定时器(SysTick)的软件开发方法 6 、理解发光二极管(LED)和按键(Push Button)的驱动原理 7 、掌握常用的延时(Delay)实现技巧 二、实验环境 1 、硬件: ALIENTEK STM32F103嵌入式开发板 2 、软件: REALVIEW MDK或IAR EWARM 三、实验内容 1 、LED点亮实验: 使用GPIO的相关知识,设计基于无限循环架构的嵌入式应用程序,点亮开发板上绿色LED和红色LED; 2 、流水灯实验一: 使用GPIO和延时循环,设计基于无限循环架构的嵌入式应用程序,使开发板上的绿色LED和红色LED先后轮流闪烁; 3 、按键控制LED实验: 使用GPIO的相关知识,设计基于无限循环架构的嵌入式应用程序,实现以下功能: 1 )当按下WK_UP按键时,开发板上的绿色LED点亮;当释放WK_UP按键时,开发板上的绿色LED熄灭; 2 )当按下KEY1按键时,开发板上的红色LED点亮;当释放KEY1按键时,开发板上的红色LED熄灭; 3 )当同时按下WK_UP和KEY1按键时,开发板上的红色LED和黄色LED同时点亮;当同时释放WK_UP和KEY1按键时,开发板上的红色LED和黄色LED同时熄灭; 4 、流水灯实验二: 使用GPIO和SysTick的相关知识,设计基于无限循环架构的嵌入式应用程序,使开发板上的绿色LED和红色LED先后轮流闪烁,每个LED点亮和熄灭的时间各为1s,并在程序中定义一个8位无符号变量来记录红色LED闪烁的次数; 调试程序,在REALVIEW MDK或IAR EWARM的调试界面中,通过在程序中设置断点,并打开变量观察窗口,加入对应的变量,全速运行,随着红色LED的闪烁,跟踪用来记录红色LED闪烁次数的8位无符号变量的变化情况;

计算机三级嵌入式系统开发技术复习

计算机三级嵌入式系统开发技术复习 重点内容(1) 嵌入式系统及三要素 定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 简单定义:嵌入到对象体系中的专用计算机系统。 三要素:嵌入式系统的三个基本要素是嵌入性、专用性与计算机系统。 (1)嵌入性是把软件嵌入到Flash存储器中, (2)专用性是指针对某个具体应用领域和场合,量体裁衣式的定制适用该场合的专用系统, (3)计算机系统是指必须具有计算机系统的组成,核心是计算机系统。 三个要素决定了嵌入式系统是嵌入到对象体系中的一种专用的计算机系统。 嵌入式系统設計与开发原则与步驟 1.設計与开发原則 既然嵌入式系统是嵌入到对象体系中的专用的计算机系统,因此嵌入式系统设计的基本原则:物尽其用。这一原则表明,嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,以最小成本实现更高的性能,同时尽可能采用高效率的设计

算法,以提高系统的整体性能,换句话说同,物尽其用就是够用就好,以最高性价比来设计嵌入式应用系统。 2、设计与开发步骤 嵌入式系统的设计步骤包括需求分析、体系结构设计、硬件设计,软件设计,执行机构设计、系统集成和系统测试。各个阶段之间往往要求不断的修改,直至完成最终设计目标。 ARM存储模式 关于存储模式:大端模式和小端模式,靠GPE8(ENDIAN)高低电平决定,高电平大端模式,低电平小端模式。让GPE8工作于功能1模式控制。掌握大小端模式存储结构。 已知一个32位的一个字0x87654321,存放在内存0x12000004~0x12000007中,指出对于大端模式和小端模式下,字节0x65存放的地址。 ARM指令流水线 关于指令流水线: ARM采用指令流水线技术。不同内核指令流水线的级数不同。采用指令流水线的作用是提高指令执行效率。有3、5、6、7、8级不等。 对于一个具有1条8级指令流水线的ARM处理器,假设每1级所需要的时间为1ns,求这种ARM处理器执行4000条指令最快所需要的时间。如果有两条这样的指令流水线那? ARM常用指令

相关文档
最新文档