⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 07 arm c.txt

📁 ads1.2学习资料,对arm初学者有帮助.
💻 TXT
字号:
7.1 编程设置

	7.1.1 使用 Pragmas

		check_printf_formats, 自动对printf类型函数中的字符串变量进行格式检查,对于函数中的非字符串变量不进行格式检查.
		与 no_check_printf_formats 成对使用。

		check_scanf_formats, 针对输入

		debug / no_debug 生成,不成生调试信息

		ospace / stime 优化空间,执行时间,

		onum 0/1/2 优化级别,由低到高
		
		check_stack / no_check_stack 检查 / 不检查数据栈溢出

		softfp_linkage 指定编译器在生成代码时使用软件浮点链接。

		import (symbol_name) 引入外部符号

		arm section 指定后面函数或目标程序中用到的数据段或代码段。

	7.1.2 使用关键词,(对 ANSIC 的扩展)

	1.声明函数时使用

		__asm		以下为汇编代码
		__irqs		声明一个用作irq或者fiq异常中断的函数。
		__pure		声明一个孤立的函数,该函数仅与输入参数有关.
		__softfp	声明一个使用软件浮点链接的函数
		__swi		声明的函数最多可接受四个整型参数,最多可返回4个 value_in_regs结构的结果.
		__swi_indirect	指定通过寄存器R12传递操作代码到SWI处理程序.
		__value_in_regs	声明的函数,指定编译器通过整型寄存器返回多达4个整型结果,也可以通过浮点寄存器返回多达4个浮点数或双精度数

		__inline	内联函数,同C++中的 inline.
		__weak		用于声明一个外部函数或外部对象.若链接器未找到该外部函数或者外部对象,链接器将不报告错误信息.若链接器无法解析该外部函数或外部对象,它将把该外部函数或者外部对象当作NULL处理.

	2. 声明变量时使用

		register	声明寄存器变量
		__int64		同 long long
		__global_reg(vreg)	将一个已经声明的变量分配到一个全局的整数寄存器中.	__global_reg(2) int x;
	
	3. 限定数据类型的关键词

		__align(n)	限定对象的对齐.
		__packed	限定对象为一字节对齐.
		volatile	外部程序可能会修改该对象,编译时不优化对该对象的操作.
		__weak		同上面的weak.

7.2 标准C/C++语言扩展	

	略过

7.3 C/C++语言数据类型

	注意定义结构体时,如果紧凑地安排各个变量

7.4 C/C++语言和混合编程

	注意:	armasm 是高级汇编器,有时生成的代码会与用户希望的代码有所不同,并且不比ARM编译器生成的代码更有效.
			另有些指令内嵌汇编器不支持,如为PC赋值引起程序跳转的低级指令.

	1. 使用关键字嵌入汇编

		__asm	适用C/C++.
		asm		使用关键词 asm 来内嵌一段汇编代码
			asm("instruction[;instruction]");

	2. 嵌入式汇编与 armasm 之间的区别

		嵌入式汇编:
			
			不支持通过 (.) 批示符或{PC}获取当前指令地址
			不支持"LDR Rn,=expr"伪指令而是使用"MOV Rn,expr"指令向寄存器赋值
			不支持语句标号表达式
			不支持ADR和ADRL伪指令
			不支持BX指令
			不能向PC赋值

		必须使用 0x前缀代替"&"表示十六进制数.
		当使用8位移位常导致CPSR的ALU标志更新时,NZCV标志中的C不具有真实的意义.
		当使用物理寄存器时必须小心,

	程序之间的互调

		一般情况下,C与ASM间可以通过全局变量共享数据.

		要访问一个全局变量,应该先使用 IMPORT伪指令引入这个全局变量,并利用LDR / STR指令根据全局变量的地址访问它们.

		对于不同类型的变量,须采用不同选项的LDR / STR指令.
			
			uchar	使用	LDRB / STRB		有符号	LDRSB / STRSB 
			ushort	使用	LDRH / STRH	
			uint	使用	LDR / STR

	汇编调C

	C调汇编

		通过 EXPORT,IMPORT 声明.
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -