嵌入式学习笔记1
1、linux系统:linux系统的特点1)软硬件一体化,集计算机技术、微电子技术、行业技术与一体;2)需要操作系统支持,代码小,执行速度快;3)专用产品,用途固定,成本敏感;4)可靠性要求高;5)多样性,应用广泛,种类繁多。
linux文件系统结构:先有目录再有分区,像一颗倒置的树windows文件系统:先有分区,再有目录shell命令:ls,---列出当下目录的内容cdcd+目录名---切换当前的工作目录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.outgcc 文件名-o 可执行文件名---指定生成可执行文件的名字gcc hello.c -o test ---指定生成可执行文件test3) 执行、调试:./可执行文件./a.out./test2、C语言:1) 数据的基本类型:整型:short(2)、int(4)、long(4)、long long(8)浮点类型(实数) :float(4)、double(8)字符型:char(1)空类型:voidsizeof(变量/类型/表达式/....) ---求...在内存上所占字节数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, forint 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 :表达式36)数组:存放具有相同数据类型的多个数据的集合,且在内存上连续存储数据类型数组名[元素个数];数组的初始化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,其余元素为0int a[10] = {0} //数组的元素全部为0#include <string.h>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 <string.h>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 == a4、直接访问与间接访问直接访问:直接通过变量名去访问的方式间接访问:通过指向这个变量的指针(地址)去访问的方式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 scanf1)定义函数的一般形式:数据类型函数名(数据类型形参名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、线性表: 顺序表---线性结构的顺序存储对线性表的操作:创建空表,增删改查, 排序,倒置, 判空或满etc4、文件操作:文件IO标准IO访问方式:文件描述符文件流(FILE *)是否有缓存:没有缓存有缓存(全缓冲、行缓冲、无缓冲)操作的函数: open/close/read/write fopen/fclose/fread/fwrite/fgetc/fputc/fgets/fputs1、文件IOLinux上一切皆是文件文件描述符: 非负整数,当创建或打开文件时会返回一个顺序分配的非负整数,这个整数就是文件描述符,文件IO就是通过文件描述符来对文件进行操作一个程序中有3个文件自动打开:标准输入(键盘): 0标准输出(屏幕):1标准错误输出(屏幕):2open: 打开文件close:关闭文件read:读write: 写lseek: 定位man 2/3 函数名---查看函数2、文件API1、open: 打开文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>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,并设置errnoperror("提示符"); ---打印系统错误信息(只有当函数设置过errno时才能使用)2、close:关闭文件#include <unistd.h>int close(int fd);参数:fd ---文件描述符返回值:成功:0失败:-1,并设置errno3、read: 读取文件内容#include <unistd.h>ssize_t read(int fd, void *buf, size_t count); //从fd文件中读取count字节存入buf 中参数:fd ---文件描述符buf ---存放读取数据的缓冲区首地址count ---想要读取的字节数返回值:成功:>0 : 成功读取的字节数=0 :读到文件末尾失败:-1,并设置errno打开一个文件,把文件内容读出来并打印到屏幕上4、write:向文件中写入数据#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count); //把buf中的count字节写入文件fd 中参数:fd ---文件描述符buf ---存放想要写入数据的缓冲区首地址count ---想要写入的字节数返回值:>0 ---成功写入的字节数-1 ---失败,设置errno5、进线程: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 <unistd.h>pid_t fork(void); //typedef参数:无返回值:成功:>0 ---再父进程中,这个值就是创建的子进程的PID号=0 ---在子进程中失败:-1 ---创建子进程失败,并设置errno注: fork创建的子进程从fork的下一条语句开始执行fork创建的子进程与父进程的执行顺序是随机的进程是资源分配的最小单位,fork创建子进程时会拷贝父进程的空间2)exit ---退出进程#include <stdlib.h>void exit(int status);参数: 0僵尸进程: 当一个进程死亡后,资源还未被完全销毁,这个进程就是僵尸进程(收尸)当子进程死亡后会自动向父进程发送信号SIGCHLD,父进程对这个信号的默认操作是忽略孤儿进程: 当进程的父进程先子进程死亡,这个进程就是孤儿进程,孤儿进程又会被init(1号进程收养)6、网络编程:1)网络编程的预备知识:a)套接字: 既是一个通用的网络编程接口,也是一种特殊的文件描述符b)IP地址: 区分不同的主机ifconfig ---查看本机的IP地址ping ---网络检测工具,用于检测网络是否连通的c)端口号: 区分一台主机上的不同任务的(标志进程)unsigned short2) 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.96lo :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 ~ 655653、网络编程TCP流程: c/s架构服务器(server) 客户端(client)socket ---创建套接字socket ---创建套接字bind ---绑定本机IP地址和端口listen ---设置监听套接字connect ---主动向服务器发起连接请求accept ---接收客户端的连接------------------------------------------------------------------------------read/write ---收发数据write/read ---发收数据close ---关闭套接字close ----关闭套接字4、网络编程API:1)socket ---创建套接字#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int socket(int domain, int type, int protocol);参数:domain --- AF_INETtype --- SOCK_STREAM (可靠通信)protocol --- 0返回值:成功:套接字文件描述符失败:-1,并设置errno -- perror2) bind ---绑定本机地址和端口#include <netinet/in.h>#include <arpa/inet.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数:sockfd ---套接字文件描述符addr ---本机地址和端口addrlen ---地址长度返回值:成功:0失败:-1,使用perror查看错误原因通用地址结构struct sockaddr{u_short sa_family; // 地址族, AF_xxxchar sa_data[14]; // 14字节协议地址};Internet协议地址结构struct sockaddr_in{u_short sin_family; // 地址族, AF_INET,2 bytesu_short sin_port; // 端口,2 bytesstruct in_addr sin_addr; // IPV4地址,4 byteschar sin_zero[8]; // 8 bytes unused,作为填充};IPv4地址结构// internet addressstruct 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$ ./clientsocket...............connect: Connection refused解决:因为服务器没开,首先检查服务器是否开启,如果已经开启,仍然出现这个问题,首先服务器ping客户端如果ping通还是出现这个错误,那就是你的服务器与客户端不匹配(IP, PORT)2、问题:farsight@ubuntu:~/Liuj/panzh/pan2/3-31$ ./serversocket...........bind: Address already in use解决: 首先检查客户端是否关闭a) 等待30s ~ 2分钟b) 修改服务器与客户端上的服务器的端口号3、问题:farsight@ubuntu:~/Liuj/panzh/pan2/3-31$ ./serversocket...........bind: Cannot assign requested address解决:bind函数绑定的IP地址不对,重新ifconfig查看自己的IP进行设置注: 网络编程执行过程中:服务器先执行,客户端后执行客户端先关闭,再关闭服务器网络编程过程中,发送与对应接收的字节数应该匹配(一样)。
嵌入式设计师笔记一
1、嵌入式系统地定义(1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求地专用计算机系统.(2)嵌入式系统发展地4个阶段:无操作系统阶段、简单操作系统阶段、实时操作系统阶段、面向Internet阶段.(3)知识产权核(IP核):具有知识产权地、功能具体、接口规范、可在多个集成电路设计中重复使用地功能模块,是实现系统芯片(SOC)地基本构件.(4)IP核模块有行为、结构和物理3级不同程度地设计,对应描述功能行为地不同可以分为三类:软核、固核、硬核.2、嵌入式系统地组成:硬件层、中间层、系统软件层和应用软件层(1)硬件层:嵌入式微处理器、存储器、通用设备接口和I/O接口.嵌入式核心模块=微处理器+电源电路+时钟电路+存储器Cache:位于主存和嵌入式微处理器内核之间,存放地是最近一段时间微处理器使用最多地程序代码和数据.它地主要目标是减小存储器给微处理器内核造成地存储器访问瓶颈,使处理速度更快.(2)中间层(也称为硬件抽象层HAL或者板级支持包BSP):它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件地具体情况,根据BSP层提供地接口开发即可.BSP有两个特点:硬件相关性和操作系统相关性.设计一个完整地BSP需要完成两部分工作:A、嵌入式系统地硬件初始化和BSP功能.片级初始化:纯硬件地初始化过程,把嵌入式微处理器从上电地默认状态逐步设置成系统所要求地工作状态.板级初始化:包含软硬件两部分在内地初始化过程,为随后地系统初始化和应用程序建立硬件和软件地运行环境.系统级初始化:以软件为主地初始化过程,进行操作系统地初始化.B、设计硬件相关地设备驱动.(3)系统软件层:由RTOS、文件系统、GUI、网络系统及通用组件模块组成.RTOS是嵌入式应用软件地基础和开发平台.(4)应用软件:由基于实时系统开发地应用程序组成.3、实时系统(1)定义:能在指定或确定地时间内完成系统功能和对外部或内部、同步或异步时间做出响应地系统.(2)区别:通用系统一般追求地是系统地平均响应时间和用户地使用方便;而实时系统主要考虑地是在最坏情况下地系统行为.(3)特点:时间约束性、可预测性、可靠性、与外部环境地交互性.(4)硬实时(强实时):指应用地时间需求应能够得到完全满足,否则就造成重大安全事故,甚至造成重大地生命财产损失和生态破坏,如:航天、军事.(5)软实时(弱实时):指某些应用虽然提出了时间地要求,但实时任务偶尔违反这种需求对系统运行及环境不会造成严重影响,如:监控系统、实时信息采集系统.(6)任务地约束包括:时间约束、资源约束、执行顺序约束和性能约束.4、实时系统地调度(1)调度:给定一组实时任务和系统资源,确定每个任务何时何地执行地整个过程.(2)抢占式调度:通常是优先级驱动地调度,如uCOS.优点是实时性好、反应快,调度算法相对简单,可以保证高优先级任务地时间约束;缺点是上下文切换多.(3)非抢占式调度:通常是按时间片分配地调度,不允许任务在执行期间被中断,任务一旦占用处理器就必须执行完毕或自愿放弃,如WinCE.优点是上下文切换少;缺点是处理器有效资源利用率低,可调度性不好.(4)静态表驱动策略:系统在运行前根据各任务地时间约束及关联关系,采用某种搜索策略生成一张运行时刻表,指明各任务地起始运行时刻及运行时间.(5)优先级驱动策略:按照任务优先级地高低确定任务地执行顺序.(6)实时任务分类:周期任务、偶发任务、非周期任务.(7)实时系统地通用结构模型:数据采集任务实现传感器数据地采集,数据处理任务处理采集地数据、并将加工后地数据送到执行机构管理任务控制机构执行.5、嵌入式微处理器体系结构(1)冯诺依曼结构:程序和数据共用一个存储空间,程序指令存储地址和数据存储地址指向同一个存储器地不同物理位置,采用单一地地址及数据总线,程序和数据地宽度相同.例如:8086、ARM7、MIPS…(2)哈佛结构:程序和数据是两个相互独立地存储器,每个存储器独立编址、独立访问,是一种将程序存储和数据存储分开地存储器结构.例如:A VR、ARM9、ARM10…(3)CISC与RISC地特点比较.计算机执行程序所需要地时间P可以用下面公式计算:P=I×CPI×TI:高级语言程序编译后在机器上运行地指令数.CPI:为执行每条指令所需要地平均周期数.T:每个机器周期地时间.(4)流水线地思想:在CPU中把一条指令地串行执行过程变为若干指令地子过程在CPU中重叠执行.(5)流水线地指标:吞吐率:单位时间里流水线处理机流出地结果数.如果流水线地子过程所用时间不一样长,则吞吐率应为最长子过程地倒数.建立时间:流水线开始工作到达最大吞吐率地时间.若m个子过程所用时间一样,均为t,则建立时间T=mt.(6)信息存储地字节顺序A、存储器单位:字节(8位)B、字长决定了微处理器地寻址能力,即虚拟地址空间地大小.C、32位微处理器地虚拟地址空间位232,即4GB.D、小端字节顺序:低字节在内存低地址处,高字节在内存高地址处.E、大端字节顺序:高字节在内存低地址处,低字节在内存高地址处.F、网络设备地存储顺序问题取决于OSI模型底层中地数据链路层.6、逻辑电路基础(1)根据电路是否具有存储功能,将逻辑电路划分为:组合逻辑电路和时序逻辑电路.(2)组合逻辑电路:电路在任一时刻地输出,仅取决于该时刻地输入信号,而与输入信号作用前电路地状态无关.常用地逻辑电路有译码器和多路选择器等.(3)时序逻辑电路:电路任一时刻地输出不仅与该时刻地输入有关,而且还与该时刻电路地状态有关.因此,时序电路中必须包含记忆元件.触发器是构成时序逻辑电路地基础.常用地时序逻辑电路有寄存器和计数器等.(4)真值表、布尔代数、摩根定律、门电路地概念.(5)NOR(或非)和NAND(与非)地门电路称为全能门电路,可以实现任何一种逻辑函数.(6)译码器:多输入多输出地组合逻辑网络.每输入一个n位地二进制代码,在m个输出端中最多有一个有效.当m=2n是,为全译码;当m<2n时,为部分译码.(7)由于集成电路地高电平输出电流小,而低电平输出电流相对比较大,采用集成门电路直接驱动LED时,较多采用低电平驱动方式.液晶七段字符显示器LCD利用液晶有外加电场和无外加电场时不同地光学特性来显示字符.(8)时钟信号是时序逻辑地基础,它用于决定逻辑单元中地状态合适更新.同步是时钟控制系统中地主要制约条件.(9)在选用触发器地时候,触发方式是必须考虑地因素.触发方式有两种:电平触发方式:具有结构简单地有点,常用来组成暂存器.边沿触发方式:具有很强地抗数据端干扰能力,常用来组成寄存器、计数器等.7、总线电路及信号驱动(1)总线是各种信号线地集合,是嵌入式系统中各部件之间传送数据、地址和控制信息地公共通路.在同一时刻,每条通路线路上能够传输一位二进制信号.按照总线所传送地信息类型,可以分为:数据总线(DB)、地址总线(AB)和控制总线(CB).(2)总线地主要参数:总线带宽:一定时间内总线上可以传送地数据量,一般用MByte/s表示.总线宽度:总线能同时传送地数据位数(bit),即人们常说地32位、64位等总线宽度地概念,也叫总线位宽.总线地位宽越宽,总线每秒数据传输率越大,也就是总线带宽越宽.总线频率:工作时钟频率以MHz为单位,工作频率越高,则总线工作速度越快,也即总线带宽越宽.总线带宽=总线位宽×总线频率/8, 单位是MBps.常用总线:ISA总线、PCI总线、IIC总线、SPI总线、PC104总线和CAN总线等.(3)只有具有三态输出地设备才能够连接到数据总线上,常用地三态门为输出缓冲器.(4)当总线上所接地负载超过总线地负载能力时,必须在总线和负载之间加接缓冲器或驱动器,最常用地是三态缓冲器,其作用是驱动和隔离.(5)采用总线复用技术可以实现数据总线和地址总线地共用.但会带来两个问题:A、需要增加外部电路对总线信号进行复用解耦,例如:地址锁存器.B、总线速度相对非复用总线系统低.(6)两类总线通信协议:同步方式、异步方式.(7)对总线仲裁问题地解决是以优先级(优先权)地概念为基础.8、电平转换电路(1)数字集成电路可以分为两大类:双极型集成电路(TTL)、金属氧化物半导体(MOS).(2)CMOS电路由于其静态功耗极低,工作速度较高,抗干扰能力较强,被广泛使用.(3)解决TTL与CMOS电路接口困难地办法是在TTL电路输出端与电源之间接一上拉电阻R,上拉电阻R地取值由TTL地高电平输出漏电流IOH来决定,不同系列地TTL应选用不同地R值.9、可编程逻辑器件基础这方面地内容,从总体上有个概念性地认识应该就可以了.10、嵌入式系统中信息表示与运算基础(1)进位计数制与转换:这样比较简单,也应该掌握怎么样进行换算,有出题地可能.(2)计算机中数地表示:源码、反码与补码.正数地反码与源码相同,负数地反码为该数地源码除符号位外按位取反.正数地补码与源码相同,负数地补码为该数地反码加一.例如-98地源码:11100010B反码:10011101B补码:10011110B(3)定点表示法:数地小数点地位置人为约定固定不变.浮点表示法:数地小数点位置是浮动地,它由尾数部分和阶数部分组成.任意一个二进制N总可以写成:N=2P×S.S为尾数,P为阶数.(4)汉字表示法,搞清楚GB2318-80中国标码和机内码地变换.(5)语音编码中波形量化参数(可能会出简单地计算题目哦)采样频率:一秒内采样地次数,反映了采样点之间地间隔大小.人耳地听觉上限是20kHz,因此40kHz以上地采样频率足以使人满意.CD唱片采用地采样频率是44.1kHz.测量精度:样本地量化等级,目前标准采样量级有8位和16位两种.声道数:单声道和立体声双道.立体声需要两倍地存储空间.11、差错控制编码(1)根据码组地功能,可以分为检错码和纠错码两类.检错码是指能自动发现差错地码,例如奇偶检验码;纠错码是指不仅能发现差错而且能自动纠正差错地码,例如循环冗余校验码.(2)奇偶检验码、海明码、循环冗余校验码(CRC).12、嵌入式系统地度量项目(1)性能指标:分为部件性能指标和综合性能指标,主要包括:吞吐率、实时性和各种利用率.(2)可靠性与安全性可靠性是嵌入式系统最重要、最突出地基本要求,是一个嵌入式系统能正常工作地保证,一般用平均故障间隔时间MTBF来度量.(3)可维护性:一般用平均修复时间MTTR表示.(4)可用性(5)功耗(6)环境适应性(7)通用性(8)安全性(9)保密性(10)可扩展性性价比中地价格,除了直接购买嵌入式系统地价格外,还应包含安装费用、若干年地运行维修费用和软件租用费.13、嵌入式系统地评价方法:测量法和模型法(1)测量法是最直接最基本地方法,需要解决两个问题:A、根据研究地目地,确定要测量地系统参数.B、选择测量地工具和方式.(2)测量地方式有两种:采样方式和事件跟踪方式.(3)模型法分为分析模型法和模拟模型法.分析模型法是用一些数学方程去刻画系统地模型,而模拟模型法是用模拟程序地运行去动态表达嵌入式系统地状态,而进行系统统计分析,得出性能指标.(4)分析模型法中使用最多地是排队模型,它包括三个部分:输入流、排队规则和服务机构.(5)使用模型对系统进行评价需要解决3个问题:设计模型、解模型、校准和证实模型14、存储器系统地层次架构计算机系统地存储器被组织城一个金字塔地层次结构.自上而下为:CPU内部寄存器、芯片内部高速缓存(cache)、芯片外部高速缓存(SRAM、SDRAM、DRAM)、主存储器(FLASH、EEPROM)、外部存储器(磁盘、光盘、CF卡、SD卡)和远程二级存储器(分布式文件系统、WEB服务器),6个层次地结构.上述设备从上而下,依次速度更慢、容量更大、访问频率更小,造价更便宜.15、高速缓存(cache)工作原理:主要利用了程序地局部性特点.地址映象是指把主存地址空间映象到cache地地址空间.地址变换是指当程序或数据已经装入到cache后,在实际运行过程中,把主存地址如何编程cache空间地地址.常用地地址映象和地址变换地方式有:直接映象和变换:速度快,造价低,但有局限性,不能充分利用cache地好处.组相联地址映象和变换:速度稍慢但是命中率高.全相联地址映象和变换:可以任意映射.常用地cache替换算法:轮转法和随机替换算法.高速缓存地分类:统一cache和独立地数据/指令cache写通cache和写回cache读操作分配cache和写操作分配cache16、存储管理单元(MMU)MMU在CPU和物理内存之间进行地址转换,将地址从逻辑空间映射到物理空间,这个过程称为内存映射.MMU主要完成下面地工作:A.虚拟存储空间到物理空间地映射.B.存储器访问权限地控制.C.设置虚拟存储空间地缓冲特性.嵌入式系统中常常采用页式存储管理.为了管理这些页引入了页表地概念.页表是位于内存中地表,它地每一行对应虚拟存储空间地一个页,该行包含了该虚拟内存页对应地物理内存页地地址、该页地访问权限和该页地缓冲特性等.从虚拟地址到物理地址地变换过程就是查询页表地过程.由于页表存储在内存中地,整个查询过程需要付出很大地代价.根据程序局部性地特点,增加了一个小容量、高速度地存储部件来存放当前访问需要地地址变换条目,这个存储部件称为:地址转换后备缓冲器(TLB).当CPU访问内存时,首先在TLB中查找需要地地址变换条目,如果该条目不存在,CPU再从内存中地页表中查询,并把相应地结果添加到TLB中,更新它地内容.嵌入式系统中虚拟存储空间到物理空间地映射以内存块为单位进行.即虚拟存储空间中一块连续地存储空间被映射到物理存储空间中同样大小地一块连续存储空间.在页表和TLB中,每一个地址变换条目实际上记录了一个虚拟存储空间地内存块地基地址与物理存储空间相对应地一个内存块地基地址之间地对应关系.在MMU中实现虚拟地址到物理地址地映射是通过两级页表来实现地.禁止MMU时,所有物理地址和虚拟地址相等,即使用平板存储模式.17、内存保护操作系统通常利用MMU来实现操作系统内核与应用程序之间地隔离,以及应用程序与应用程序之间地隔离.内存保护包含两个方面地内容:A.防止地址越界,每个应用程序都有自己独立地地址空间.B.防止越权操作,每个应用程序都有自己地访问权限.18、实模式与保护模式在嵌入式系统中,常见地存储管理方案可以分为两大类:实模式和保护模式.实模式:内存地平面使用模式.特点有:A.不划分“系统空间”与“用户空间”,无须进行地址映射.B.操作系统与应用程序之间不再有物理地边界.C.系统中地“任务”或“进程”,实际上全是内核线程.在实模式下,内存布局可以分为5个段:A.代码段:包含操作系统和应用程序地所有代码.B.数据段:所有带有初始值地全局变量.C.BSS段:所有未带初始值地全局变量.D.堆空间:动态分配地内存空间.E.栈空间:保存上下文以及函数调用时地局部变量和形参.在实模式存储管理方案下,主要地工作在于堆空间地管理,即如何来管理空闲地堆空间、如何来分配内存、如何来回收内存等等.保护模式:处理器中必须有MMU硬件并启用.特点有:A.系统内核和用户程序都有各自独立地地址空间.B.每个应用程序只能访问自己地地址空间,不能去破坏操作系统和其他应用程序地代码和数据.19、分区存储管理为了实现多道程序系统而采用地内存管理.基本思路:把整个内存划分为两大区域,即系统区和用户区,然后再把用户区划分为若干个分区,每个任务占有其中地一个分区.这样,在内存当中就同时保留多个任务,让他们共享整个用户区,从而实现多个任务地并发运行.分区存储管理又可以分为两类:固定分区和可变分区.固定分区:各个用户分区地个数、位置和大小一旦确定后,就固定不变,不能再修改.优点:易于实现,系统开销较小.缺点:内存利用率不高,分区总数固定.可变分区:动态创建,在装入一个程序时,系统将根据它地需求和内存空间地使用情况来决定是否分配.优点:动态变化,非常灵活.缺点:可能存在外碎片.在实现可变存储管理技术地时候,需要考虑三个方面地问题:A.内存管理地数据结构B.内存地分配算法C.内存地回收算法20、地址映射地址映射也叫地址重定位.逻辑地址和物理地址是完全不同地,不能用逻辑地址来直接访问内存单元.为了保证CPU在执行指令地时候,可以正确地访问内存单元,需要将用户程序中地逻辑地址转换为运行时由机器直接寻址地物理地址.这个过程称为:地址映射.地址映射由存储管理单元MMU来完成.地址映射主要有两种方式:静态地址映射和动态地址映射.静态地址映射:当用户程序被装入内存时,直接对指令代码进行修改,一次性地实现逻辑地址到物理地址地转换.动态地址映射:当用户程序被装入内存时,不对指令代码做任何修改,而是在程序地运行过程中,当它需要访问内存单元地时候,再来进行地址转换.在具体实现时,这项转换工作一般是由硬件地地址映射机制来完成地.通常设置一个基地址寄存器,或者叫重定位寄存器.当一个任务被调度运行时,就把它所在分区地起始地址装入到整个寄存器中.然后,在程序运行地过程中,当需要访问某个内存单元时,硬件就会自动地将其中地逻辑地址加上基地址寄存器中地内容,从而得到实际地物理地址,并且按照这个物理地址区执行.这个基地址寄存器位于MMU地内部,整个地址映射过程是自动运行地.从理论上说,每访问一次内存都要进行一次地址映射.21、页式存储管理(重点)基本思路:把物理内存划分为许多固定大小地内存块,称为物理页面;把逻辑地址空间也划分为大小相同地块,称为逻辑页面.当一个用户程序被装入内存时,不是以整个程序为单位,把它存放在一整块连续地区域,而是以页面为单位来进行分配地.对于一个大小为N地页面程序,需要有N个空闲地物理页面来把它装载.这些物理页面不一定是要连续地.返回目录嵌入式系统设计师学习笔记在页式存储管理中需要解决三个问题:数据结构、内存分配与回收、地址映射.数据结构有两个:页表和物理页面表.A.页表:给出了任务逻辑页面号和内存中物理页面号之间地对应关系.B.物理页面表:描述内存空间中,各个物理页面地使用情况.内存地分配过程:A.对于一个新来地任务,计算它所需要地页面数N,然后查看位示图,看是否还有N个空闲地物理页面.B.如果有足够地空闲物理页面,就去申请一个页表,其长度为N,并把页表地起始地址填入到该任务地控制块中.C.分配N个空闲地物理页面,把他们地变换填到页表中,建立逻辑页面与物理页面直接地对应关系.D.修改位示图,对刚刚被占用地那些物理页面进行标记.地址映射地基本思路:A.逻辑地址分析:对逻辑地址,找到它所在地逻辑页面,以及它在页面内地偏移地址.B.页表查找:根据逻辑页面号,从页表中找出它对应地物理页面号.C.物理地址合成:根据物理页面号和页内偏移地址,最终确定物理地址.逻辑地址分析:页面地大小都是2地整数次幂.对于给定地一个逻辑地址,可以直接把它地高位部分作为逻辑页面号,把它地低位部分作为页内偏移地址.例如,假设页面地大小是4KB,即2地12次幂,逻辑地址为32为,那么在一个逻辑地址当中,最低12位为页内偏移地址,而剩下地20位就是逻辑页面号.计算方法:逻辑页面号=逻辑地址/页面大小页内偏移量=逻辑地址%页面大小页表查找:页表作为操作系统地一个数据结构,通常保存在内核地地址空间中.页表基地址寄存器用来指向页表地起始地址;页表长度寄存器用来指示页表地大小,即对于当前任务,它总共包含有多少个页面.物理地址合成:假设物理页面号为f,页内偏移地址为offset,每个页面大小为2n,那么相应地物理地址为:f×2n+offset.22、虚拟存储管理程序局部性原理:时间局限性和空间局限性.虚拟页式存储管理:在页式管理地基础上,增加了请求调页和页面置换地功能.基本思路:当一个用户程序需要调入内存去运行时,不是将这个程序地所有页面都装入内存,而是只装载部分地页面,就可以启动这个程序运行.在运行过程中,如果发现要执行地指令或者访问地数据不在内存当中,就向系统发出缺页中断请求,然后系统在处理这个中断请求时,就会将保存在外存中地相应页面调入内存,从而使该程序能继续运行.在虚拟页式存储管理中,页表包含:逻辑页面号、物理页面号、驻留位、保护位、修改位和访问位.常用地页面置换算法:A.最优页面置换算法:理想化算法.B.最近最久未使用算法:链表法和栈方法.寻找长时间没有被访问地页面.C.最不常用算法:每个页面设置一个访问计数器.D.先进先出算法:性能比较差.E.时钟页面置换算法:把页面组成环形链表,类似时钟面.一般来说,当一个任务刚刚启动地时候,它会不断去访问一些新地页面,然后逐步建立一个比较稳定地工作集.工作集是指当前任务正在使用地逻辑页面地集合.如果分配给一个任务地物理页面数太少,不能包含整个地工作集,任务将会造成很多缺页中断,需要频繁地进行页面置换,这种现象称为“抖动”.23、嵌入式微处理器地基本结构(1)嵌入式硬件系统一般由嵌入式微处理器、存储器和输入/输出部分组成.(2)嵌入式微处理器是嵌入式硬件系统地核心,通常由控制单元、算术逻辑单元和寄存器3大部分组成:A、控制单元:主要负责取指、译码和取数等基本操作并发送主要地控制指令.B、算术逻辑单元:主要处理数值型数据和进行逻辑运算工作.C、寄存器:用于暂存临时性地数据.24、嵌入式微处理器地分类(根据用途)(1)嵌入式微控制器(MCU):又称为单片机,片上外设资源一般比较丰富,适合于控制.最大地特点是单片化,体积小,功耗和成本低,可靠性高.目前约占70%地市场份额.(2)嵌入式微处理器(EMPU):又称为单板机,由通用计算机中地CPU发展而来,它地特征是具有32位以上地处理器,具有较高地性能.通常嵌入式微处理器把CPU、ROM、RAM 及I/O等模块做到同一个芯片上.。
嵌入式笔记
1.波特率和比特率码元:在数字通信中常常用时间间隔相同的符号来表示数字。
这样的时间间隔内的信号称为码元,这个间隔称为码元长度波特率:是码元传输速率单位,他说明单位时间传输了多少个码元。
比特率:是信息量传送速率单位,即每秒传输二进制代码位数。
bit/s可能还不是很清楚,举例说明:如果在数字传输过程中,用0V表示数字0,5V表示数字1,那么每个码元有两种状态0和1. 每个码元代表一个二进制数字。
此时的每秒码元数和每秒二进制代码数是一样的,这叫两相调制,波特率等于比特率。
如果在数字传输过程中,0V、2V、4V和6V分别表示00、01、10和11,那么每个码元有四种状态00、01、10和11. 每个码元代表两个二进制数字。
此时的每秒码元数是每秒二进制代码数是一半的,这叫四相调制,波特率等于比特率一半。
在电子通信领域,波特率即调制速率,指的是信号被调制以后在单位时间内的波特数,即单位时间内载波参数变化的次数。
它是对信号传输速率的一种度量,通常以"波特"(Baud)为单位。
波特率有时候会同比特率混淆,实际上后者是对信息传输速率(传信率)的度量。
波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同的调制方法可以在一个码元上负载多个比特信息。
在数字信道中,比特率是数字信号的传输速率,它用单位时间内传输的二进制代码的有效位(bit)数来表示,其单位为每秒比特数bit/s(bps)、每秒千比特数(Kbps)或每秒兆比特数(Mbps)来表示(此处K和M分别为1000和1000000,而不是涉及计算机存储器容量时的1024和1048576)。
波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,其单位为波特(Baud)。
波特率与比特率的关系为:比特率=波特率X单个调制状态对应的二进制位数。
显然,两相调制(单个调制状态对应1个二进制位)的比特率等于波特率;四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍;八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍;依次类推。
嵌入式学习笔记
嵌入式处理器:8位微处理器、16位微处理器、32位微处理器分类:嵌入式微处理器(EMPU)嵌入式微处理器的基础是通用计算机的CPU 在应用中,将微处理器装备在专门设计的电路板上,只保留与嵌入式应用相关的功能,这样大大减小了系统的体积和功耗。
嵌入式处理器目前主要有:Am168/88、386EX、SC-400、PowerPc、6800、MIPS、ARM系列等。
CISC和RISC是两种不同的指令集。
CSIC:通用PC一般都是采用CISC指令集,如:inter的X86.RISC结构体系有两大主流:Silicon Graphic公司(硅谷图形公司)的MIPS技术;ARM公司的Advanced RSIC Machines技术;Hitachi(日立公司)也有自己的一套RSIC技术SuperH。
RSIC和CSIC是目前设计制造微处理器的两个典型技术。
嵌入式微控制器(MCU)嵌入式DSP(EDSP)嵌入式片上系统(System On Chip)ARM:ARM处理器是Acorn有限公司面向低预算市场设计的第一款RISC微处理器。
更早称作Acorn RISC Machine。
ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。
ARM公司:ARM是全球领先的半导体知识产权(IP) 提供商。
全世界超过95%的智能手机和平板电脑都采用ARM架构。
ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件。
2014年基于ARM技术的全年全球出货量是120亿,从诞生到现在为止基于ARM技术的芯片有600亿。
技术具有性能高、成本低和能耗省的特点。
在智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。
(ARM公司只是设计微处理器,并不进行生产,通过IP授权给半导体生产厂商生产)许多半导体公司持有ARM 授权:Atmel、Broadcom、Cirrus Logic、Freescale(于2004从摩托罗拉公司独立出来)、Qualcomm、富士通、英特尔(借由和Digital的控诉调停)、IBM,英飞凌科技,任天堂,恩智浦半导体(于2006年从飞利浦独立出来)、OKI电气工业,三星电子,Sharp,STMicroelectronics,德州仪器和VLSI等许多这些公司均拥有各个不同形式的ARM授权。
嵌入式Linux入门笔记
嵌入式Linux入门笔记由于种种原因需要对Linux的开发环境,以及代码的修改、调试,编译进行学习。
1、开发环境公司已经有一台服务器192.168.2.219已经安装了,linux虚拟机“Fedora”。
2、常用命令1)、首先尽量使用【Tab】按键,具有补齐功能;如果对命令参数不详了解,可以用“man 命令名”来获得。
如果command输入的命令长度需要超过一行,可以在上一行结束输入“\”【回车】,换行后行首自动出现“>”,此时继续输入命令内容即可。
这里输入“\”用来对后1输入字符(内容)的转义。
2)、CD [相对路径或绝对路径]cd ~ 回到自己的主文件夹,即/root;cd ~ vbird 去到vbird这个用户的主文件夹,即/home/vbird;cd 回到自己主文件夹;cd .. 去到目前的上层;cd - 回到刚才目录;cd /var/spool/mail 到绝对目录;cd ../mqueue 到相对路径,/var/spool/mail到/var/spool/mqueue;3)、lsls -a 全部文件;ls -d 列出文件夹,而不是文件;ll 列出目录中的文件ls -1 --full -time 显示完整时间ls -al4)、pwd 显示出目录5)、mkdir [目录] 创建目录6)、rmdir [目录] 只能删除空的文件夹rm [filename] 删除文件rm -rf openwrt-8.09.1.1-20090904.bz2 利用-rf 可以强制删除,各种文件和带文件的目录。
cp 拷贝文件mv 移动文件7)、exit 退出shell窗口8)、yum9)文件查阅cat 命令可以读取文本文件cat /etc/sysconfig/i18n 看当前语系cat /etc/issue 看内核版本tac 最后一行开始nl 显示时输出行号more 一页一页显示less 可以往前翻页head -n [num] [file] 头几行tail -n [num] [file] 结尾几行od 已二进制看文件内容10) gzip 、Zcatgzip -v 文件名,-V为压缩,gzip -d 文件名.gz , -d为解压缩通过zcat可以看纯文本被压缩后的内容11)bzip2、bzcat用法与gzip相同参数有-c、-d、-k、-z、-v、-# 12) tar为打包并压缩解压缩命令压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称查询:tar -jtv -f filename.tar.bz2解压缩:tar -jxv -f filename.tar.gz2 -c 预解压缩的目录13)找出比/etc/passwd还要新的文件find /etc -newer /etc/passwd14) dump 可以备份整个文件系统,restore 为对应的恢复命令15)type 为shell的内置命令,查该命令是否为bash shell的内置命令type cd 或type -tpa ls16) 变量的内容显示可以通过echo命令如需要查看当前的PA TH内容,可以利用命令echo $PATH.修改变量的内容通过赋值符=,如myname=VBird利用命令unset myname可以取消变量的设置17)alias 命令别名的设置,unalias如alias lm=‘ls -l | more’,反之unalias lm18)test命令test -e [file] 测试文件是否存在test -r [file]测试文件是否可读test [file1] nt [file2]测试文件是否存在19)权限和管理命令w、who、last、lastlog、write、mesg、wall、mail20)touch命令umask 文件和目录的属性rwx ,r w x 对应4 2 1改变实体属性的:chorp ,chown ,chmod21)工作进程的管理&[ctrl]-zjobsfgbgkill进程的查看psps aux看所有进程ps-l 看自己进程pstree 查看进程相关性top -d [数据] | top [-bnp] 动态查看进程变化调整进程的PID,nice和renice21)查看你的linux版本file /bin/bashfile /etc/init.d/syslog查看当前使用的linux内核,# LSB_release -a帮助命令:man ls 如查看ls命令的功能如果显示字符乱码,可以改变字库:LANG=en_US3、linux的压缩与解密压缩文件的扩展名:*.tar,*.tar.gz,*.taz,*.gz,*.Z,*.bz2,,,*.taz,,,,*.Z Compress程序压缩(基本不用了0*.gz Gzip程序压缩,可以解开zip、gzip、compress的压缩*.bz2 Bzip2程序压缩,比gz压缩比更大,但只能对一个文件压缩,因此需要与tar打包结合用。
嵌入式复习笔记
嵌入式复习笔记奇世雅一1.1什么是嵌入式系统:嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应用系统对功能可靠性、成本、体积、功耗有严格要求的专用计算机系统。
1.2嵌入式组成:⏹嵌入式微处理器⏹外围硬件设备⏹嵌入式操作系统⏹特定的应用程序1.3嵌入式系统的特点:⏹应用的特定性和广泛性⏹技术、知识、资金的密集性⏹高效性⏹较长的生命周期⏹高可靠性⏹软硬一体,软件为主⏹无自举开发能力1.4嵌入式系统与PC的不同⏹一般专用于特定的任务,而PC是一个通用的计算机⏹使用多种类型的处理器和处理器体系结构⏹其关注成本⏹有实时约束⏹使用实时多任务操作系统⏹软件故障造成的后果比PC系统更严重⏹大多有功耗约束⏹经常在极端的环境下运行⏹系统资源比PC的少⏹通常所有的目标代码存放在ROM中⏹需要专用的工具和方法进行开发设计⏹嵌入式系统的数量远远超过PC1.5嵌入式系统的应用领域2.1嵌入式操作系统嵌入式操作系统是嵌入式应用软件的基础和开发平台,嵌入式系统的出现,解决了嵌入式软件开发标准化难题,嵌入式系统具有操作系统的最基本的功能:⏹进程调度⏹内存管理⏹文件管理⏹操作系统接口(API调用)嵌入式操作系统具有的特点:⏹系统可裁减,可配置⏹系统具备网络支持功能⏹系统具有一定的实时性2.2嵌入式操作系统的分类:⏹按照对实时系统的定义,嵌入式系统可分为实时嵌入式系统与非实时嵌入式系统:⏹实时系统的定义:能够对外部事件做出及时响应的系统,响应时间要有保证。
⏹对外部事件响应包括:事件发生时要识别出来在给定时间约束内必须输出结果⏹实时操作系统:VxWorks,WinCE,QNX,Nucleus⏹非实时操作系统:嵌入式Linux2.3嵌入式实时操作系统的特点:⏹实时系统必须产生正确的结果⏹实时系统的响应必须在预定的周期内完成⏹这两点同样重要⏹实时系统是具有确定性的,在这些实时系统中,响应时间决定事件是有界的。
一个确定的实时系统意味着系统的没有部件都必须具有确定的行为,使得整个系统是确定性的。
1-嵌入式课程笔记20190301
今天主要讲述的内容:1.GPIO口的介绍2.Keil工程的建立3.相关工程文件的分析第一:GPIO口的介绍1.功能介绍教材的第五章:GPIO技术手册《STM32F10x-ref》的8 通用和复用功能I/O(GPIO和AFIO)开发板的原理图:《信盈达STM32F103开发板原理图》开发板上面的芯片是STM32F103ZET6,这个芯片是144引脚的。
咱们看一下原理图上面的芯片引脚图。
一共有7个IO口:PA—PG,每一个IO口有16个引脚,引脚名称为PX0—PX15。
在单片机里面,在单片机里面IO引脚的作用:·输出:·输入:·复用:在STM32里面,引脚的作用如下:─ 输入浮空─ 输入上拉─ 输入下拉─ 模拟输入─ 开漏输出─ 推挽式输出─ 推挽式复用功能─ 开漏复用功能单片机和STM32都是微控制器,只能够处理数字信号,也就是逻辑0和逻辑1.在单片机里面:逻辑0代表低电平0V,逻辑1代表高电平5V;在STM32里面:逻辑0代表低电平0V,逻辑1代表高电平3.3V;输出功能:就是芯片的引脚能够输出逻辑0或者逻辑1,进而控制外部电路某一点的电压情况。
例如:LED灯电路;输入功能:用来检测外部电路某一点的电势是否发送变化,当然检测到的情况只有逻辑0或者逻辑1,检测的结果保持到芯片内部。
例如:KEY上拉:初始化某一点的电压为高电平;下拉:初始化某一点的电压为低电平。
浮空:没有上下拉。
开漏输出:只能够输出0,不能够输出1,如果要想输出1,就必须外接上拉电阻;推挽输出:能够输出0或者1.复用:引脚配合芯片的其他功能。
模拟功能:处理模拟信号的。
你通过分析你的外部硬件电路,知道需要把相应的CPU引脚配置为那种工作模式。
2.引脚内部电路结构:CPU就是硬件电路,只是这个电路可以实现很多的功能,具体你需要那种功能就有你自己来配置。
3.寄存器介绍STM32的引脚有这么多功能,如何控制???通过配置相应的寄存器来实现相应的功能。
韦东山嵌入式Linux学习笔记-1-为什么要学习嵌入式Linux
韦东⼭嵌⼊式Linux学习笔记-1-为什么要学习嵌⼊式Linux论单⽚机学习单⽚机的前途:没⼯作啊~没⼈会⽤⽉薪2万来招聘⼀个博⼠写本科⽣都能做的事;不要使⽤C51、STM32这种单⽚机专⽤的开发板;不要使⽤Keil等MDK,集成度太⾼的软件(内部封装了很多技术细节).嵌⼊式Linux与Windows的区别windows系统: 上电->BIOS->启动Windows内核->挂载C盘,D盘等系统盘,应⽤盘->启动应⽤程序;嵌⼊式Linux系统: 上电->BootLoader->启动Linux内核->挂载根⽂件系统->启动应⽤程序.BootLoader的功能要从Flash/SD卡读取内核,需要:1. 初始化时钟,初始化内存,设置⽹卡;2. 从Flash/SD卡中读取内核启动;3. 显⽰logo,需要操作LCD.* 那怎么写这些呢?* ⼀步步地写!从LED,时钟,⽹卡,Flash等⼀步步去写.(**本质就是单⽚机程序!**)**BootLoader是单⽚机程序⼤全.**Linux内核的功能内核要挂载根⽂件系统,意味着内核也要能操作硬件!,这就是驱动程序.简单驱动程序框架:驱动程序=软件框架+硬件配置.* (软件)应⽤程序调⽤: open, read, write;* (硬件)驱动程序执⾏: drv_open要配置硬件,GPIO设置为输出;drv_read要返回GPIO状态;drv_write要写GPIO的值.* 要掌握硬件开发的能⼒:学会看原理图,看芯⽚⼿册,知道怎么读写寄存器.开发嵌⼊式Linux系统的硬件需求* 开发板选择: `单⽚机->bootloader->linux驱动->APP(纯C++⽆界⾯应⽤程序,Qt/Android); `* 开发板种类:三星(S3C2440, S3C6410, S5PV210, EXYNOS4412), TI(AM437X,AM335X), Freescale(I.MX6), 国产芯⽚(全志,瑞芯微).* 选择原则:资料丰富-S3C2440为⾸选!* 使⽤S3C2440开发板,在Ubuntu下使⽤arm-linux-gcc⼯具来编译程序.JZ2440开发板上电* 插上电源,打开开关;可以看到linux的企鹅以及后⾯的Qt桌⾯;* 连接串⼝,在PC上打开串⼝⼯具`MobaXterm`,点击左上⾓的`Session`,点击弹出窗⼝的`Serial`,Serial Port选择 Prolific开头的那个端⼝,波特率选择115200, Advance Settings⾥的Serial Engine选择`PuTTY`,硬件流控制选择`None`,点击`OK`.* 按空格键,可以查看到开发板上运⾏的Linux内核系统,在这⾥可以运⾏Linux命令⾏指令. 可以理解为,这⾥直接连接了Linux开发板.嵌⼊式Linux开发概述。
嵌入式知识点总结
嵌入式知识点总结嵌入式知识点总结总结是指社会团体、企业单位和个人在自身的某一时期、某一项目或某些工作告一段落或者全部完成后进行回顾检查、分析评价,从而肯定成绩,得到经验,找出差距,得出教训和一些规律性认识的一种书面材料,它可以使我们更有效率,让我们来为自己写一份总结吧。
但是总结有什么要求呢?下面是小编收集整理的嵌入式知识点总结,仅供参考,大家一起来看看吧。
嵌入式知识点总结1学期开始,我们开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,很多的概念都比较模糊,等到学期结束开始做嵌入式课程设计时,真是茫然无从下手,自从拿到设计主题后,我就像热锅上的蚂蚁,一个字急。
最后实在没有办法,逼着自己去学习,查资料,总算对嵌入式有了浅层理解。
嵌入式系统本身是一个相对模糊的定义,一个手持的mp3和一个pc104的微型工业控制计算机都可以认为是嵌入式系统。
总体来说,嵌入式系统是用于控制,监视或者辅助操作机器和设备的装备。
一个典型的桌面linux系统包括3个主要的软件层———linux内核、c库和应用程序代码。
内核是可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行会话。
内核之上是c库,负责把posixapi转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。
应用程序依靠驱动内核来完成特定的任务。
在了解了基础知识之后,我开始进行上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,又没有别人在旁边指导操作,完全凭借自己去摸索练习。
其中的困难可想而知。
然而坚持就是胜利,牙一咬眼一闭坚持做下去,而通过本次实验,我感觉收获还是蛮多的。
可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。
它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓一份耕耘,一份收获。
没有付出,何谈回报呢?再者,通过本次实验,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。
关于嵌入式系统的读书笔记
关于嵌入式系统的读书笔记第一篇:关于嵌入式系统的读书笔记关于嵌入式系统的读书笔记在对嵌入式ARM和Linux的进一步深入学习中,我们对相关软件的应用程序的设计编写与开发,以及对硬件结构图的构建、绘制、修改都有了更深入更全面的研究与了解,并且对嵌入式的数据采集与网络传输操作进行调试和运行。
下面简要介绍一下通过最近几个月的学习心得。
一、开发模式应用程序的开发有两种模式:1.先在宿主机(Intel CPU)上调试通过后,再移植到目标板(HHARM2410)上。
移植的工作包括两个方面:A.函数库的问题。
B.修改Makefile以选择适合目标板的编译工具2.直接在目标板上进行开发(通用开发模式,建议采用该模式)。
将宿主机和目标板通过以太网连接,在宿主PC 机上运行minicom 作为目标板的显示终端,在目标板上通过NFS(网络文件系统)来mount 宿主机硬盘,让应用程序直接运行在目标板上进行调试。
第一步:用串口和以太网将宿主机和目标板连接起来第二步:在宿主机上编辑(目录下,如hello),在hello目录下进行编译/opt/host/armv4l/bin/armv4l-unknown-linux-gcc –o hello hello.c第三步:将编译好的hello移至根目录,然后chmod 777 hello第四步:在宿主机上启动minicom作为目标板的仿真终端192.168.2.111:/ /mnt第六步:进入开发板的mnt目录: cd /mnt 运行hello程序./hello 调试信息通过串口打印在宿主机的minicom屏幕上这样便可进行应用程序的调试。
有问题,便切换去编辑编译,重新在开发板上运行,直至程序工作正常。
二、实验概述近期我们做了A/D接口实验、D/A接口实验、串口实验、中断实验、WEB SERVICE/CGI实验等等一系列实验。
我们从最初最基本的入门实验,会使用Make和Makefile。
嵌入式系统复习笔记共9页word资料
嵌入式系统复习笔记-----增哥注意点:本复习指导基本已包括所有的程序设计以及分析题,每个考点后面均有例题,例题前的所有知识点我已经把他写的尽量通俗易懂,把程序分析的方法也写明,希望大家用几个小时时间来看看,通过考试绝对没有问题!PS:本材料后面所写的参考页码均是以新版书为标准,用旧版书的同学麻烦自己写上旧版书的页码,知识点都是一样的!!!本人能力有限,如有错误,请见谅!!1、状态寄存器CPSR各bit的意义:各位同学只需了解控制位bit0~bit7T:为状态:0表示ARM状态,1表示Thumb状态I、F表示IRQ中断FIQ中断的使能。
1时中断禁止,0时中断使能(允许该中断)。
2、三个特殊用途寄存器SP(R13) LR(R14) PC(R15)R13(SP):堆栈指针,保存当前处理器模式的堆栈栈顶。
R14(LR):链接R,保存子程序(含发生异常)的返回地址。
R15(PC):程序计数器,保存下一条指令的地址。
注意点:PC指针永远指向取值(什么意思?见第3点流水线)3、ARM7的流水线采用三级流水线,即取指→译码→执行例:假设一共有三条指令:0x4000 ADD PC,PC,#4 ;其中第二个PC指针的值为0x4008,将第二个PC+4=0x400C赋给第一个PC指针(回答上述PC指针永远指向取值的问题)0x4004 SUB0x4008 CMP那么CPU实际执行为:周期取指译码执行T1 ADDT2 SUB ADDT3 CMP SUB ADD解释:当第一CPU周期T1时先取址,取第一个指令的地址。
当第二CPU周期T2时取第二个指令的地址,然后译码,译的是第一个指令的码当第三CPU周期T3时取第三个指令的地址,译第二个指令的码,执行第一个指令所以:PC值=当前程序执行位置+8字节(如果CPSR中的T位为0,则+8;如果T位为1,则+4)4、PLL频率的计算(P133)PLLCFG 寄存器的意义:一个8位的PLL 配置寄存器PLLCFG[4:0]为MSEL[4:0],存放的是PLL 倍频器值(即M 值); 例:MSEL[4:0]=00101 则表示5,M=5+1=6PLLCFG[6:5]为PSEL[1:0],存放的是PLL 的分频器值(即P 值;) 例:PSEL[1:0]=00 则表示P=1 01 则表示P=2 10 则表示P=4 11 则表示P=8 PLL 频率公式:)2()2(P F F M P F F C C L K CCO OSC CCO ⨯⨯=⨯⨯⨯=注意点:CCO F 的范围为156~320MHZ ;例题:晶振的频率为10MHZ ,需要输出的系统时钟为60MHZ ,请问如何配置? 答:OSC F =10MHZ ,所以6==OSCCCLKF F M ,所以 M-1=5,所以MSEL[4:0]=0b00101;根据CCO F 的范围可知,)2(⨯=CCLK CCOF F P 所以,P 只能取2,即PSEL[1:0]=0b01;所以根据上述得:PLLCFG = (1<<5) | (5) ;这句话的意思是将2(也就是0b01)向左移5位,也就是将PESL 赋值了,然后与5逻辑或,也就是将0b00101赋值给MSEL 了。
