我的意思是,如果二进制代码已经由 PC 生成,难道不能只取这个二进制代码,通过特定的总线将它传输到闪存中的特定位置,例如串行线,它会工作吗?
为什么嵌入式工具链通常需要程序员?
我的意思是,如果二进制代码已经由 PC 生成,难道不能只取这个二进制代码,通过特定的总线将它传输到闪存中的特定位置,例如串行线,它会工作吗?
为什么嵌入式工具链通常需要程序员?
这就是程序员所做的。
它从编译器获取二进制输出并将其存储在 MCU 的闪存 EPROM 中,通常通过串行总线。
Flash EPROM 需要一种编程算法来存储数据,首先是擦除。程序员执行这个算法。这不像将数据写入 RAM。这在互联网上有很好的记录和解释。
程序员是“通过特定总线”的实现。一些设备具有内置的引导加载程序(可能是硬件、软件或固件),允许使用某种端口来加载代码。
每当设备中包含在正常操作期间未使用的功能时,都会增加非生产性开销。在非常大且功能强大的系统上,这种开销可能很小且不重要。在非常小的系统上,它可能会占用足够的程序空间或硬件来表示设备功能的显着下降。当处理器进入每单位美分范围时,每一项功能都值得拥有。(由于增加了很少使用的功能,一个 2 美分的处理器变成了一个 3 美分的处理器可能很重要。)
通过特定总线将其传输到闪存中的特定位置
这正是闪存编程器设备所做的。他们只是不使用像 RS232 这样缓慢而古老的东西,而是现在通常使用 JTAG/SWD。通常翻译到/从USB。
需要像 JTAG 这样的高速总线来启用两件事:
例如,在人们从头开始构建所有东西的黑暗时代,我记得诸如具有 9600bps 和握手的 RS-232 引导加载程序之类的东西,然后是 EPROM 编程时间。仅对单个 MCU 进行编程就可能需要长达 20 分钟的时间。
在 2000 年代初之前,几乎每个 MCU 系列都有自己特殊的雪花编程接口,这远非标准化。这些都是可怕的,可怕的事情。然后是各种专有的单线调试器接口,最终随着 PowerPC 和 ARM 的出现成为行业标准的 JTAG/SWD。
当然,您仍然可以通过 USB、CAN、UART 等使用引导加载程序,而且许多 MCU 甚至都有内置的硬件支持。但这些旨在用于专门的用例,而不是用于生产批处理编程。
自我编程的能力有许多成本,通常可以通过忽略该能力来避免这些成本: