ATPCS规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则。下面详细介绍子程序间调用的基本规则。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。......
2023-11-19
1.内联汇编(inline assembly)
内联汇编使用“__asm”(C和C++使用,注意,asm前2个下画线)和“asm”(C++使用)关键字声明。在任何语句位置,都可以使用__asm或asm。内联汇编器使用汇编器说明符进行调用,后面跟用大括号或括号括起来的汇编器指令序列。以使用“__asm”为例,介绍单行和多行内联汇编。
在单行中,示例如下:
由于内联汇编在C或C++程序中,所以在用法上有其自身的一些特点。
●如果同一行中包含多条指令,则用分号“;”隔开。如果使用双引号,则必须将所有指令包含在一对双引号“""”内。
●如果一条指令不能在一行中完成,使用反斜杠“\”将其连接。
●对于多行格式,可以在内联汇编语言块中的任何位置使用C或C++注释。但当一行中包含多个指令时,不能嵌入注释(即注释不能出现在两条指令中间)。
●汇编语言中使用逗号“,”作为指令操作数的分隔符,因此使用逗号运算符的C表达式必须用圆括号括起来。如:(www.chuimin.cn)
●内联汇编语言中的寄存器名被编译器视为C或C++语言中的变量,所以,内联汇编中出现的寄存器名不一定和同名的物理寄存器相对应。这些寄存器名在使用前必须声明。
●内联汇编中的寄存器(CPSR和SPSR除外)在读取前必须先赋值,否则编译器将产生错误信息。
下面的例子显示了内联汇编和真正汇编的区别。
2.嵌入汇编(embedded assembly)
利用ARM编译器可将汇编代码包括到一个或多个C或C++函数定义中去。嵌入汇编函数定义由__asm或asm函数限定符标记。嵌入汇编函数语法格式如下:
在参数列表中允许使用参数名,但不能用在嵌入式汇编函数体内。例如,以下函数在函数体内使用整数i,但在汇编中无效。可以使用R0代替i(根据参数的传递规则)。
下面通过嵌入式汇编的例子,来进一步熟悉嵌入式汇编的使用。下面的例子实现了字符串的复制,注意和上一节中内联汇编中字符串复制的例子相比较,分析其中的区别。
有关ARM嵌入式系统原理与应用的文章
ATPCS规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则。下面详细介绍子程序间调用的基本规则。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。......
2023-11-19
因此,驱动程序的设计,要求开发人员熟悉Linux的内核机制、驱动程序和用户级应用程序的接口关系、系统中对设备的并发操作,同时要求开发人员非常熟悉所开发硬件的工作原理。嵌入式Linux中的设备驱动程序有以下三个方面的特点。......
2023-11-19
按照惯例,所有的Makefile变量都应该是大写。如果变量的值发生变化,就只需要在一个地方修改,从而简化了Makefile的维护。现在利用变量把前面的Makefile重写一遍:除用户自定义的变量外,make还允许使用环境变量、自动变量和预定义变量。需要注意的是,如果用户在Makefile中定义了同名的变量,用户自定义变量将覆盖同名的环境变量。此外,Makefile中还有一些预定义变量和自动变量,但是看起来并不像自定义变量那样直观。......
2023-11-19
以上规定说明了RS-232C标准对逻辑电平的定义。EIA-RS-232C与TTL转换:EIA RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。......
2023-11-19
GPIO是一组可编程控制的引脚,由多个寄存器同时控制。应用程序都能够通过相应的接口使用GPIO。GPIO驱动主要作用就是读取GPIO口的内容,或者设置GPIO口的状态。GPIO与硬件体系密切相关,在Linux内核目录下的相关文件中我们可以发现针对不同硬件芯片的GPIO定义和使用方法,如本书涉及的S5PV210芯片Linux内核中也有相应的驱动程序支持。本章主要讲的就是如何使用Linux内核封装好的GPIO接口函数在驱动开发中需要操作GPIO时候的使用。......
2023-11-19
2.开发模式嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。表1.2常用嵌入式开发工具......
2023-11-19
Linux软件开发一直在Internet环境下讲行。Linux开发工作经常是在Linux用户决定共同完成一个项目时开始的。由于这个活跃的开发环境,新的以Linux为基础的软件功能日益强大,而且呈现爆炸式的增长态势。许多流行的Linux实用程序如C编译器、shell和编辑器都是GNU软件应用程序。Linux程序需要首先转化为低级机器语言即所谓的二进制代码以后,才能被操作系统执行。......
2023-11-19
具体来说,嵌入式系统是以应用为中心、计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。表1.1对比了通用计算机系统与嵌入式系统。......
2023-11-19
相关推荐