版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统软件基础第三章第一章:绪论——回顾1、嵌入式系统的特点2、嵌入式系统的分类3、嵌入式系统的组成4、嵌入式系统开发流程问第三章:嵌入式软件系统基础本章学习目标:
1、熟悉嵌入式程序中的C语言现象;
2、掌握链表的使用;
3、了解常见的嵌入式操作系统;
4、了解操作系统的主要功能;第三章:嵌入式软件系统基础——C语言现象----includedefinestaticvolatileinline#include<stdio.h>#include“myhead.h”#defineMAX_LINE25staticintk=100;main(){volatileint*i=0x10;i=abc(199);……}#ifndefMYHEAD#defineMYHEAD……inlineint
abc(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#defineMAXLINE100int
abc;#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语言现象#include<stdio.h>staticinti=100;abc(intx){ staticinttotal=0;
intj=0; total+=x;j+=i;
printf(“total=%d;j=%d\n”,total,j);}main(){
for(intj=0;j<10;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语言现象----defineincludestaticvolatileinline
main(){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;}第三章:嵌入式软件系统基础——链表例子:struct
mylist{
intx;
struct
mylist*next;}struct
mylist*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中的链表struct
list_head{
struct
list_head*next,*prev;};奇妙的list_head链表节点:第三章:嵌入式软件系统基础——Linux中的链表#definecontainer_of(ptr,type,member)\(type*)((char*)ptr-(char*)&((type*)0)->member)struct
abc{chara;shortb;
intx;unsignedlongy;}struct
abcxyz=abc(‘m’,1,2,3);struct
abc*cba=list_entry(&xyz.x,struct
abc,x);printf(“%c-%d-%d-%d\n”,cba->a,cba->b,cba->x,cba->y);第三章:嵌入式软件系统基础——Linux中的链表typedef
struct
server_detect_ftp
{
struct
list_headlist;charserver[20];
intport;charusername[10];charpassword[10];}server_detect_ftp_t;
int
main(void){
struct
list_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,struct
server_detect_ftp,list);
printf("%s\n",entry->username);}
list_del(&ftp_link1.list);}利用list_head的例子:第三章:嵌入式软件系统基础——Linux中的链表typedef
struct
server_detect_ftp
{
struct
list_headlist;charserver[20];
intport;charusername[10];charpassword[10];}server_detect_ftp_t;
int
main(void){
struct
list_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,struct
server_detect_ftp,list);
printf("%s\n",entry->username);}
list_del(&ftp_link1.list);}利用list_head的例子:第三章:通用操作系统的特点、发展及其功能1、计算机的灵魂2、介于硬件层和应用软件层之间3、高度抽象的虚拟机器4、计算机资源的管理者三、通用操作系统的发展:UNIXDOSWINDOWS|OS2LINUX四、功能:资源管理
管理CPU(进程)、存储、设备和文件一、特点二、现代操作系统的特点1、微内核2、模块化3、网络化4、多任务第三章:嵌入式操作系统的特点、发展一、裁剪和定制通用OS嵌入式操作
因为专业,所以高效二、发展:
1、上世纪80年代:实时多任务
VRTX32、MTOS、PSOS等
2、上世纪90年代:网络化、多任务、图形界面、文件系统
VxWorks,Psos+,μC/OS-II等
3、本世纪:支持internet、多媒体和无线网络、可定制
Linux,WindowsCE,PalmOS,JAVAOS等第三章:常见的嵌入式操作系统和选型1、VxWorks
实时、商业版、市场占有率目前最高
军工、航天、通信。2、Linux开放源码、便于裁剪、便于移植、支持的应用软件多、多
线程多任务网络产品、消费类电子产品
发展迅猛3、Symbian
众多移动通讯设备厂家支持、兼容性差、应用开发困难、多媒体支持差
移动设备如手机
夕阳西下。4、WindowsCE多线程多任务、模块化、应用开发容易、功耗大、价格昂贵
PDA、手机等
走下坡路。5、Android开源、linux内核、完美多媒体和网络支持、深度编程
手机等移动设备。6、PalmOS易用、高效、商业版本
掌上电脑、PDA等7、uC/OS-II多任务(64个)、实时、开源但不免费
数码相机、医疗设备和高端音响设备等第4.5节:嵌入式Linux简介1、自制嵌入式linux:裁剪定制标准Linux内核
形成自己的EOS2、专业LinuxEOS服务收费的LinuxEOS完全免费的LinuxEOSMvista,TimeSys红旗EOSRT-Linux,uCLinux,uC/OS,RTAI第三章:常见的嵌入式操作系统和选型1·应用需求2·实时性3·CPU类型4·开发工具5·价格和服务第三章:嵌入式系统软件基础——总结1、嵌入式程序中的C语言现象2、链表3、常见的嵌入式操作系统4、OS的作用问5、常见嵌入式Linux第三章结束编写一个c语言随机选号程序(在屏幕上快速随机显示1~99之间的数字,按回车键停止跳动并退出),工程包含三个文件:包含main函数的rand_main.c,定义宏和函数声明的头文件rand_head.h,定义函数rand(x,y)的文件rand_fun.c用到的技术:fork,光标定位,杀进程第三章:嵌入式软件系统基础——实训rand_main.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<signal.h>#include<sys/types.h>#include"rand_head.h"main(){
int
pid;
if((pid=fork())==0){while(1){printf(“^[[2J”);//清屏
printf("^[[10;50H%d",rand_mon(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动教育活动策划案
- 《立体库操作方式》课件
- 苏州科技大学天平学院《建筑设计基础二》2021-2022学年第一学期期末试卷
- 农业科学与土壤保护和改良技术考核试卷
- 宠物食品品质检测服务考核试卷
- 医用退热贴的材料和使用要点考核试卷
- Scoparone-Standard-生命科学试剂-MCE
- 非全日制从业人员劳动合同(13篇)
- 临床药师工作计划(5篇)
- 轻微交通事故协议书(3篇)
- 物联网践与探索
- 《装备质量问题归零实施指南》
- 四级营养师模拟及答案
- 水电改造工程投标方案(技术标)
- 光电信息科学与工程专业大学生职业生涯规划书
- 2023-2024学年广东省深圳市48校联考九年级(上)期中语文试卷
- 华为经营管理-华为市场营销体系(6版)
- 卫浴营销方案
- 林业遥感技术及典型应用
- 《美食烤全羊简介》课件
- 中等职业学校英语教学大纲词汇表本表共收词2200个左右含
评论
0/150
提交评论