Day15.进入 ARM 世界: ARM Cortex-M Programming

已经常用的一些指令集介绍完毕,接下来就是要如何使用 ARM Cortex-M 进行程序设计。

Cortex-M 系列可以使用arm assembly、C 语言或其他高级语言(Ex: National Instruments LabVIEW)进行程序设计。

Development Flow

ARM Cortex-M 应用程序设计其实与Day.2介绍的程序运行的基本概念(预处理、编译、组译、链结)非常类似。

而ARM也提供了强大的开发工具链 Keil、RVDS、ADS、DS-5、MDK

Arm assembly Tips

前面介绍了许多 ARM inter ,今天介绍程序设计常用的技巧 Function Calls。

  • 当我们用高阶语言写Function Calls 根本不用去想背後 Register 问题,因为编译器都帮我们处理好了,而在 assembly 下我们必须常常考虑到 Register 该不该Backup ?
    • 在 Function Calls parameters该如何传递? stack or Register?
    • return value 该如何传递? stack or Register?

假设我们在Main call Function 使用到相同的 Register 该由谁 Backup 其实有一套规则。

希望 Register 分成三群
> r0-r3 进行parameters传递,因此在写程序的时候尽量不要超过四个 parameters,不然需要使用memory就会慢很多。
> 假设原本caller 就有使用 r0-r3 必须由caller backup r0-r3
> 内部callee 需要 Register 使用 r4-r7,因此使用之前由callee backup
> r12-r15 尽量不要使用

在Cortex-M平台使用 C 来设计

由於现代 C 编译器可以生成非常高效的程序码,因此最好用 C 进行程序设计,而不是花费大量时间尝试用assembly开发,後者容易出错且可移植性较差,当然有些情况下我们必须使用assembly,因此会看到C与assembly的结合。

  • 使用C语言进行开发我们就不得提起 Common Microcontroller Software Interface Standard (CMSIS)
    • CMSIS是什麽?基於ARM Cortex处理器的微控制器的独立於供应商的硬体抽象层

    • CMSIS还提供了处理器(Cortex M,Cortex A5/A7/A9)和外围设备,RTOS和中间件组件的interface,他有定义一系列的 Macro,让我们使用,我们就不用查询记忆体位置操作对应的特殊 Register

最近有点小忙後续有时间在更新做详细介绍。

参考资料

NYCU OCW Lec05 微处理机系统实验
Introduction to Computer Systems


<<:  Day 13 wireframe 黑白线稿 ( 互动式地图设计 + footer )

>>:  好用的Decorator 如何在class中使用?

Day1 每个人都有一个财富自由梦

死线前的考验 大家好,身为一个工程师,做事情压死线是家常便饭,所以我昨天报名今天就开始写文章,我可...

[2021铁人赛 Day-02] 嵌入式学习模式 and 系统分类

引言 今天介绍嵌入式系统学习的模式,并说明未来的撰写模式 = ) 学习十字路口 学习新知识必定会有...

[Day2] MacOS - 操作上手

好不容易采购了这个贵松松的东西回来,第一次碰 MacOS 肯定会不知道怎麽操作,马上来研究一下基本功...

登录档的五大根键--设计结构的sense

在上一篇,我们介绍了登录档的结构和物理位置,现在你意识到他的存在,那今天就是接续前一篇最後的预告,我...

使用Lucene.Net达成全文检索!基础解说(二)

上一集当中我们完成了Lucene基本操作中的Create与Read,这一集会将CRUD中的Updat...