我有一份固件工程师的全职工作。我最近接到了一项任务来检查 GPIO 配置并根据需要更改设置。我发现了一些配置错误的引脚,所以我很自然地重新配置了它们,但是我被告知我以错误的顺序进行了配置。这就是我所说的:
之前:
GPIO1.direction = INPUT;之后:
GPIO1.direction = OUTPUT;
GPIO1.value = 0;
然而,在代码审查期间,我被告知我需要将初始化顺序更改为以下内容:
GPIO1.value = 0;
GPIO1.direction = 输出;
换句话说,先设置值,然后设置引脚的方向。我还被告知这就是现代处理器需要的方式,因为它们使用两个寄存器,一个用于输入,一个用于输出,但是旧处理器只使用一个寄存器,因此操作顺序无关紧要。
(注:现代 = ARM Cortex M3 及以上,旧 = Intel 8051)
我在工作中要求更好的解释,但我无法得到一个好的答案。这就是为什么我决定在这里问。
所以这是我的问题:
- 为什么初始化顺序在新处理器上很重要?
- 为什么初始化顺序在旧处理器上无关紧要?
- 他们在现代处理器中谈论的是哪两个寄存器?
- 他们在旧处理器上谈论什么单个寄存器?
如果有人可以提供某种图表,那就更好了。