42

麦斯科技 · 2023年03月19日 · 四川

裸机编程指南

https://community.arm.com/arm-community-blogs/b/internet-of-things-blog/posts/a-bare-metal-programming-guide

作者: Sergey Lyubka 2023年3月15日

1104.ARM1686_5F00_5F00_5F00_2_2D00_blog_2D00_headers_5F00_5F.jpg

如今的嵌入式编程通常意味着使用开发框架,这使得开发更快、更容易。例如,Arm Keil提供了一个集成的IDE、调试器和一组软件包,这些软件包提供RTOS、驱动程序、TCP/IP堆栈等中间件以及mbedTLS(SSL/TLS)或lvgl(图形)等库。STMicroelectronics的Cube IDE提供了类似的功能,NXP的MCUXpresso、TI CCS、Microchip的MPLAB等也提供了类似功能。

当开发人员在这些框架中启动项目时,他们会在各种软件层之上开发应用程序代码。通常,开发人员可能会选择绕过这些层,开发直接与硬件通信的代码。这通常被称为裸机编程。这样做的动机可能是以下几种:

.对开发的应用程序的各部分都有充分的控制和理解,这通常会减少维护负担。
.实现目标硬件的最大性能和灵活性。虽然最初更耗时,但由项目推进,这些开销都是值得的。
.为了避免花费时间修复和调试底层软件层,尤其是在测试、文档记录和有缺陷的情况下。

在裸机上开发可以在没有IDE的情况下完成,只需使用任意编辑器和Arm GCC编译器。也可以使用IDE来完成,例如使用Arm-Keil。在任何情况下,开发人员都需要理解几个关键概念:
.内存是如何组织的
.外围设备的工作原理
.生成的二进制代码的布局(Layout)
.如何使用链接器脚本生成必要的布局(Layout)
.终端向量表、中断和弱符号(weak symbols)
.CMSIS头文件:Arm核心和供应商外围设备

这些都包含在Sergey Lyubka编写的裸机编程指南中(https://github.com/cpq/bare-metal-programming-guide)。

该指南从基础开始,并假设之前没有嵌入式开发经验。只需要掌握C编程语言的知识。该指南是以循序渐进的方式编写的,涵盖了所有必要的主题-内存映射组织、外围I/O等。它从经典的LED闪烁开始,经过计时器、中断等更高级的主题,最后到达一个嵌入式web服务器,该服务器公开了一个交互式设备仪表板。本指南最后介绍了自动化软件构建和目标硬件上的自动化测试的关键主题。

Sergey Lyubka是Cesanta的工程总监。Cesanta是Arm的合作伙伴,开发以下产品:
https://mongoose.ws:开源HTTP/MQT/Websocket网络库
https://vcon.io:远程固件更新和串行监视器框架

推荐阅读
关注数
5747
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息