我跟着一个LED折腾了三天,才搞懂它为啥一亮一灭。 原来写个`GPIOG->BS

灵巧光束 2026-04-19 13:11:53

我跟着一个LED折腾了三天,才搞懂它为啥一亮一灭。 原来写个`GPIOG->BSRRL = 1`,CPU真就跑到0x40021818那个地址去写了一个数。那地方根本不是内存,是GPIOG外设的寄存器,连着引脚下面的晶体管。写1,就推一把电平,LED就亮。 编译完的代码不是直接跑的。链接脚本.sct先画好地图:代码放FLASH开头,变量分两拨——带初值的(RW)得从FLASH拷到RAM,清零的(ZI)直接在RAM里划块空地等启动时抹零。MAP文件里全写明了每个变量在哪儿,连栈顶地址都钉死了。 `__main`不是你的main,是ARM库偷偷干的活:搬数据、清内存、设堆栈,做完才跳给你。你写的`main()`,其实是整个链条里最晚登场的那个。 没看手册前,我以为寄存器是软件造的假东西。看了才知道,是硅片上真有根线,连着你敲的那行代码。 这就是全部。

0 阅读:1
灵巧光束

灵巧光束

感谢大家的关注