其他
【写在前面的话】在鸽了将近4年之后,我终于良心发现,决定重新恢复【裸机思维】公众号的更新。谢谢大家的长久守候和等待——非常非常抱歉。这段期间,发生了很多事情,我也憋了很多内容想跟更多的朋友分享。作为一个开端,我准备踏踏实实的从一些小的话题开始,慢慢恢复写作状态。《编译器的玄学研究报告》就是这样一个系列,我会为大家分析一些常见的、同时也是最新的、嵌入式编译器使用中可能会遇到的问题——尤其是那些看似是玄学的现象——为大家庖丁解牛、由浅入深,不仅给个痛快,也给大家个明明白白——我最终的目的是希望大家不惧怕优化,不要把编译器的行为看作是玄学,最终人人都拥有屈驾最高优化等级的知识和信心。在正文开始前,给大家提个小问题:你们用过的最高优化等级是什么(编译器是什么)?遇到过什么问题?欢迎大家在评论区留言。我会筛选最高赞的评论,并尝试在以后的《编译器玄学报告》中为大家解答。【正文】位域和volatile大家再熟悉不过了:前者用于将指定类型的整形变量按照我们的意愿像蛋糕一样切分成或大或小的若干份;后者用于告诉编译器“绝不允许对被修饰的变量动手动脚(做优化)”,因为在“编译器不知道的情况下”,这个变量的值是可能会因为各种原因被更新或者是改变的。外设(peripheral)本质上就是大家最近热炒的“硬件加速器”。在遥远的过去,UART、SPI这类外设其实都只是一个通信协议,由软件通过操作GPIO(最多配合引脚上的外中断)来实现。后来,为了降低CPU的负担(offload