# Micro:Bit 是如何将 600K + 的文件烧入 NRF51822 的？

- Link: https://www.ixiqin.com/2019/02/28/micro-bit-is-how-to-turn-a-600-k-file-burn-in-nrf51822/
- Published: 2019-02-28T07:37:39+08:00
- Author: 白宦成

> **前置信息**
> Micro:bit 的蓝牙芯片是 NRF51822

根据 [Nodric Semiconductor 公司的说明](https://www.nordicsemi.com/Products/Low-power-short-range-wireless/nRF51822)，
NRF51822 的 ROM 大小只有 256/128 K，但是当我们从 makecode 编辑器上下载 hex 文件的
时候，即使只是输出一个 1 ，你的代码文件也有足足 630K。

![](https://postimg.aliavv.com/201810/2pqbu.jpg)

在我的 micro:bit 还没有到手的时候，我一直在怀疑，make:code 是使用了什么样的黑科技，
才能够实现将 630K 的文件烧录到 256K 的 ROM 里。我甚至怀疑 micro:bit 根本无法烧录
这个文件。

micro:bit 到手以后，我试着去烧录，发现虽然文件大，但是的的确确可以烧录进去。

**当时我就震惊了！Micro:bit 这是掌握了核心科技啊，能够把 600K + 的文件烧录进 256K
的 ROM 里。**

随着研究的深入，以及[开始对 hex 文件进行解包](https://www.ixiqin.com/2019/02/how-to-unpack-the-micro-bit-visual-editor-generated-hex-file/)
以后。我发现，原来 hex 文件中包含了整个项目的所有的文件，我们看到的 ts 文件等都会
打包在这个文件中。

**这就更加令我震惊了，难道 Micro:bit 已经可以实现在 16K Ram ，256K Rom 的芯片上移植
一个 Node.js 的运行环境？那这个公司的黑科技未免也太多了。而且，因为要烧录整个文件
进去，600K+的文件再怎么压缩也要占个100～200K，剩下给运行环境的空间并不大。**

继续研究，发现我可以在本地重新打包，于是，我尝试重新打包文件

    ```shcb-line-numbers
    pxt build 
    ```

打包完成后，生成了 built 文件夹，里面就是我们的 hex 文件。

![](https://postimg.aliavv.com/201810/9jetw.jpg)

诶，这里怎么还有一个 asm 文件？ asm 不是汇编语言 assembly language 的缩写么？打开
一看，的确是汇编语言。

再看一下文件大小，豁然开朗。

![](https://postimg.aliavv.com/201810/ifbry.jpg)

原来， Makecode 将整个项目文件都打包进入到 package 中，然后，将代码文件转译为汇编
语言文件（_实际应该是转成二进制可执行文件，这里的 asm 文件应该是用于调试的_），写
入到 nrf51822 中。

这样，我们实际写入的代码其实只有 24 K，就能够理解为什么 600 多K 的项目能够写入到
nrf51822 了，因为其实 其中的 600 k 都是源码文件，在烧录的时候会被抛弃掉。
