C语言程序设计与混合编程.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计与混合编程.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计与混合编程.pptx(32页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、会计学1C语言程序设计语言程序设计(chnxshj)与混合编与混合编程程第一页,共32页。2 代码效率高,程序执行速度快,可充分合理地利用芯片提供的硬件资源。但程序编写比较烦琐,可读性较差,可移植性较差,软件(run jin)的修改和升级困难。可读性强,开发速度快,便于修改和移植。但C编译器无法实现(shxin)在任何情况下都能够合理地利用DSP芯片的各种资源。C54xDSP软件设计的方法通常软件设计的方法通常(tngchng)有有三种:三种:采用混合编程的方法能更好地达到设计要求,完成设计任务。(1)用汇编语言开发用汇编语言开发(2)用用C语言开发语言开发(3)C语言和汇编语言混合编程开发语
2、言和汇编语言混合编程开发第1页/共32页第二页,共32页。36.1C语言程序设计语言程序设计(chnxshj)1.C语言特点语言特点(tdin)及语及语(1)语言简洁、紧凑,使用方便、灵活。(2)运算符丰富(fngf),表达式类型多样化。(3)数据结构类型丰富(fngf),具有现代化语言的各种数据结构。(4)具有结构化的控制语句。(5)语法限制不太严格,程序设计自由度大。(6)C语言允许访问物理地址,能进行位操作,能实现汇编 语言的大部分功能,能直接对硬件进行操作。第2页/共32页第三页,共32页。4 C系统的堆栈可以完成的主要功能如下:*分配(fnpi)局部变量;*传递函数参数;*保存所调用
3、函数的返回地址;*保存临时结果。3.系统系统(xtng)堆栈的使用堆栈的使用 运行堆栈的增长方向是从高地址到低地址,即入栈则地址减少,出栈则地址增加。堆栈的管理者是堆栈指针SP,堆栈的容量由链接器(Linker)设定。如:在链接命令文件(wnjin)(.cmd文件(wnjin)中加入选项 -stack 0 x1000 堆栈的容量被设为1000H个字2.C语言基本语法(略)语言基本语法(略)第3页/共32页第四页,共32页。5(1)存储器模式)存储器模式C54xDSP定点处理器有两种类型的存储器:定点处理器有两种类型的存储器:程序存储器:主要用于装载可执行代码;程序存储器:主要用于装载可执行代码
4、;数据存储器:主要用于装载外部数据存储器:主要用于装载外部(wib)变量、静态变量、系统堆栈变量、静态变量、系统堆栈以及一些中间运算结果。以及一些中间运算结果。程序代码或数据以段的形式装载于存储器中,程序代码或数据以段的形式装载于存储器中,C语言程序语言程序经经C编译器编译后,生成七个可重定位的段,其中四个被称为编译器编译后,生成七个可重定位的段,其中四个被称为已初始化段,三个被称为未初始化段。已初始化段,三个被称为未初始化段。4.存储器模式存储器模式(msh)及分配及分配第4页/共32页第五页,共32页。6四个已初始化段分别是:四个已初始化段分别是:*.text段段包括可执行代码、字符串和编
5、译器产生包括可执行代码、字符串和编译器产生(chnshng)的常量。的常量。*.cinit段段包括初始化变量和常量表。包括初始化变量和常量表。*.const段段包括字符串常量和以包括字符串常量和以 const关键字定义的常量。关键字定义的常量。*.switch段段为为.const语句建立的表格。语句建立的表格。三个未初始化段分别是:三个未初始化段分别是:*.bss段段保留全局和静态变量空间。在程序保留全局和静态变量空间。在程序(chngx)开始运行时,开始运行时,C的的引导引导(boot)程序程序(chngx)将数据从将数据从.cinit段拷贝到段拷贝到.bss段。段。*.stack段段为为C
6、的系统堆栈分配存储空间,用于变量的传递。的系统堆栈分配存储空间,用于变量的传递。*.sysmem段段为动态存储器函数为动态存储器函数malloc、calloc、realloc 分配存分配存储器空间;若储器空间;若C程序程序(chngx)未用到此类函数,则未用到此类函数,则C编译器不产生该段。编译器不产生该段。第5页/共32页第六页,共32页。7 在编写链接命令文件(.cmd文件)时,.text、.cinit、.switch 段通常(tngchng)可以链接到系统的ROM或者RAM中去,但是必须放在程序段(page0);.const段通常(tngchng)可以链接到系统的ROM或者RAM中去,但
7、是必须放在数据段(pagel);.bss、.stack 和.sysmem 段必须链接到系统的 RAM中去,并且必须放在数据段(pagel)。由实验程序所建的某工程的链接命令文件(.cmd文件),如例6.1所示。第6页/共32页第七页,共32页。8【例【例6.16.1】某工程的链接命令】某工程的链接命令(mng lng)(mng lng)文件文件(.cmd(.cmd文件文件)MEMORY MEMORY /*TMS320C54x DSP/*TMS320C54x DSP存储器分配存储器分配*/*/PAGE 0:PAGE 0:HPIRAM:origin=0 x100,HPIRAM:origin=0 x
8、100,length=0 x200 length=0 x200 PROG:origin=0 x2000,PROG:origin=0 x2000,length=0 x1000 length=0 x1000 PAGE 1:PAGE 1:DARAM1:origin=0 x03000,DARAM1:origin=0 x03000,length=0 x1000 length=0 x1000 PAGE 2:PAGE 2:FLASHRAM:origin=0 x8000,FLASHRAM:origin=0 x8000,length=0 x7fff length=0 x7fff 第7页/共32页第八页,共32页
9、。9SECTIONS/*由C 定义*/.vectors :load=PROG page 0/*中断向量表*/.text :load=PROG page 0/*可执行代码*/.cinit :load=PROG page 0/*初始化变量(binling)和常数表*/.switch :load=PROG page 0/*为.constant语句建立的表格*/.stack :load=DARAM1 page 1/*C 系统堆栈*/.const :load=DARAM1 page 1/*字符串常量和以const关键字定义的常量*/.bss :load=DARAM1 page 1/*全局和静态变量(bi
10、nling)空间*/.dbuffer1024:DARAM1 page 1,align(1024).coeffs1024:DARAM1 page 1,align(1024).hpibuffer :load=HPIRAM page 0 /*由汇编定义*/.data :DARAM1 page 1/*汇编定义的数据段*/第8页/共32页第九页,共32页。10(2)存储器分配存储器分配C编译器提供的运行支持函数中包含有几个允许在运行时编译器提供的运行支持函数中包含有几个允许在运行时为变量分配存储器的函数,如为变量分配存储器的函数,如malloc、calloc和和recalloc。动态。动态分配不是分配不
11、是C语言本身的标准语言本身的标准(biozhn),而是由运行支持函数所提供的。,而是由运行支持函数所提供的。为全局为全局pool和和heap分配的存储器空间定义在分配的存储器空间定义在.sysmem 块中,块中,sysmem 段的大小可由链接器选项中的段的大小可由链接器选项中的-heap项来设定,其方法项来设定,其方法是在是在-heap项后加一个常数。项后加一个常数。与堆栈类似,连接器也创建一个全局符号与堆栈类似,连接器也创建一个全局符号_SYSMEM_SIZE,.sysmem 段的大小由段的大小由_SYSMEM_SIZE 的数值来确定,默认值的数值来确定,默认值为为lK字。字。为了在为了在.
12、bss段中保留空间,对于大的数据,可以用段中保留空间,对于大的数据,可以用heap为为其分配空间,而不将它们说明为全局或静态的。其分配空间,而不将它们说明为全局或静态的。第9页/共32页第十页,共32页。11例如,对于(duy)原定义的:struct big table1000 可以改用指针并调用malloc函数来定义:struct big*tabletable=(struct big*)malloc(1000*sizeof(struct big);第10页/共32页第十一页,共32页。12 C语言程序编写过程步骤:(1)编辑器编辑C程序readdata.c;(2)编译程序将C程序编译汇编成目
13、标文件readdata.obj;(3)编辑一个链接命令(mng lng)文件(.cmd文件);(4)链接生成.out文件,用硬件仿真器进行调试。例例6.3用用C语言编写语言编写C54xDSP的的IO口的读程序,实现从口的读程序,实现从 IO口地址口地址8000H连续连续(linx)读入读入1000个数据并存入数组中。个数据并存入数组中。6.2 C语言程序(chngx)实例 第11页/共32页第十二页,共32页。13例例6.3 C6.3 C程序程序(chngx)readdata.c(chngx)readdata.c:#include“portio.h”#include“portio.h”/*/*
14、包含头文件包含头文件portio.h*/portio.h*/#define RD_PORT 0 x8000#define RD_PORT 0 x8000 /*/*定义输入定义输入I/OI/O口口*/*/static int indata1000static int indata1000;/*/*定义全局数组定义全局数组*/*/main()main()int Iint I;for(I=0for(I=0;I1000I1000;I+)I+)portRead(RD_PORT);portRead(RD_PORT);/*/*从从I/OI/O口读数据口读数据*/*/第12页/共32页第十三页,共32页。14
15、 C语言和汇编语言的混合编程有以下几种方法:(1)独立(dl)编写汇编程序和C程序,分开编译或汇编,形成各自 的目标代码模块,再用链接器将C模块和汇编模块链接起 来。灵活性较大,但用户必须自己维护各汇编模块的入口 和出口代码,自己计算传递的参数在堆栈中的偏移量,工 作量较大,但能做到对程序的绝对控制。(2)在C程序中使用汇编程序中定义的变量和常量。6.3用用C语言和汇编语言语言和汇编语言(hubinyyn)混合编程混合编程1.C54xDSP混合混合(hnh)编程方法编程方法第13页/共32页第十四页,共32页。15(4)将C程序编译生成相应的汇编程序,手工修改和优化C编 译器生成的汇编代码。这
16、种方法可以控制C编译器,使之产生具有交叉列表 的C程序和与之对应的汇编程序,而程序员可以对其中的 汇编语句进行修改。优化之后,对汇编程序进行汇编,产 生目标(mbio)文件。(3)在C程序中直接内嵌汇编语句。可在C程序中实现C语言无法实现的一些(yxi)硬件控制功能,如修改中断控制寄存器,中断标志寄存器等。第14页/共32页第十五页,共32页。162.独立的C和汇编模块接口 独立的C和汇编模块接口是一种常用的C和汇编语言接口方法。采用此方法在编写C程序和汇编程序(hu bin chn x)时,必须遵循有关的调用规则和寄存器规则。C程序可以直接引用汇编程序(hu bin chn x)中定义的变量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 混合 编程
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内