前置信息
Micro:bit 的蓝牙芯片是 NRF51822
根据 Nodric Semiconductor 公司的说明,NRF51822 的 ROM 大小只有 256/128 K,但是当我们从 makecode 编辑器上下载 hex 文件的时候,即使只是输出一个 1 ,你的代码文件也有足足 630K。
![Micro:Bit 是如何将 600K + 的文件烧入 NRF51822 的? - 1 2pqbu](https://postimg.aliavv.com/201810/2pqbu.jpg)
在我的 micro:bit 还没有到手的时候,我一直在怀疑,make:code 是使用了什么样的黑科技,才能够实现将 630K 的文件烧录到 256K 的 ROM 里。我甚至怀疑 micro:bit 根本无法烧录这个文件。
micro:bit 到手以后,我试着去烧录,发现虽然文件大,但是的的确确可以烧录进去。
当时我就震惊了!Micro:bit 这是掌握了核心科技啊,能够把 600K + 的文件烧录进 256K 的 ROM 里。
随着研究的深入,以及开始对 hex 文件进行解包以后。我发现,原来 hex 文件中包含了整个项目的所有的文件,我们看到的 ts 文件等都会打包在这个文件中。
这就更加令我震惊了,难道 Micro:bit 已经可以实现在 16K Ram ,256K Rom 的芯片上移植一个 Node.js 的运行环境?那这个公司的黑科技未免也太多了。而且,因为要烧录整个文件进去,600K+的文件再怎么压缩也要占个100~200K,剩下给运行环境的空间并不大。
继续研究,发现我可以在本地重新打包,于是,我尝试重新打包文件
pxt build
打包完成后,生成了 built 文件夹,里面就是我们的 hex 文件。
![Micro:Bit 是如何将 600K + 的文件烧入 NRF51822 的? - 2 9jetw](https://postimg.aliavv.com/201810/9jetw.jpg)
诶,这里怎么还有一个 asm 文件? asm 不是汇编语言 assembly language 的缩写么?打开一看,的确是汇编语言。
再看一下文件大小,豁然开朗。
![Micro:Bit 是如何将 600K + 的文件烧入 NRF51822 的? - 3 ifbry](https://postimg.aliavv.com/201810/ifbry.jpg)
原来, Makecode 将整个项目文件都打包进入到 package 中,然后,将代码文件转译为汇编语言文件(实际应该是转成二进制可执行文件,这里的 asm 文件应该是用于调试的),写入到 nrf51822 中。
这样,我们实际写入的代码其实只有 24 K,就能够理解为什么 600 多K 的项目能够写入到 nrf51822 了,因为其实 其中的 600 k 都是源码文件,在烧录的时候会被抛弃掉。
《 “Micro:Bit 是如何将 600K + 的文件烧入 NRF51822 的?” 》 有 2 条评论
这个nrf51822应该就是microbit的主控芯片了吧
是的