当前位置:首页 » 编程软件 » arm混合编译实例

arm混合编译实例

发布时间: 2022-05-06 11:36:02

‘壹’ ARM C++与汇编混合编程: ARM 汇编如何 使用C++ 类的 公有静态成员变量!

你的想法不错哦!!这个我可一套论小!!

‘贰’ 求ARM的c语言编程实例

我给你介绍一本书,《linux应用完全开发》他的前面的内容看完你会收获很大,很多例子。没找到的话,我发给你(PDF书和实例程序),散个分!

‘叁’ ARM处理器裸机开发实战:机制而非策略的目录

第1篇 基础篇
第1章 ARM处理器简介
1.1 处理器工作模式
1.2 寄存器介绍
1.2.1 堆栈指针寄存器R13和链接寄存器R14
1.2.2 程序计数器R15
1.2.3 程序状态寄存器
1.3 工作状态
1.4 数据长度
1.5 存储系统
1.5.1 ARM地址空间
1.5.2 ARM存储器的格式
1.6 天嵌TQ2440开发板硬件资源概述
1.7 本章小结
1.8 扩展阅读之CISC处理器和RISC处理器简介
第2章 ADS集成开发环境及程序下载具体流程
2.1 ADS 1.2集成开发环境简介
2.1.1 CodeWarrior for ARM
2.1.2 AXD调试器的启动
2.2 工程的编辑与修改
2.2.1 建立一个新工程
2.2.2 建立一个源文件
2.2.3 添加源文件到工程
2.2.4 编译与链接工程
2.2.5 打开已有的工程
2.3 工程的调试
2.3.1 装载映像文件
2.3.2 调试工具条的使用
2.4 H-JTAG的安装与调试
2.4.1 H-JTAG的安装
2.4.2 H-JTAG的设置
2.5 使用U-Boot下载裸机程序
2.6 本章小结
第3章 ARM指令集及汇编语言基础
3.1 ARM指令集介绍
3.1.1 ARM指令集
3.1.2 ARM寻址方式
3.1.3 ARM伪操作和伪指令介绍
3.2 ARM汇编基础知识
3.3 ARM汇编程序的基本结构
3.3.1 编写汇编程序基本的格式规范
3.3.2 程序入口和程序结束
3.3.3 段
3.3.4 标号(标志符)
3.3.5 外部标号
3.3.6 文件包含
3.4 用AXD调试ARM汇编程序实验
3.4.1 建立工程并添加源文件
3.4.2 工程的设置
3.4.3 编译源文件
3.4.4 启动AXD调试器
3.4.5 手把手调试汇编程序
3.5 常用汇编语言程序子模块实例分析
3.5.1 特殊功能寄存器的访问
3.5.2 内存数据复制
3.5.3 批量加载与存储
3.5.4 堆栈操作
3.5.5 实现查表功能
3.6 本章小结
3.7 扩展阅读之内存和I/O地址、前序寻址和后序寻址
第4章 ARM C语言基础
4.1 数据类型基础
4.1.1 用typedef和#define定义类型
4.1.2 用signed和unsigned修饰数据类型
4.1.3 volatile和强制类型转换
4.2 深入理解位运算符和位运算
4.2.1 按位与运算符(&)
4.2.2 按位或运算符(|)
4.2.3 按位取反运算符(~)
4.2.4 左移和右移运算符(<>)
4.2.5 位运算应用实例分析
4.3 控制结构
4.3.1 选择结构
4.3.2 循环结构
4.4 防止文件重复包含技巧
4.5 ARM编译器对C语言的扩展
4.5.1 __irq声明中断处理函数
4.5.2 __swi声明软中断
4.5.3 __asm内嵌汇编
4.5.4 __inline定义内联函数
4.6 本章小结
4.7 扩展阅读之高速缓存基础知识
第5章 ARM汇编语言和C语言混合编程基础
5.1 一个混合编程实例的实现
5.2 APCS规则概述
5.2.1 寄存器的使用
5.2.2 参数传递
5.2.3 函数的返回值
5.3 本章小结
第6章 GPIO编程实验
6.1 GPIO概述
6.1.1 GPIO引脚介绍
6.1.2 GPIO特性分析
6.1.3 GPIO相关寄存器
6.1.4 GPIO应用实例
6.2 基础实验:第一个裸机程序——流水灯
6.2.1 硬件电路分析
6.2.2 建立工程并添加启动代码
6.2.3 添加源文件
6.2.4 编辑源文件
6.2.5 工程设置、编译、链接
6.2.6 下载程序到开发板运行
6.2.7 由点亮LED引发的思考
6.2.8 再议点亮LED实验
6.2.9 将点亮一个LED扩展到流水灯
6.3 GPIO扩展实验
6.3.1 按键实验
6.3.2 蜂鸣器实验
6.4 本章小结
6.5 扩展阅读之模块化编程、NAND FLASH和 NOR FLASH概述
第2篇 提高篇
第7章 启动代码分析
7.1 从开发板硬件讲起
7.1.1 TQ2440核心板芯片功能介绍
7.1.2 从NAND FLASH和NOR FLASH启动流程分析
7.2 启动代码详解
7.3 启动代码主要功能模块分析
7.3.1 建立中断向量表
7.3.2 初始化各个模式的堆栈
7.3.3 初始化系统硬件
7.3.4 初始化应用程序的执行环境并跳转到主程序执行
7.3.5 跳转到C语言主程序执行
7.4 本章小结
7.5 本章附录——完整版启动代码
第8章 系统时钟和定时器
8.1 S3C2440时钟系统概述
8.1.1 系统时钟初始化
8.1.2 FCLK、HCLK和PCLK与Fin的关系
8.2 定时器原理与应用
8.2.1 定时器原理
8.2.2 定时器相关的寄存器
8.2.3 定时器基础实验代码详解及测试
8.2.4 定时器扩展实验之PWM实验
8.3 本章小结
第9章 存储器控制器
9.1 S3C2440地址空间
9.2 操作实例:SDRAM实例分析
9.2.1 SDRAM工作原理
9.2.2 SDRAM接口电路设计
9.2.3 SDRAM初始化过程详解
9.2.4 回顾启动代码中的SDRAM初始化
9.3 本章小结
第10章 通用异步收发器(UART)
10.1 UART概述
10.2 S3C2440处理器UART工作原理
10.3 引脚描述及相关寄存器
10.4 UART基础实验
10.4.1 硬件电路分析
10.4.2 程序设计及代码详解
10.4.3 实例测试
10.4.4 UART基础实验分析
10.5 UART高级实验——可变参数函数在UART中的应用
10.5.1 程序设计及代码详解
10.5.2 实例测试
10.6 本章小结
第11章 中断控制系统
11.1 S3C2440中断系统概述
11.1.1 深入理解CPU的工作模式
11.1.2 中断控制器
11.2 外部中断实验
11.2.1 硬件电路分析
11.2.2 程序分析
11.2.3 中断执行流程详解
11.2.4 中断处理流程引发的思考
11.2.5 实例测试
11.2.6 为什么进入不了中断
11.3 定时器中断实验
11.3.1 程序代码分析
11.3.2 实例测试
11.4 串口中断原理及实验
11.4.1 如何正确使用中断
11.4.2 程序代码分析
11.4.3 实例测试
11.5 ARM中断之高级应用:软中断原理及实验
11.5.1 程序代码分析
11.5.2 实例测试
11.5.3 软中断所用到的启动代码
11.6 本章小结
第12章 NAND FLASH原理与实验
12.1 FLASH概述
12.1.1 NAND FLASH的基本结构
12.1.2 NAND FLASH接口电路
12.1.3 如何访问NAND FLASH
12.1.4 S3C2440 NAND FLASH控制器
12.1.5 使用宏代替简单的函数
12.2 NAND FLASH基础实验
12.2.1 NAND FLASH基本操作函数分析
12.2.2 NAND FLASH基础实验之页读写
12.2.3 页读写实例测试
12.2.4 NAND FLASH基础实验之读ID
12.2.5 读ID实例测试
12.3 NAND FLASH高级实验
12.3.1 随机读、写实验代码详解
12.3.2 随机读、写实例测试
12.4 回顾启动代码中的NAND FLASH读取函数
12.5 本章小结
第13章 LCD控制器原理与实验
13.1 LCD和LCD控制器工作原理
13.1.1 LCD概述
13.1.2 LCD接口信号
13.1.3 LCD显示原理
13.1.4 LCD操作时序详解
13.1.5 S3C2440 LCD控制器
13.1.6 LCD 控制寄存器初始化
13.2 LCD基础实验
13.2.1 硬件电路分析
13.2.2 程序代码分析
13.2.3 实例测试
13.3 LCD基础实验之单像素显示
13.3.1 程序代码分析
13.3.2 实例测试
13.4 LCD基础实验之图片显示
13.4.1 如何将图片转换为C语言数组
13.4.2 程序代码分析
13.4.3 实例测试
13.5 LCD高级实验之汉字显示
13.5.1 两种常见的汉字编码
13.5.2 LCD汉字显示原理
13.5.3 程序代码分析
13.5.4 实例测试
13.5.5 LCD显示高级技巧——可变参函数Lcd_Printf的实现
13.5.6 可变参函数Lcd_Printf测试
13.5.7 汉字区位码的思考
13.5.8 实例测试
13.6 本章小结
第14章 ADC原理与实验
14.1 ADC原理
14.1.1 ADC相关寄存器
14.1.2 ADC初始化
14.2 ADC实验
14.2.1 ADC实验代码详解
14.2.2 ADC实验测试
14.3 本章小结
第3篇 典型项目分析
第15章 综合实战
15.1 实战1:数据采集系统实现
15.1.1 功能描述
15.1.2 模块划分
15.1.3 代码实现
15.1.4 实例测试
15.1.5 实验总结
15.2 实战2:串口控制实验
15.2.1 功能描述
15.2.2 模块划分
15.2.3 代码实现
15.2.4 实例测试
15.2.5 实验总结
15.3 实战3:制作电子相册
15.3.1 功能描述
15.3.2 模块划分
15.3.3 代码实现
15.3.4 实例测试
15.3.5 实验总结
第4篇 理论知识扩展
第16章 嵌入式系统电源设计和Linux内核开发基础
16.1 直流稳压电源分类
16.1.1 普通线性稳压器工作原理
16.1.2 低压差线性稳压器工作原理
16.1.3 电容式开关电源的工作原理
16.1.4 电感式开关电源的工作原理
16.1.5 嵌入式系统设计中的电源芯片选型
16.1.6 设计实例分析
16.2 Linux内核基础实验
16.2.1 实验一:修改调度算法实验
16.2.2 实验二:添加内核模块实验
参考文献

