micro:bit JavaScript代码导致停止(内存?)

问题描述 投票:-1回答:1

以下代码可以很好地编译,并且可以在模拟器中无限期运行。这是一些基于输入电压来控制远程键盘的代码的开头。

我已将导致“挂起”条件的行隔离到下面的注释中。注释掉该行会导致代码无限期地运行(LED永远持续闪烁)。将该线留在里面会使LED在大约3个开/关周期后停止闪烁。

serial.writeLine("Hello World");

const keyMap = [
    { 8: "1", 87: "2", 155: "3", 214: "A" },
    { 256: "4", 302: "5", 342: "6", 379: "B" },
    { 406: "7", 435: "8", 462: "9", 487: "C" },
    { 507: "*", 528: "0", 547: "#", 565: "D" }
];

const FLASH_TIMEOUT = 10;
let flashTimer = FLASH_TIMEOUT;

basic.forever(function () {
    for (let row: number = 0; row < keyMap.length; row++) {
        let values: Object = keyMap[row];
        // the next line causes the crash
        let targets: string[] = Object.keys(values); // <--- BOOM
        // for (let col: number = 0; col < targets.length; col++) {

        // }
    }

    flashLED();
});

function flashLED() {
    if (--flashTimer < 1) {
        flashTimer = FLASH_TIMEOUT;
        led.toggle(4, 4);
    }
}

我正在寻找为什么这行导致micro:bit硬件挂起的答案?我知道从简单的switch语句开始,我可以采用多种方法来构造此代码。我的内存不足了吗?为什么只在几个周期后才发生?

我是这个平台的新手,无法找到有关此类错误情况的任何信息。

javascript microprocessors bbc-microbit
1个回答
-1
投票

在这种情况下,似乎行本身不是问题。

let keyMap = [
    { 8: "1", 87: "2", 155: "3", 214: "A" },
    { 256: "4", 302: "5", 342: "6", 379: "B" },
    { 406: "7", 435: "8", 462: "9", 487: "C" },
    { 507: "*", 528: "0", 547: "#", 565: "D" }
];


keyMap.forEach(
(el, i) => {
let values= keyMap[i];
let targets= Object.keys(values); 
console.log(targets);
})
© www.soinside.com 2019 - 2024. All rights reserved.