ARM转化C语言进制转换函数?

standard(ARM-Thumb过程调用标准)的简称。PCS规定了应用程序的函数可以如何分开地写,分开地编译,最后将它们连接在一起,所以它实际上定义了一套有关过程(函数)调用者与被调用者之间的协议。ATPCS规则体现了一种模块化设计的思想,其基本内容是C模块(函数)和汇编模块(函数)相互调用的一套规则(C51中也有类似的一套规则)。我感觉比在线汇编功能强大(不用有很多忌讳),条理更清楚(很简单的几条规则)。

1、子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。此时r0~r3可记作A1~A4。

2、在子程序中,使用寄存器r4~r11保存局部变量。因此当进行子程序调用时要注意对这些寄存器的保存和恢复。此时r4~r11可记作V1~V8。

3、寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。

4、寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。

5、寄存器r15称为程序计数器,记作PC。

ATPCS规定堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。

1、整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的寄存器传递参数。

2、子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或者S0返回。

比较有条理,很清楚,我举两个例子:

1.汇编主程序调用C子程序

汇编程序的书写要遵循ATPCS规则,以保证程序调用时参数正确传递。在汇编程序中调用C程序的方法为:

1)在汇编程序中使用IMPORT伪指令或者extern事先声明将要调用的C语言函数;

2)通过BL指令来调用C函数。

例如在一个C源文件中定义了如下求和函数:

调用add()函数的汇编程序结构如下:

当进行函数调用时,使用r0和r1实现参数传递,返回结果由r0带回。函数调用结束后,r0的值变成3。

2.C主程序调用汇编子程序

C程序调用汇编程序时,汇编程序的书写也要遵循ATPCS规则,以保证程序调用时参数正确传递。在C程序中调用汇编子程序的方法为:

1)在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;

2)在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。

例如在一个汇编源文件中定义了如下求和函数:

在一个C程序的main()函数中对add汇编子程序进行了调用:

当main()函数调用add汇编子程序时,变量a、b的值会给了r0和r1,返回结果由r0带回,并赋值给变量c。函数调用结束后,变量c的值变成3。

3、C程序中内嵌汇编语句

在C语言中内嵌汇编语句可以实现一些高级语言不能实现或者不容易实现的功能。对于时间紧迫的功能也可以通过在C语言中内嵌汇编语句来实现。内嵌的汇编器支持大部分ARM指令和Thumb指令,但是不支持诸如直接修改PC实现跳转的底层功能,也不能直接引用C语言中的变量。

内嵌汇编:在C和C++语言中嵌入汇编语言可以实现一些高级语言中没有的功能。

共四个部分:汇编语句模板,输出部分,输入部分,破坏描述部分,各部分使用“:”格开,汇编语句模板必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。例如:

}

《ARM嵌入式系统原理与开发》从实际套用的角度出发,全面介绍嵌入式系统相关的概念、基于ARM系统的嵌入式开发模式及编程、ARM体系结构、ARM彙编及C语言编程、基于S3C2410的硬体结构与接口编程、嵌入式Linux原理及编程、基于嵌入式系统的套用开发方法及套用实例,最后结合具体实验箱给出了嵌入式系统实验指导等方面的知识。

王诚,南京邮电大学通信学院副教授,2004年开始嵌入式系统方面的教学工作,先后开设《单片机原理》、《DSP与嵌入式系统》、《嵌入式系统》、《嵌入式系统实验》等课程。指导学生实践性环境如软体设计、课程设计、学生创新实践、毕业设计,内容都和嵌入式系统相关。涉及的项目有智慧型家居系统、智慧社区、智慧型电力控制、开放式实验室系统等。具有丰富的嵌入式系统方面的教学和实践能力。在2009年01月,採用嵌入式系统获得南邮教学成果奖《适应形势大胆变革——新环境下学生综合实践能力培养方法的研究和探索》,并作为南邮通信学院嵌入式系统的教学负责人,主持嵌入式系统课程的教学大纲、实验大纲的编写。

第1章 嵌入式系统概述 1

1.1 嵌入式系统的概念 1

1.2 嵌入式系统的历史 2

1.3 嵌入式系统的组成 4

1.3.1 嵌入式系统的组成结构 4

1.3.2 嵌入式处理器 8

1.3.3 典型的嵌入式作业系统 9

1.4 嵌入式系统的特点 12

1.5 嵌入式系统的套用 12

1.6 嵌入式系统的发展趋势 16

第2章 ARM体系结构与指令集 19

第3章 ARM彙编语言程式设计 60

3.1 ARM彙编的语句格式 60

3.1.1 符号命名规则 60

3.2 ARM彙编的程式结构 62

3.3 ARM彙编语言程式设计举例 64

3.4 ARM C语言基础及混合编程 65

3.4.4 C语言及彙编语言混合编程 68

第4章 基于S3C2410的硬体结构与接口编程 75

4.3 时钟和电源管理 85

4.6.3 PWM输出控制直流电动机编程实例 116

4.7 异步串口通信 119

4.7.1 异步串口通信概述 119

4.8.4 A/D转换器在扩展版的接法 138

4.11.1 触控萤幕的工作原理 164

4.11.5 触控萤幕编程实例 168

第5章 嵌入式Linux作业系统 197

5.1 作业系统简介 197

5.1.2 嵌入式作业系统 198

5.2.2 Linux作为嵌入式作业系统的优势 202

5.3 基于嵌入式Linux开发套用实例 266

5.3.2 从“零”到一套精简的Linux平台 267

5.3.4 Linux平台上用户空间程式与核心互动方式 273

第6章 嵌入式系统套用开发及实例 283

6.2 软体工程及嵌入式软体工程 285

6.2.5 嵌入式软体编程 293

6.3 基于ECX嵌入式平台的旅游系统套用实例 294

6.4 基于Android作业系统平台的点餐系统套用实例 312

第7章 嵌入式系统开发的实验基础 329

7.2 ADS集成开发环境简介 329

7.3 基于嵌入式Linux系统的软体开发基础 344

7.4 嵌入式Linux下交叉开发环境的建立与软体开发过程 348

7.4.1 嵌入式教学实验系统简介 349

7.4.2 嵌入式交叉开发环境的建立 352

7.4.3 基于Linux的应用程式的开发步骤 359

}

我要回帖

更多关于 C语言进制转换函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信