基于AT91SAM7S平台,介绍裸机开发,以闪灯为蓝本,涉及汇编、链接、C/C++、中断等。
无处不在的ARM处理器家族得到了GNU C/C++工具链的良好支持。虽然许多在线和印刷资源关注于构建和安装GNU工具链,但是很难找到一个将GNU C/C++工具链用于裸机ARM系统的综合例子,该系统将具有现实项目中所需的所有基本特性。即使你找到了这样一个例子,你也很可能不知道为什么事情是这样做的。
在这篇由多个部分组成的文章中,我提供并解释了使用GNU工具链构建和微调基于ARM的裸机项目所需的所有元素。我从列举现实生活中ARM项目所需的特性开始。然后描述一个通用的启动代码、匹配的链接器脚本、低级初始化、编译器选项和基础板支持包(BSP)。我随后展示了如何为C++初始化系统,以及如何减少C++的开销,以便它可以用于低端的基于ARM的MCU。接下来,我将介绍简单前台/后台软件架构中arm项目的中断处理。我描述了中断锁定策略、优先级中断控制器中的中断处理、IRQ和FIQ汇编“包装”函数以及其他ARM异常处理程序。最后,我描述了各种中断抢占情况下的测试策略。
ARM向量重新映射只是必须在引导序列早期执行的一个动作。其他操作可能包括CPU时钟初始化(以加速其余的引导过程)、外部总线接口配置、关键硬件初始化等等。这些操作中的大多数不需要汇编编程,事实上从C/C++中完成要容易得多,但是它们需要在main被调用之前发生。本文中讨论的启动序列允许从C/C++或从汇编中执行低级初始化。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !