本书主要介绍针对嵌入式系统基于c语言的软件项目开发流程、较为复杂的c语言编程知识与技巧、编程风格及调试习惯,并通过对一个具体的软件模块(asix window gui)的分析,介绍分析代码的方法以及设计软件系统需要考虑的各要素。本书以实际项目中的代码为例来进行介绍,详细分析在嵌入式系统开发中程序员应该注意的方法、技巧和存在的陷阱。本书适合用作学习嵌入式系统的高年级本科生或硕士研究生的教学用书,也可作为从事嵌人式系统编程的软、硬件工程师的技术参考用书。目录:第1章 概述第2章 c语言的关键字与运算符第3章 c语言的函数第4章 编译、汇编与调试第5章 存储器与指针第6章 中断与设备驱动第7章 编码风格第8章 代码的调试第9章 asix window gui设计详解附录a c++/c代码审查表(c语言部分)附录b 部分课后思考题解答附录c 嵌入式c语言测试样卷与参考答案附录d ub4020mbt开发板简介
上传时间: 2022-07-27
上传用户:
- vii - 8.1.1 实验目的 315 8.1.2 实验设备 315 8.1.3 实验内容 315 8.1.4 实验原理 315 8.1.5 实验操作步骤 318 8.1.6 实验参考程序 319 8.1.7 练习题 321- vi - 6.4 USB 接口实验 266 6.4.1 实验目的 266 6.4.2 实验设备 267 6.4.3 实验内容 267 6.4.4 实验原理 267 6.4.5 实验操作步骤 270 6.4.6 实验参考程序 272 6.4.7 实验练习题 280 6.5 SPI接口通讯实验 281 6.5.1 实验目的 281 6.5.2 实验设备 281 6.5.3 实验内容 281 6.5.4 实验原理 281 6.5.5 实验操作步骤 285 6.5.6 实验参考程序 287 6.5.7 练习题 289 6.6 红外模块控制实验 289 6.6.1 实验目的 289 6.6.2 实验设备 289 6.6.3 实验内容 289 6.6.4 实验原理 289 6.6.5 实验操作步骤 291 6.6.6 实验参考程序 291 6.6.7 练习题 296 第七章 基础应用实验 296 7.1 A/D 转换实验 296 7.1.1 实验目的 296 7.1.2 实验设备 296 7.1.3 实验内容 296 7.1.4 实验原理 296 7.1.5 实验设计 298 7.1.6 实验操作步骤 299 7.1.7 实验参考程序 300 7.1.8 练习题 301 7.2 PWM步进电机控制实验 301 7.2.1 实验目的 301 7.2.2 实验设备 301 7.2.3 实验内容 301 7.2.4 实验原理 301 7.2.5 实验操作步骤 309 7.2.6 实验参考程序 311 7.2.7 练习题 313 第八章 高级应用实验 315 8.1 GPRS模块控制实验 315 - v - 5.2 5x4键盘控制实验 219 5.2.1 实验目的 219 5.2.2 实验设备 219 5.2.3 实验内容 219 5.2.4 实验原理 219 5.2.5 实验设计 221 5.2.6 实验操作步骤 222 5.2.7 实验参考程序 223 5.2.8 练习题 224 5.3 触摸屏控制实验 224 5.3.1 实验目的 224 5.3.2 实验设备 224 5.3.3 实验内容 224 5.3.4 实验原理 224 5.3.5 实验设计 231 5.3.6 实验操作步骤 231 5.3.7 实验参考程序 232 5.3.8 练习题 233 第六章 通信与接口实验 234 6.1 IIC 串行通信实验 234 6.1.1 实验目的 234 6.1.2 实验设备 234 6.1.3 实验内容 234 6.1.4 实验原理 234 6.1.5 实验设计 238 6.1.6 实验操作步骤 241 6.1.7 实验参考程序 243 6.1.8 练习题 245 6.2 以太网通讯实验 246 6.2.1 实验目的 246 6.2.2 实验设备 246 6.2.3 实验内容 246 6.2.4 实验原理 246 6.2.5 实验操作步骤 254 6.2.6 实验参考程序 257 6.2.7 练习题 259 6.3 音频接口 IIS 实验 260 6.3.1 实验目的 260 6.3.2 实验设备 260 6.3.3 实验内容 260 6.3.4 实验原理 260 6.3.5 实验步骤 263 6.3.6实验参考程序 264 6.3.7 练习题 266 - iv - 4.4 串口通信实验 170 4.4.1 实验目的 170 4.4.2 实验设备 170 4.4.3 实验内容 170 4.4.4 实验原理 170 4.4.5 实验操作步骤 176 4.4.6 实验参考程序 177 4.4.7 练习题 178 4.5 实时时钟实验 179 4.5.1 实验目的 179 4.5.2 实验设备 179 4.5.3 实验内容 179 4.5.4 实验原理 179 4.5.5 实验设计 181 4.5.6 实验操作步骤 182 4.5.7 实验参考程序 183 4.6.8 练习题 185 4.6 数码管显示实验 186 4.6.1 实验目的 186 4.6.2 实验设备 186 4.6.3 实验内容 186 4.6.4 实验原理 186 4.6.5 实验方法与操作步骤 188 4.6.6 实验参考程序 189 4.6.7 练习题 192 4.7 看门狗实验 193 4.7.1 实验目的 193 4.7.2 实验设备 193 4.7.3 实验内容 193 4.7.4 实验原理 193 4.7.5 实验设计 195 4.7.6 实验操作步骤 196 4.7.7 实验参考程序 197 4.7.8 实验练习题 199 第五章 人机接口实验 200 5.1 液晶显示实验 200 5.1.1 实验目的 200 5.1.2 实验设备 200 5.1.3 实验内容 200 5.1.4 实验原理 200 5.1.5 实验设计 211 5.1.6 实验操作步骤 213 5.1.7 实验参考程序 214 5.1.8 练习题 219 - ii - 3.1.1 实验目的 81 3.1.2 实验设备 81 3.1.3 实验内容 81 3.1.4 实验原理 81 3.1.5 实验操作步骤 83 3.1.6 实验参考程序 87 3.1.7 练习题 88 3.2 ARM汇编指令实验二 89 3.2.1 实验目的 89 3.2.2 实验设备 89 3.2.3 实验内容 89 3.2.4 实验原理 89 3.2.5 实验操作步骤 90 3.2.6 实验参考程序 91 3.2.7 练习题 94 3.3 Thumb 汇编指令实验 94 3.3.1 实验目的 94 3.3.2 实验设备 94 3.3.3 实验内容 94 3.3.4 实验原理 94 3.3.5 实验操作步骤 96 3.3.6 实验参考程序 96 3.3.7 练习题 99 3.4 ARM处理器工作模式实验 99 3.4.1 实验目的 99 3.4.2实验设备 99 3.4.3实验内容 99 3.4.4实验原理 99 3.4.5实验操作步骤 101 3.4.6实验参考程序 102 3.4.7练习题 104 3.5 C 语言程序实验一 104 3.5.1 实验目的 104 3.5.2 实验设备 104 3.5.3 实验内容 104 3.5.4 实验原理 104 3.5.5 实验操作步骤 106 3.5.6 实验参考程序 106 3.5.7 练习题 109 3.6 C 语言程序实验二 109 3.6.1 实验目的 109 3.6.2 实验设备 109 3.6.3 实验内容 109 3.6.4 实验原理 109 - iii - 3.6.5 实验操作步骤 111 3.6.6 实验参考程序 113 3.6.7 练习题 117 3.7 汇编与 C 语言的相互调用 117 3.7.1 实验目的 117 3.7.2 实验设备 117 3.7.3 实验内容 117 3.7.4 实验原理 117 3.7.5 实验操作步骤 118 3.7.6 实验参考程序 119 3.7.7 练习题 123 3.8 综合实验 123 3.8.1 实验目的 123 3.8.2 实验设备 123 3.8.3 实验内容 123 3.8.4 实验原理 123 3.8.5 实验操作步骤 124 3.8.6 参考程序 127 3.8.7 练习题 134 第四章 基本接口实验 135 4.1 存储器实验 135 4.1.1 实验目的 135 4.1.2 实验设备 135 4.1.3 实验内容 135 4.1.4 实验原理 135 4.1.5 实验操作步骤 149 4.1.6 实验参考程序 149 4.1.7 练习题 151 4.2 IO 口实验 151 4.2.1 实验目的 151 4.2.2 实验设备 152 4.2.3 实验内容 152 4.2.4 实验原理 152 4.2.5 实验操作步骤 159 4.2.6 实验参考程序 160 4.2.7 实验练习题 161 4.3 中断实验 161 4.3.1 实验目的 161 4.3.2 实验设备 161 4.3.3 实验内容 161 4.3.4 实验原理 162 4.3.5 实验操作步骤 165 4.3.6 实验参考程序 167 4.3.7 练习题 170 目 录 I 第一章 嵌入式系统开发与应用概述 1 1.1 嵌入式系统开发与应用 1 1.2 基于 ARM的嵌入式开发环境概述 3 1.2.1 交叉开发环境 3 1.2.2 模拟开发环境 4 1.2.3 评估电路板 5 1.2.4 嵌入式操作系统 5 1.3 各种 ARM开发工具简介 5 1.3.1 ARM的 SDT 6 1.3.2 ARM的ADS 7 1.3.3 Multi 2000 8 1.3.4 Embest IDE for ARM 11 1.3.5 OPENice32-A900仿真器 12 1.3.6 Multi-ICE 仿真器 12 1.4 如何学习基于 ARM嵌入式系统开发 13 1.5 本教程相关内容介绍 14 第二章 EMBEST ARM实验教学系统 17 2.1 教学系统介绍 17 2.1.1 Embest IDE 集成开发环境 17 2.1.2 Embest JTAG 仿真器 19 2.1.3 Flash 编程器 20 2.1.4 Embest EduKit-III开发板 21 2.1.5 各种连接线与电源适配器 23 2.2 教学系统安装 23 2.3 教学系统的硬件电路 27 2.3.1 概述 27 2.3.2 功能特点 27 2.3.3 原理说明 28 2.3.4 硬件结构 41 2.3.5 硬件资源分配 44 2.4 集成开发环境使用说明 51 2.4.1 Embest IDE 主框架窗口 51 2.4.2 工程管理 52 2.4.3 工程基本配置 55 2.4.4 工程的编译链接 71 2.4.5 加载调试 72 2.4.6 Flash编程工具 80 第三章 嵌入式软件开发基础实验 81 3.1 ARM汇编指令实验一 81
上传时间: 2013-04-24
上传用户:xaijhqx
上下文无关文法(Context-Free Grammar, CFG)是一个4元组G=(V, T, S, P),其中,V和T是不相交的有限集,S∈V,P是一组有限的产生式规则集,形如A→α,其中A∈V,且α∈(V∪T)*。V的元素称为非终结符,T的元素称为终结符,S是一个特殊的非终结符,称为文法开始符。 设G=(V, T, S, P)是一个CFG,则G产生的语言是所有可由G产生的字符串组成的集合,即L(G)={x∈T* | Sx}。一个语言L是上下文无关语言(Context-Free Language, CFL),当且仅当存在一个CFG G,使得L=L(G)。 *⇒ 例如,设文法G:S→AB A→aA|a B→bB|b 则L(G)={a^nb^m | n,m>=1} 其中非终结符都是大写字母,开始符都是S,终结符都是小写字母。
标签: Context-Free Grammar CFG
上传时间: 2013-12-10
上传用户:gaojiao1999
#include<stdio.h> #include<windows.h> int xuanxiang; int studentcount; int banjihao[100]; int xueqihao[100][10]; char xm[100][100]; int xuehao[100][10]; int score[100][3]; int yuwen; int shuxue[000]; int yingyu[100]; int c[100]; int p; char x[1000][100]="",y[100][100]="";/*x学院 y专业 z班级*/ int z[100]; main() { void input(); void inputsc(); void alter(); void scbybannji(); printf("--------学生成绩管理-----\n"); printf("请按相应数字键来实现相应功能\n"); printf("1.录入学生信息 2.录入学生成绩 3.修改学生成绩\n"); printf("4.查询学生成绩 5.不及格科目及名单 6.按班级输出学生成绩单\n"); printf("请输入你要实现的功能所对应的数字:"); scanf("%d",&xuanxiang); system("cls"); getchar(); switch (xuanxiang) { case 1:input(); case 2:inputsc(); case 3:alter(); /*case 4:select score(); case 5:bujigekemujimingdan();*/ case 6:scbybanji; } } void input() { int i; printf("请输入你的学院名称:"); gets(x); printf("请输入你的专业名称:"); gets(y); printf("请输入你的班级号:"); scanf("%d",&z); printf("请输入你们一个班有几个人:"); scanf("%d",&p); system("cls"); for(i=0;i<p;i++) { printf("请输入第%d个学生的学号:",i+1); scanf("%d",xuehao[i]); getchar(); printf("请输入第%d个学生的姓名:",i+1); gets(xm[i]); system("cls"); } printf("您已经录入完毕您的班级所有学生的信息!\n"); printf("您的班级为%s%s%s\n",x,y,z); /*alter(p);*/ } void inputsc() { int i; for(i=0;i<p;i++) { printf("\n"); printf("--------------------------------------------------------------------------------\n\n"); printf("\t\t\t\t录入学生的成绩\n\n\n"); printf("--------------------------------------------------------------------------------\n\n"); printf("\t\t\t\t%s\n",xm[i]); printf("\n"); printf("\t\t\t\t数学:"); scanf("%d",&shuxue[i]); printf("\n"); getchar(); printf("\t\t\t\t英语:"); scanf("%d",&yingyu[i]); printf("\n"); getchar(); printf("\t\t\t\tc语言:"); scanf("%d",&c[i]); system("cls"); } } void alter() { int i;/*循环变量*/ int m[10000];/*要查询的学号*/ int b;/*修改后的成绩*/ char kemu[20]=""; printf("请输入你要修改的学生的学号"); scanf("%d",&m); for (i=0;i<p;i++) { if (m==xuehao[i]) { printf("%s的数学成绩为%d,英语成绩为%d,c语言成绩为%d,xm[i],shuxue[i],yingyu[i],c[i]"); printf("请输入你想修改的科目");} } gets(kemu); getchar(); if (kemu=="数学"); { scanf("%d",&b); shuxue[i]=b;} if (kemu=="英语"); { scanf("%d",&b); yingyu[i]=b;} if (kemu=="c语言"); { scanf("%d",&b); c[i]=b; } printf("%s的数学成绩为%d,英语成绩为%d,c语言成绩为%d,xm[i],shuxue[i],yingyu[i],c[i]"); } void scbybannji() { int i; char zyname[20]; int bjnumber; printf("请输入你的专业名称"); scanf("%s",&zyname); printf("请输入你的班级号"); scanf("%d",&bjnumber); for (i=0;i<p;i++) { if (zyname==y[i]); if (bjnumber==z[i]); printf("专业名称%s班级号%d数学成绩%d英语成绩%dc语言成绩%d,y[i],z[i],shuxue[i],yingyu[i],c[i]"); } }
标签: c语言
上传时间: 2018-06-08
上传用户:2369043090
特点: 精确度0.1%满刻度 可作各式數學演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A|/ 16 BIT类比输出功能 输入与输出绝缘耐压2仟伏特/1分钟(input/output/power) 宽范围交直流兩用電源設計 尺寸小,穩定性高
上传时间: 2014-12-23
上传用户:ydd3625
以双音多频信号为例,通过运用快速傅里叶变换和Hanning窗等数学方法,分析了信号频率,电平和相位之间的关系,推导出了计算非整周期正弦波形信噪比的算法,解决了数字信号处理中非整周期正弦波形信噪比计算精度低下的问题。以C编程语言进行实验,证明了算法的正确性和可重用性,并可极大的提高工作效率。
上传时间: 2014-01-18
上传用户:laomv123
特点(FEATURES) 精确度0.1%满刻度 (Accuracy 0.1%F.S.) 可作各式数学演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A| (Math functioA+B/A-B/AxB/A/B/A&B(Hi&Lo)/|A|/etc.....) 16 BIT 类比输出功能(16 bit DAC isolating analog output function) 输入/输出1/输出2绝缘耐压2仟伏特/1分钟(Dielectric strength 2KVac/1min. (input/output1/output2/power)) 宽范围交直流两用电源设计(Wide input range for auxiliary power) 尺寸小,稳定性高(Dimension small and High stability)
上传时间: 2013-11-24
上传用户:541657925
/*--------- 8051内核特殊功能寄存器 -------------*/ sfr ACC = 0xE0; //累加器 sfr B = 0xF0; //B 寄存器 sfr PSW = 0xD0; //程序状态字寄存器 sbit CY = PSW^7; //进位标志位 sbit AC = PSW^6; //辅助进位标志位 sbit F0 = PSW^5; //用户标志位0 sbit RS1 = PSW^4; //工作寄存器组选择控制位 sbit RS0 = PSW^3; //工作寄存器组选择控制位 sbit OV = PSW^2; //溢出标志位 sbit F1 = PSW^1; //用户标志位1 sbit P = PSW^0; //奇偶标志位 sfr SP = 0x81; //堆栈指针寄存器 sfr DPL = 0x82; //数据指针0低字节 sfr DPH = 0x83; //数据指针0高字节 /*------------ 系统管理特殊功能寄存器 -------------*/ sfr PCON = 0x87; //电源控制寄存器 sfr AUXR = 0x8E; //辅助寄存器 sfr AUXR1 = 0xA2; //辅助寄存器1 sfr WAKE_CLKO = 0x8F; //时钟输出和唤醒控制寄存器 sfr CLK_DIV = 0x97; //时钟分频控制寄存器 sfr BUS_SPEED = 0xA1; //总线速度控制寄存器 /*----------- 中断控制特殊功能寄存器 --------------*/ sfr IE = 0xA8; //中断允许寄存器 sbit EA = IE^7; //总中断允许位 sbit ELVD = IE^6; //低电压检测中断控制位 8051
上传时间: 2013-10-30
上传用户:yxgi5
TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。 TLC2543的特点 (1)12位分辩率A/D转换器; (2)在工作温度范围内10μs转换时间; (3)11个模拟输入通道; (4)3路内置自测试方式; (5)采样率为66kbps; (6)线性误差±1LSBmax; (7)有转换结束输出EOC; (8)具有单、双极性输出; (9)可编程的MSB或LSB前导; (10)可编程输出数据长度。 TLC2543的引脚排列及说明 TLC2543有两种封装形式:DB、DW或N封装以及FN封装,这两种封装的引脚排列如图1,引脚说明见表1 TLC2543电路图和程序欣赏 #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit clock=P1^0; sbit d_in=P1^1; sbit d_out=P1^2; sbit _cs=P1^3; uchar a1,b1,c1,d1; float sum,sum1; double sum_final1; double sum_final; uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar wei[]={0xf7,0xfb,0xfd,0xfe}; void delay(unsigned char b) //50us { unsigned char a; for(;b>0;b--) for(a=22;a>0;a--); } void display(uchar a,uchar b,uchar c,uchar d) { P0=duan[a]|0x80; P2=wei[0]; delay(5); P2=0xff; P0=duan[b]; P2=wei[1]; delay(5); P2=0xff; P0=duan[c]; P2=wei[2]; delay(5); P2=0xff; P0=duan[d]; P2=wei[3]; delay(5); P2=0xff; } uint read(uchar port) { uchar i,al=0,ah=0; unsigned long ad; clock=0; _cs=0; port<<=4; for(i=0;i<4;i++) { d_in=port&0x80; clock=1; clock=0; port<<=1; } d_in=0; for(i=0;i<8;i++) { clock=1; clock=0; } _cs=1; delay(5); _cs=0; for(i=0;i<4;i++) { clock=1; ah<<=1; if(d_out)ah|=0x01; clock=0; } for(i=0;i<8;i++) { clock=1; al<<=1; if(d_out) al|=0x01; clock=0; } _cs=1; ad=(uint)ah; ad<<=8; ad|=al; return(ad); } void main() { uchar j; sum=0;sum1=0; sum_final=0; sum_final1=0; while(1) { for(j=0;j<128;j++) { sum1+=read(1); display(a1,b1,c1,d1); } sum=sum1/128; sum1=0; sum_final1=(sum/4095)*5; sum_final=sum_final1*1000; a1=(int)sum_final/1000; b1=(int)sum_final%1000/100; c1=(int)sum_final%1000%100/10; d1=(int)sum_final%10; display(a1,b1,c1,d1); } }
上传时间: 2013-11-19
上传用户:shen1230
#include<iom16v.h> #include<macros.h> #define uint unsigned int #define uchar unsigned char uint a,b,c,d=0; void delay(c) { for for(a=0;a<c;a++) for(b=0;b<12;b++); }; uchar tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
上传时间: 2013-10-21
上传用户:13788529953