搬家的好时机;8 位正在迅速消亡;当您可以购买带有(例如)STM32F103 的 5 美元板时,这是一个功能相当强大的 32 位 ARM 微控制器(甚至带有 USB!),毫无疑问,时代已经改变了。
你已经有了一些很好的答案,但主要是我会说“忘记组装”,几乎“忘记关心 cpu 如何在低级别工作” - 有一天会有一个角落案例你需要深入研究它(特定的优化或调试)但 ARM 内核运行 C 代码非常好(按设计),而且您很少需要深入探索。
这确实意味着您将花费一定的时间来解决编译器(尤其是链接器和 makefile)的问题,向您吐出一些晦涩难懂的错误,但它们都是可以克服的。
ARM 的工作原理(即 ARM cpu 书籍)是密集的,直到您真正需要优化的那一天才很有趣(当您拥有 32 位寄存器和您的 PLL 时,您会惊讶地发现这种情况很少见) d CPU 时钟在 100mhz 范围内)。
“old skool” ARM 指令集比更新的“Thumb2”更容易阅读反汇编 - 这是您在大多数现代微控制器级 ARM (Cortex) 上找到的 - 但同样是汇编语言指令的内部大多淡入背景;如果您拥有正确的工具集(尤其是带有断点/单步等的不错的源级调试器),那么您根本就不会太在意它是 ARM。
一旦您进入了 32 位寄存器和 32 位数据总线宽度以及您想要的所有芯片上可用的世界,您将永远不想再回到 8 位 CPU;基本上,“放轻松”并编写代码以使其清晰易读而不是高效通常不会受到任何惩罚。
然而......外围设备......是的,有问题。
你肯定会在现代 MCU 上玩很多东西,其中很多都是非常花哨的东西;您经常会发现远远超出 AVR、PIC 和 8051 片上外设的复杂世界。
一个可编程定时器?不,有八个!DMA?12 个具有可编程优先级和突发模式、链接模式和自动重载的通道怎么样?
I2C?I2S?数十种引脚复用选项?重新编程片上闪存的 15 种不同方法?当然!
通常感觉就像您已经从饥荒变成了外围设备的盛宴,并且通常会有整块芯片您会欣赏但几乎不会使用(因此;时钟门控)。
片上硬件的数量(以及仅在一个供应商的芯片系列中的变化)现在相当令人难以置信。一个芯片供应商当然会倾向于重复使用 IP 块,所以一旦你熟悉了某个品牌,它就会变得更容易,但“现在做的事情太疯狂了”。
如果外设及其交互(以及 DMA 和中断和总线分配以及和...)如此复杂(有时,与数据表中描述的不完全一样),工程师经常拥有最喜欢的 ARM MCU 范围和倾向于仅仅因为他们熟悉外围设备和开发工具而想要坚持使用它。
良好的库和开发工具(即使用适当的调试器进行快速编译+调试周期)和大量工作示例代码项目对于您现在选择 ARM MCU 绝对至关重要。似乎大多数供应商现在都有非常便宜的评估板(
我相信您已经注意到,一旦您使用 ARM 超越了微控制器级别并进入 SOC 级别(例如 Raspberry Pi/etc 风格的 SOC),那么规则就会完全改变,而这一切都与您将使用哪种 Linux 有关跑,因为——几乎没有例外——你会疯狂地尝试其他任何事情。
基本上; 无论(可能)在本次演出中为您预先选择的 CPU 是什么,请为自己购买一些来自不同供应商(TI、STM、飞思卡尔等)的超便宜的基于 Cortex 的评估板,并且使用提供的示例代码进行破解。
最后的建议;一旦您在数据表中找到描述您正在使用的确切部件号芯片的引脚复用选项的一页或三页,您可能希望将其打印出来并贴在墙上。在项目后期发现由于引脚复用而无法实现某种外围设备组合并不好玩,有时这些信息被隐藏得如此之深,你会发誓他们试图隐藏它:-)