第3章:嵌入式系统软件基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

嵌入式系统软件基础第三章第一章:绪论——回顾1、嵌入式系统的特点2、嵌入式系统的分类3、嵌入式系统的组成4、嵌入式系统开发流程问第三章:嵌入式软件系统基础本章学习目标:1、熟悉嵌入式程序中的C语言现象;2、掌握链表的使用;3、了解常见的嵌入式操作系统;4、了解操作系统的主要功能;第三章:嵌入式软件系统基础——C语言现象----includedefinestaticvolatileinline#includestdio.h#include“myhead.h”#defineMAX_LINE25staticintk=100;main(){volatileint*i=0x10;i=abc(199);……}#ifndefMYHEAD#defineMYHEAD……inlineintabc(intx){returnx^3;}#endifmain.cmyhead.h——一切都是因为预编译和编译优化!第三章:嵌入式软件系统基础——C语言现象宏定义:#define宏名[(变量1,变量2,…)][宏体]说明:1、编译器会把源代码中出现的全部宏名替换为对应的宏体2、变量没有类型区分,只是一个占位标识符3、宏名和宏体采用空格分开,宏体中允许出现更多的空格4、作用:定义宏常量、防重复包含、定义语句块助记符5、如果宏体包含多条语句,必须包含在do{}while(0)中,宏体中的占位标识符(数字常量)必须在宏体中用小括号括起6、宏名中的字母一般采用大写7、宏常量的值在程序运行期间不能改变----defineincludestaticvolatileinline第三章:嵌入式软件系统基础——C语言现象定义宏常量:#define宏常量名宏体#defineMAX_LINE127#defineMATRIX(128*128)……x=MAX_LINE+MATRIX^2;…………x=127+(128*128)^2;……预编译时替换----defineincludestaticvolatileinline第三章:嵌入式软件系统基础——C语言现象防止头文件重复包含:#ifndef宏名#define宏名……#endif注意:1、宏名要取复杂一些,且最好与头文件名相关;2、一般只在头文件中出现。#ifndefMY_HEAD_H#defineMY_HEAD_H#defineMAXLINE100intabc;#endif头文件myhead.h----defineincludestaticvolatileinlinep34第三章:嵌入式软件系统基础——C语言现象定义语句块助记符:#define宏名(变量1,变量2,…)语句#define宏名(变量1,变量2,…)do{语句1;语句2;…;}while(0)#defineMUL(a,b)(a*b)#defineMUL(a,b)((a)*(b))#defineMAX(a,b)((a)(b)?(a):(b))#defineDEBUGERR(a,err)\do{\if((a)0){\printf(“Error:%s\n”,err);\exit(1);\}\}while(0)----defineincludestaticvolatileinline第三章:嵌入式软件系统基础——C语言现象异步执行程序,不可预知的事情时有发生防优化标识符:volatile类型变量;作用:用volatile修饰过的变量在编译时不做优化处理;例子P36----defineincludestaticvolatileinline第三章:嵌入式软件系统基础——C语言现象static关键字:static类型变量|函数;作用:1、对于变量,规定作用域和生存期;2、对于函数,规定作用域;被static修饰的函数其作用域是文件同一个文件内的函数可以调用它;被static修饰的变量其生存期就是程序运行期。如果在函数中定义,那么作用域是该函数体,如果在函数外定义,期作用域就是文件(也就是说该变量对于文件中的任何代码都是可见的);----defineincludestaticvolatileinline第三章:嵌入式软件系统基础——C语言现象#includestdio.hstaticinti=100;abc(intx){staticinttotal=0;intj=0;total+=x;j+=i;printf(“total=%d;j=%d\n”,total,j);}main(){for(intj=0;j10;j++)abc(j);}total=0;j=100total=1;j=100total=3;j=100total=6;j=100total=10;j=100total=15;j=100total=21;j=100total=28;j=100total=36;j=100total=45;j=100----defineincludestaticvolatileinline第三章:嵌入式软件系统基础——C语言现象----defineincludestaticvolatileinlinemain(){Statement1;Statement2;……;abc(10,20);……;Statementn;……;}abc(x,y){Statement1;Statement2;……;Statementm;return;}主函数main()子函数abc(x,y)执行路径第三章:嵌入式软件系统基础——C语言现象----defineincludestaticvolatileinline用inline修饰过的函数,函数调用在预编译时被函数体替换,这样程序的执行轨迹不会发生跳转。main(){Statement1;……;abc(10,20);……;Statementn;……;}inlineabc(x,y){clause1clause2}主函数main()子函数abc(x,y)预编译statement1……clause1clause2……statementn……预编译后的主函数main()编译目标程序第三章:嵌入式软件系统基础——C语言现象----defineincludestaticvolatileinline用inline修饰小的、调用频繁的函数,可以带来以下两个好处:1、减少了执行轨迹上的代码量;2、提高了程序执行效率;第三章:嵌入式软件系统基础——链表(理解指针)10050xB0x000000000x000000010x000000020x000000030x000000040x000000050x000000060x000000070x000000080x000000090x0000000A0x0000000B0x0000000C……0xFFFFFFFF地址内存单元intx;&x=0x00000007x=14;14int*p;p=0x0F000009&p=0x000000010900000F*p=55;55x=?p=&x;p=0x0000000707000000第三章:嵌入式软件系统基础——链表参考书本P38链表:动态性任意位置插入和删除数据、动态分配内存。数组:静态分配内存。指针域数据域structcircle{structcircle*next;intx;inty;intr;}第三章:嵌入式软件系统基础——链表例子:structmylist{intx;structmylist*next;}structmylist*head,*tail;head=new(mylist);head-x=10;tail=new(mylist)tail-x=20;tail-next=NULL;head-next=tail;printf(“%d”,head-next-x)第三章:嵌入式软件系统基础——Linux中的链表structlist_head{structlist_head*next,*prev;};奇妙的list_head链表节点:第三章:嵌入式软件系统基础——Linux中的链表#definecontainer_of(ptr,type,member)\(type*)((char*)ptr-(char*)&((type*)0)-member)structabc{chara;shortb;intx;unsignedlongy;}structabcxyz=abc(‘m’,1,2,3);structabc*cba=list_entry(&xyz.x,structabc,x);printf(“%c-%d-%d-%d\n”,cba-a,cba-b,cba-x,cba-y);第三章:嵌入式软件系统基础——Linux中的链表typedefstructserver_detect_ftp{structlist_headlist;charserver[20];intport;charusername[10];charpassword[10];}server_detect_ftp_t;intmain(void){structlist_headhead,*p;server_detect_ftp_tft1,ft2,*entry;strcpy(ft1.server,);ft1.port=34;strcpy(ft1.username,good);strcpy(ft1.password,good);strcpy(ft2.server,);ft2.port=80;strcpy(ft2.username,“bad);strcpy(ft2.password,“bad);INIT_LIST_HEAD(&head);list_add(&ft1.list,&head);list_add_tail(&ft2.list,&ft1.list);list_for_each(p,&head){entry=list_entry(p,structserver_detect_ftp,list);printf(%s\n,entry-username);}list_del(&ftp_link1.list);}利用list_head的例子:第三章:嵌入式软件系统基础——Linux中的链表typedefstructserver_detect_ftp{structlist_headlist;charserver[20];intport;charusername[10];charpassword[10];}server_detect_ftp_t;intmain(void){structlist_headhead,*p;server_detect_ftp_tft1,ft2,*entry;strcpy(ft1.server,);ft1.port=34;strcpy(ft1.username,good);strcpy(ft1.password,good);strcpy(ft2.server,);ft2.port=34;strcpy(ft2.username,good);strcpy(ft2.password,good);INIT_LIST_HEAD(&head);list_add(&ft1.list,&head);list_add_tail(&ft2.list,&ft1.list);list_for_each(p,&head){entry=list_entry(p,structserver_detect_ftp,list);printf(%s\n,entry-username);}list_del(&ftp_link1.list);}利用list_head的例子:第三章:通用操作系统的特点、发展及其功能1、计算机的灵魂2、介于硬件层和应用软件层之间3、高度抽象的虚拟机器4、计算机资源的管理者三、通用操作系统的发展:UNIXDOSWINDOWS|OS2LINUX四、功能:资源管理管理CPU(进程)、存储、设备和文件一、特点二、现代操作系统的特点

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功