深入理解ARM体系结构-编译器使用指南
课时介绍
课程介绍
注意注意!本课程所用Keil自带的编译器版本为AC6。由于AC5与AC6在使用时有些地方差异较大,如果你使用AC5(老版本Keil自带的)来学习本课程,则可能会出现各种奇怪的编译、汇编错误。
建议如果不是特别需要,请更新到最新版本的Keil 5.4.x以上版本。否则,学习过程中出现的一些问题我可能无法帮你解决。
---------------
为什么我会制作该课程?
若干年前,有同学问我:是否会制作关于分散加载文件的相关课程?还有同学问我:能不能教我怎样看map文件?
实际上,这些问题都是与ARM工具链相关的。因此,根据同学们的实际需求,我仔细研究了ARM编译工具链的相关手册,并结合实际的开发需求,制作出了这门课程。
为什么学习本课程?
一次学习,吃透 ARM 编译工具链
平时我们使Keil等工具来完成工程构建时,往往只是“按部就班地使用”,对它们的底层机制几乎一无所知。
而一旦出现构建错误、链接异常或内存溢出等问题,往往只能靠搜索、猜测、试错,既低效又不可靠。 此外,对于某些特殊的需求(如控制数据存放到指定位置)往往无能为力。
✅ 可执行文件(ELF)的结构都有哪些内容,这些内容如何从源码转换而来
✅ 常用编译器和链接器选项的使用技巧,以及如何写出更高效的代码
✅ 如何精确控制内存布局,把函数和变量放到你想要的位置
✅ 程序运行时的内存管理机制(如堆栈的组织与使用)
✅ 如何将可执行文件转换成 bin、hex 等目标文件,适配不同下载工具
此外,无论是在开发过程中,还是面试过程时,你是否有遇到以下问题:
✅ 资源不足,却无从下手?
-
Flash/RAM不够用,但不知道哪些代码可以优化?
-
如何通过编译优化减少30%的代码体积,降低硬件成本?
✅ 优化选项导致玄学Bug?
-
开了-O2/-O3后,程序偶尔跑飞,但关掉优化又性能不足?
-
优化选项(-O2/-O3)导致程序行为异常,但不懂如何调整?
-
volatile有什么用处?在什么时候需要使用?
-
为什么加了volatile还是被编译器优化掉?
✅ 需要特殊内存布局,但不会实现?
-
如何把关键函数放到RAM里加速执行?
-
怎么让中断向量表固定到指定地址?
✅ 面试时的致命问题
-
.bss段和.data段有什么区别?为什么要有.bss?
-
RO、RW、ZI各是什么?与程序中的哪些东西相关?
-
程序启动时,__main到底做了什么?
-
为什么有些函数明明没调用,却被链接进最终固件?
-
在RTOS中,多个任务能否调用printf()库函数时可能会引发什么问题?如何解决?
通过该课程,你将解决以上问题。

信息系统项目管理师自考笔记
李明 · 867人在学

python从0到1:期货量化交易系统(CTP实战,高频及合成K线数据
王先生 · 22649人在学

手把手搭建Java超市管理系统【附源码】(毕设)
汤小洋 · 4282人在学

Java毕设springboot外卖点餐系统 毕业设计毕设源码 使用教
黄菊华 · 824人在学

基于SSM酒店管理系统(毕设)
小尼老师 · 890人在学

java项目实战之购物商城(java毕业设计)
Long · 5195人在学

手把手搭建Java求职招聘系统【附源码】(毕设)
汤小洋 · 1525人在学

Python Django 深度学习 小程序
钟翔 · 2390人在学

城管局门前三包管理系统+微信小程序(vue+springboot)
赖国荣 · 666人在学

Vue+Uni-app(uniapp)入门与实战+赠送仿美团点餐小程序
李杰 · 4067人在学