‘肆’ c语言与ARM汇编混合编程的小问题

各种不同的C编译器对于嵌入汇编的关键字要求都是不同的。
你可以在LOOP前加上下划线 如 _LOOP
或者直接用地址的方式,比如$符号式指本指令地址,而 BNE $则是跳转到本指令(死循环)。那么转到上一条指令(SUBS那里)就是BNE $-1,转到你要去的那个地方就是BNE $-6

‘伍’ ARM 汇编与C程序的混合编程(怎样实现4个以上的参数的传递)!

ADD proc
arg_C equ 0xC
arg_8 equ 8
arg_4 equ 4
arg_0 equ 0
MOV R12, SP
STMFD SP!, {R0-R3} ;四个参数
STMFD SP!, {R4-R10,R12,LR}
SUB SP, SP, #0x10
LDR R0, [SP,#0x34+arg_0]
LDR R1, [SP,#0x34+arg_4]
LDR R2, [SP,#0x34+arg_8]
ADD R0, R0, R1
ADD R0, R0, R2
ADD SP, SP, #0x10
LDMFD SP, {R4-R10,SP,PC}
ENDP

如果参数传递大于 4 个,那么你在 BL 的地方应使用:
....
STR R0, [SP,#0x8] ;第七个
STR R0, [SP,#0x4] ;第六个
STR R0, [SP,#0x0] ;第五个

============================================
我理解你的意思了
LDR r0,=0x1
LDR r1,=0x2
LDR r2,=0x3
BL add
改为:
LDR r0,=0x1
STR R0, [SP,#0x0]
LDR r1,=0x2
STR R1, [SP,#0x4]
LDR r2,=0x3
STR R2, [SP,#0x8]
BL ADD
你是这个意思吧?
------------
int a = R0
int b = R1
int c = R2

‘陆’ arm中如何实现C语言与汇编语言的混合编程

如果你是想在一个文件里混写c语言和arm汇编,这个跟编译器有关系,如果你用gcc,可以用__asm__语法,请自行搜索__asm__相关资料

另一种方法,就是arm汇编文件和c语言文件分开来写,在c语言中声明函数符号即可。然后分别编译后再用链接器链到一起

‘柒’ arm汇编怎么调用C程序

.global _C函数名

;然后在汇编里面

BL _C函数名

;注意调用的前.设置好堆栈就好了.

;当然..如果C函数是单独一个文件的话,,还是需要编译这个文件,
;并加入链接里面,如果写在其他文件里面的.makefile里面不需要额外的东西

范例汇编文件.调用C文件的..mycmp函数
xxxx.asm
.global _mycmp
BL _mycmp

yyyyy.c

void mycmp(void)
{}

‘捌’ 嵌入式ARM 混合编程,汇编调用C语言,在线等

段定义前加 PRESERVE8 伪指令试一下。
前两天刚好看到 ARM UCOS 汇编代码中用到PRESERVE8这个关键字(加在段定义之前),以前没见过的,于是网络。

1.汇编代码没有保持8字节栈对齐而调用C或C++代码。
2.ADS下的代码用RVDS2.2编译时,即使已经8字节栈对齐,连接器也将之当作非8字节栈对齐。
所以要用伪指令指明一下。

E文不好,故而附原文以供参详:
where assembler code (that does not preserve 8-byte stack alignment) calls compiled C/C++ code (that requires 8-byte stack alignment), and
when attempting to link legacy SDT/ADS objects with RVCT 2.x objects. Legacy SDT/ADS objects that do not have these attributes are treated as '~PRES8', even if they do actually happen to preserve 8-byte alignment.

‘玖’ 在MDK环境下 我编写了一段ARM的汇编和c语言混合的程序,编译无错误 无警告。

在设置里面, 把 "run to Main()"勾去掉

‘拾’ 关于ARM中汇编与C程序的混合编程的参数传递问题!

汇编跳至C语言代码执行,自动调用R0,R1等来传递参数,比如R0传递给a,R1传递给b,以此类推。返回时自动用R0传递返回值。希望对你有帮助

热点内容
php花生 发布:2025-05-14 12:54:30 浏览:549
java人才 发布:2025-05-14 12:29:10 浏览:649
如何打开软密码 发布:2025-05-14 12:28:55 浏览:427
七牛存储待遇 发布:2025-05-14 12:27:20 浏览:422
C语言a35a4a5 发布:2025-05-14 11:53:48 浏览:813
android隐藏item 发布:2025-05-14 11:43:56 浏览:328
javawebeclipse编译 发布:2025-05-14 11:35:24 浏览:938
可编程控制器试题 发布:2025-05-14 11:25:32 浏览:122
dsp混合编程 发布:2025-05-14 11:23:10 浏览:251
mysql添加存储过程 发布:2025-05-14 11:23:01 浏览:882