章节列表

移植到STM32F100RC

2018-11-05 11:55:05 +0000 李述铜

Hi,同学,非常高兴你能进入到最后一个课时的学习!

在前面的课时中,我们设计的内核只是面向Cortex-M3内核,而没有针对具体某颗芯片。那么本节课时就演示怎么样针对具体芯片进行移植。

主要内容

可以看到课程中我们的移植过程非常简单,很快就完成了。这是为什么?

因为STM32F100RC(以下简称STM32)其本身是基于Cortex-M3内核设计的。而我们设计的RTOS用到的所有资源都只是Cortex-M3内核拥有的,并不需要用到除此之外的STM32的其它硬件资源。

我们有理解相信,之前所设计RTOS能够轻松移植到STM32。所以,在视频中你可以看到,我们没有更改任何汇编代码。除了告诉systick定时器内核时钟频率外,没有对systick的配置做其它任何修改。

任务切换所用的Pendsvc也是cortex-m3内核所有,所以相关的代码完全可以能用。

正因为以上原因,整个移植过程so~so~的一下飞快完成!

重点难点

有同学曾经问过我怎样将这个os移植到其它类型的内核?比如STM8、Cortex-M4。

移植到差别很大的内核

在移植到不同的内核时,如果内核与cortex-m3内核相差很大,那么所有所有涉及硬件相关的操作代码全部需要修改。甚至于可能需要根据内核特性重新设计某些处理流程,例如stm8就没有pendsvc,显然触发任务中断的方法和流程就要发生很大变化。

对于这类内核,建议先看一下官方是否提供了其它RTOS的移植文档和代码,参考其实现,因为官方最了解该芯片特性。

移植到差别不大的内核

可能仍然需要做少量修改。例如有同学尝试移植到cortex-m4,但是有些厂家在设计时加入浮点运算支持。开发工具在生成代码时,会利用堆栈存放内核中的浮点寄存器值,所以在任务保存状态到堆栈中,除了压入R0~R4等外,还需要考虑浮点寄存器影响(该问题请自行查看Cortex-M4的手册)。

移植到奇葩或新出的内核

比如8051,我非常不建议做这种事情。这类芯片本来就不适合跑RTOS,不要浪费在上面。就算搞成功,除了收获点快感,还能获得什么。

如果是新出的内核/芯片,请做等原厂或者其它商业RTOS的范例。请不要自行尝试去搞。浪费时间,做出来你自己可能也无法确定是否敢用。

以上观点,同时适用于你现在或将来用的其它RTOS。

注意事项

常见问题